oliverlorenz.com

[feed]  [twitter]  [mastodon]  [xing]  [linkedin]  [github]  [matrix] 

Make Your Lichtschalter great again

14. June 2016

In diesem Blog-Post geht es um mein erstes, im Produktiv-Betrieb befindliches Projekt. Die Deckenlichter meiner Wohnung zu schalten. Klingt einfach, ist es retrospektiv betrachtet auch; War aber doch mit einigen Iterationen und hart erkämpften Erkennissen gespickt.

Bisher lief meine Lichtsteuerung auf einem Raspberry Pi. Das hat sich schon immer falsch angefühlt, denn Hand aufs Herz: Wozu brauche ich ein Full-Stack-Linux um ein Funksignal zu senden? Kanonen und Spatzen und so ...

Seit ich bei Cybus arbeite, habe ich meine Developer-Fähigkeiten ein Stück Richtung Hardware übertragen können. Man muss dieser ganzen Maker- und Bastel-Szene zugute halten, dass sich da in den letzten Jahren wirklich viel getan hat. Die Hardware ist unglaublich günstig geworden und auch solche Hardware-Phobiker wie ich können mit Stack-Overflow & Co richtig coole Projekte umsetzen.

Genutze Hardware

Nun zur Umsetzung:

Proccessing Unit

In meinem neuen Setup nutze ich einen ESP8266 bzw. Dieser ist in meiner Variante (8€) relativ günstig und bringt WLAN gleich Out-Of-The-Box mit. Wer bock und den Skill hat, kann diesen auch nicht nur mit C programmieren, sondern auch mit LUA füttern. Preis/Leistung top, wie ich finde!

Lichtschalter

Ich lebe in einer Mietwohnung. Somit fallen größere Umbauten einfach aus. Aber: "Challange accepted!". Ich habe eine tolle Lösung gefunden.

Make your Lichtschalter great again

Die Lösung ist eine Lichschalter-Erweiterung von Intertechno. ITL-230. Dieses Gerät ist so klein, dass es in der Regel hinter den Lichtschalter passt. Das Besondere ist, dass der Lichschalter weiterhin normal funktioniert, zusätzlich reagiert er aber auch auf ein 433Mhz Signal.

Wenn ich die Betriebsanleitung richtig verstanden habe, dient der alt eingesessene Lichtschalter nun nur noch als Impulsgeber. Die Schaltung übernimmt die Box selbst; Ist somit aber "always on" und verbraucht somit ca. 1W. Aber: Halbwissen

Eine Einschränkung gibt es allerdings: Wer sein Heim schon auf LED umgestellt hat, ist leider mit den Geräten von Intertechno nicht gut beraten. Diese funktionieren leider nur bei klassischen Glühbiren oder Halogen-Lampen.

Achtung: Ihr arbeitet hier mit 230V Netzspannung. Ihr wisst alle, dass das gefährlich sein kann, also immer schön die Sicherung rausnehmen bevor ihr irgendwas am Schalter oder der genannten Schalterbox tut.

433Mhz Sender

Der 433Mhz Sender ist nichts besonders. Ich habe lediglich darauf geachtet, dass man eine externe Antenne anschließen kann und dieser unter 3,3V betrieben werden kann.

Verkabelung

Des Informatikers grauen! Etwas physisches tun, bäh! ;) Retrospektiv betrachtet hat es nur etwas interensivers Googlen und Scheuklappenarmen Fokus auf das Projekt gekostet um der Elektronik den Schrecken zu nehmen. Heutzutage gibt es so tolle Bauteile, die auch einfache aber technisch interessierte Menschen in die Lage versetzen, mehr oder minder komplexe Projekte umzusetzen.

Die Verkabelung ist easy. Ich habe euch hier den Aufbau abgebildet. Die LED ist optional. Ich habe sie mit reingenommen damit ich prüfen kann, ob mein Signal auch am entsprechenden PIN ausgegeben wird. Diese könnt ihr dann auch ganz einfach wieder entfernen.

schaltplan mit fritzing

Die Software

Die Software hat drei verschiedene Aufgaben:

  • Verbinden zum WLAN
  • Schnittstelle per MQTT bereitstellen
  • Senden des 433Mhz-Signals

Arduino-Software ist klassischerweise in zwei verschiedene Bereiche aufgeteilt. Das sollte man zumindest mal gehört haben.

