iobroker-community-adapters/ioBroker.mihome-vacuum

Support Waterlevel extrem / manuel (207)

tobschn opened this issue · 16 comments

Describe the bug
Die neue Firmware (4.1.2_1668) eventuell auch schon eine ältere Version des Roborock S5 Max unterstützt nun den Wischmodus Extrem. Dieser ist wohl auf die ID 207 gemappt. Da dieser Wert über dem Maximalwert von 204 liegt, wirft der Adapter/ Datenpunkt einen Fehler. Bei dem Wischmodus Extrem lässt sich die Wassermenge Manuel von 1-30 einstellen (vergleiche Screenshot).

To Reproduce
Steps to reproduce the behavior:

  1. Saugleistungseinstellungen öffnen
  2. Allgemein oder Benutzerdefiniert auswählen
  3. Wasserstand auf Manuel/ Extrem einstellen
  4. See error at "mihome-vacuum.0.control.water_box_mode"

Expected behavior
Der Zustand Extrem/ Manuel sollte unterstützt werden. Ein weiterer Datenpunkt für die manuelle Eingabe des nun erwarteten Wasserstandlevels (1-30) sollte ermöglicht werden. Jedoch würde die allgemeine Unterstützung des Zustands Manuel/ Extrem (207) ausreichen.

Screenshots & Logfiles
Log:

