Raspberry Pi – Steuern von Funksteckdosen und Sensoren mit pilight

Die Anwendung pilight bringt alles mit was wir benötigen um Funksteckdosen, Sensoren, Wetterstationen und sogar Webcams über den Raspberry Pi bzw. das Smart Phone oder Tablet zu steuern.

Update: Neuerer Artikel zur Steuerung von Funksteckdosen mit PiLight.

pilight Funktionen:

  • steuern von 433Mhz Funksteckdosen, Dimmern, Jalousieschalter, etc verschiedener Hersteller
  • Möglichkeit zur Erweiterung auf 868Mhz oder andere Frequenzen
  • Auslesen und Darstellen von 1-wire Sensoren und Funkwetterstationen sowie vielen anderen Dingen
  • hochperformant und ressourcensparend (natives C)
  • integrierte und für mobile Geräte entwickelte Weboberfläche (webgui)
  • Unmengen an Protokollen und damit unterstützten Geräten + seit neustem auch Programme starten und beenden
  • Adhoc Modus, um die Reichweite zu erhöhen
  • API um eigene Apps zu entwickeln

Inhaltsverzeichnis

Hardware

Neben dem Raspberry Pi mit Zubehör benötigen wir  zur Steuerung von Geräten mit 433Mhz einen Sender und einen Receiver. Es existieren viele verschiedene Ausführungen und diese unterscheiden sich in der Qualität. Achtet darauf kompatible und Gute Sender / Empfänger zu verwenden. Die Superheterodyne werden von vielen empfohlen. Für mine Tests habe ich erstmal die günstige Variante verwendet.

Für eine Liste siehe unter anderem http://wiki.pilight.org/doku.php/protocols und für die unterstützten Geräte http://wiki.pilight.org/doku.php/devices

Sensoren mit dem Raspberry Pi verbinden

