FHEM - Hausautomations-Systeme > MQTT

Roomba Staubsaugerroboter

(1/83) > >>

Prof. Dr. Peter Henning:
Edit:

Ich habe über die Anbindung der Roomba-Roboter einen Wiki-Eintrag geschrieben, das Hilfsmodul 99_RoombaUtils.pm befindet sich ab sofort im FHEM-Ordner contrib/Roomba.

https://wiki.fhem.de/wiki/Roomba

Es gibt in diesem Wiki-Eintrag auch eine noch etwas rudimentäre Beschreibung, wie man die interaktiven Reinigungskarten erzeugt und verwaltet.

Die Roomba-Staubsaugerroboter von iRobot haben einen eingebauten MQTT Server. Das von Thorsten Pferdekämper und anderen entwickelte Modul 42_Roomba980 basiert auf dem Perl-Modul Net::MQTT::Message, funktioniert inzwischen aber nicht mehr. Nach einem Firmware-Update der Staubsauger sagen diese


--- Zitat ---2020.09.10 16:33:40 5: MQTT RoombaSauger message received: [2] ConnAck/at-most-once Connection Refused: unacceptable protocol version
2020.09.10 16:33:40 1: 192.168.0.41:8883 disconnected, waiting to reappear (RoombaSauger)
2020.09.10 16:33:41 5: MQTT RoombaSauger message sent: Connect/at-most-once MQTT/5/NetMQTTpm16474
2020.09.10 16:33:41 5: SW: 101a00044d5154540502003c000e4e65744d515454706d3136343734
2020.09.10 16:33:41 5: MQTT RoombaSauger message sent: PingReq/at-most-once
2020.09.10 16:33:41 5: SW: c000
--- Ende Zitat ---

Das Modul wird auch nicht mehr weiterentwickelt.

Ich blicke nicht so ganz durch, wie ich einen MQTT2_SERVER dazu kriegen kann, sich mit einem bisher unbekannten MQTT-Device zu verbinden. Im dem obengenannten Modul geht das mit einem Aufruf aus Net::MQTT::Message

--- Code: --- return send_message($hash, message_type => MQTT_CONNECT, keep_alive_timer => $hash->{timeout},
                             user_name => $user, password => $pass, client_id => $user,
protocol_name => "MQTT", protocol_version => 4);
--- Ende Code ---
und produziert den obigen Fehler. Könnte mir mal jemand von den MQTT-Experten auf die Sprünge helfen?

LG

pah



Beta-User:
Hmm, bin zwar bei weitem kein Experte, was die Kommunikation "hinter" dem MQTT2_SERVER angeht, aber so wie ich dieses Code-Fragment verstehe, geht es eigentlich eher darum, dass man sich mit dem Broker verbindet und dazu ggf. die Credentials benötigt. Der liefert dann aus oder eben nicht, die Kommunikation in Richtung Client/Sauger ist dann ein 2. Ding.

Hier kommt mir die "4" seltsam vor, ich meine, dass entweder "3" gebräuchlich ist oder dann gleich "5" (was aber bisher noch kein Device genutzt hat, das hier aufgeschlagen war, und M2Server kann (bisher) auch nur MQTT-Protokoll bis V. 3.irgendwas).

Für MQTT2_DEVICE braucht man eigentlich keine Credentials, wenn, dann wäre das ein Thema, das im Rahmen von allowed iVm. dem M2Server zu verorten wäre. Ohne allowed akzeptiert ein "global"-Server auch Nachrichten von Clients, die meinen, es müßte eine Authentifizierung stattfinden. Näheres sollten eigentlich die Logs vom Server liefern.

Ansonsten ist es bei anderen Geräten iVm. M2Server easy: Du trägst die IP/Port-Kombi auf dem Server ein, den (empfangsseitigen) Rest erledigt autocreate. Ist das dein erster Versuch mit einem MQTT-Gerät und M2Server? (Wenn ja: nimm' mal einen Shelly zum Kennenlernen ;) ).

Prof. Dr. Peter Henning:

--- Zitat ---Ist das dein erster Versuch mit einem MQTT-Gerät und M2Server?
--- Ende Zitat ---
Natürlich nicht, ich betreibe schon diverse Dinge damit. Ich diskutiere gerade mit Entwicklern von iRobot, wie man vorgehen kann und werde Euch auf dem Laufenden halten.


So wie ich das jetzt einschätze, stellt der Roomba tatsächlich einen MQTT Broker bereit, und nicht nur das Endgerät. Das würde bedeuten, dass ich mich als Client mit der Kiste verbinden muss.

LG

pah

Beta-User:
Hmm, dann implementiert das fragliche Modul also sowohl den Client (alt: 00_MQTT.pm) wie das eigentliche MQTT-Device.

K.A., wie MQTT2_CLIENT das Protokoll aushandelt, aber wenn bis 3.irgendwas ausreicht, könnte es  gehen, erst mal nur die Readings abzuholen mit MQTT2_CLIENT (+ aktiviertem autocreate simple) und den passenden Credentials (ich meine, es gab auch schon mal ein ähnliches Projekt, das Stichwort düfte "bumper" sein). Spannender wird dann die Frage, wie die Topics sind, auf denen das Teil seine Befehle erwartet (und in welchem Format).

Ansonsten wäre zu checken, ob das alte Modul wieder mit einer passenden Protokol-Version reanimiert werden könnte. (Insgesamt glaube ich aber, dass eine Verteilung dieser Angelegenheit auf ein IO+Client-Gespann mit den MQTT2-Modulen vermutlich auf die Dauer einfacher zu pflegen sein wird als dieses Einheits-Modul).

Prof. Dr. Peter Henning:
Also, mit dem "Einheitsmodul" geht gar nichts mehr, egal, was bei der Protokollversion drinsteht.

Mit MQTT2_CLIENT bin ich einen Schritt weiter - ich erziele immerhin ein "opened" beim MQTT-Broker des Staubsaugers. Jetzt brauche ich nur noch etwas, das ich publishen kann. Gibt es irgendwo ein Beispiel für eine mit MQTT2_CLIENT zu publizierende Message? BLID und Passwort habe ich.

Meine vermutung, dass da ein Broker mit eingebaut ist, hat sich jedenfalls bestätigt. Hier gibt es nämlich ein GitHub-Projekt, das darauf aufbauend den MQTT-Broker des Staubsaugers mit einem anderen MQTT-Broker (also sprich in FHEM) koppelt.

https://github.com/NickWaterton/Roomba980-Python

Leider habe ich das Python-Skript noch nicht richtig zum Laufen bekommen. Aber ich arbeite immerhin dran.

LG

pah

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln