Umbau/Hack von iRobot Roomba 500/600

Hallo zusammen,

ich hab mein iRobot Roomba 615 zuhause.
Ab Werk ist der erstmal nicht-intelligent.
Gibt kein Wifi-Verbindung, Fernsteuerung, Zeitplaner oder sowas.
Man macht den einfach an, indem man einen Knopf drückt, dann rennt der los.
Läuft.
Ist mir mittlerweile aber zu wenig. Würd den gerne irgendwie fernsteuern oder programmieren können.
Es gab mal einen Hersteller, der einen wunderbaren Umbau angeboten hat.
Heißt “Thinking Cleaner”. Da wird nachträglich eine Wifi-Schnittstelle eingebaut.
Hier der Link: http://www.thinkingcleaner.com
Allerdings produzieren die mittlerweile nicht mehr… :-/
Daher meine Frage: Kennt jemand eine Alternative?
Also am liebsten natürlich homee-kompatibel :slight_smile:

Viele Grüße, Torben

Mit homee kompatibel ist erst mal nix, nur indirekt. Die Suche hiöft normalerweise, schau mal hier als Ausgangspunkt, wird aber beim 615 nix helfen, weil ihm die Schnittstelle fehlt.

Ja genau. Daher ja die Frage.
Mein 615 hat ja erstmal gar keine Schnittstelle. Es gab aber diesen Wifi-Umbau.
Und ich hatte gehofft, dass es da vll. etwas vergleichbares gibt.
Z.B. direkt mit einem Zigbee/Z-Wave Modul.
Wenn das erstmal geht, bekommt man den Rest wahrscheinlich auch hin.
Ab dann hilft dann auch dein Link weiter.

Es gibt keine Z-Wave/ZigBee Sauger und es gibt keine von homee direkt unterstützten bisher. homee Integration ist möglich, aber etwas Bastelei (Softwareseitig). Ob so ein Hardware-Umbau etwas bringen wird kann ich Dir nicht sagen, allerdings sind Sauger wie der weit verbreitete Xiaomi inziwschen bei den Chinashops teilweise so günstig zu bekommen, dass ich es anzweifle ob sich sowas lohnen würde.

Moin!

Jau, es ging mir auch wirklich nur um einen Umbau.
Also, reine Bastelei.
Dass das vom Prinzip geht, weiß ich.
Siehe o.g. Link.
Aber du triffst genau den Punkt “ob es sich lohnt, ist die Frage” :slight_smile:

Vermutlich nein, aber manchmal ist der Weg ja das Ziel. Die Bastelei in meinem Beispiel :slight_smile:

Aber vielen Dank fürs Feedback.

Viele Grüße,

Torben

1 „Gefällt mir“

Hi!

Um Mal einen kurzen Statusbericht zu dem Thema abzugeben (falls es jemanden interessiert… :slight_smile:):
Ich hab bei dem Projekt einen ersten Zwischenschritt erreicht.
Durch einen Fibaro Wall Plug (geht auch mit jedem anderen Plug) schalte ich die Ladestation per Homeegramm aus und wieder an.
Diese Zustandsänderung wird von einem Microcontroller erkannt, den ich entsprechend programmiert hab.
Als Microcontroller verwende ich einen Arduino Nano.
Dieser wird direkt von der Batterie des Staubsaugerroboters gespeist, braucht also keine zusätzlichen Batterien o.ä…
Der Microcontroller liest auch die Sensordaten und Zustände des Roboters und startet diesen auch.

Wenn mir also unterwegs einfällt, dass ich den Roboter wieder nicht manuell gestartet hab, kann ich dies per Homeegramm nachholen :slight_smile:

EDIT: Der nächste Schritt wäre die Rückmeldung der Sensordaten per WiFi oder Z-Wave.
Da gibt’s entsprechende Module für den Microcontroller.

Viele Grüße,

Torben

3 „Gefällt mir“

Mein Vorschlag wäre es einen ESP8266 zu verwenden und alles per Webhooks zu lösen. Evtl. gefällt dir (zusätzlich?) auch die Variante mit der WEMO-Emulation - Zum Starten/Stoppen eines Gerätes mit direkter Rückmeldung ob gerade aktiv ist das ganz nett.

Falls du die Variante mit dem ESP8266 wählst und Probleme hast gerne melden.

1 „Gefällt mir“

Hi @Seraphis,

den ESP8266 hab ich schon :slight_smile:
Das kommt dann im Update :wink:

