[Modul] Roborock / Xiaomi Vacuum Cleaner

Ich habe vor ein paar Tagen meinen Roborock S50 in IP-Symcon eingebunden.

Ich habe wie in Beitrag #116 versucht meinen Roborock dazu zu bewegen eine Multizone-Reinugung durchzuführen.
Leider habe ich das gleiche Problem wie meine Vorredner. Der Roborock gibt die Rückmeldung „eingegrenzte Reinigung wird gestartet“. Dan Fährt er jedoch das ganz Normale Reinigungsprogramm ab.

Ich habe das Skript dann komplett auf eine Zeile gekürzt um nur die Rohdaten zu übertragen. Das Gleiche Problem.

Was mache ich falsch?

Roborock_ZoneCleanMulti(21502,'[25571,26267,26071,26817,1],[25570,27902,26120,28452,1],[25560,27085,26110,27585,1],[25570,28685,26070,29185,1],[24282,30126,24782,30626,1]',1); 

Habe dann nocheinmal die Instanz angelegt und IP-Symcon neu gestartet. Leider ohne Erfolg.

Wie sollte der Befehl wirklich lauten? :confused:

Fahre ich diese Zonen einzeln mit

Roborock_ZoneClean

und den Koordinaten als Integer an funktioniert alles Tadellos.

Danke für eure Hilfe

Gruß Dani

Leider konnte ich das Problem mit Multizone bis jetzt noch nicht lösen.
Hat jemand vielleicht eine Idee oder Lösungsvariante für mich?

Zur Zeit lasse ich Ihn immer eine Zone nach der anderen reinigen. Leider hört er, wenn er mit der Zone fertig ist und zur Ladesttion fährt, nicht auf den „Stop“ Befehl via Skript. Dann muss er immer in die Ladestation fahren damit ich Ihn zur nächsten Zone schicken kann.

Wenn ich Ihn jedoch am Weg zur Ladesttion mit der Mii app Stoppe funktioniert es.
Dazu muss ich aber immer zwischen den Apps hin und her wechseln. Ich starte Ihn normalerweise über einen MTD Glastaster.

Danke für euer Bemühen.

Gruß Dani

Hallo Dani,
habe das identische Problem und auch nach vielen Stunden keine Lösung gefunden, der Multizone Befehl funktioniert einfach nicht.
Habe einen Kollegen mit IO-Brocker mit dem dortigen Adapter funktioniert dies perfekt, also gibt es hier bei dem Modul ein Problem. Ja Stop reagiert auch nicht immer wirklich, unter welchen Umständen es dann doch geht, habe ich nicht raus gefunden.

Da mein „Dobby“ auf einer Seite des Hauses seine Ladestation wäre es sehr unschön, wenn er wirklich bis zur Ladestation fährt.

Nutze einfach den Pause Befehl
(Achtung, ein fortsetzen der aktuellen Reinigung habe ich damit auch noch nicht hinbekommen, reagiert eher wie Stop).

Ich Trigger auf Fahre zur Ladestation(Wert 17), dann sende ich eine Pause, dann IPS_Sleep mit 1500 ms,
dann nochmal Pause und wieder 1500 ms warten, dann sende ich ihm den nächsten Zonenbereich.
Funktioniert Perfekt.
Warum 2 mal Pause? Bei mir hat er gelegentlich auf den Befehl Pause nicht reagiert. Auch mochte er nicht schnelle Befehlsabfolgen. Eigentlich meide ich IPS_Sleep wo es nur geht, aber insgesamt 3 Sekunden kann man verkraften.

Das Modul aktualisiert alle 15 Sekunden, sonst ist er wenn er den Raum saugt in dem die Ladestation steht, schneller in der Station als man es braucht. Im reinem Andockvorgang mag er Befehle auch nicht wirklich.

Dein Problem lösen konnte ich nicht, aber vielleicht kannst du mit den Ideen von mir es umschiffen.

Ich kann sehr gut damit Leben, Dobby schwätzt halt mehr.:smiley:

Gruß Achim

Was für eine Methode rufst Du denn auf und wie sieht der Code aus mit dem Du das aufrufst? Welchen Branch nutzt Du?