2023-03-07 16:57:58.962 - debug: mihome-vacuum.0 (3685634) Time difference between Mihome Vacuum and ioBroker: 1 sec
2023-03-07 16:57:59.610 - debug: mihome-vacuum.0 (3685634) get params for stock Vacuum
2023-03-07 16:57:59.611 - debug: mihome-vacuum.0 (3685634) Message= {"id":39,"method":"get_status"}
2023-03-07 16:57:59.620 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":[{"msg_ver":2,"msg_seq":1193,"state":8,"battery":99,"clean_time":88,"clean_area":915000,"error_code":0,"map_present":1,"in_cleaning":0,"in_returning":0,"in_fresh_state":1,"lab_status":3,"water_box_status":0,"fan_power":104,"dnd_enabled":0,"map_status":3,"is_locating":0,"lock_status":0,"water_box_mode":207,"distance_off":60,"water_box_carriage_status":0,"mop_forbidden_enable":0,"unsave_map_reason":4,"unsave_map_flag":0}],"id":39}
2023-03-07 16:57:59.620 - debug: mihome-vacuum.0 (3685634) setGetStatus {"msg_ver":2,"msg_seq":1193,"state":8,"battery":99,"clean_time":88,"clean_area":915000,"error_code":0,"map_present":true,"in_cleaning":false,"in_returning":0,"in_fresh_state":1,"lab_status":3,"water_box_status":0,"fan_power":104,"dnd_enabled":false,"map_status":3,"is_locating":0,"lock_status":0,"water_box_mode":207,"distance_off":60,"water_box_carriage_status":0,"mop_forbidden_enable":0,"unsave_map_reason":4,"unsave_map_flag":0,"error_text":"No error"}
2023-03-07 16:57:59.621 - debug: mihome-vacuum.0 (3685634) Message= {"id":40,"method":"get_network_info"}
2023-03-07 16:57:59.645 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":{"ssid":"??????","ip":"192.168.178.99","mac":"64:90:c1:07:bd:80","bssid":"38:10:d5:df:01:29","rssi":-82},"id":40}
2023-03-07 16:57:59.647 - warn: mihome-vacuum.0 (3685634) State value to set for "mihome-vacuum.0.control.water_box_mode" has value "207" greater than max "204"
2023-03-07 16:57:59.693 - debug: mihome-vacuum.0 (3685634) Message= {"id":41,"method":"get_sound_volume"}
2023-03-07 16:57:59.700 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":[90],"id":41}
2023-03-07 16:57:59.701 - debug: mihome-vacuum.0 (3685634) Message= {"id":42,"method":"get_map_v1"}
2023-03-07 16:57:59.709 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":["rubyslite%2F320717213%2F3"],"id":42}
2023-03-07 16:57:59.709 - debug: mihome-vacuum.0 (3685634) Mappointer_updated
2023-03-07 16:57:59.709 - debug: mihome-vacuum.0 (3685634) Message= {"id":43,"method":"get_carpet_mode"}
2023-03-07 16:57:59.722 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":[{"enable":1,"current_integral":450,"current_high":500,"current_low":400,"stall_time":10}],"id":43}
2023-03-07 16:58:08.967 - debug: mihome-vacuum.0 (3685634) Receive <<< Helo <<< 2131002000000000131dc19d64075f11ffffffffffffffffffffffffffffffff
2023-03-07 16:58:08.968 - debug: mihome-vacuum.0 (3685634) Time difference between Mihome Vacuum and ioBroker: 1 sec
2023-03-07 16:58:18.972 - debug: mihome-vacuum.0 (3685634) Receive <<< Helo <<< 2131002000000000131dc19d64075f1bffffffffffffffffffffffffffffffff
2023-03-07 16:58:18.973 - debug: mihome-vacuum.0 (3685634) Time difference between Mihome Vacuum and ioBroker: 1 sec
2023-03-07 16:58:19.770 - debug: mihome-vacuum.0 (3685634) get params for stock Vacuum
2023-03-07 16:58:19.771 - debug: mihome-vacuum.0 (3685634) Message= {"id":44,"method":"get_status"}
2023-03-07 16:58:19.781 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":[{"msg_ver":2,"msg_seq":1206,"state":8,"battery":100,"clean_time":88,"clean_area":915000,"error_code":0,"map_present":1,"in_cleaning":0,"in_returning":0,"in_fresh_state":1,"lab_status":3,"water_box_status":0,"fan_power":104,"dnd_enabled":0,"map_status":3,"is_locating":0,"lock_status":0,"water_box_mode":207,"distance_off":60,"water_box_carriage_status":0,"mop_forbidden_enable":0,"unsave_map_reason":4,"unsave_map_flag":0}],"id":44}
2023-03-07 16:58:19.782 - debug: mihome-vacuum.0 (3685634) setGetStatus {"msg_ver":2,"msg_seq":1206,"state":8,"battery":100,"clean_time":88,"clean_area":915000,"error_code":0,"map_present":true,"in_cleaning":false,"in_returning":0,"in_fresh_state":1,"lab_status":3,"water_box_status":0,"fan_power":104,"dnd_enabled":false,"map_status":3,"is_locating":0,"lock_status":0,"water_box_mode":207,"distance_off":60,"water_box_carriage_status":0,"mop_forbidden_enable":0,"unsave_map_reason":4,"unsave_map_flag":0,"error_text":"No error"}
2023-03-07 16:58:19.783 - debug: mihome-vacuum.0 (3685634) Message= {"id":45,"method":"get_network_info"}
2023-03-07 16:58:19.811 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":{"ssid":"??????","ip":"192.168.178.99","mac":"64:90:c1:07:bd:80","bssid":"38:10:d5:df:01:29","rssi":-82},"id":45}
2023-03-07 16:58:19.813 - warn: mihome-vacuum.0 (3685634) State value to set for "mihome-vacuum.0.control.water_box_mode" has value "207" greater than max "204"
2023-03-07 16:58:19.861 - debug: mihome-vacuum.0 (3685634) Message= {"id":46,"method":"get_sound_volume"}
2023-03-07 16:58:19.868 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":[90],"id":46}
2023-03-07 16:58:19.869 - debug: mihome-vacuum.0 (3685634) Message= {"id":47,"method":"get_map_v1"}
2023-03-07 16:58:19.876 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":["rubyslite%2F320717213%2F3"],"id":47}
2023-03-07 16:58:19.876 - debug: mihome-vacuum.0 (3685634) Mappointer_updated
2023-03-07 16:58:19.876 - debug: mihome-vacuum.0 (3685634) Message= {"id":48,"method":"get_carpet_mode"}
2023-03-07 16:58:19.885 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":[{"enable":1,"current_integral":450,"current_high":500,"current_low":400,"stall_time":10}],"id":48}
2023-03-07 16:58:19.885 - debug: mihome-vacuum.0 (3685634) MIIO RECIVE: {"result":[{"enable":1,"current_integral":450,"current_high":500,"current_low":400,"stall_time":10}],"id":48}

Screenshot von App:
Screenshot_20230307-171841

Versions:

  • Adapter version: v3.9.5
  • JS-Controller version: 4.0.23
  • Node version: v16.18.1
  • vacuum cleaner: Roborock S5 max (firmware version 4.1.2_1668)

hast du eine Idee, wie der wasserstandslevel heißt, also wo man die in den Daten wiederfindet, wenn du den eingestellt hast?
Dann könnte man auch analog der anderen Befehle mal rumspielen, ob man den auch setzten kann?

Yes, der Wert ist in distance_off kodiert.

  • Wasserstandslevel 1: distance_off: 205
  • Wasserstandslevel 30: distance_off: 60
  • Wasserstandslevel x: distance_off: 210 - 5 * x
    Desweiteren ist mir aufgefallen, dass es wohl nur einen benutzerdefinierten Wasserstandslevel gibt der global für den gesamten Staubsauger gilt. Es ist nämlich nicht möglich dieses Level für jeden Raum separat einzustellen.

