pilight - 433Mhz Funksteckdosen, Funkdimmer und mehr schalten und darstellen

  • Ich habe mir gedacht, dass ich mal ein Tutorial für das pilight-Projekt erstelle. Ich selbst benutze die Software schon sehr lange unter Wheezy Raspbian und bin sehr zufrieden - zudem werden ständig neue Funktionen ergänzt.
    Da ich das Projekt selbst in der Development-Version nutze und diese meiner Meinung nach sehr stabil ist, möchte ich das Tutorial auch darauf aufbauen.



    Das folgende kann pilight:
    + steuern von 433Mhz Funksteckdosen, Dimmern, Jalousieschalter, etc verschiedener Hersteller
    + Möglichkeit zur Erweiterung auf 868Mhz oder andere Frequenzen (das Projekt ist modular aufgebaut)
    + Auslesen und Darstellen von 1wire-Sensoren und Funkwetterstationen und vielen anderen Dingen
    + sehr geringe Auslastung der CPU (<5% beim Ausführen von Befehlen), da in C geschrieben
    + integrierte 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
    + Möglichkeit einen bandpassfilter zu installieren, um das Rauschen zu reduzieren
    + gute API, um Apps zu entwickeln (es existieren bereits einige)
    + und vieles mehr


    Vorab gleich mal die Warnung: Ich bin kein Programmierer und eigentlich eher der Nutzer. Wenn jemand also Verbesserungsvorschläge hat, immer her damit ;)


    Das Projekt wurde (soweit ich weiß) von curlymo ins Leben gerufen und wird laufend von der Community erweitert und verbessert.
    Aber fangen wir doch einfach an ;)


    Inhalt:
    1) Die Hardware
    2) Hardware mit dem Raspberry Pi verbinden
    3) Installation
    4) Einstellungen anpassen
    5) Erste Versuche und Grundbefehle
    6) Raumkonfiguration
    7) 1wire Sensoren
    8) Updates
    9) Beispiel Config Einträge (in work)
    ___________________________________________________________________________


    1) Die Hardware
    Benötigt wird ein 433Mhz Sender und ein Receiver. Es existieren viele verschiedene Ausführungen und diese unterscheiden sich in der Qualität. Während die Sender eigentlich alle gleich gut sind, gibt es bei den Receivern deutliche Unterschiede!
    Ich selbst verwende pilight mit der günstigsten Hardware (ebay: 300951544840; Habe diesen Artikel nur auf die schnelle eingefügt. Es geht sicherlich noch günstiger). Das beste Ergebnis wird aber wohl mit dem Superheterodyne Set erzielt (ebay: 281169560721; ebenfalls geht's hier wohl günstiger). Für meine Zwecke reicht das günstige Set aber allemal aus.
    ___________________________________________________________________________


    2) Hardware mit dem Raspberry Pi verbinden
    - Fahre den RPi herunter und trenne ihn vom Strom.
    - schließe den Sender und den Receiver an, wie es auf dem Bild gezeigt (credits: neevedr.) (Data vom Sender an GPIO17(=wiringPi #0) und Data vom Receiver an GPIO18(=wiringPi #1))

    - Starte den Raspberry Pi
    ___________________________________________________________________________


    3) Installation der Software
    Wir haben die Wahl zwischen der aktuellsten Development Version und der letzten Stable. Da die Development-Versionen aber ebenfalls immer stabil sind (nach meiner Erfahrung), werde ich diesen Weg hier beschreiben:
    Als erstes fügen wir die offiziellen Quellen für pilight hinzu. Dazu öffnen wir die sources.list:

    Code
    sudo nano /etc/apt/sources.list


    und fügen die folgenden Zeilen hinzu:

    Code
    deb http://apt.pilight.org/ stable main
    deb http://apt.pilight.org/ development main
    deb http://apt.pilight.org/ nightly main


    Anschließend speichern wir die Datei mit Strg+X und Y
    Da pilight eine signierte Quelle nutzt, müssen wir den Schlüssel hierfür hinzufügen:

    Code
    wget -O - http://apt.pilight.org/pilight.key | sudo apt-key add -


    Jetzt stellen wir sicher, dass der PI auf dem aktuellsten Stand ist und aktualisieren die Paketliste:

    Code
    sudo apt-get update
    sudo apt-get upgrade -y


    Hier können wir uns nun entscheiden, welche Version wir installieren wollen. Mit

    Code
    sudo apt-cache madison pilight


    sehen wir die verfügbaren Versionen:

    Code
    sudo apt-cache madison pilight
    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 steht dabei immer oben. Da wir, wie bereits erwähnt, die Development Version installieren wollen, geben wir folgendes ein, wobei wir pilight=5.0.4-g56831a6 mit der im Moment aktuellsten Version ersetzen:

    Code
    sudo apt-get install pilight=XXXXXXXXXX -y


    Sollte ein Fehler angezeigt werden, dass das Paket nicht verifiziert werden konnte, lasst das -y weg und bestätigt die Installation.


    Jetzt könnt ihr die Einstellungen vornehmen.
    ___________________________________________________________________________


    4) Einstellungen anpassen
    Nachdem das Projekt installiert ist, können einige Einstellungen angepasst werden. Die Datei, die diese Einstellungen steuert, liegt unter /etc/pilight/settings.json, aber vorher entfernen wir noch das Installationsverzeichnis.

    Code
    sudo nano /etc/pilight/settings.json


    Der Inhalt der Datei sieht wie folgt aus:


    Die meisten Einstellungen sind selbsterklärend. Mit der Einstellung "config-file" kann ein alternativer Pfad für die Config-Datei festgelegt werden. In diese Datei tragt ihr später Eure Räume und Steckdosen, sowie alle anderen Geräte ein. Für meine Zwecke habe ich die Zeile in soweit geändert, dass die Config unter "/home/pi/pilight_config.json" liegt. So kann ich später schnell und unkompliziert die Datei mittels FTP Programm überschreiben und verändern.
    Damit pilight startet, muss die Datei vorhanden sein. Dazu erzeugen wir diese und fügen einen Pseudoinhalt ein:

    Code
    nano /home/pi/pilight_config.json


    Als Inhalt soll die Datei folgendes enthalten. Wir passen dies nachher an unsere Bedürfnisse an:

    Code
    {
    }


    Weiterhin könnt ihr euren Port für den Webserver ändern, falls dieser belegt sein sollte, oder ihr es einfacher haben wollt ;)
    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!


    Sind alle Einstellungen getan, können wir schon mit den ersten Test fortfahren.
    ___________________________________________________________________________


    5) Erste Versuche und Grundbefehle
    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.
    Zuerst müssen wir den pilight-Service starten

    Code
    sudo service pilight start


    Anschließend stellen wir die DIP-Schalter der Steckdose 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).
    Diesen Code rechnen wir nun in binären Code um (Darauf achten, dass die Reihenfolge invers ist: 11001 muss also als 10011 in das dezimale System umgerechnet werden). Folglich ist unser Systemcode=19 und unser Gerätecode=4.
    wir können die Steckdose nun also mit

    Code
    pilight-send -p mumbi -s 19 -u 4 -t

    anschalten.
    Für das Ausschalten verwenden wir anstatt dem Parameter "-t" den Parameter "-f":

    Code
    pilight-send -p mumbi -s 19 -u 4 -f


    -p ist dabei der Parameter, der das zu verwendende Protokoll definiert. In diesem Fall natürlich das mumbi-Protokoll. -s ist der Systemcode (dezimal) und -u der Gerätecode (dezimal).
    Es existiert eine große Anzahl an unterstützten Protokollen und alle haben natürlich etwas andere Parameter und Wertebereiche (siehe unten).
    Wir können natürlich auch pilight-receive nutzen, um den Code über unsere Fernbedienung zu debuggen:


    6) Raumkonfiguration
    Da wir nun grundsätzlich Befehle senden können, versuchen wir mal eine Config zu erstellen, in der wir verschiedene Geräte verwenden.
    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 vom Programm überschrieben wird. Dies ist _immer_ notwendig, wenn ihr die Config verändern wollt:

    Code
    sudo service pilight stop


    Öffnet eure Config-Datei Datei nun mit eurem bevorzugten Editor 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. Man sieht gut, dass dort 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:

    Code
    sudo service pilight start


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

    Code
    pilight-control -l room1 -d switch1 -s on


    So schaltet Ihr beispielsweise das erste Gerät in eurer Config an. Ruft nun die IP eures Rpi auf dem Port auf, den ihr in der settings.json vergeben habt. In meinem Fall ist es die 192.168.178:33:5001.
    Dort sollte nun die webgui mit der von euch erstellten Config erscheinen. Wenn ihr nun die Config erweitern wollt, denk dran erst den pilight-Service zu stoppen.
    Falls die config-Datei einen Fehler enthält, kopiert euren Inhalt hier hin und lasst ihn überprüfen.
    ___________________________________________________________________________


    7. Notwendige Schritte für 1wire Sensoren. (z.B. DS18B20)
    (für den Anschluss an den RPi sieh dir das angehängten Breadboard an: credit koffie)

    Da es anscheinend einen Bug im aktuellen Kernel gibt, der das gleichzeitige Nutzen von 1wire Sensoren bei aktivierter raspi-camera unmöglich macht, müssen ein paar Systemdateien angepasst werden (siehe https://github.com/raspberrypi/linux/issues/435).
    Hierbei spielt besonders das Laden der Module eine wichtige Rolle. Diese müssen in einer bestimmten Reihenfolge geladen werden. Wie ich bereits eingangs geschrieben hatte, bin ich eher kein Programmierer und kenne mich damit auch nicht wirklich aus, aber mit der folgenden Reihenfolge funktioniert sowohl die Kamera als auch die 1wire Sensoren:

    Code
    sudo nano /etc/modprobe.d/raspi-blacklist.conf


    Die Datei /etc/modprobe.d/raspi-blacklist.conf sollte folgender Maßen aussehen:

    Code
    # blacklist spi and i2c by default (many users don't need them)
    #blacklist spi-bcm2708
    blacklist i2c-bcm2708


    Die Reihenfolge der Module wird in der Datei /etc/modules bestimmt. Wichtig ist, dass die 1wire Module als erstes geladen werden.

    Code
    sudo nano /etc/modules


    Meine sieht wie folgt aus.


    Ob ihr alle diese Module benötigt, sei dahin gestellt. Es sollte aber nicht schaden, diese zu laden. Da ich wie gesagt unsicher bin, was dort die besten Einstellungen sind, würde ich mich freuen, wenn jemand diesen Abschnitt verbessert :)


    Nun starten wir den RPi einmal neu. 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:

    Code
    sudo ls /sys/bus/w1/devices/
    28-00000530ed24 w1_bus_master1


    Wie man sieht, 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 ihr solltet euch diese merken oder notieren.
    Um zu testen, ob der Sensor auch funktioniert, lesen wir den Wert aus:

    Code
    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. Dies entspricht einer Temperatur von 19,312 °C.


    Damit wir den Sensor nun in unserer Config-Datei verwenden können, fügen wir ein weiteres Gerät einem Raum unserer Wahl hinzu, nachdem wir den pilight-Service gestoppt haben:


    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.


    Hier noch einmal die gesamte Config inklusive dem 1wire Sensor:


    ___________________________________________________________________________


    8. Updates
    Das updaten der Development Version ist denkbar einfach.
    Zuerst stoppen wir sicherheitshalber den pilight-Service und dann führen wir einfach ein update bzw. upgrade durch und bestätigen die Sicherheitsabfrage nach dem unautorisierten Webgui-Paket(falls sie auftaucht):

    Code
    sudo service pilight stop
    sudo apt-get update && sudo apt-get upgrade


    Da die Configdateien mit den Standardwerten überschrieben werden, müssen wir das Backup für die hardware.json und die settings.json wiederherstellen (das wird von pilight automatisch erzeugt) VOrher aber noch den piligfht-service stoppen, damit die Dateien nicht direkt wieder überschrieben werden:

    Code
    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 Service wieder starten:

    Code
    sudo service pilight start


    Sollte eure Config-Datei nach dem Update nicht mehr starten, schaut auf GitHub, ob irgendwelche Änderung der Synthax durchgeführt wurden und passt eure Config an. Diese bleibt natürlich beim Update erhalten. ;)
    ___________________________________________________________________________


    9. Beispiel Config Einträge (in work)
    Webcam-Protokoll:
    Ermöglicht das Anzeigen eines Webcambildes:

    Code
    "Webcam": {
    "name": "Webcam",
    "protocol": [ "generic_webcam" ],
    "id": [{
    "url": "http://www.meteosat.com/imagenes/meteosat/sp/d2-col.jpg"
    }],
    "poll-interval": 1,
    "gui-show-webcam": 1
    }


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



    DHT22/DHT11:



    Relay:

    Code
    "pcstart": {
    "name": "GPIO AnAus",
    "protocol": [ "relay" ],
    "id": [{
    "gpio": 17
    }],
    "state": "off"
    },



    Openweathermap:



    Uhrzeit und Datum:


    ___________________________________________________________________________
    Unterstützte Geräte
    - Elro
    - Intertechno
    - Mumbi
    - Kaku
    - DI-O
    - Conrad
    - und weitere
    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
    Es kann sich aber auch lohnen ein Blick ins Forum zu werfen, um weitere Protokolle zu finden, die eventuell nicht aufgeführt werden.



    Wichtige Anmerkung:
    Da dieses Tutorial auf der development-Version basiert, ist es durchaus möglich, dass die Wiki-Einträge auf der pilight-Seite nicht aktuell sind, da sie sich auf die stabile Version beziehen. Nutzt stattdessen das pilight-Forum oder die commits in GitHub, um nach der entsprechenden Synthax zu schauen.


    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/



    Stand: 15.06.2014


    Wenn ich mal wieder Zeit übrig habe, werde ich weitere Beispiele ergänzen.
    Solltet ihr einen Fehler finden, würde ich mich freuen, wenn ihr mir diesen mitteilen würdet (auch Rächtschreibfehler ;))
    Über Feedback würde ich mich freuen.

  • Hi,


    ich danke Dir vielmals für die tolle Anleitung. Auch ich habe mich schon mit dem Pilight befasst. gestern bin ich dann auf die aktuelle Version 3.0 umgestiegen und seitdem habe ich ein paar Probleme.
    So zeigt mir pilight-learn und pilight-debug z.B. nichts mehr an.


    Ich kann machen was ich will, es kommt nichts an.


    pilight-receive klappt aber.


    Problem ist nur, ich muss irgendwie an den RAW Code meines Rolladenschalters kommen. Und das ging immer sehr gut über pilight-learn oder pilight-debug.


    Vielleicht kannst Du ja helfen.


    Gruss
    Dennis

  • Ja, auch dann.
    Es kommen immer Meldungen wie:
    433gpio: 639
    433gpio: 2529
    433gpio: 882
    433gpio: 258
    433gpio: 735
    433gpio: 184
    433gpio: 530
    433gpio: 126
    433gpio: 532
    433gpio: 216
    433gpio: 504
    433gpio: 530
    433gpio: 726
    433gpio: 293
    433gpio: 778
    433gpio: 313
    433gpio: 488
    433gpio: 1649
    433gpio: 643
    433gpio: 325
    433gpio: 632
    433gpio: 349
    433gpio: 580
    433gpio: 314
    433gpio: 635
    433gpio: 789
    433gpio: 745
    433gpio: 323
    433gpio: 552
    433gpio: 2862
    433gpio: 687
    433gpio: 311
    433gpio: 99
    433gpio: 552
    433gpio: 319
    433gpio: 511
    433gpio: 215


    Und das hört nicht mehr auf, bis ich es unterbreche.

  • Scheint so, als wenn da ein ziemliches Grundrauschen herrscht und pilight-debug deswegen nichts erkennt. Vielleicht ist der receiver nicht richtig angeschlossen? Ich hatte das Problem mal und da wurde pilight raw auch mit Signalen bombardiert...

  • Hmmm, also der Receiver sollte richtig funktionieren. Immerhin wird bei pilight-receive ja auch alles erkannt.
    Ich werde nachher mal noch die Reihenfolge der Module ändern und dann sehen wir weiter.

  • Ich habe gerade versucht Pilight zu installieren, aber beim starten des Service kommt ständig irgendeine Fehlermeldung das eine Einstellung nicht passt. Beim ersten Versuch war es immer webserver-enabled und jetzt webserver-authentication.


    Folgende Meldung kommt:

    Code
    pi@piSmarthome:~$ sudo service pilight start
    [....] Starting : pilight[Apr 02 19:54:22:135264] pilight-daemon: ERROR: setting "webserver-authentication" is invalid
    failed!
    pi@piSmarthome:~$


    Inhalt der /etc/pilight/settings.json Datei:

    Edited once, last by agent47 ().

  • Hey,


    löscht bitte mal die Zeilen mit webserver... raus, sodass die settings.json dann so aussieht:


    eigentlich sollte dieser Teil bereits aus dem GitHub raus sein... ich teste das mal.
    Hast du auch wirklich die aktuelle dev pilight geklont?

  • sehr komisch. Ich werde nachher selber nochmal klonen und schauen. Den letzten Schritt "Probleme bei Updates" hast du aber nicht ausgeführt, oder? Weil der Commit, den ich da als Beispiel ausgewählt habe, zufällig vor diesem Fix liegt ;)


    Gruß

  • nein, ich hatte nur bin zum Start des Service gemacht. Aber schalten lässt sich trotzdem nix.


    mit

    Code
    pilight-send -p elro_hc -s 10 -u 1 -f


    tut sich nix. Meine Elro Steckdose hat den Systemcode 01010 und den Gerätecode A.

  • Ich kenne mich mit den Elro Steckdosen nicht aus, aber deine hat keinen Dip Schalter für den Systemcode?
    Außerdem ist der Parameter -f für off. Wenn du sie anschalten willst, musst du -t nutzen.


    Gruß

  • Die Elro haben einen 10er DIP Schalter, die linken 5 für den Systemcode und die rechten 5 für den Gerätecode.
    Ich will auch ausschalten, da die Lampe imo an ist ;)


    Bis jetzt hatte ich für das SHC rcswitch-pi im Einsatz da gibt man einfach die Bits so an wie man sie in den DIP Schaltern einstellt. Pilight unterstützt aber viel mehr Typen daher wollte ich da umsteigen.

    Edited once, last by agent47 ().

  • Systemcode _-_-_ oder 01010 und Gerätecode -____ oder 10000
    also - ist oben und _ ist unten


    mit rcswitch-pi funktioniert es au:

    Code
    sudo ./send 01010 1 1 //an
    sudo ./send 01010 1 0 //aus


    Sender Data ist an Wiring Pi Pin 0

    Edited once, last by agent47 ().