nachdem ich vor 2 Wochen einen Roomba 960 gekauft habe, fasziniert mich der Gedanke, ihn in IPS zu integrieren. Nach Recherche stellt sich heraus, dass er per APP sehr gut steuerbar ist, aber aufgrund einer undokumentierten API nur auf Umwegen integriert werden kann. Auch hat der Roomba irgendwann 2018 eine neue Kommunikationsform über MQTT erhalten, so dass Tobira980 nicht mehr gehen kann.
Ich habe dann den Weg über eine Linux-VM auf der Dorita980 und Rest980 laufen wie in einem anderen Thread beschrieben gewählt. Das funktioniert nach einigem herumzicken nun letztlich doch. Das Passwort auszulesen war die größte Hürde, aber dank Dorita980 machbar. Befehle nimmt er nun auf diesem Umweg an. Ein Mini How to mit Befehlen in einem Script mal anbei:
<?
/*//////////////////////////////////////////////////////////////////////////////
Roomba How to
--------------------------------------------------------------------------------
Installation UBUNTU auf VM
Installation Node.js und NPM
Installation Dorita980
Quelle: https://github.com/koalazak/dorita980
$ git clone https://github.com/koalazak/dorita980.git
$ cd dorita980
$ npm install
BLID und Passwort auslesen
$ npm run getpassword <robotIP>
Installation Rest980 als HTTP-Server für Dorita980
Quelle: https://github.com/koalazak/rest980
Start API Server
$ cd rest980
$ DEBUG=rest980:* npm start
/*//////////////////////////////////////////////////////////////////////////////
// INFOS ///////////////////////////////////////////////////////////////////////
$State = json_decode(file_get_contents("http://192.168.178.226:3000/api/local/info/state"));
var_dump($State);
// Einstellungen ///////////////////////////////////////////////////////////////
$Preferences = json_decode(file_get_contents("http://192.168.178.226:3000/api/local/config/preferences"));
var_dump($Preferences);
/*
// Aktionen ////////////////////////////////////////////////////////////////////
$Start = json_decode(file_get_contents("http://192.168.178.226:3000/api/local/action/start"));
var_dump($Start);
$Stop = json_decode(file_get_contents("http://192.168.178.226:3000/api/local/action/stop"));
var_dump($Stop);
$Pause = json_decode(file_get_contents("http://192.168.178.226:3000/api/local/action/pause"));
var_dump($Pause);
$Dock = json_decode(file_get_contents("http://192.168.178.226:3000/api/local/action/dock"));
var_dump($Dock);
$Resume = json_decode(file_get_contents("http://192.168.178.226:3000/api/local/action/resume"));
var_dump($Resume);
// MAP (experimentell) /////////////////////////////////////////////////////////
$Map = "http://192.168.178.226:3000/map";
*/
Aber:
Eigentlich ist es ziemlich blöd nur für den Roomba eine VM laufen zu lassen. Mit MQTT hatte ich bislang keinerlei Berührungspunkte, so dass ich da völlig blind bin Mir ist nicht ganz klar, wie ich Topics subscribe, die ich gar nicht kenne. Tests mit Mosquitto und MQTT.fx liefen ins Leere.
So viel ich verstehe handelt es sich um encryptet MQTT über Port 8883. Meint ihr man bekommt das vielleicht direkt über IPS hin, nachdem in 5.1 nun eine MQTT Beta integriert ist ?
Hat vielleicht Jemand diesen Ansatz weiter verfolgt ?
Ich hänge mich kurz dran da es bei einem bekannten Online Versandhaus den Roomba 671 mit Appsteuerung heute für 199€ gibt.
Gibt es aktuelle Erfahrungen ob ich das Teil per IPS starten/stoppen kann, bzw. muss Roomba dazu eine Internetverbindung haben oder kann ich die API lokal/offline ansprechen?
Natürlich auch die Frage ob die API Logik vom 980er auf den 671er angewendet werden kann?
Mein Roomba 671 kam an und kann auch wunderbar mit den Python Skripten von dorita980 gesteuert werden. Jetzt wollte ich mir das mit MQTT.fx anschauen was da geschickt wird.
Aber irgendwie kann ich mich mit mqtt.fx nicht verbinden .
Broker: IP vom Roomba
Port: 8883
Client-ID: Benutzername Roomba
Clean Session: aus
MQTT-Version: 3.1.1 (bin nicht sicher ob das stimmt)
User Cred: Benutzername und Blid (Passwort)
Wenn ich ohne SSL versuche klappt es nicht und nutze ich TLSv1.2 klappt es auch nicht.
Ich habe extra ein self signed Zert. erstellt inkl. CA und es in mqtt.fx eingetragen. Leider ohne Erfolg.
Das Root-CA Zert habe ich an meinem Rechner im Zertifikatsspeicher auch importiert.
Leider alles nicht erfolgreich.
Ich bekomme immer eine mqttException zurück.
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Wüsste nicht was ich noch probieren könnte. Bin vielleicht aber mit den SSL Settings generell auf dem Holzweg.
hat denn noch niemend einen irobot in IPS integriert?
Die alten Baureihen wie mein iRobot Roomba 581 hatten noch eine Serielle Schnittstelle. Daran ist ein XBee Modul angeschlossen. Dies überträgt die Daten per Funk zum Empfänger XBee. Darauf greift IPS über eine Seriell Schnittstelle zu.
Da iRobot die Steuerparameter bekannt gemacht hatte konnte IPS die Roomba steuern.