Hmmm, distance_off für wasserstandslevel, macht meiner Meinung nach nicht wirklich Sinn, oder?

Bitte mal die aktuelle Version auschecken (master), da habe ich das implementiert. Du kannst das auch pro Raum einstellen

Okay danke! Bin gerade nicht zu Hause, werde dir dann Ende der Woche Rückmeldung geben :)

Hab auch die Meldung: State value to set for "mihome-vacuum.0.control.water_box_mode" has value "207" greater than max "204"
Roborock Q7 Max, mihome-vacuum v3.9.5

Bitte mal die aktuelle Version auschecken (master),

wie macht man das? Unter latest finde ich nichts.

Einfach die start url in mybroker über die katze eingeben

So ich habe es mal getestet:

  • Das globale setzen des water_box_mode level (207) über ioBroker funktioniert.
  • Das globale setzen des water_box_mode level (207) über die App wird in ioBroker aktualisiert
  • setzen von water_box_level über ioBroker funktioniert nicht. Sobald gesetzt wird kurze Zeit später der alte Wert wieder genommen im Datenpunkt
  • sobald das water_box_level über die App eingestellt wird erscheint auch der neue Wert in ioBroker
  • Das raumbasierte setzen des water_box_mode level (207) über ioBroker funktioniert irgendwie auch nicht, also ich kann zumindest bei mir nicht level auswählen. (Jedoch werden auch alle anderen gesetzten Werte nicht in der App in der Karte aktualisert.... Ich denke dort ist bei mir irgendetwas anderes nicht richtig, weiß jedoch leider nicht was...)
  • Umkehrt aus der App aus geänderte raumbezogene Werte werden auch nicht in ioBroker aktualisiert

Hast du vielleicht eine Idee, was bei mir mit den Räumen nicht funktionieren könnte? Ich muss dazusagen, dass ich bisher auch die raumbezogenen Datenpunkte bisher nicht verwendet habe, außer dem roomClean Datenpunkt, dieser funktioniert perfekt.

Danke schon mal fürs Testen, ich schaue mir das nochmal an.
Das mit den Räumen funktioniert hier anders. Du hast quasi nur die Raumcontrols hier. Wenn du in ioBroker was einstellst, bleibt das so, da wird nichts überschrieben, außer der state. Wenn du jetzt aus IOB heraus einen Raum antriggerst, werden die Werte aus IOb an den globalen State geschrieben, der dann die States auch in der app anpassen sollte. Wenn du natürlich in der app auch irgendwelche Einstellungen für die Räume hast, könnte sich das gegenseitig beinträchtigen

Ich habe gerade auch noch mal Tests gemacht. Es sieht so aus, als wenn er den Level wirklich nicht annimmt, habe mich hier dran orientiert: https://github.com/marcelrv/XiaomiRobotVacuumProtocol/blob/master/water_box_custom_mode.md
Was ich auf jeden Fall festgestellt habe, dass ich nochmal direkt ein getStatus hinterher schicken muss, damit sich ioBroker waterboxMode auch ändert, wenn man den level verändert, weil ich dann automatisch den Mode auf 207 setzte.

Ich habe gerade nochmal die Netzwerkkommunikation mitgeschnitten...
set_water_box_distance_off ist, was wir brauchen. Ich baue das mal entsprechend um

Okay, merkwürdig, warum auch immer der Wert dann in distance_off auch übermittelt wird... Sehr gut, sag gerne bescheid, wenn ich das neue testen kann :)

So, ich habe den Fehler gefunden, warum das mit den Räumen nicht funktionierte, ist in 3.10.1 gefixt, bitte nochmal testen

dirkhe commented

@tobschn Funktioniert das jetzt, können wir das Ticket schließen?

Sorry für die späte Antwort!
Also, ich habe es heute wieder intensiv gestestet:

  • mihome-vacuum.0.control.water_box_mode: global funktioniert
  • mihome-vacuum.0.control.water_box_level: global funktioniert
  • mihome-vacuum.0.rooms.XXXXX.roomWaterBoxMode: raumbezogen funktioniert
  • mihome-vacuum.0.rooms.XXXXX.roomWaterBoxLevel: raumbezogen funktioniert nicht, hier wird der zuvor eingestellte globale wert genommen
dirkhe commented

Laso ich habe das gerade auch nochmal getestet, bei mir setzt er den level, zumindest sehe ich in iobroker, das der level unter control sich anpasst. Das geht natütlich nur, wenn im Raum der mode auch auf Level gesetzt ist