Allerdings hatte ich mich auch schon gefragt, ob ich das mit der Rückmeldung hinbekomme… bzw. “wie” :slight_smile:
Das geht mit reinen Webhooks ja eher schlecht…
Die WeMo Emulation klingt interessant, das hatte ich noch gar nicht auf dem Schirm. Muss ich mir mal anschauen.

Danke für den Tipp!

Viele Grüße,

Torben

Moin!

–> Danke. Da hab ich auch direkt eine Frage :slight_smile:
Hast du denn schon einen funktionierenden Code, den du mir geben könntest?
Bevor ich mich selbst abmühe, nehm ich natürlich auch gern schon fertige Sachen entgegen :slight_smile:

Viele Grüße,

Torben

Für die WEMO-Variante einfach die fauxmo-Bibliothek installieren. Das funktioniert recht unkompliziert und bei der ist auch ein Beispiel dabei.

Verwende selbst momentan die Webhook-Variante für eine Bedienstelle im Flur, mit der ich den Modus des homee ändern und den Alarm scharf/unscharfschalten kann. Zum einfachen Empfangen und Interpretieren von Webhooks und auch dem Versenden von Webhooks, ohne jedes mal einen langen Link im Code zu haben, habe ich mir selbst eine Art Methoden-Sammlung geschrieben. Natürlich habe ich die suuuper dokumentiert :expressionless: Naja…

Nach dem Download die drei Dateien in den Ordner des Arduino-Projektes einfügen und anschließend am Anfang deiner .ino mit #include “Webhook_Methoden.h” einbinden. Im setup dann einmal Webhook.init(); und im loop Webhook.run();

In der Webhook_m.cpp wird festgelegt, was beim Empfangen von Webhooks passiert. Ich habe bei mir im Projekt ein Struct Namens homee erstellt welches aus mehreren Variablen/Enumerationen besteht, aber so kompliziert muss man sich das leben nicht machen… In homee habe ich z.B. ein HG mit Aktion Webhook ausführen, bei dem folgende URL eingestellt ist:
192.168.178.92/webhook-befehl?sirene=ausschalten
Wenn der esp das empfängt springt er zur Webhook_m::handleBefehl(), findet dort das Argument Sirene und den Wert ausschalten, wodurch homee.sirene = SireneEnum::ausschalten; folgt.
Die Unterscheidung in handleStatus und handleBefehl ist nur ordnungshalber, da kann man einiges abspecken.

Zum Versenden von Webhooks vom esp an den homee muss am Ende der Webhook_m.cpp die URL von homee inkl. Webhook-Schlüssel eingegeben werden. Dazu einfach mal ein HG mit Auslöer Webhook erstellen. Sobald du den Namen des Webhooks eingibst, zeigt homee diese URL an (der Name, also das nach &event= gehört nicht in die Webhook_m.cpp).

Zum versenden von Webhooks wird im eigentlichen Programm jetzt nur noch der Name des Webhooks benötigt, also z.B. Webhook.webhook_send(“nameDerInHomeeVergebenWurde”);

Die dritte Datei, die Debug_Helper.h, ist nur dafür da, um die Debug-Ausgaben auf die serielle Schnittstelle einfach ein/ausschalten zu können. Verwende ich überall anstelle von Serial.print(). Ausgabe aktivieren per #define DEBUG 1 in der Debug_Helper.h

Ich hoffe, dir bringt das alles irgendwas :smiley:

https://www.dropbox.com/sh/rv32kiqyg862xvg/AACFCofjZ86MZ-BaltpsV50aa?dl=0

1 „Gefällt mir“

:grinning:
Ja, vielen Dank!

Das werd ich mal ausprobieren.
Sieht recht umfangreich aus, da muss ich erstmal durchwurschteln.
Vermutlich meld ich mich wieder, mit Fragen :slight_smile:

Viele Grüße,

Torben

Hi @Seraphis,

okay, ich raffs nicht :slight_smile:

Also der ESP8266 läuft bei mir.
Konkret hab ich einen ESP8266 ESP-01, der via serieller Schnittstelle mit meinem Arduino Nano kommuniziert. Aber das sollte ja keinen Unterschied machen…?

Auf jeden Fall kann ich den ESP ansprechen, Status abfragen, usw.
Aber jetzt?

Ich denke mal, du hast deinen ESP auch als “client” laufen, oder?
Also du hast deinen ESP verbunden mit deinen normalen WLAN, indem du SSID und PW übersendest.