Schalte den RasPi aus (sudo shutdown) und trenne ihn vom Strom. Schließe dann den Sender und den Receiver an, wie es auf dem Bild gezeigt

  • Data Sender an GPIO17 (wiringPi #0)
  • Data Receiver an GPIO18 (wiringPi #1)
pinout

Installation von pilight

Wir haben immer die Wahl zwischen der aktuellsten Development Version und der letzten Stable von pilight. Da die Development Versionen meistens stabil sind werde ich diese verwenden. Hierzu fügen wir als erstes die offiziellen Quellen von pilight hinzu. Dazu öffnen und editieren wir die Datei sources.list

Wir fügen die folgenden Zeilen am Ende hinzu und speichern die Datei mit Strg+X und Y

Da pilight eine signierte Quelle nutzt, müssen wir den Schlüssel für diese hinzufügen

Jetzt stellen wir sicher, dass der RPI auf dem aktuellsten Stand ist (upgrade), vorher aktualisieren wir jedoch die Paketliste (update)

Jetzt können wir uns entscheiden welche Version wir installieren möchten, hierzu lassen wir uns die verfügbaren Versionen der Software anzeigen

Die aktuellste Version steht immer oben. Da wir die Development Version installieren möchten geben wir folgendes ein. Wobei pilight=5.0.4-g56831a6 natürlich mit der im Moment aktuellsten Version ersetzt wird

Die Installation ist hiermit abgeschlossen und wir können mit der Konfiguration beginnen.

Einstellungen anpassen

Nachdem das Paket installiert ist müssen einige Einstellungen angepasst werden. Die Datei, die diese Einstellungen steuert, liegt unter /etc/pilight/settings.json

Der Inhalt der Konfigurationsdatei sieht wie folgt aus:

Die meisten Einstellungen sind selbsterklärend, wer die Beschreibung der Parameter nachlesen möchte findet diese im Wiki. Mit der Einstellung „config-file“ kann ein Pfad für die Konfigurationsdatei festgelegt werden, in diese Datei tragt ihr später Eure Räume und Steckdosen, sowie alle anderen Geräte die ihr steuern möchtet ein. Ich speichere meine Config im erstmal Home und habe daher folgendes eingetragen „/home/pi/pilight-config.json“.

Damit pilight starten kann muss die Datei Konfigurationsdatei natürlich vorhanden sein. Daher erzeugen wir diese via nano und fügen erstmal nur  zwei geschweifte Klammern ohne Inhalt ein (die Anpassung kommt später)

Zusätzlich habe ich in der Settings.json noch den Webserver Port auf 80 geändert um nicht immer den Port beim Öffnen via Browser angeben zu müssen (auf Port 80 sollte kein anderer Webserver laufen).

Die Datei /etc/pilight/hardware.json bestimmt, auf welchen Pins Ihr eure Hardware verbunden habt. Es wird hier und im gesamten Projekt die wiringPi Deklarierung verwendet!

Erste Schritte mit pilight

pilight kommt mit einer Reihe an Grundbefehlen:

  • pilight-receive
    Gibt über den Empfänger erhaltene Signale als JSON-Objekte aus
  • pilight-debug
    Gibt den RAW-Code von empfangenen Befehlen aus, um basierend darauf neue Protokolle zu entwickeln, oder Probleme zu finden
  • pilight-learn
    Ähnlich zu pilight-debug, aber versucht soviele Informationen wie möglich von einer Fernbedienung zu debuggen. (Funktioniert derzeit nur mit An/Aus-Geräten, als keine Dimmer)
  • pilight-send
    Sendet Befehle zu dem pilight-daemon, der diese wiederum als Signal versendet. Näheres dazu weiter unten.
  • pilight-control
    Ähnlich zu pilight-send. Es nutzt aber die in der Raumkonfiguration abgelegten Bezeichnungen für die Räume. Näheres weiter unten.
  • pilight-raw
    zeigt alle Signale an, die vom Receiver empfangen werden. Hier sieht man auch gut, ob man ein starkes „Rauschen“ in der Umgebung hat, oder nicht. Optimal wäre es, wenn man nur etwas sehen würde, sollte man ein Signal mittels Fernbedienung senden
  • pilight-daemon
    Der eigentliche Dienst, der dafür sorgt, dass die Befehle in Signale umgesetzt und an die Geräte gesendet werden.
  • pilight-flash
    Mit diesem Programm kann der zusätzliche Bandpassfilter aktualisiert werden, sollte die automatische Aktualisierung nicht geklappt haben.Das betrifft natürlich nur die, die einen Bandpassfilter mit pilight nutzen.Versuchen wir nun einmal einen Befehl zu senden. Ich nehme als Beispiel einfach eine meiner Mumbi-Funksteckdosen.
  • pilight-uuid
    Gibt eine ID des aktuellen Systems aus, wird für vernetzte Installationen benötigt

Um die Software verwenden zu können müssen wir als erstes den pilight Dienst starten

Anschließend stellen wir die DIP-Schalter der Funksteckdose auf unseren Wunsch ein. Ich habe diese beispielsweise auf den Systemcode 11001 und den Gerätecode 00100 eingestellt (wobei 1=On und 0=Off ist). Eine Beschreibung wie das genau funktioniert und was der Haus und der Geräte Code ist gibt es in diesem Beitrag.

Diesen Binärcode rechnen wir nun in für uns verständliche Dezimalzahlen um. Achten darauf das die Reihenfolge invertiert ist, 11001 muss also als 10011 in das dezimale System umgerechnet werden. Wer nicht von Binär nach Dezimal umrechnen kann verwendet am besten diesen Online-Rechner.

Folglich sind unsere Codes in dezimal:

Systemcode: 19
Gerätecode: 4

Wir können die Steckdose nun also mit folgendem Befehl anschalten (die Ansteuerung erfolgt über die Nummer).

Für das Ausschalten verwenden wir anstatt dem Parameter „-t“ den Parameter „-f“:

Der Parameter -p definiert das verwendete Protokoll, in diesem Fall das mumbi-Protokoll. Der Systemcode ist hinter -s und der Gerätecode hinter -u jeweils in Dezimalschreibweise. Es existiert eine große Anzahl an unterstützten Protokollen und alle haben natürlich etwas andere Parameter und Wertebereiche (Details siehe unten).

Wir können natürlich auch pilight-receive nutzen, um den Code einer evtl. in eurem Set enthaltenen Fernbedienung auszulesen und dann zu verwenden

Konfiguration

Da wir nun grundsätzlich Befehle senden und auch empfangen können erstellen wir eine Konfiguration um verschiedene Geräte zu steuern.
Erstellt nun eine leere Config-Datei an dem Ort, den ihr in der settings.json definiert habt. In meinem Fall wäre das also /home/pi/pilight-config.json.
Vorher muss aber der pilight-Service gestoppt werden, da die Config-Datei sonst überschrieben wird. Ein Stoppen des Dienstes ist immer notwendig wenn ihr die Konfiguration verändern wollt

Öffnet eure Config-Datei Datei nun mit nano und beginnt ein Beispiel einzutragen.

Erläuterungen zu dem Beispielcode folgen danach:

Ich denke, dass es offensichtlich ist, wie die Struktur der Datei auszusehen hat, eine genaue Erläuterung des JSON-Formats gibts beim W3C. Man sieht gut, dass in dieser Konfiguration verschiedene Protokolle verwendet werden. Außerdem können jedem Gerät verschiedene Optionen zugeordnet werden. gui-readonly gibt beispielsweise an, ob du dieses Gerät in der Webgui lediglich angezeigt bekommen willst, ohne es zu schalten.

Speichert diese Datei nun ab und starte den pilight-Service erneut:

Ihr könnt nun auch pilight-control verwenden, um eure Steckdosen damit zu steuern:

So schaltet Ihr beispielsweise das erste Gerät in eurer Config an. Ruft nun das Webinterface von pilight auf mit den Daten ihr in der settings.json vergeben habt. In meinem Fall ist es wer einen anderen Port als 80 vergeben hat muss die Seite wie folgt aufrufen http://192.168.178.33:<Port> Alternativ kann in Heimnetzwerken mit FritzBox anstelle der IP-Adresse des RasPi auch dessen Hostnamen verwendet werden. Also zum Beispiel http://raspberrypi:<Port>

In eurem Browser sollte nun die WebGui erscheinen, falls ein Fehler angezeigt wird validiert den Inhalt eurer Konfigurationsdatei am Besten über den JSON Syntax Validator.

(Temperatur) Sensoren anbinden

In diesem Beispiel wird ein DS18B20 Temperatursensor mit 4,7k Widerstand und 3,3V Spannung für kurze Kabellängen zwischen Sensor und RPi verwendet.

w1therm2

Hierbei spielt besonders das Laden der Kernel-Module für die Sensoren eine wichtige Rolle. Diese müssen um mit dem Sensor messen zu können bei jedem Start des RasPi geladen werden.

Fügt am ende der Datei folgende Zeilen hinzu. Wer die Module nur einmalig laden möchte kann das via „sudo modprobe <modul-name>“

Um die Module zu aktivieren muss der RasPi einmal neu gestartet werden. Die Module sind nun geladen und der angeschlossene Sensor (in diesem Fall ein DS18B20) sollte erkannt werden. Um das zu prüfen, führen wir den folgenden Befehl aus und erhalten die Sensor ID

Hier wurde ein Sensor erkannt (28-00000530ed24). Jeder Sensor hat eine einmale ID, mit der ausgelesen werden kann. Diese sieht bei euch dann anders aus und wird in der pilight Konfiguration benötigt, notiert sie euch am Bensten.

Um zu testen, ob der Sensor auch funktioniert, lesen wir den Wert aus (ersetzt die ID mit eurer)

In der letzten Zeile steht nun t=19312, das entspricht einer Temperatur von 19,312 Grad.

Um den Sensor nun in der WebGui verwenden zu können passen wir unsere Config-Datei an. Wir fügen ein weiteres Gerät zu einem Raum unserer Wahl hinzu, nachdem wir den pilight-Service gestoppt haben (passt eure ID an)

Wie ihr seht, wird die „28-“ bei der ID weggelassen, da dies durch das Protokoll ds18b20 bereits hinzugefügt wird. Nachdem wir die Datei gespeichert haben und den pilight-Service neu gestartet haben, können wir den Wert nun in der WebGui auslesen.

Updates

Das updaten der Development Version ist denkbar einfach. Zuerst stoppen wir den pilight Dienst und führen ein update bzw. upgrade durch und bestätigen evtl. vorhandene Sicherheitsabfragen

Da die Konfigurationsdateien nach jedem Update mit den Standardwerten überschrieben werden müssen wir das Backup für die hardware.json und die settings.json wiederherstellen, das wird automatisch während des Updates erstellt. Davor muss noch der pilight Dienst gestoppt werden

Nun können wir den Dienst wieder starten

Sollte pilight nach dem Update nicht mehr starten, schaut auf GitHub, ob irgendwelche Änderung der Synthax durchgeführt wurden und passt eure Dateien dementsprechend an.

Beispiel Konfigurationen

Webcam-Protokoll

Ermöglicht das Anzeigen eines Webcambildes

Weitere Parameter: gui-image-width, gui-image-height

DHT22/DHT11

Relay

Openweathermap

Uhrzeit und Datum

Unterstützte Geräte

  • Elro
  • Intertechno
  • Mumbi
  • Kaku
  • DI-O
  • Conrad
  • und weitere

Wichtige Links

Vielen Dank an icedearth!