Die Setup-Funktion übernimmt das Bootstrapping. Heißt: Dieser Code-Block wird nur einmalig ausgeführt. Hier empfielt es sich den initialen WLAN-Connect und den Connect zum MQTT-Broker zu machen, sowie die Initialisierung der RCSwitch-Library die das Signal für unseren 433Mhz Sender erzeugt.

Im Loop-Bereich hinterlegt man die Operationen die permanent auszuführen sind. Wie der Name schon sagt. In unserem Fall ist hier aber gar nicht viel zu tun. Falls der MQTT-Client die Verbindung verliert, reconnected er auch wieder.

Den Code könnt ihr so übernehmen. Lediglich eure WLAN-Zugangsdaten und die Verbindungsdaten zum MQTT-Broker müsst ihr anpassen.

Als MQTT-Broker kann ich Mosquitto empfehlen.

Inbetriebnahme

Schritt 1: Software überspielen

Zum überspielen der Software auf den ESP habe ich die Arduino IDE verwendet. Meine Konfiguration sah folgendermaßen aus:

ArduinoIDE Konfiguration

Sollte es unklarheiten im Code geben, würde ich mich freuen wenn ihr mir ein Issue auf Github stellt oder einfach einen Kommentar unter dem Post hinterlasst.

Habt ihr die Software überspielt, solltet ihr den Serial-Monitor öffnen. Dort ist vor allem wichtig zu erfahren auf welchen Topic der ESP subscribed. Das Format sieht ähnlich diesem aus:

ESP-XX-XX-XX-XX-XX-XX/a/1/1/on

Der erste Teil "ESP-XX-XX-XX-XX-XX-XX" soll einen eindeutigen Identifier darstellen, der auf der MAC-Adresse basiert. "a/1/1" sind die Geräte-Parameter für die Funksteckdose. Genaueres dazu könnt ihr hier erfahren. "/on" bzw. "/off" ist, glaube ich, selbsterklärend.

Schritt 2: Funktioniert alles?

Zum senden der MQTT-Messages nutze ich im weiteren Verlauf mosquitto_pub.

Sendet ihr nun eine Message an den entsprechenden Topic, sollte der ESP reagieren und die LED müsste im entsprechend kodierten Takt blinken. Hinweis: Das ganze führt noch nicht dazu, dass ihr das Licht schaltet. Es geht hier erstmal darum zu validieren, ob die Verkabelung richtig ist und die Software richtig funktioniert. Sollte alles so reagieren wie beschrieben, seid ihr auf dem richtigen Weg! :)

Schritt 3: ESP mit Lichtschalter koppeln

Versetzt nun die kleine Box hinter eurem Lichtschalter in den Lern-Modus. Dazu den kleinen Knopf drücken. Über den Zeitraum wo die LED blinkt habt ihr dann Zeit ein On-Signal über MQTT senden:

  mosquitto_pub -h "MQTT-BROKER-ADDRESS" -t "ESP-XX-XX-XX-XX-XX-XX/a/1/1/on" -m "1"

-m "1" solltet ihr immer mitsenden, weil einige Broker die Message sonst ignorieren. Der Inhalt ist aber völlig irrelevant.

Sollte alles funktioniert haben, hört die LED in diesem Moment auf zu blinken und das Licht geht an. Zum auschalten des Lichts könnte der Befehl wie folgt aussehen:

  mosquitto_pub -h "MQTT-BROKER-ADDRESS" -t "ESP-XX-XX-XX-XX-XX-XX/a/1/1/off" -m "0"

Fazit

Resultat Home-Automation ist auch an solchen kleinen Komponenten ein Endlos-Thema. Nicht weil man nie fertig wird, sondern weil man immer wieder Verbesserungspotenzial findet.

Ich freue mich sehr, dass ich diesen Schritt getan habe. Die Entkopplung über MQTT bringt den Vorteil, dass man die Processing-Unit universell einsetzen kann. Außerdem ist sie ohne Probleme austauschbar.

Die Komponenten sind sehr günstig, einfach zu bekommen, die Soft- und Hardware ist Open-Source und nun mit diesem Blog-Post auch in ihrem Zusammenspiel gut dokumentiert.

Zum ersten mal kann ich sagen, dass das Projekt einen Stand erreicht hat, der mich ruhig schlafen lässt. Nun freue ich mich auf eure Kommentare und hoffe von euch zu hören, dass ihr mit diesem Setup eurem Smart-Home vielleicht ein bisschen näher gekommen seid.