Tutorial Teil 1: Puck.js als Sensor fürs Smarthome

Als Synonym für das Smarthome wird ja gerne auch das Wort „Homeautomation“ verwendet. Eine der Automatisierungen, die ich schon seit Längerem angedacht habe, ist ein klassisches Smarthome-Problem: Die Jalousien sollen bei starker Sonneneinstrahlung automatisch herunterfahren. Die Lösung dazu ist relativ simpel. Man nehme eine Licht- bzw. Helligkeitssensor, der ab einem bestimmten Schwellwert die Jalousien auslöst. Wie immer liegt der Teufel dabei im Detail. Vor allem, wenn ein nicht sehr gebräuchlicher Lichtsensor verwendet wird. Der Puck.js ist genau so ein Sensor – und weil es tatsächlich schwierig war, die notwendige Dokumentation für die Einbindung des schlauen Knopfes ausfindig zu machen, hier das Tutorial, wie der Puck.js in OpenHAB eingebunden werden kann.

Zuächst etwas Grundlegendes: Beim Puck.js handelt es sich um einen programmierbaren Bluetooth-Button. Es gäbe natürlich andere Lichtsensoren, die einfacher eingebunden werden könnten. Beispiele wären der Fibaro-Multisensor oder der Philips-Hue Bewegungsmelder, der ebenfalls einen Helligkeitssensor enthält. Für sogenannte Maker, die vor einer Lötsession nicht zurückschrecken, gibt es sogar sehr günstige Lichtsensoren für Arduino, Raspberry und Co. Die Wahl fiel bei mir auf den Puck.js, einfach weil ich die Kickstarter-Kampagne damals unterstützt habe und somit einen Puck zuhause rumliegen hatte (dementsprechend habe ich nicht eingesehen, zusätzliches Budget für einen neuen Sensor bereitszustellen). Im Gegensatz zu o.g. Sensoren muss der Puck aber komplett programmiert werden – und auch wenn ich nicht coden kann, dieser Herausforderung habe ich mich gestellt. So funktioniert’s:

Zunächst sollte der Puck.js in Betrieb genommen werden. Dieser Teil der Aufgabe ist zumindest noch recht gut dokumentiert. Für eine dauerhafte Bluetooth-Verbindung zum Puck nutze ich einen Raspberry 3. Auf diesem läuft gleichzeitig der MQTT-Server, mosquitto in meinem Fall. Mosquitto habe ich zeitgleich mit dem Espruino-Hub installiert. Letzterer sorgt für eine Verbindung zwischen MQTT und Bluetooth. Die Installation – hier beschrieben – lief reibungslos. Bis hierher also weder Probleme noch fehlende Dokumentation. Aber jetzt wird es schwierig.

Erste Herausforderung: Mit dem Espruino-Hub schikt Puck sozusagen ständig Statusmeldungen in den Äther – wenn man ihm das denn beibringt. Zunächst ist bleibt der Puck für den mosquitto-Server stumm. Also müssen wir ihm beibringen, etwas zu erzählen (und natürlich auch was er erzählen soll). Dafür gibt es im Espruino die schöne Funktion NRF.setAdvertising. Um Puck also zum Beispiel beizubringen, den Status des eingebauten Helligkeitsensors regelmäßige hinauszuposaunen programmieren wir Folgendes:

setInterval(function() {
NRF.setAdvertising({
0x2a04 : [Number(Puck.light())*0x64]
});
}, 3000);

Im WebIDE sieht das so aus: 

Sieht erstmal einfach aus, oder? Das Problem liegt im Detail. Besonders zu kämpfen hatte ich mit dem vom MQTT empfangenen Datenformat. Der Puck stellt nämlich den Helligkeitssensor als Wert zwischen 0 und 1 dar – auf mehrere Nachkommastellen genau. Um daraus jetzt eine Zahl zu basteln, die etwas einfacher lesbar ist, erfolgt die Multiplikation mit „0x64“ – das entspricht der Dezimalzahl 100, nur eben Hexadezimal dargestellt. So erhält OpenHAB quasi einen Prozentwert der Helligkeit. Ob das Ganze funktioniert könnt Ihr recht einfach testen. Ruft einfach http://Espruino-IP:1888/status auf, dort sollte (bei mir ganz am Ende) folgender Eintrag zu finden sein:

MA:C_:Ad:re:ss:e_ – Puck.js abcd (RSSI -73) 2a04 => [67]

Um diesen Status zu bekommen, müsst Ihr übrigens vorher im WebIDE die Verbindung zum Puck trennen – ansonsten schweigt er nämlich munter weiter. Ähnlich könnt Ihr natürlich verfahren, wenn Ihr den Temperatur- oder Luftfeuchtigkeitssensor des Pucks ansprechen wollt. Welche Funktion Ihr braucht, um die verschiedenen Sensoren zur Preisgabe Ihrer Daten zu bewegen lest Ihr übrigens auch hier.

Soviel zur Senderprogrammierung – der Puck schickt jetzt seine Daten regelmäßig an mosquitto und jeder MQTT-Client kann diese nun lesen. Im zweiten Teil des Tutorials beschreibe ich, wie Ihr diese Daten in OpenHAB einbinden könnt.

 

Patrick Boch

Patrick beschäftigt sich beruflich schon länger mit Sicherheit - allerdings für eine andere Zielgruppe. Privat sorgt er lieber für ein smartes - und sicheres - Zuhause.

Das könnte Dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen