Roborock Q7 L5+ in Home Assistant: Raumreinigung per Knopfdruck

von Patrick · · 6 Min. Lesezeit · DIY

Dieser Artikel enthält Affiliate-Links. Kaufst du darüber, bekomme ich eine kleine Provision – für dich ändert sich am Preis nichts. Mehr dazu


Bei uns wohnt ein Saugroboter, der auf den Namen „Putzi“ hört. Ein Roborock Q7 L5+ mit Absaugstation, der seine Basis im Abstellraum hat und von dort aus das ganze Stockwerk abfährt. In der Roborock-App klappt das alles wunderbar: Karte anlegen, Räume benennen, einzelne Räume antippen, los. Mein Ziel war aber ein anderes. Ich wollte, dass jeder in der Familie mit einem Tipp auf dem Home-Assistant-Dashboard sagen kann: „Putzi, bitte nur die Küche“ – ohne extra App, ohne Roborock-Konto auf jedem Handy.

Klingt nach fünf Minuten Arbeit. Waren es nicht.

Die Integration kann viel – nur nicht das Wichtigste

Die offizielle Roborock-Integration in Home Assistant hat den Roboter bei mir ohne Probleme gefunden. Starten, stoppen, zurück zur Basis, Akkustand, Status – das lief alles sofort. Für eine Raumreinigung ist der klassische Weg bei Roborock-Geräten ein vacuum.send_command mit dem Befehl app_segment_clean und einer Liste von Segment-IDs. Das steht in unzähligen Forenbeiträgen und funktioniert bei vielen älteren Modellen auch tadellos.

Bei Putzi passierte: nichts. Keine Fehlermeldung in der Oberfläche, kein Piepen, der Roboter blieb einfach in der Basis stehen.

Nach einigem Suchen habe ich den Grund gefunden. Der Q7 L5+ spricht intern ein neueres Protokoll, das in der Python-Bibliothek python-roborock als „B01“ geführt wird. Die älteren Modelle nutzen das sogenannte V1-Protokoll, und genau dafür ist app_segment_clean gedacht. B01-Geräte erwarten stattdessen einen eigenen Befehl zur Raumreinigung (SET_ROOM_CLEAN) mit etwas anderen Parametern. Über send_command in Home Assistant kam ich an diesen Befehl nicht heran.

Schritt 1: Die Segment-IDs herausfinden

Bevor man überhaupt einen Raum ansteuern kann, braucht man die Segment-IDs. Das sind die internen Nummern, unter denen der Roboter die Räume seiner Karte speichert. Die App zeigt euch die nicht an, dort seht ihr nur eure eigenen Raumnamen.

Ich habe die Karteninformationen mit python-roborock direkt ausgelesen. Bei mir liegen die IDs im Bereich 10 bis 19, also zehn Segmente. Die Zuordnung zu den Raumnamen aus der App war bei den meisten Räumen eindeutig. Bei drei Segmenten war ich mir aber nicht sicher, welcher Raum wirklich dahintersteckt, zum Beispiel weil ich einen Bereich in der App anders aufgeteilt hatte, als ich ihn im Kopf hatte.

Mein ehrlicher Tipp: Verlasst euch nicht blind auf eine Liste, sondern testet jede ID einmal. Button drücken, zuschauen, wohin Putzi fährt, notieren. Das ist unspektakulär, spart aber später die Verwirrung, wenn der Roboter fröhlich das Bad saugt, obwohl ihr das Wohnzimmer wolltet. Drei Räume stehen bei mir tatsächlich noch auf der „bitte nochmal prüfen“-Liste.

Schritt 2: Ein kleiner REST-Dienst als Übersetzer

Da Home Assistant den passenden Befehl nicht direkt schicken konnte, habe ich mir einen Umweg gebaut. Auf meinem Heimserver (für so etwas reicht übrigens jeder sparsame Mini-PC, etwa ein Lenovo ThinkCentre Tiny) läuft ein winziger Python-Dienst mit Flask. Er macht genau eine Sache: Er nimmt eine Anfrage mit einer oder mehreren Segment-IDs entgegen und schickt dem Roboter über python-roborock den B01-Befehl zur Raumreinigung.

Diagramm: Ein Dashboard-Knopf löst in Home Assistant einen rest_command aus, der einen Flask-REST-Dienst anspricht, der dem Roborock Q7 die gewählten Raum-Segmente schickt. Der REST-Dienst ist der Übersetzer zwischen Home Assistant und dem Roboter.

Der Kern sieht vereinfacht so aus:

await b01.send(
    RoborockB01Q7Methods.SET_ROOM_CLEAN,
    {"clean_type": 1, "ctrl_value": 1, "room_ids": [13]},
)
await asyncio.sleep(10)  # Verbindung kurz offen lassen

Die Zeile mit dem sleep hat mich am meisten Zeit gekostet. Anfangs habe ich die Verbindung direkt nach dem Senden geschlossen – und der Roboter hat den Befehl nur manchmal ausgeführt. Offenbar braucht Putzi nach dem Kommando ein paar Sekunden, bis er wirklich losfährt, und wenn die MQTT-Verbindung in dieser Zeit schon wieder weg ist, verpufft der Befehl. Mit rund zehn Sekunden Wartezeit läuft es seitdem zuverlässig.