Die passende Methode wäre


Roborock_ZoneCleanMulti(integer $InstanceID, string $multizone);

Ich habe die Readme mal mit einem Beispielergänzt.

Da fehlt eine umschließende Klammer :

Roborock_ZoneCleanMulti(21502,'[[25571,26267,26071,26817,1],[25570,27902,26120,28452,1],[25560,27085,26110,27585,1],[25570,28685,26070,29185,1],[24282,30126,24782,30626,1]]'); 

Dankeschön für eure Antworten.

@ Fonzo
Das mit der umschließenden Klammer hatte ich auch schon versucht. Ich hatte die Rohdaten genauso übergeben wie sie mir die „FloleVac“ App ausgespuckt hatte. Leider ohne Erfolg. Ich habe es soeben mit deinem Code versucht und habe das gleiche Fehlerbild.
Der Roborock startet mit der Ansage „Eingegrenzte Reinigung wird gestartet“ und fängt dann aber das ganz normale Reinigungsprogramm an und fährt nicht zur Zone 1.

Ich werde heute Abend mal versuchen vorübergehend die Lösung von Achim einzupflegen. Vielleicht funktioniert es ja einmal nach einem Update des Moduls. Ich schein ja nicht der einzige mit dem Problem zu sein.

Danke vielmals.

Gruß Dani

Hallo Fonzo und Dani,
ja auch die Variation (die auch richtig wäre ist bei IO-Broker auch so) funktioniert bei mir nicht, habe allerdings auch ein S50. Vielleicht gibt es da einen kleinen Unterschied bei der „alten“ Roborock Version zur „neuen“, wäre meine einzige Vermutung wenn es bei Fonzo funktioniert oder wir sind einfach zu BLÖ…:banghead::smiley:

Ich nutze den Masterbranch .

Werde später das Update was ansteht machen und dann nochmals mitFonzos Beispiel testen(natürlich mit meinen Koordinaten).

Gruß Achim

Probiere das doch noch mal nach einem Update des Moduls aus, ich selber nutzte diese Funktion nicht, ich habe das aber mal kurz angetestet mit der neusten Modul Version und konnte bei mir keine Fehler feststellen. Getestet habe ich das kurz mit zwei Zonen die hintereinander angefahren wurden.

Mal eine Frage, die App selber von Xiaomi ist ja inzwischen deutsch, ein offizielle deutsche Sprachdatei gibt es aber immer noch nicht oder, d.h. es muss nach wie vor selber Sound aufgespielt werden?

Die xiaomi mii app ist auf deutsch und der s50 unterstützt auch deutsche Sprache. Ich habe keine sprachdateien aufgespielt nur deutsch ausgewählt und das funktioniert perfekt! Habe auch die Master Branch und das Modul zeigte mir gestern noch an, dass es aktuell ist! Werde heute nochmal nachsehen!

Gruß Dani

Habe soeben das Modul aktualisiert und getestet!

Nun Funktioniert es! :loveips:
Danke für deine Mühe.

Gruß Dani!

Nur so aus Interesse, ich nutzte ja nur iOS habe aber ein einziges Android Gerät verfügbar. Was genau macht denn die App, bzw. wie kann man denn die Positionsdaten in der App anzeigen?

Hallo Fonzo!

Sorry ich hab da noch eine ganz kurze dumme Frage.
Ich würde gerne die Koordinaten von den Räumen Zentral eintragen und in einem anderen Script includen damit ich die Koordinaten für mehrere Zwecke verwenden Kann. (Zone Clean, Multizone je nach auswahl in der Visu)

Wie bringe ich die 4 Integer in eine Variable?

$Küche=23769,29310,27069,31910;

So funktioniert das ja nicht, ich bin eher ein Anfänger was php angeht.

Ich würde dann gerne im Auslösescript einen Befehl anwenden wie z.B.

Roborock_ZoneClean($Roborock, $Küche, $number);

oder Multizone

$multizone = [[$Küche, $number],[$Wohnzimmer, $number]];
$multizone = json_encode($multizone);

Roborock_ZoneCleanMulti($InstanceID, $multizone);

Danke

Gruß Dani