So, nun ist der ESP online.
In deinem Beispiel startet deine url (fürs Empfangen von Befehlen) mit 192.168.178.92.
Das ist die IP, die dein ESP nach erfolgreicher Verbindung mit deinem WLAN dann hat, richtig?
Bei mir ists dann u.U. eine andere, aber definitiv ist dein homee im gleichen Subnet, oder 192.168.178.xxx, richtig? Also die lokale Adresse.

Und den Rest, also “…/webhook-befehl?sirene=ausschalten” hast du dir einfach selbst ausgedacht.
Da könnte auch einfach “…/an” stehen, oder “…/start”.
Richtig?

Auf dem ESP muss dann aber ein WebServer o.ä. laufen, der diese Anfrage dann empfängt, oder?
Wie hast du das gemacht?
Da steh ich grad auf dem Schlauch.

Sorry für die vielen Fragen… :-/

Viele Grüße,

Torben

Hey @BetaTobi

evtl. in der Debug_Helper.h folgendes setzen, wenn du die serielle Schnittstelle für die Verbindung zwischen den 2 Arduinos statt für das Debugging über den seriellen Monitor nutzt, aber für die Webhook-Geschichte ists unerheblich:

#define DEBUG 0

Netzwerk-Zeug:
Alles richtig, .92 ist bei mir der ESP und .6 (gleiches Subnet) der homee.

URLs / Webhooks:
Ebenfalls richtig, ich hab in Befehl und Status unterteilt (das vor dem ?), dann das Geräte/Modus usw. (nach dem ? also das Argument) und am Ende den Zustand bzw Wert (nach dem =). Auf Argument und Wert kannst du, gerade für erste Tests, verzichten.

Server:
Wie von dir vermutet muss der ESP zum Senden von Webhooks (eigentlich ja aufrufen von URLs) als Client arbeiten und zum Empfangen von Webhooks als WebServer. Die entsprechenden Objekte werde am Anfang der Webhook_Methoden.cpp definiert (Zeile 9-13, sogar mit Kommentaren :smiley: ):

// Server zum Empfangen von Anfragen
ESP8266WebServer HttpServer(80);

// Client zum Senden von Anfragen
HTTPClient HttpClient;

In der darauffolgenden void Webhook_m::init() werden dann die URLs definiert, auf die der WebServer reagieren soll:

void Webhook_m::init() {

// Associate the handler function to the paths

// Allgemein
HttpServer.onNotFound(this->handleNotFound);
HttpServer.on("/", this->handleRoot);


// Status-Meldungen Empfangen
HttpServer.on("/webhook-status", this->handleStatus);

// Befehle Empfangen
HttpServer.on("/webhook-befehl", this->handleBefehl);


// Direkte Server-Antwort
HttpServer.on("/inline", []() {
	HttpServer.send(200, "text/plain", "hello from esp8266!");
});


HttpServer.begin();
debug_print("HTTP-Server started");

}

Wenn du in einem Webbrowser die IP deines ESP eingibst (bei mir also einfach 192.168.178.92) dann sollte auch eine weiße Seite mit dem Text “hello from esp8266!” angezeigt werden. Klappt das, dann wurde der WebServer korrekt gestartet und ist erreichbar :slight_smile:

Hier mal noch ein Beispiel, bei dem der homee einen Webhook sendet:

Und hier empfängt der homee einen Webhook:

Probier am besten das Senden und Empfangen erstmal separat mit einfach Dingen :stuck_out_tongue: Hab meinen ESP z.B. alle 10 Sekunden einen Test-Webhook aufrufen lassen, durch den das Licht ausging und durch einen Webhook vom homee kannst du auf dem ESP ja eine LED einschalten.

Hmm, läuft fast.
Ich muss noch nen Umweg machen, da ich den Code nicht direkt auf den ESP8266 geschrieben bekomme.
Ich arbeite also immer mit dem “AT+xx” commands, die vom Arduino an den ESP geschickt werden.
Die Antworten kann ich dann verarbeiten.
Wenn ich dann die url mit z.B. …/test3 aufrufe, dann bekomm ich auch eine Rückmeldung, und kann die eingegeben url auch erkennen.
Siehe Bild.
Könnte die dann also auch auswerten.

Wenn ich das ganze per WebHook machen will, dann stoppt aber immer kurz vorher die Antwort vom ESP.
Siehe Bild 2.

2

Hab verschiedenes probiert. PUT, GET, POST… plain text… usw.

