Roborock S7 in openHab integrieren – Wischen automatisieren

Dieser Artikel befasst sich mit einem etwas spezielleren Aufbau in openHAB mit einem Roborock S7. Auch daher schon vorab meine Warnung, dass sich dieser Beitrag an eher technisch affine Personen richtet. Vermutlich lässt sich das Setup auch nicht 1:1 auf deine Umgebung übertragen aber vielleicht bietet er dir einen kleinen Denkanstoß. Aber fangen wir von vorne an. Der Roborock S7 bietet mit seiner VibraRise Technologie eine sehr gute Wischfunktion. Doch seien wir mal ehrlich: Niemand wischt sein gesamtes Anwesen, ohne zwischendurch mehrmals den Lappen auszuwaschen. Bei gängigen Wischrobotern ist aber genau dies der Fall. Der Lappen wird durch die ganze Wohnung gezogen und somit der vermeidliche Schmutz im schlimmsten Fall auf allen Böden verteilt. Ich habe mir für meine Zwecke daher eine kleine Verbesserung überlegt, welche sich liebevoll „Wischtag“ nennt.

 

Was macht der „Wischtag“?

In der Theorie

In regelmäßigen Abständen soll der Roborock S7 die gesamte Wohnung wischen. Damit nun aber nicht der Lappen durch alle Räume gezogen wird, müssen wir diesen zwischendurch auswaschen. Daher folgende Idee: Angenommen euer Anwesen besteht aus 7 Räumen, die da wären: Wohnbereich, Küche, Büro, Schlafzimmer, Vorraum, WC, Bad. Sobald wir die Funktion „Wischtag“ im openHAB starten, fährt der Roborock S7 zuerst das Büro, sowie das Schlafzimmer ab. Wurden diese zwei Räume gesaugt und gewischt, fährt er zu einem vordefinierten Punkt, bei dem er darauf wartet, dass sein Herrchen (also wir) den Lappen auswaschen und wieder montieren.

Ist dies erledigt, werden die nächsten Räume angesteuert: Vorraum, Bad und WC. Nach diesem Reinigungsgang fährt der Roborock S7 erneut zum vordefinierten Punkt und wartet auf unseren Einsatz, den Mop auszuwaschen. Wird die Mopplatte danach wieder montiert, steuert er die letzten zwei Räume an und fährt anschließend zur Ladestation. Dieser Aufbau lässt sich nun auch noch verfeinern, indem man beispielsweise von openHAB eine Push-Notification bekommt, sobald ein Reinigungsdurchlauf abgeschlossen ist. Für Personen, die ebenfalls eine Alexa Integration pflegen, könnte der Sprachassistent kurzerhand eine Nachricht abspielen.

Jetzt fragt sich der ein oder andere wohl auch, welche Vorteile diese Lösung mit sich bringt? Meiner Meinung nach wären das folgende:

  • Der Lappen wird mehrmals ausgewaschen. Die Gefahr, Dreck durch die ganze Wohnung zu ziehen, wird damit beseitigt.
  • Es werden mehrere Räume in einem Durchgang gewischt.
  • Der Roborock S7 wartet immer an einem von uns definierten Punkt, damit der Lappen ausgewaschen wird.
  • Es muss nur einmal in openHAB die Funktion aktiviert werden, der Rest passiert über Automatismen von alleine.
  • Der Reinigungsablauf sieht immer gleich aus.

 

Mein Aufbau

Mittlerweile ist der folgende Aufbau bei mir mehrere Monate im Einsatz und ich möchte ihn nicht mehr missen. Wird die Funktion Wischtag über openHAB aktiviert, startet folgender Mechanismus:

  1. openHAB prüft, ob die Mopplatte montiert ist. Falls nicht, wird ein Fehler über meinen Sprachassistenten Alexa, sowie eine Push-Benachrichtigung an mein Handy geschickt.
  2. Das Schlafzimmer, sowie das Büro werden gewischt. Ist dies erledigt, fährt er in die Küche, wo er auf die Reinigung seines Wischtuchs wartet.
  3. Wurde das Wischtuch gereinigt und wieder aufgesetzt, steuert er die nächsten Räume an: Vorraum, Bad, WC. Anschließend fährt er wieder in die Küche und wartet auf meinen Einsatz.
  4. Die letzten zwei Stationen bilden der Wohnbereich und die Küche. Nach erfolgter Reinigung fährt er zur Ladestation und gibt eine entsprechende Meldung via Alexa und am Smartphone aus.

