Donnerstag, Juli 13 2017

openHAB2 und der Broadlink RM Mini 3 (Black Bean)

Nachdem ich nun schon einige Zeit erfolgreich und zufrieden die Smarthome Software openHAB verwende möchte ich gern auch ein paar meiner Lösungen vorstellen. OpenHAB steht für open Home Automation Bus und ist quasi das schweizer Taschenmesser das Smarthomebereichs, welches so ziemlich jedes namhafte Lösung steuern und integrieren kann. Nur sehr wenige geschlossene proprietäre Systeme funktionieren nicht mit OpenHAB, sind aber in der Praxis auch eher nicht relevant. Gefühlt lässt sich ziemlich alles steuern, was in irgendeiner Form einen Stecker hat und falls nicht, gibt es immernoch ein paar nette Workarounds, die ähnlich gut funktionieren. Eine Lösung möchte ich hierzu gern vorstellen: Steuerung von IR Geräten mit der Broadlink RM 3 BlackBean.

Hintergrund hierzu war, dass ich mithilfe meines SmartHomes meinen Roomba 780 fernbedienen bzw. starten und stoppen können wollte. Ausserdem unterstützt mein LG Fernseher nicht das EINschalten via Ethernet, lediglich das AUS- und umschalten ist damit möglich. Die Broadlink RM3 Black Bean ist im Prinzip eine Wifi gesteuerte Universalfernbedienung. Mithilfe einer App kann diese ins WLAN gebracht werden und auch Geräte aus einer kleinen Datenbank mit dem RM3 nutzbar gemacht werden. Leider bietet weder der RM3, noch die App eine offizielle API Funktion oder ähnliches zur Steuerung mit z.B. openHAB. Glücklichweise gibt es findige Developer bzw. Analysten, welche die Netzwerkpakete des RM3 analysiert und die Funktionen mittels einer kleinen Pythonanwendung nachgebildet haben. (Anleitung hier: https://github.com/davorf/BlackBeanControl )

Einmal mit der Grundkonfiguration versehen, können jetzt einzelne Tasten einer IR Fernbedienung "gelernt" werden. Hierbei hilft der folgende Befehl:

python BlackBeanControl.py -c Roomba_Clean

Sofern sich in der Datei BlackBeanControl.ini schon ein Befehl mit dem Namen "Roomba_Clean" befindet, wird der entsprechende IR Code ausgesendet. Falls nicht, beginnt die Lernphase. Hierbei wird die Fernbedienung an die BlackBean gehalten und die gewünschte Taste gedrückt, dann sollte eine Meldung erscheinen, dass der Code erfolgreich erkannt wurde. Nach Ablauf des Timeout kann der Inhalt der erkannten Taste in der .ini Datei eingesehen werden. Im Falle der Roomba Clean Taste, sieht das so aus:

Roomba_Clean = 26000e015a211f5b1f5a1f5b5a1e1d5d1f5b1e0002855a211c5e1c5d1c5d58211c5e1 f5a1c0002875a221c5d1c5e1b5c5b201f5a1d5d1b0002885a211c5e1c5d1c5d5a1f1f5b1e5c1b000 2875b211c5d1d5d1b5e5a1f1f5b1c5d1e0002865c1e1c5e1c5e1b5d5b1e205a1f5b1b0002885c1f1 c5e1c5d1c5d5a1f1f5b1e5b1c00028859211d5d1f5b1e5b58211f5a1f5b1e0002855b201c5e1c5d1 c5d59201f5b1e5c1d0002865a211c5d1e5c1d5c59201e5b1e5c1c00028859211c5e1e5c1b5d5a1f2 05a1f5b1e0002855c1f1c5d1f5b1c5d5a1f205a1f5a1d0002875c1e1d5d1f5b1b5e57221f5a1c5e1 f0002845b201c5e1e5b1c5d59201f5b1d5d1c0002875a211c5d1c5e1b5e5a1f1e5b1e5c1e000d050 0000000000000000000

Nun kann der Roomba über die erneute Eingabe des obigen Befehls gestartet werden und zwar durch das IR Signal der BlackBean. Prinzipiell könnte man nun in OpenHAB ein Script schreiben, welches diesen Befehl ausführt. In meinem Fall hat die Ausführung externer Scripte leider nie funktioniert - warum auch immer. Daher habe ich mir selbst noch ein "Steuerungslayer" mit PHP gebaut. Per HTTP-GET wird das zu schaltende Element an ein PHP Script übergeben, welches dann direkt per shell_exec den Schaltbefehl auf der Console ausführt:

if(strpos($nCommand,"roombaon")!==false){ shell_exec('sudo -u malte /usr/bin/python /opt/BlackBeanControl-master/BlackBeanControl.py -c Roomba_Clean'); }

In openHAB wird das Script dann per HTTP Binding aufgerufen. Die Itemdefinition sieht dann z.B. so aus:

Switch roomba "Roomba" (EGW,Schalter) "Switchable" {http=">ON:GET:http://<server_ip>/BB_... >OFF:GET:http://<server_ip>/BB..."}

Wer mit der Java Syntax von openHAB gut zurecht kommt und bei dem die Scripte aus Openhab heraus funktionieren, braucht diese Krücke vielleicht nicht... für mich ist diese Lösung OK :)