Hallo zusammen, nachdem es bereits hier eine Anleitung gibt, wie man den Xiaomi Saugroboter V1 über Home Assistant mit Webhooks ansteuert, will ich euch nicht meine Lösung über iobroker, Node Red und einen Wemo Emulator, der den aktuellen Status des Saugroboters in homee anzeigt, vorenthalten.
→ Ergänzung 11.02.2020: Durch die neue Weiter-Entwicklung der virtuellen Geräte lässt sich das auch über hih und Node-Red umsetzen. Flow von @shamrock siehe hier: Mal wieder virtuelle Geräte - jetzt aber richtig! - #879 von shamrock
Disclaimer:
Das hier ist ein Software-Bastelprojekt für Erfahrenere und die Umsetzung bedingt zusätzliche Hardware (z.B. einen Raspi Pi) und Software (iobroker mit installiertem Node Red Adapter)
Start und Installation von iobroker
Als erstes müssen wir auf dem Raspberry Pi iobroker installieren. Ich hatte immer wieder am Anfang Probleme mit dem fertigen Image ( welches man hier herunterladen kann) und dem Node Red Adapter, weswegen ich das fertige Raspbian ohne GUI auf die SD-Karte geflasht habe. (Siehe hier das Raspbian Stretch Lite)
Nach dem ersten Start habe ich iobroker gemäß dieser Anleitung erfolgreich installiert.
nun kann man iobroker über http://IP-Adresse:8081 aufrufen. Als erstes sollte kontrolliert werden, ob der Host die neueste Version beinhaltet, da dies anscheinend zu Fehlern führen kann wenn man mit einem älteren Host neuere Adapter installiert.
Installation der notwendigen iobroker-Adapter
Als erstes müssen wir die Adapter mihome-vacuum und Node Red Adapter installieren. Dazu unter dem Reiter Adapter beide aussuchen und rechts in der Zeile auf das „+“ klicken. Die Adapter werden nun im Hintergrund installiert.
WICHTIG: Bei verwendung von iobroker mit dem Node Red Adapter wird keine weitere Node Red Instanz auf dem Pi benötigt! Also z.B. nicht Node Red nachträglich über homeean installieren, da sonst die iobroker Nodes fehlen und die Verbindung iobroker ↔ Node Red nicht funktioniert.
Verbindung des Saugroboters mit iobroker
Um den Saugroboter mit dem iobroker Adapter zu verbinden, wird der Token benötigt. Dazu gibt es mehrere Möglichkeiten. Die werden auf den oben verlinkten HowTo kurz vorgestellt, finden sich aber auch hier.
Ich habe es mit einem Android und dem MiToolkit v1.6 gelöst - hatte am Anfang Probleme damit, konnte es aber am Ende einfach mit einem anderen Handy auslösen. Wichtig ist, dass das Handy nicht verschlüsselt ist. Mit einem Verschlüsselten Handy funktioniert es nicht, weil man dann ein Passwort eingeben muss.
Ist erst einmal der Token ausgelesen, läuft das ganze ganz entspannt ab.
Unter dem iobroker Reiter Instanzen wählt man den Saugroboter Adapter aus, klickt auf Konfiguration und füllt die Felder aus:
Hat alles funktioniert, kann man unter „Objekte“ den Saugroboter mit einem simulierten Tastendruck bedienen.
Verknüpfung homee mit iobroker über Node Red herstellen
Nun kann man sich Node Red wenden um die Verbindung homee ↔ iobroker zu realisieren.
Um die Nötigen Wemo Nodes zu installieren, geht man in der Node Red Ansicht oben rechts auf das Menü → Manage Palette → install und installiert diese beiden Nodes:
In der linken Spalte befinden sich nun die entsprechenden Wemo Nodes.
Um den Saugroboter als Gerät mit den Funktionen „Ein“ und „Aus“ in homee anzulegen, wird der „wemo emu“ Node in das leere Feld gezogen und losgelassen. Anschließend kann man den Node mit einem Doppelklick analog wie im Bild konfigurieren.
Durch Klick oben rechts auf Deploy wird der Flow gespeichert und man kann den Schalter in homee unter den Wemo Schaltern hinzufügen.
Nun kann in homee der Schalter für den Saugroboter - allerdings bisher ohne Funktion - angesprochen werden und geschaltet werden und über Homeegrame angesteuert und als Bedingung benutzt werden.
Nun habe ich die folgenden Flows erstellt, damit das Einschalten des Schalters in homee zum Start des Reinigungsvorgangs führt:
Dazu werden noch drei iobroker Output Nodes benötigt, ein delay und ein Switch.
Nach einem Doppelklick auf die iobroker Output Nodes rechts neben Topic auf das Feld gehen, den entsprechenden Control Befehl des mihome Adapters auswählen und speichern.
Um es einfacher zu machen, kann man den Flow einfach in Node Red importieren, dafür den unteren Flow markieren, oben rechts in Node Red wieder auf das Menü gehen → Import → Clipboard und dort den Flow reinkopieren.
[
{
"id": "ebc3425b.5c28a8",
"type": "wemo-emulator",
"z": "74688e9c.1ad388",
"name": "Robbi",
"friendlyName": "Robbi",
"serial": "45",
"port": "49154",
"onTopic": "switch/Robbi",
"onPayload": "on",
"offTopic": "switch/Robbi",
"offPayload": "off",
"x": 110,
"y": 283,
"wires": [
[
"94d96bf1.9d92"
]
]
},
{
"id": "94d96bf1.9d92",
"type": "switch",
"z": "74688e9c.1ad388",
"name": "",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "on",
"vt": "str"
},
{
"t": "eq",
"v": "off",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 329,
"y": 232,
"wires": [
[
"bbe789d0.9b2008"
],
[
"52e9a75b.f03e3",
"acaf2f70.4b791"
]
]
},
{
"id": "bbe789d0.9b2008",
"type": "ioBroker out",
"z": "74688e9c.1ad388",
"name": "Start vacuum",
"topic": "mihome-vacuum.0.control.start",
"ack": "false",
"autoCreate": "true",
"x": 760,
"y": 179,
"wires": []
},
{
"id": "52e9a75b.f03e3",
"type": "ioBroker out",
"z": "74688e9c.1ad388",
"name": "Pause vacuum",
"topic": "mihome-vacuum.0.control.pause",
"ack": "false",
"autoCreate": "true",
"x": 773,
"y": 247,
"wires": []
},
{
"id": "acaf2f70.4b791",
"type": "delay",
"z": "74688e9c.1ad388",
"name": "",
"pauseType": "delay",
"timeout": "1",
"timeoutUnits": "seconds",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"x": 534,
"y": 306,
"wires": [
[
"ceb8cd9e.fb29c8"
]
]
},
{
"id": "ceb8cd9e.fb29c8",
"type": "ioBroker out",
"z": "74688e9c.1ad388",
"name": "Go home",
"topic": "mihome-vacuum.0.control.home",
"ack": "false",
"autoCreate": "true",
"x": 763,
"y": 313,
"wires": []
}
]
Man kann leider mit einem Home-Befehl den Reinigungsvorgang nicht beenden und den Saugroboter zum Laden schicken, deswegen muss erst ein Stop- und dann der Home-Befehl ausgeführt werden.
Um einen Rückkanal einzurichten, der automatisch den Schalter in homee auf „Aus“ stellt, wenn der Roboter fertig gesaugt hat, habe ich folgenden Flow erstellt:
[
{
"id": "18c1beaf.42f271",
"type": "wemo out",
"z": "74688e9c.1ad388",
"name": "Robbi",
"device": "b9a5e5ba.554b1",
"label": "Robbi",
"x": 888,
"y": 569,
"wires": []
},
{
"id": "e83b7dd6.168f88",
"type": "function",
"z": "74688e9c.1ad388",
"name": "Robi fertig",
"func": "if (msg.payload === `8`)\n{return {payload: `off` };}",
"outputs": 1,
"noerr": 0,
"x": 559,
"y": 564,
"wires": [
[
"18c1beaf.42f271"
]
]
},
{
"id": "a32c027.6e403",
"type": "ioBroker in",
"z": "74688e9c.1ad388",
"name": "Vacuum state",
"topic": "mihome-vacuum.0.info.state",
"payloadType": "value",
"onlyack": "",
"func": "rbe",
"gap": "",
"x": 294,
"y": 567,
"wires": [
[
"e83b7dd6.168f88"
]
]
},
{
"id": "b9a5e5ba.554b1",
"type": "wemo-dev",
"z": "",
"device": "45",
"name": "Robbi"
} ]
Nun kann man über homee den Saugroboter ansteuern und hat auch jederzeit in homee den aktuellen Status des Saugroboters, auch wenn man den manuell am Gerät zur Ladestation schickt.
Des weiteren kann der homee nun in Homeegramme eingesetzt werden.
So fährt bei mir der Robi wieder zur Ladestation zurück, wenn ich nach Hause komme und der Modus von Abwesend auf Anwesend wechselt. (Ich lasse ihn immer nur fahren wenn niemand Zuhause ist)
Die Weiteren Möglichkeiten dafür sind nahezu unendlich - wenn ihr wollt könnt ihr ja Vorschläge zur Verbesserung oder eure Use-Cases mal teilen!
Freue mich auf jeden Fall auf Feedback für mein erstes HowTo/Wiki.