Hallo Fonzo!

Die FloleVac App ist ziemlich ähnlich wie die Mii app jedoch nur für den Staubsauger.
Man kann dort in der Karte die Zonen bestimmen dann lang auf „reinigen“ drücken und somit sind die Koordinaten im Zwischenspeicher des Telefons gespeichert.
So bekommt man die Koordinaten welche man benötigt ohne einen Root-Zugriff auf den Roborock zu benötigen.

Gruß Dani

Da ich wenig Erfahrung habe mit Android mal die Frage wie kommt man dann an den Zwischenspeicher des Telefons bzw. wie zeigt man den an? Ist bestimmt banal, aber wenn man nie mit Android zu tun hat nicht selbsterklärend.

Hallo Fonzo,
klappt alles Perfekt, vielen vielen Dank.

Kann jetzt meine Scripte umbauen, hatte 10 mögliche Reinigungszonen anwählbar und kann die jetzt in 5’er Päckchen übertagen. Das geht dann doch zügiger und der Dobby „schwätzt“ nicht mehr so viel morgens.:o

Gurß Achim

Hallo Fonzo,
ähnlich wie bei IOS, einfach im Textbereich länger drücken, dann kommt einfügen!

Gruß Achim

Hallo Fonzo!

Einfach in einem Texteditor oder E-mail Program… in irgendeinem Textfeld lange gedrückt halten, dann Einfügen auswählen.

Hast du zufällig noch einen Tipp zu meiner Frage bezüglich Variablen?

Gruß Dani

Hallo Dani,
ganz einfach, deine Küche sieht doch schon gut aus, einfach noch Anführungszeichen am Anfang und am Ende.

$Küche=„23769,29310,27069,31910“;

[FONT=arial]Und schon wird es als String erkannt

Gruß Achim.[/FONT]


$kitchen = [23769,29310,27069,31910];
SetValue(12345, json_encode($kitchen));
$kitchen = json_decode(GetValue(12345), true);

$kitchen ist dann ein Array.

Das geht nicht so einfach, da eine Methode bestimmte Eingabewerte erwartet, wenn dann müste man dann eine seperate Funktion bauen die den Wert an die eigentliche Methode übergibt.


 $kitchen = [23769,29310,27069,31910];  
 ZoneCleanRoomname(12345, $kitchen, 1);
 
 function ZoneCleanRoomname(12345, $roomname, $number)
 { 
	$lower_left_corner_x = $roomname[0];
	$lower_left_corner_y = $roomname[1];
	$upper_right_corner_x = $roomname[2];
	$upper_right_corner_y = $roomname[3];
	
	$result = Roborock_ZoneClean($lower_left_corner_x, $lower_left_corner_y, $upper_right_corner_x, $upper_right_corner_y, $number);
 	return $result;
 }


Ich muss mal schauen ob ich da vielleicht eine Liste im Konfigurationsformular ergänzen kann, dann könnte man dort Räume hinterlegen, das würde das vielleicht einfacher machen.

Hallo Achim!

Das habe ich schon versucht bei zwei " oder ’ wird der Wert als String übergeben. Bei einer Zonenreinigung muss der wert aber als Integer eingegeben werden. Er meldet einen Fehler da er String nicht mag. Das würde also nur mei Multizone funktionieren.
Ebenso habe ich auch schon mit versucht, geht auch nicht.

Ich dachte mir ich kann die Variable einfach nur als Platzhalter für die 4 Integer verwenden. Das funktioniert aber nicht.

Ich brauche die Koordinaten beim Zoneclean ja als Integer und bei Multizone als String, würde diese aber gerne in einem Globalen Skript zusammenfassen.

Habe es vorerst mal so versucht

$K1=23769;	$K2=29310;	$K3=27069;	$K4=31910;

Küche Kordinaten 1-4, das funktioniert auch.

sieht dann so aus

Roborock_ZoneClean($Roborock, $K1, $K2, $K3, $K4, $number); 

Würde aber Gerne Alles in eine Variable verpacken um die folgescripte auch im zusammenhang mit Multizone nicht unnötig kompliziert zu machen, da es sich ja um mehrere Räume handelt.

Gruß Dani