Ne Idee?

Die GET-Methode sollte die geeignete sein, Content Type optional und Body leer lassen.

Nur damit ichs richtig verstanden hab:
Das erste Bild ist die Konsolenausgabe wenn du die grün markierte URL im Browser aufrust, das zweite das Ergebnis wenn du homee den Webhook an diese Adresse senden lässt?

Ist der ESP nach dem letzten OK auf dem zweiten Bild noch erreichbar?

Kenne mich selbst allerdings nicht mit der indirekten Variante mit dem ESP als WLAN-Schnittstelle aus… Warum setzt du eigentlich nicht direkt nur den ESP ein wenn ich fragen darf?

Okay, dann sollte es ja vom Prinzip her gehen.
Also die Webhook-Einstellungen sind richtig.

Ja, richtig.
Das grün markierte Bild zeigt die Konsole, bei direktem Aufruf im Browser.
Das zweite Bild zeigt die Konsole nach homee-Webhook.
Das ESP ist danach weiterhin erreichbar und ich kann auch direkt wieder das erste Konsolenbild erzeugen, wenn ich die URL im Browser eingebe.
Wenn ichs per homee mache, dann kommt irgendwie der Rest nicht an.
Ist reproduzierbar.

Kleines Update: Hab meinen Code entschlankt, aufs absolut letzte notwendige.
Jetzt gehts.
…?
Kann mir zwar trotzdem nicht erklären, woran das gelegen haben könnte, aber ok.
Lassen wir erst einmal dabei.

Und noch ein Zwischenstand:
Den Zustand “es geht” hab ich irgendwann sehr spät gestern Abend erreicht.
VORHER (gestern Morgen) war ich noch so genervt, dass ich genau auf die von dir vorgeschlagene Variante umgeschwenkt bin, und ganze 5 Euro in einen NodeMCU ESP8266 investiert hab :slight_smile:
Damit kann ich dann den Code direkt (ohne Umweg über den jetzigen Arduino) aufspielen.
Und DANN kann ich auch endlich deinen Code testen :slight_smile:

Ich hatte ursprünglich übrigens nicht sofort auf die ESP_only-Variante gesetzt, weil ich andere Komponenten schon hier hatte. Und damit sollte es EIGENTLICH ja auch gehen :slight_smile:
Naja, manchmal macht man sich das Leben unnötig schwer…

Hallo zusammen,

ich wollte einen kurzen Statusbericht abgeben.
Kurz: Es funktioniert.
Ist mit dem aktuellen Setting (wie oben beschrieben), allerdings (unnötig) kompliziert.

Zuerst einmal ein Bild von dem aktuellen Prototypen :slight_smile:

Also, da ich zuhause noch einen (naja, viele…) Arduino Nano rumliegen hab, und generell von der Funktion begeistert bin, hab ich mir nur einen ESP8266 ESP-01 besorgt. Also das reine WiFi-Modul.
Einen Spannungswandler und einen Logic Level Converter hab ich auch, aber die brauch ich eh.

Es stellte sich allerdings heraus, dass das Ansprechen des ESP-01 mit den AT+xx Befehlen zwar generell funktioniert, aber doch sehr umständlich und teilweise langsam ist.
Auch gibt es immer wieder Probleme mit dem Feedback des WebServers.
Also die Anzeige einer Website, wenn ich eine bestimmte URL aufrufe, mit Anzeige einiger Daten, die vom Roomba ausgelesen werden.
Manchmal gehts, manchmal nicht, oder erst nach mehrfacher Wiederholung.
Der Auslöser allein (also z.B. STARTEN) ging bisher immer.

Trotzdem hab ich mir einen ESP8266 ESP-12 besorgt, wie @Seraphis schon vorgeschlagen hat.
Das ist quasi das All-In-One Gerät.
Ich kann diesen auch direkt programmieren und muss nicht den Umweg über die AT+xx-Befehle gehen.

Fazit: Das hochladen auf diesen Controller dauert zwar etwas länger, dafür läuft alles flüssiger, stabiler und ist wesentlich einfacher zu programmieren.
Der Prototyp wird also umgebaut :slight_smile:

Falls also jemand vor einem ähnlichen Problem steht, hier mein Rat:
Anstatt 3 Euro für das ESP-01 WiFi-Modul auszugeben, investiert lieber 5 Euro in den ESP-12 “All-In-One”-Controller. Macht alles einfacher.

Viele Grüße,

Torben

4 „Gefällt mir“