Das wars auch schon. Die Notifizierungen lassen sich dabei natürlich nach euren Präferenzen konfigurieren.

 

Die Umsetzung

openHAB Konfiguration

Um den oben genannten Aufbau so umzusetzen bedarf es nur an einem Item namens „Wischtag“ und einigen Rules. Meine Standard-Items habe ich euch bereits in folgendem Artikel näher erläutert. Schaut am besten dort vorbei, sollte hier etwas unklar sein. In unserem Fall benötigen wir also nur ein weiteres Dummy-Item:

Roborock - ITEM
Switch pt_Roborock01_EG_cleaningDay "Wischtag" ["Control"]

Und mit folgenden Regeln steuern wir den gesamten Ablauf:

Roborock - RULES
### Variable um den jeweiligen Reinigungsdurchgang zu tracken
var Number cleanCycle


### Startet den Wischtag und beginnt mit den ersten beiden Räumen
rule "ROBOROCK - CleaningDay Start"

when
    Item pt_Roborock01_EG_cleaningDay changed to ON
then

    logInfo("ROBOROCK - Start CleaningDay","Checking if all components are ready");

    if(pt_Roborock01_EG_statusMop.state == ON){

        logInfo("ROBOROCK - Start CleaningDay", "Start initial Room Cleaning for Cleaning Day");
        Roborock01_EG_executeCMD.sendCommand("app_segment_clean[20,21]");        

        cleanCycle = 1;
        sendBroadcastNotification("Schwanko legt los und startet mit dem Wischtag.");
        Sonos02_TTS.sendCommand('<speak>Schwanko legt los und startet mit dem Wischtag.</speak>');

    }else{

        logInfo("ROBOROCK - Start CleaningDay", "Mop is not mounted.")
        pt_Roborock01_EG_cleaningDay.postUpdate(OFF);

        sendBroadcastNotification("Schwanko kann ohne Wischtuch keine Böden wischen. Bitte Halterung und Wischtuch anbringen.");
        Sonos02_TTS.sendCommand('<speak>Schwanko kann ohne Wischtuch keine Böden wischen. Bitte Halterung und Wischtuch anbringen.</speak>');

    }

end


### Nachdem die ersten beiden Räume erfolgreich gewischt wurden, fährt der Roborock zu dem definierten Punkt und wartet auf unseren Einsatz.
rule "ROBOROCK - CleaningDay First Pause"

when
    Item Roborock01_EG_statusId changed to 6
then

    if(pt_Roborock01_EG_cleaningDay.state == ON && cleanCycle == 1){
        logInfo("ROBOROCK - CleaningDay First Pause", "First Cleaning Cycle successfully finished.");
        Roborock01_EG_executeCMD.sendCommand("app_goto_target[28200,28550]");
        cleanCycle = 2;
    }
    
end


### Nachdem die Wischplatte wieder montiert wurde, werden die nächsten 3 Räume gereinigt.
rule "ROBOROCK - CleaningDay Second Run"

when 
    Item pt_Roborock01_EG_statusMop changed to ON
then

    if(pt_Roborock01_EG_cleaningDay.state == ON && cleanCycle == 2){
        logInfo("ROBOROCK - CleaningDay Second Run", "Mop mounted. Starting with the second Cleaning Cycle");
        Roborock01_EG_executeCMD.sendCommand("app_segment_clean[19,18,17]");
        cleanCycle = 3;
    }

end


### Nachdem die nächsten drei Räume erfolgreich gewischt wurden, fährt der Roborock zu dem definierten Punkt und wartet auf unseren Einsatz.
rule "ROBOROCK - CleaningDay Second Pause"

