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.
- 433Mhz receiver module 433MHZ Superregeneration Wireless Transmitter Module Burglar Alarm
- 433MHz Superheterodyn
e RF Link kits 3400 ARM / MCU Transmitter and Reveiver
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)
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
1 |
sudo nano /etc/apt/sources.list |
Wir fügen die folgenden Zeilen am Ende hinzu und speichern die Datei mit Strg+X und Y
1 2 3 |
deb http://apt.pilight.org/ stable main deb http://apt.pilight.org/ development main deb http://apt.pilight.org/ nightly main |
Da pilight eine signierte Quelle nutzt, müssen wir den Schlüssel für diese hinzufügen
1 |
wget -O - http://apt.pilight.org/pilight.key | sudo apt-key add - |
Jetzt stellen wir sicher, dass der RPI auf dem aktuellsten Stand ist (upgrade), vorher aktualisieren wir jedoch die Paketliste (update)
1 2 |
sudo apt-get update sudo apt-get upgrade -y |
Jetzt können wir uns entscheiden welche Version wir installieren möchten, hierzu lassen wir uns die verfügbaren Versionen der Software anzeigen
1 |
sudo apt-cache madison pilight |
1 2 3 4 5 6 7 |
pilight | 5.0.4-g56831a6 | http://apt.pilight.org/ nightly/main armhf Packages pilight | 5.0 | http://apt.pilight.org/ development/main armhf Packages pilight | 4.0 | http://apt.pilight.org/ stable/main armhf Packages pilight | 3.0 | http://apt.pilight.org/ stable/main armhf Packages pilight | 2.1 | http://apt.pilight.org/ stable/main armhf Packages pilight | 2.0 | http://apt.pilight.org/ stable/main armhf Packages pilight | 1.0 | http://apt.pilight.org/ stable/main armhf Packages |
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
1 |
sudo apt-get install pilight=XXXXXXXXXX |
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
1 |
sudo nano /etc/pilight/settings.json |
Der Inhalt der Konfigurationsdatei sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "log-level": 4, "pid-file": "/var/run/pilight.pid", "config-file": "/home/pi/pilight-config.json", "hardware-file": "/etc/pilight/hardware.json", "log-file": "/var/log/pilight.log", "send-repeats": 10, "receive-repeats": 1, "webserver-enable": 1, "webserver-root": "/usr/local/share/pilight/", "webserver-port": 80, "webserver-cache": 1, "whitelist": "", "update-check": 1, "firmware-update": 0 } |
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)
1 |
nano /home/pi/pilight-config.json |
1 2 |
{ } |
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
1 |
sudo service pilight start |
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).
1 |
pilight-send -p mumbi -s 19 -u 4 -t |
Für das Ausschalten verwenden wir anstatt dem Parameter „-t“ den Parameter „-f“:
1 |
pilight-send -p mumbi -s 19 -u 4 -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
1 2 3 4 5 6 7 8 9 10 11 |
{ "code": { "systemcode": 19, "unitcode": 4, "state": "on" }, "origin": "receiver", "protocol": "silvercrest", "uuid": "0000-00-00-32-cf5528", "repeats": 3 } |
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
1 |
sudo service pilight stop |
Öffnet eure Config-Datei Datei nun mit nano und beginnt ein Beispiel einzutragen.
1 |
sudo nano /home/pi/pilight-config.json |
Erläuterungen zu dem Beispielcode folgen danach:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
{ "room1": { "name": "Raum1", "switch1": { "name": "Schalter 1", "protocol": [ "mumbi" ], "id": [{ "systemcode": 27, "unitcode": 2 }], "state": "off", "gui-readonly": 0 }, "switch2": { "name": "Schalter 2", "protocol": [ "intertechno_old" ], "id": [{ "unit": 2, "id": 1 }], "state": "off", "gui-readonly": 0 } }, "room2": { "name": "Raum 2", "RPiTemperatur": { "name": "RPi-Temperatur", "protocol": [ "rpi_temp" ], "id": [{ "id": 1 }], "temperature": 43333, "gui-show-temperature": 1, "poll-interval": 60, "gui-decimals": 3 }, "Sunset": { "name": "Sonne", "protocol": [ "sunriseset" ], "id": [{ "longitude": "52.00000000", "latitude": "7.00000" }], "sunrise": 712, "sunset": 1855, "sun": "set" } } } |
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:
1 |
sudo service pilight start |
Ihr könnt nun auch pilight-control verwenden, um eure Steckdosen damit zu steuern:
1 |
pilight-control -l room1 -d switch1 -s on |
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.
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.
1 |
sudo nano /etc/modules |
Fügt am ende der Datei folgende Zeilen hinzu. Wer die Module nur einmalig laden möchte kann das via „sudo modprobe <modul-name>“
1 2 |
w1-gpio w1-therm |
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
1 2 3 |
sudo ls /sys/bus/w1/devices/ 28-00000530ed24 w1_bus_master1 |
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)
1 2 3 4 |
sudo cat /sys/bus/w1/devices/28-00000530ed24/w1_slave 35 01 4b 46 7f ff 0b 10 31 : crc=31 YES 35 01 4b 46 7f ff 0b 10 31 t=19312 |
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)
1 |
sudo nano /home/pi/pilight-config.json |
1 2 3 4 5 6 7 8 9 10 11 |
"DS18B20": { "name": "Temp DS18B20", "protocol": [ "ds18b20" ], "id": [{ "id": "00000530ed24" }], "temperature": 1, "gui-show-temperature": 1, "poll-interval": 60, "gui-decimals": 2 } |
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
1 2 |
sudo service pilight stop sudo apt-get update && sudo apt-get upgrade |
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
1 2 3 4 5 |
sudo service pilight stop sudo cp /etc/pilight/hardware.json.bak /etc/pilight/hardware.json sudo cp /etc/pilight/settings.json.bak /etc/pilight/settings.json |
Nun können wir den Dienst wieder starten
1 |
sudo service pilight start |
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
1 2 3 4 5 6 7 8 9 |
"Webcam": { "name": "Webcam", "protocol": [ "generic_webcam" ], "id": [{ "url": "http://www.dieurl.de/imagenes/meteosat/sp/d2-col.jpg" }], "poll-interval": 1, "gui-show-webcam": 1 } |
Weitere Parameter: gui-image-width, gui-image-height
DHT22/DHT11
1 2 3 4 5 6 7 8 9 10 11 12 13 |
"DHT22": { "name": "Temp DHT22", "protocol": [ "dht22" ], "id": [{ "gpio": 2 }], "humidity": 1, "temperature": 1, "gui-show-temperature": 1, "gui-show-humidity": 1, "poll-interval": 60, "gui-decimals": 2 }, |
Relay
1 2 3 4 5 6 7 8 |
"pcstart": { "name": "GPIO AnAus", "protocol": [ "relay" ], "id": [{ "gpio": 17 }], "state": "off" }, |
Openweathermap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
"Wetter": { "name": "Wetter", "protocol": [ "openweathermap" ], "id": [{ "location": "berlin", "country": "de" }], "humidity": 1, "temperature": 1, "poll-interval": 600, "sunrise": 720, "sunset": 2003, "update": 1, "sun": "set", "gui-show-update": 1, "gui-show-sunriseset": 1, "gui-show-humidity": 1, "gui-show-temperature": 1 } |
Uhrzeit und Datum
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
"Datum": { "name": "Datum", "protocol": [ "datetime" ], "id": [{ "longitude": "52.0000000", "latitude": "7.00000", "ntpserver": "" }], "year": 2014, "month": 3, "day": 26, "hour": 23, "minute": 10, "second": 36 } |
Unterstützte Geräte
- Elro
- Intertechno
- Mumbi
- Kaku
- DI-O
- Conrad
- und weitere
Wichtige Links
- pilight Projektseite: http://www.pilight.org
- Github: https://github.com/pilight/pilight/tree/development
- Wiki: http://wiki.pilight.org/doku.php
- Forum: http://forum.pilight.org/
- Informationen zur Dev-Version: http://wiki.pilight.org/doku.php/changes_features_fixes
- JSON-Debugger: http://jsonlint.com/
Vielen Dank an icedearth!