NodeRED: Steuerung des Roborock S5 Max mit Valetudo per REST

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.

Voraussetzungen

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.

Flow Steuerung
Flow zur Ansteuerung des Bots

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.

Payload im Button
Setzen des Payloads im Button-Node

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.

Segment-ID
Ermittlung der Segment-ID in der „alten“ Valetudo-Oberfläche

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.

Chromium: Netzwerkmitschnitt
Chromium: Netzwerkmitschnitt der „Go to“-Ausführung

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.

Einstellungen im Change-Node
Setzen des Headers und der Capability für den Request

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.

Einstellungen im Request Node
Konfiguration des HTTP-Requests unter Nutzung der PUT-Methode

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.

Geänderte Parameter für die Zonenreinigung.
Für die Zonenreinigung kommt noch der preset-Parameter hinzu.

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
Hilf durch deine Bewertung mit, diesen Blog zu verbessern!
Abonnieren
Benachrichtige mich bei
0 Kommentare
Inline Feedbacks
Alle Kommentare