NEWS
Neuer Adapter für Roborock-Staubsauger
-
@jahnbes sagte in Neuer Adapter für Roborock-Staubsauger:
Was bedeutet roborock.0.Devices.x.deviceStatus.dock_error_status auf "0" nun wirklich, Wassertank des Docks ist voll oder leer, oder?
Ich habe einen Roborock S7 MaxV Ultra
roborock.vacuum.a27 Firmware 02.57.86Ich teile mal meine Beobachtungen zum Thema DockingStation.
[deviceStatus.dock_error_status] Dock Error Status
- 38 -> Klarwasserbehälter leer
- 39 -> Schmutzwasserbehälter voll
- 40 -> Wasserfilter nicht eingesetzt
Wird alles erst erkannt wenn ein "Mop Waschen" ausgeführt wird! (Vieleicht kann das jemand bestätigen)
Schöner wäre jedenfalls, wenn bei Dock_Error dieser gleich durchgereicht würde. (Beispiel: man nehme den Reinwasserbehälter aus der Station. Statusmelde-LED an der Station leuchtet Rot. Die App und somit der Adapter bekommen davon nichts mit. Erst dann wenn ich ein "Mop Waschen" beauftrage.
Noch Zwei Datenpunkte die mit der Station zu tun haben.
[consumables.cleaning_brush_work_times] High-speed maintenance brush
Zeit seit letzer Wartung der Mop-Reinigungsbürste[consumables.strainer_work_times] Water Filter
Zeit seit letzer Wartung des Wasserfilters der ReinigungsstationMfG Ralf
-
Eine Frage.
Welcher Datenpunk zeigt mir an, wenn der Wassertank im Roboter befüllt wird oder wurde.Wird wohl dann eher ein Trigger auf "Vorheriger Wert" und Wert werden.
Soll mit in einer Berechnung verwendet werden, die den Füllstand des Reinwasser-, Schmutzwassertank der Station berechnet.
-
Ich frage mich, wie ich eine Steuerung der Reinigungsreihenfolge erreichen kann.
Beim Xiaomi-Adapter konnte man die Räume in eine Queue schicken, die dann abgearbeitet wurde. Unschön: Staubsauger hat nach jedem Raum gesagt, dass er fertig ist, ist zur Ladestation gefahren und unterwegs kam dann irgendwann der Befehl für den nächsten Raum, dann ist er wieder quer durch die Wohnung dahin gefahren.
Ich brauche es nur für einen einzelnen Raum, also dass dieser als erstes gereinigt wird, dann der ganze Rest.
Das beste was mir hier eingefallen ist: Timer mit Raum 1 und darunter für die nächsten 20 min ein Schedule das prüft, "isReturning" 1 ist. Klappt leider nicht, vermutlich weil er kürzer als eine Minute (kürzestes Intervall beim cron-Wizzard) heimfährt.
Habt ihr einen Ansatz? Oder muss das vom Adapter realisiert werden? (dann vermutlich wieder über eine Queue)
-
-
@spacerx
Meines Wissens nach gibt es einen solchen Datenpunkt nicht. Bei meinen Tests mit dem Wassertank des Roboters war der Tank mal leer, mal halbvoll, mal voll. Immer blieb roborock.0.Devices.x.deviceStatus.water_shortage_status auf "0".
Auch habe ich keinen Sensor im Roboter oder im Tank erkennen können.
Wenn jemand etwas anderes weiß, bitte melden!
Es ist schon etwas verwunderlich, dass ausgerechnet der Wasserstand im Robotertank keine Datenpunkt hat. Jedenfalls nicht bei meinem roborock S7 MasxV.
Gruß Bert. -
@jahnbes sagte in Neuer Adapter für Roborock-Staubsauger:
Das Wiki ist ergänzt.
Da warst du aber schnell.
Ich schrub:
[consumables.cleaning_brush_work_times] High-speed maintenance brush
Zeit seit letzer Wartung der Mop-Reinigungsbürste
[consumables.strainer_work_times] Water Filter
Zeit seit letzer Wartung des Wasserfilters der ReinigungsstationMeine Aussage das es sich um eine Zeitangabe handelt scheint nicht richtig zu sein.
Weil in der App zur Filterwartung was von mindestens einmal im Monat Reinigen stand, dachte ich das der Monat als Zeit 100% wären. Das gleiche bei der Bürste, wo steht mindesten alle 2 Monate.
Falsch gedacht!Wie in meinem Logauszug zu sehen wird aller Voraussicht bei jedem Mop-Waschen einfach hochgezählt.
2023-08-03 11:02:41.187 # Robi -> Water Filter (consumables.strainer_work_times] = 2 -> 3 "Dock Wasser Filter Anzahl Benutzung" 2023-08-03 11:02:41.187 # Robi -> High-speed maintenance brush [consumables.cleaning_brush_work_times] = 2 -> 3 "Dock Reinigungsbürste Anzahl Benutzung"
-
Ok, ich korrigiere es gleich.
Gruß Bert. -
@jahnbes nicht so schnell!
Sollte das nicht jemand nachprüfen?
So könnte man auch den Zusammenhang der App Anzeige zur Wartung der Dock-Reinigungsbürste und Dock-Wasserfilter erkennen.
Bezieht sich die App auf einen Wert in den Datenpunkten oder einfach nur Zeit nach dem letzten Nullen der Datenpunkte -
@jahnbes said in Neuer Adapter für Roborock-Staubsauger:
@spacerx
Meines Wissens nach gibt es einen solchen Datenpunkt nicht. Bei meinen Tests mit dem Wassertank des Roboters war der Tank mal leer, mal halbvoll, mal voll. Immer blieb roborock.0.Devices.x.deviceStatus.water_shortage_status auf "0".
Auch habe ich keinen Sensor im Roboter oder im Tank erkennen können.
Wenn jemand etwas anderes weiß, bitte melden!
Es ist schon etwas verwunderlich, dass ausgerechnet der Wasserstand im Robotertank keine Datenpunkt hat. Jedenfalls nicht bei meinem roborock S7 MasxV.
Gruß Bert.Kann die App denn den Zustand anzeigen?
Dann müsste man herausfinden, welcher Parameter der entsprechende für den Wassertank von der Station ist.
Es wird immer Mal wieder neue Parameter geben.
Um diese herauszufinden habe ich dieses Wiki mit der entsprechenden Anleitung erstellt. https://github.com/copystring/ioBroker.roborock/wiki/Sniffing-Roborock-MQTT-traffic
Wenn also ein Parameter fehlt, darüber ein Debug Log erstellen und ein neues issue auf GitHub mit den entsprechenden fehlenden Parameter erstellen.
Wenn die App den Zustand anzeigen kann, dann kann das auch der Adapter. -
@copystring Die App zeigt unter Wartung den Zustand des Dock-Wasserfilters und der Dock-Reinigungsbürste als Status an.
ich habe hier nur Status: Normal und "Status: Sollte gereinigt werden" gesehen.
Ich gehe davon aus das sich die App an den Consumables orientiert und ab einem bestimmten Wert die Reinigung empfiehlt.
Oder!
Die App die Zeit seit dem letzten zurücksetzen der Consumables heran nimmt. -
@spacerx
Ja, ich prüfe es ja auch nach, so ich die Möglichkeit dazu habe. Und die habe ich bei der Reinigungsstation nicht, bedingt durch das Fehlen derselben.
Da hilft nur Schwarmintelligenz und schnelles Reagieren.
Gruß Bert. -
@copystring sagte in Neuer Adapter für Roborock-Staubsauger:
.Um diese herauszufinden habe ich dieses Wiki mit der entsprechenden Anleitung erstellt. https://github.com/copystring/ioBroker.roborock/wiki/Sniffing-Roborock-MQTT-traffic
da würde ich gerne helfen mit meinem q revo, was mir dabei aber unklar ist:
- mein iobroker läuft auf einem debain nuc = nix mit *.exe starten
- verwende ich wiregurad schon mit meinem geräten, wird dann eine neue verbindung eingerichtet?
-
@jackdaniel sagte in Neuer Adapter für Roborock-Staubsauger:
mein iobroker läuft auf einem debain nuc = nix mit *.exe starten
Selbes Problem. Wie kann ich den Datenverkehr App zum Sauger und dessen antworten unter Debian sniffen.
Ich hab schon quer durch das WWW gesucht, kann nur mit den englischen Beiträgen nicht viel anfangen. -
Zum Testen habe ich mir aber ioBroker auf Windows installiert. Dort dann den Roborock Adapter installieren und dem Wiki folgen.
Für Debian kann ich keinen Support geben. Geht theoretisch auch, habe ich aber nicht getestet. -
Ich gehe davon aus, dass euch für MQTT die Tools schon bekannt sind:
Linux (Debian) == mqttx
Windows == mqtt.fxDamit könnt ih den gesamten Trafic vom MQTT-Broker Abonieren, und dann mal schauen und immer weiter eingrenzen.
Aber vermutlich schreibe ich da Dinge die ihr schon längst kennt. Etwas änliches gibt es glaub auch für Modbus TCP/RTU, aber mir fällt der Namen nicht gerade ein.
Beim Linux gibt es noch irgendwie eine Möglichkeit, den Trafic über einen Port mit zuschneiden und in ein File zu paken. Aber auch da gibt es garantiert Personen die das besser wissen und können.Andi
-
@jahnbes said in Neuer Adapter für Roborock-Staubsauger:
@spacerx
Ja, ich prüfe es ja auch nach, so ich die Möglichkeit dazu habe. Und die habe ich bei der Reinigungsstation nicht, bedingt durch das Fehlen derselben.
Da hilft nur Schwarmintelligenz und schnelles Reagieren.
Gruß Bert.In gewissem Umfang kann ich da sicher Hilfe resp. Datenwerte liefern, den ich habe in meinem Haushalt einen S7 Max Ultra mit Reinigungsstation. Habe einfach aktuell nicht sehr viel Zeit zur Verfügung, aber Datenpunkte aus den Objekten raussuchen sollte gehen.
Andi
-
Ich möchte meine heutige Ausbeute teilen.
Es geht um Funktionen Rund um die Station vom S7 MaxV Ultra.
Meine Voraussetzungen:
- Kleines Blockly zum loggen der Datenpunkte vom Sauger geschrieben.
- Adapter vorrübergehend die Aktualisierung 5s gestellt.
- Mit Taschenlampe vor die Station gehockt und aufgeschrieben was passiert.
- Robi steht in der Station zum laden, dann Mopp Waschen gestartet.
Meine Aufzeichnungen dazu:
Log Mopp Waschen mit Roboter Wassertank leer.
2023-08-03 18:29:08.482 # Robi -> State [deviceStatus.state] = 8 -> 26 (Fahre Mopp waschen) 2023-08-03 18:29:08.487 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1 2023-08-03 18:29:08.488 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 1 -> 0 2023-08-03 18:29:08.489 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 1 2023-08-03 18:29:48.716 # Robi -> State [deviceStatus.state] = 26 -> 23 (Mopp waschen) 2023-08-03 18:29:48.719 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0 2023-08-03 18:29:48.721 # Robi -> Back Type [deviceStatus.back_type] = 1 -> -1 2023-08-03 18:29:48.721 # Robi -> Wash Phase [deviceStatus.wash_phase] = 0 -> 11 2023-08-03 18:29:48.722 # Robi -> Wash Ready [deviceStatus.wash_ready] = 0 -> 1 2023-08-03 18:29:49.365 # Robi -> Water Filter [consumables.strainer_work_times] = 4 -> 5 2023-08-03 18:29:49.366 # Robi -> High-speed maintenance brush [consumables.cleaning_brush_work_times] = 4 -> 5 2023-08-03 18:31:03.661 # Robi -> Wash Phase [deviceStatus.wash_phase] = 11 -> 12 2023-08-03 18:31:08.651 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 10 2023-08-03 18:31:38.662 # Robi -> Wash Phase [deviceStatus.wash_phase] = 10 -> 13 2023-08-03 18:32:53.675 # Robi -> Wash Phase [deviceStatus.wash_phase] = 13 -> 12 2023-08-03 18:32:58.637 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 14 2023-08-03 18:33:08.634 # Robi -> State [deviceStatus.state] = 23 -> 6 (Rückkehr zur Station) 2023-08-03 18:33:08.677 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1 2023-08-03 18:33:08.679 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 0 2023-08-03 18:33:08.680 # Robi -> Wash Phase [deviceStatus.wash_phase] = 14 -> 0 2023-08-03 18:33:13.670 # Robi -> Wash Ready [deviceStatus.wash_ready] = 1 -> 0 2023-08-03 18:33:31.225 # Robi -> Times Dust Collected [cleaningInfo.dust_collection_count] = 77 -> 78 "Wahrscheinlicht Staubbehälterantleerungen" 2023-08-03 18:33:33.671 # Robi -> State [deviceStatus.state] = 6 -> 8 (Akku laden) 2023-08-03 18:33:33.674 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0 2023-08-03 18:33:33.674 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 0 -> 1 2023-08-03 18:33:33.675 # Robi -> Back Type [deviceStatus.back_type] = 0 -> -1
Mopp Waschen mit Roboter Wassertank 100% voll.
2023-08-03 18:40:38.661 # Robi -> State [deviceStatus.state] = 8 -> 26 (Fahre Mopp waschen) 2023-08-03 18:40:38.706 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1 2023-08-03 18:40:38.706 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 1 -> 0 2023-08-03 18:40:38.708 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 1 2023-08-03 18:41:18.782 # Robi -> State [deviceStatus.state] = 26 -> 23 (Mopp waschen) 2023-08-03 18:41:18.787 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0 2023-08-03 18:41:18.793 # Robi -> Back Type [deviceStatus.back_type] = 1 -> -1 2023-08-03 18:41:18.805 # Robi -> Wash Phase [deviceStatus.wash_phase] = 0 -> 11 2023-08-03 18:41:18.806 # Robi -> Wash Ready [deviceStatus.wash_ready] = 0 -> 1 2023-08-03 18:41:19.536 # Robi -> Water Filter [consumables.strainer_work_times] = 5 -> 6 2023-08-03 18:41:19.537 # Robi -> High-speed maintenance brush [consumables.cleaning_brush_work_times] = 5 -> 6 2023-08-03 18:42:58.756 # Robi -> Wash Phase [deviceStatus.wash_phase] = 11 -> 12 2023-08-03 18:43:03.720 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 13 2023-08-03 18:44:38.786 # Robi -> Wash Phase [deviceStatus.wash_phase] = 13 -> 12 2023-08-03 18:44:43.771 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 14 2023-08-03 18:44:48.739 # Robi -> State [deviceStatus.state] = 23 -> 6 (Rückkehr zur Station) 2023-08-03 18:44:48.741 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1 2023-08-03 18:44:48.781 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 0 2023-08-03 18:44:48.782 # Robi -> Wash Phase [deviceStatus.wash_phase] = 14 -> 0 2023-08-03 18:44:58.779 # Robi -> Wash Ready [deviceStatus.wash_ready] = 1 -> 0 2023-08-03 18:45:18.992 # Robi -> State [deviceStatus.state] = 6 -> 8 (Akku laden) 2023-08-03 18:45:18.994 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0 2023-08-03 18:45:18.995 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 0 -> 1 2023-08-03 18:45:18.996 # Robi -> Back Type [deviceStatus.back_type] = 0 -> -1
Mopp Waschen mit Roboter Wassertank 50% voll.
2023-08-03 12:51:35.610 # Robi -> State [deviceStatus.state] = 8 -> 26 (Fahre Mopp waschen) 2023-08-03 12:51:35.653 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1 2023-08-03 12:51:35.654 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 1 -> 0 2023-08-03 12:51:35.655 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 1 2023-08-03 12:52:05.895 # Robi -> State [deviceStatus.state] = 26 -> 23 (Mopp waschen) 2023-08-03 12:52:05.899 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0 2023-08-03 12:52:05.901 # Robi -> Back Type [deviceStatus.back_type] = 1 -> -1 2023-08-03 12:52:05.902 # Robi -> Wash Ready [deviceStatus.wash_ready] = 0 -> 1 2023-08-03 12:52:06.393 # Robi -> Water Filter [consumables.strainer_work_times] = 3 -> 4 2023-08-03 12:52:06.394 # Robi -> High-speed maintenance brush [consumables.cleaning_brush_work_times] = 3 -> 4 2023-08-03 12:52:10.868 # Robi -> Wash Phase [deviceStatus.wash_phase] = 0 -> 11 "11 = Mopp Waschen mit Bürste und Wasser" 2023-08-03 12:53:25.678 # Robi -> Wash Phase [deviceStatus.wash_phase] = 11 -> 12 "12 = Wasserauffang unter Bürste leeren" 2023-08-03 12:53:30.667 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 10 "10 = scheint das Befüllen vom Wassertank zu sein" 2023-08-03 12:53:40.630 # Robi -> Wash Phase [deviceStatus.wash_phase] = 10 -> 13 "13 = Mopp abbürsten ohne Wasser (Auswringen???)" 2023-08-03 12:54:55.687 # Robi -> Wash Phase [deviceStatus.wash_phase] = 13 -> 12 "12 = Wasserauffang unter Bürste leeren" 2023-08-03 12:55:00.703 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 14 "14 = Bürste in Parkposition fahren" 2023-08-03 12:55:05.641 # Robi -> State [deviceStatus.state] = 23 -> 6 (Rückkehr zur Station) 2023-08-03 12:55:05.685 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1 2023-08-03 12:55:05.687 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 0 2023-08-03 12:55:05.688 # Robi -> Wash Phase [deviceStatus.wash_phase] = 14 -> 0 2023-08-03 12:55:10.693 # Robi -> Wash Ready [deviceStatus.wash_ready] = 1 -> 0 2023-08-03 12:55:30.906 # Robi -> State [deviceStatus.state] = 6 -> 8 (Akku laden) 2023-08-03 12:55:30.910 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0 2023-08-03 12:55:30.915 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 0 -> 1 2023-08-03 12:55:30.916 # Robi -> Back Type [deviceStatus.back_type] = 0 -> -1
Dazu meine Erkenntnisse.
deviceStatus.wash_phase
10 = Befüllen Roboter Wassertank
11 = Mopp Waschen mit Wasser und Reinigungsbürste
12 = Wasserauffang der Station unter Reinigungsbürste leeren
13 = Mopp Waschen nur Reinigungsbürste (Auswringen)
14 = Reinigungsbürste in Parkposition fahrenDas Befüllen des Roboter-Wassertanks wird immer bei Mopp-Waschen ausgeführt wenn der Tank nicht voll ist.
Dazu gleich noch für Später den Schmutzwasserbehälter vor jedem Start leer gemacht und vor dem Mopp-Waschen Befehl den Moppwaschmodus umgestellt um den Wasserverbrauch beim Mopp-Waschen zu ermitteln.
- Moppwäsche-Modus = Wassersparend -> Schmutzwasserbehälter = ca.130ml
- Moppwäsche-Modus = Mittel -> Schmutzwasserbehälter = ca.200ml
- Moppwäsche-Modus = Intensiv -> Schmutzwasserbehälter = ca.290ml
Für den Moppwaschmodus den man in der App wählen kann scheint es noch kein equivalenten Datenpunkt im Adapter zu geben.
Robi steht in Station zum laden, dann Staubbehälter entleeren gestartet.
2023-08-03 19:00:48.710 # Robi -> State [deviceStatus.state] = 8 -> 22 (Staubbehälter entleeren) 2023-08-03 19:00:48.713 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 1 -> 0 2023-08-03 19:01:18.709 # Robi -> State [deviceStatus.state] = 22 -> 8 (Akku laden) 2023-08-03 19:01:18.712 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 0 -> 1
Der Datenpunkt deviceStatus.back_type scheint zu definieren wie rum der Roboter an die Station heran gefahren ist.
deviceStatus.back_type
-1 = NULL (wird immer auf diesen Wert zurück gesetzt.)
0 = Vorwärts -> Laden und Staubbehälter entleeren.
1 = Rückwärts -> Mopp WaschenZur Bedeutung von deviceStatus.in_fresh_state hab ich eine Idee die ich aber erst mit Test bestätigen muss.
-
@andibr said in Neuer Adapter für Roborock-Staubsauger:
Ich gehe davon aus, dass euch für MQTT die Tools schon bekannt sind:
Linux (Debian) == mqttx
Windows == mqtt.fxDamit könnt ih den gesamten Trafic vom MQTT-Broker Abonieren, und dann mal schauen und immer weiter eingrenzen.
Aber vermutlich schreibe ich da Dinge die ihr schon längst kennt. Etwas änliches gibt es glaub auch für Modbus TCP/RTU, aber mir fällt der Namen nicht gerade ein.
Beim Linux gibt es noch irgendwie eine Möglichkeit, den Trafic über einen Port mit zuschneiden und in ein File zu paken. Aber auch da gibt es garantiert Personen die das besser wissen und können.Andi
Nein. Das geht nicht mehr, seitdem ich da herumgespielt habe. Roborock hat das mitbekommen. Man kann nur noch über mitimproxy den Traffic mitschneiden. Vorher konnte man ganz einfach den Topic für das Senden der Befehle abonnieren. Das wurde gesperrt. Daher muss mitgeschnitten werden.
Der gesamte Datenverkehr ist mit SSL und speziellen Keys doppelt verschlüsselt und kodiert. Der Adapter dekodiert und entschlüsselt alles, wenn die Nachrichten mit mitmproxy und meinen python addon an den Adapter geschickt wird. -
@copystring
Ok, dass ist aber doof. Wieder eine Firma die nicht will das man sich vor der chinesischen Überwachung verstecken kann.
Da könnte es ja auch sein, dass mit eine Firmeware Update alle eure super Arbeit zu nichte gemacht wird?Andi
-
@andibr said in Neuer Adapter für Roborock-Staubsauger:
@copystring
Ok, dass ist aber doof. Wieder eine Firma die nicht will das man sich vor der chinesischen Überwachung verstecken kann.
Da könnte es ja auch sein, dass mit eine Firmeware Update alle eure super Arbeit zu nichte gemacht wird?Andi
Unwahrscheinlich. Mitschneiden von Traffic kann man nicht verhindern. Änderungen könnte man schnell einbauen, indem man einfach den Traffic neu mitschneidet.