when
    Item Roborock01_EG_statusId changed to 6
then
    if(pt_Roborock01_EG_cleaningDay.state == ON && cleanCycle == 3){
        logInfo("ROBOROCK - CleaningDay Second Pause", "Second Cleaning Cycle successfully finished.");
        Roborock01_EG_executeCMD.sendCommand("app_goto_target[28200,28550]");
        cleanCycle = 4;
    }
    
end


### Nachdem die Wischplatte wieder montiert wurde, werden die letzten 2 Räume gereinigt.
rule "ROBOROCK - CleaningDay Third Run"

when 
    Item pt_Roborock01_EG_statusMop changed to ON
then

    if(pt_Roborock01_EG_cleaningDay.state == ON && cleanCycle == 4){
        logInfo("ROBOROCK - CleaningDay Third Run", "Mop mounted. Starting with the third Cleaning Cycle");
        Roborock01_EG_executeCMD.sendCommand("app_segment_clean[22,16]");
        cleanCycle = 5;
    }

end


### Wurde die Reinigung erfolgreich beendet, werden entsprechende Notifications ausgegeben und der Roborock begibt sich zur Ladestation.
rule "ROBOROCK - CleaningDay End"

when
    Item Roborock01_EG_statusId changed to 6
then
    if(pt_Roborock01_EG_cleaningDay.state == ON && cleanCycle == 5){
        logInfo("ROBOROCK - CleaningDay End", "Successfully finished Cleaning Day.");
        Sonos02_TTS.sendCommand('<speak><amazon:emotion name="excited" intensity="high">Super, Wischtag abgeschlossen! Schwanko freut sich jetzt sicher über eine kleine Pause.</amazon:emotion></speak>');
        cleanCycle = 0;
        pt_Roborock01_EG_cleaningDay.postUpdate(OFF);
    }
    
end


### Falls wir die aktuelle Reinigung über den Switch abbrechen möchten
rule "ROBOROCK - CleaningDay Abort"

when
    Item pt_Roborock01_EG_cleaningDay changed to OFF
then
    Roborock01_EG_executeCMD.sendCommand("dock");
    cleanCycle = 0;    
end

Ihr werdet diese Config vermutlich so nicht einfach kopieren und übernehmen können. Dazu müsst ihr höchstwahrscheinlich die Items anpassen und womöglich die Notifizierung entfernen – je nachdem wie euer openHAB Setup aussieht. Zwei Fragen dürften nun aber trotzdem noch nicht geklärt sein:

  • Wie lege ich fest, welche Raumnummer welche ID besitzt?
  • Woher weiß ich, zu welchen Koordinaten der Roborock fahren soll?

Die Raumnummern vergibt der Roborock selbst. Um diese herauszufinden, lest euch am besten folgenden Artikel durch. Die zweite Frage werde ich anhand eines Artikels später noch genauer erläutern. Technisch affine Personen können sich aber schon vorab mit dem Xiaomi Vacuum Map Viewer befassen, denn damit können Koordinaten kinderleicht ausgelesen werden.

Vielleicht konnte ich euch mit diesem Beitrag eine kleine Idee liefern, wie openHAB in Kombination mit einem Roborock Saug- und Wischroboter euer Leben etwas erleichtert.

You may also like...

Abonnieren
Benachrichtige mich bei
guest
2 Comments
Älteste
Neuste Meist bewertet
Inline Feedbacks
View all comments
ChristianM
ChristianM
2 Jahre zuvor

Vielen dank für die Anleitungen rund um den S7, diese haben mir sehr geholfen meinen neuen Helfen in Openhab einzubinden. Was mir fehlte, war beim Wischen das „Schachbrett“, alsozwei Druchgänge in verschiedene Richtungen. Der Befehl sieht dabei so aus (Segment = Raumnummer; Repeat = Anzahl der Durchgänge):

Roborock_ExecuteRPCcloudCommand.sendCommand("app_segment_clean[{segments:[19],repeat:2}]")
2
0
Hinterlass' doch deine Meinung zu diesem Artikelx