Marlon Alagoda
Senior Developer (ehem.)
Endlich war es so weit, der erste 24h-Sprint seit meiner Zeit bei Senacor. Mit diesem Event hat man mich schon beim Bewerbungsgespräch gelockt. Neben dem doch manchmal stressigen Projektalltag ist 24h basteln an Smart Home Projekten eine willkommene Abwechslung. Nach dem ich mich im letzten Blog Beitrag schon damit beschäftigt habe einen Z-Wave Hardware Button mit meiner Musikanlage zu verbinden, möchte ich diesmal meine Wohnung dazu bringen mit mir „auf zu stehen“, sobald der Wecker läutet.
Z-Wave?
… ist ein Funkstandard, der darauf ausgelegt ist viele Geräte wie Lichtschalter, Relays, Heizungssteuerungen oder Sensoren auch über größere Distanzen miteinander kommunizieren zu lassen. Um einen möglichst großen Raum abdecken zu können wird ein Meshnetzwerk aufgebaut, das heißt jeder Sender ist gleichzeitig Empfänger. Außerdem gibt es Befehlsklassen, die einzelne Geräte unterstützen oder nicht unterstützen können. Für das Vorhaben „Wohnung weck mich“, habe ich eine Z-Wave Zwischensteckdose gekauft um die Stromzufuhr verschiedener Geräte über meinen Smart Home Server an- und abschalten zu können, welcher die Befehlsklasse „COMMAND_CLASS_SWITCH_MULTILEVEL“ unterstützt. Geräte, welche diese Befehlsklasse unterstützen, können Werte zwischen 0 und n entgegen nehmen, in diesem Fall lässt sich dadurch zum Beispiel ein Licht dimmen oder komplett an- und abschalten.
Wohnung weck mich – Der Plan
Ich möchte, dass gemeinsam mit meinem Wecker am (Android) Smartphone, Musik erklingt, diverse Lichter angehen und vor allem meine Handtuchheizung im Badezimmer angeht. Wer das für dekadent hält, ist zu 100% im Recht.
Damit das funktioniert sind mehrere Dinge notwendig:
- Das Smartphone muss ein entsprechendes Event beim Läuten des Weckers absetzen
- Der Z-Wave Server muss das Event empfangen können
- Der Z-Wave Server muss auf das Event reagieren können und Dinge tun (Licht, Handtuchheizung an, …)
Android Tasker
Auch wenn Tasker im Android Play Store eine eher spärliche Beschreibung hat („Komplette Automatisierung von Einstellungen zu SMS.“), lässt sich mit der App sehr vieles machen.
Ich horche in Tasker auf den Android Alarm, überprüfe ob ich zu Hause bin und setze gegebenefalls über das RESTasker Plugin einen HTTP Request mit Basic Authentication in Richtung meines Servers ab.
HTTP Inbound Modul
Auf meinem Raspberry mit Z-Wave Modul läuft die Open Source Software Z-Wave-Server von z-wave.me. Die Software stellt eine ganze Menge Module für das Kommunizieren mit Z-Wave Geräten, versenden von HTTP Requests, verknüpfen von Bedingungen wie Wetter und Zeit usw. zur Verfügung. Was die Software nicht kann ist auf eingehende HTTP Requests zu horchen und darauf Aktionen abzusetzen. Wie im letzten Blog Beitrag beschrieben, lassen sich neue Module aber relativ einfach entwickeln, weshalb ich während des 24h-Sprint kurzer Hand ein „HTTP Inbound“ Modul geschrieben habe.
Der in Javascript geschriebene und von der V8 Javascript Engine von Google interpretierte Code ist um ein paar wenige nicht-core Javascript Funktionen erweitert. Die zur Verfügung stehenden Methoden sind im Z-Way Dev Manual im Kapitel 3.6 beschrieben. Eine Funktionalität des Frameworks ist die Methode allowExternalAccess(handlerName). Zum Webserver, der auch das Web-Userinterface zur Verfügung stellt, kann man über diese Methoden neue Routen und entsprechende Callbacks, welche beim Aufruf der Route aufgerufen werden, hinzufügen. Angenehmer Nebeneffekt, wenn man die eingebauten Mechanismen verwendet und nicht selbst einen Webserver startet ist, dass man eine HTTP Baisc Authentication „gratis“ mitbekommt. Mein Modul stellt dem Nutzer beim Aktivieren des Moduls also ein Eingabefeld zum Benennen der anzulegenden Route zur Verfügung.
Mit dem String aus der Nutzereingabe und der allowExternalAccess(handlerName) Methode wird am Webserver eine Route angelegt und es wird ein virtuelles Device erstellt, welches jedes mal „feuert“, wenn die Route aufgerufen wird. Den Source Code von meinem Modul könnt ihr euch auf Github anschauen. Virtuelle Devices sind im User Interface vom Z-Way Server nicht von Hardwarebuttons oder Sensoren zu unterscheiden, wodurch man in anderen Modulen genau so auf diese reagieren kann, wie man auf das Drücken eines Buttons reagiert hätte. Auch zu virtuellen Devices findet ihr im letzten Blog Beitrag mehr.
Tadaa
Da das von mir bestellte Qualitätsprodukt aus China leider kaputt war, haben wir es fachgerecht verpackt und zurück geschickt.
Nachdem ich mir für viel zu viel Geld einen Ersatz beim Elektrofachhändler meines Vertrauens gekauft habe, mussten die Komponenten nur noch zu Ende verbunden werden.