Ich nutze den Roborock S5 Max* über das REST-Interface von Valetudo, welches man auch mit den HTTP-Request-Nodes in NodeRED verwenden kann. MQTT wäre noch eine weitere Möglichkeit, stürzte jedoch auf meinem S5 Max häufig ab.
Inhalt
Voraussetzungen
- Du benötigst einen Saugroboter mit Valetudo. In meinem Fall ist es der Roborock S5 MAX.
- Für diese Anleitung benötigst Du NodeRED. Wie die Installation erfolgen kann, siehst Du im Artikel „RedMatic auf der RaspberryMatic installieren„.
Umsetzung
Für die Ansteuerung der REST-Schnittstelle hat NodeRED bereits alles an Board. Nachfolgendes Bild zeigt, wie der Flow im Ganzen aussieht. Danach erkläre ich Schritt für Schritt, wie der Flow im Einzelnen aufgebaut ist.
Kommando hinterlegen
Auf der linken Seite im obigen Bild siehst du Inject-Nodes. Diese sind optional und für Tests ohne Oberfläche nützlich.
Danach kommen Button-Nodes, in deren Payload ich die spezifische Aktion hinterlegt habe. Das können Koordinaten oder IDs sein.
Um die für Dich passenden Koordinaten, Segmente oder Zonen herauszufinden, kannst Du in Deinem Browser die (alte) Valetudo-Oberfläche Deines Bots aufrufen. Die Segment-IDs findest du heraus, indem Du in die Map soweit hineinzoomst, bis die Bezeichnung am Dreieck sichtbar ist. Die Segment-ID steht in runden Klammern.
Die Koordinaten findest Du über einen Mitschnitt des Netzwerkverkehrs (Tab „Network“) in den „Entwicklertools“ heraus. Wenn Du dort die Valetudo-Oberfläche aufrufst, siehst Du welche Daten geschickt werden. Der nachstehende Screenshot zeigt die Entwicklertools des Browsers Chromium. Im Firefox heißt der Tab „Netzwerkanalys“ und ist ähnlich aufgebaut. Valetudo hat bereits an einigen Stellen einen Info-Button eingebaut, der Dir zukünftig die IDs vermutlich auch direkt anzeigt.
Wenn Du die Aktion im Button-Node hinterlegst, muss Du:
- der Inhaltstyp „Content-Type“ auf
application/json
setzen und - alle Zeichenketten in der JSON-Zeichenkette in Anführungsstrichen einschliessen.
Konfiguration des HTTP-Nodes
Die verschiedenen Aktionen („gehe zu“, „reinige“, …) liegen auf unterschiedlichen Endpunkten im Bot, die ich mit der Variablen capability
direkt vor dem HTTP-Request-Node in einem Change-Node setze. Hier wird auch gleich der HTTP-Header für den Inhaltstypen „Content-Type“ gesetzt.
Versenden des Kommandos
Für das Versenden des Kommandos nutze ich den http request-Node, der als letztes im Flow aufgerufen wird. Für das Ausführen der Kommandos wählst Du als Methode PUT
aus.
Die URL enthält die IP-Adresse oder den Namen Deines Bots, in meinem Fall ist das „bot
„. Hier findest Du auch die zuvor im Change-Node gesetzte Variable capability
wieder.
Zonenreinigung
Die Reinigung einer Zone hat eine leicht andere URL: http://bot/api/v2/robot/capabilities/{{capability}}/presets/{{preset}}
Im change-Node zur Konfiguration musst Du die capability
ändern und einen weiteren Parameter preset
hinzufügen, welchen Du ebenfalls aus dem Netzwerkmitschnitt für die konkrete Zone entnehmen kannst.
Fazit
Einfache Steuerungen kann man auch direkt ohne MQTT durchführen. Mit letzterem lassen sich noch Kartendaten und verschiedene Status holen, so das man seine UI noch erweitern kann. Bisher genügt mir die einfache Anbindung per REST. Die Aktionen habe ich zusätzlich noch auf physische ZigBee-Buttons gelegt, um den Bot direkt rufen zu können.
Updates
- 17.04.2022: Zonenreinigung hinzugefügt
- 17.11.2021: Segment-IDs sind im neuen Frontend sichtbar