Außerdem kann der Dienst noch „Start“, „Stopp“ und „zurück zur Basis“, damit ich alles an einer Stelle habe. Die eigentliche Arbeit läuft im Hintergrund, der Dienst antwortet sofort, damit Home Assistant nicht auf einen Timeout wartet. Gestartet wird er automatisch beim Hochfahren des Servers.

Schritt 3: rest_command und Skripte in Home Assistant

In Home Assistant hänge ich den Dienst über rest_command an. Das ist eine eingebaute Integration, die HTTP-Anfragen verschickt und sich per YAML in der configuration.yaml konfigurieren lässt. Generisch sieht das etwa so aus:

rest_command:
  putzi_raum:
    url: "http://<euer-server>:<port>/putzi/clean/{{ segment }}"
    method: POST

Darauf aufbauend habe ich pro Raum ein kleines Skript angelegt, zum Beispiel „Putzi: Küche“, das nichts weiter tut, als rest_command.putzi_raum mit der passenden Segment-ID aufzurufen:

sequence:
  - action: rest_command.putzi_raum
    data:
      segment: "13"

Der Vorteil der Skripte: Sie haben einen sprechenden Namen, lassen sich in Automationen wiederverwenden und tauchen sauber im Dashboard auf. Wenn sich eine Segment-ID mal ändert, weil ich die Karte neu anlege, muss ich nur an einer Stelle nachbessern.

Schritt 4: Das Dashboard für alle

Für Putzi gibt es in Home Assistant ein eigenes kleines Dashboard. Oben der Status des Roboters, darunter eine Kachel pro Raum: Küche, Flur, Wohnzimmer, Bad, Schlafzimmer, die Kinderzimmer und so weiter. Dazu drei Buttons für Start, Stopp und „ab nach Hause“.

Das Schöne daran: Niemand muss wissen, was eine Segment-ID ist oder wie die Roborock-App funktioniert. Nach dem Abendessen tippt einer von uns auf „Küche“, und Putzi rollt los. Genau so hatte ich mir das vorgestellt.

Ausschnitt des Putzi-Dashboards in Home Assistant mit den Raum-Kacheln Wohnzimmer, Küche und Schlafzimmer

Was (noch) nicht geht: die Karte

Ein Wunsch ist bisher offen geblieben. Ich hätte gern die Live-Karte im Dashboard gesehen, so wie man es von vielen anderen Roborock-Setups kennt. Die dafür beliebte xiaomi-vacuum-map-card habe ich zwar installiert, sie braucht aber eine Kamera- oder Bild-Entität mit der Karte. Für den Q7 L5+ stellt die Integration bei mir so eine Entität nicht bereit, und über die Cloud kommen auch keine Raumdaten an.

Deshalb gibt es im Dashboard vorerst nur Buttons, keine Karte. Ehrlich gesagt vermisse ich sie im Alltag weniger als gedacht. Wer unbedingt eine Karte braucht, sollte vor dem Kauf prüfen, wie gut das jeweilige Modell in Home Assistant unterstützt wird – gerade bei neueren Geräten mit neuem Protokoll hinkt die Unterstützung oft etwas hinterher.

Stolpersteine, die ich euch ersparen möchte

  • Nicht jeder Roborock ist gleich. Anleitungen aus dem Netz beziehen sich oft auf ältere Modelle mit V1-Protokoll. Wenn app_segment_clean bei euch nichts tut, lohnt ein Blick, welches Protokoll euer Gerät nutzt.
  • Segment-IDs testen, nicht raten. Die Nummern sind nicht nach Raumnamen sortiert, und nach einem Neuanlegen der Karte können sie sich ändern.
  • Geduld beim Senden. Die Verbindung zum Roboter nicht sofort nach dem Befehl kappen.
  • Den Dienst nur im Heimnetz betreiben. So ein kleiner Helfer gehört nicht ins Internet, sondern ausschließlich in euer lokales Netz.

Fazit

Putzi raumweise aus Home Assistant zu starten, war deutlich mehr Bastelei, als ich erwartet hatte. Die offizielle Integration deckt die Grundfunktionen gut ab, aber die Raumreinigung klappt beim Q7 L5+ bisher nur über einen Umweg. Mit einem kleinen REST-Dienst, rest_command und ein paar Skripten läuft das bei uns jetzt stabil, und das Dashboard nutzt wirklich die ganze Familie. Wenn die offizielle Integration irgendwann nachzieht, fliegt mein Dienst gern wieder raus – bis dahin tut er genau, was er soll.

Die Geräte aus diesem Artikel

roborock Q7 L5+ Saugroboter mit Absaugstation
Mein Gerät

roborock Q7 L5+ Saugroboter mit Absaugstation

Unser Putzi. Saugt und wischt zuverlässig, die Absaugstation spart mir das ständige Behälterleeren – und mit etwas Bastelei lässt er sich raumweise aus Home Assistant steuern.

Kommentare

Fragen, Ergänzungen oder eigene Erfahrungen? Ich freue mich über deinen Kommentar. Zum Kommentieren brauchst du ein kostenloses GitHub-Konto.

Beim Laden werden Daten an GitHub übertragen. Mehr dazu in der Datenschutzerklärung.