Mit 433Mhz Funksender mit Raspberry Pi & openHAB Funksteckdosen schalten

Um den Raspberry und auch openHAB etwas genauer kennen zu lernen soll openHAB nun in einem ersten Schritt mit 433 MHz Funksteckdosen kommunizieren können, welche schon seit längerer Zeit mit Funkfernbedienung ihre Dienste gut leisten.

Die Funksteckdosen von ELRO und waren bisher für ein paar schwer zugängliche Lichter genutzt, welche per Fernbedienung geschalten wurden.  Diese sollen nun per openHAB steuerbar werden.

Den Rasbperry Pi mit Funksender versehen

Als Funksender habe ich einen billigen 433MHz-Sender und Empfänger für knapp 5 € bei Amazon bestellt (Link zum Artikel).

Das linke ist der Sender, das rechte (mit den vier Pins) ist der Empfänger. Letzteren brauchen wir aktuell nicht.

Via female-femaile-jumper-Kabel habe ich die Pins wie folgt verbunden:

  • Pin ATAD (Daten) auf 11-GPIO17 (linke Reihe, sechster Pin von oben)
  • Pin GND (Masse) auf 6-GND (rechte Reihe, dritter Pin von oben
  • Pin VCC (Versorgung mit Spannung) auf 4-+5V (rechte Reihe, zweiter Pin von oben)

Da die bestellten Antennen noch unterwegs sind, habe ich mir als Antenne einfach mit einem Draht beholfen. Laut mikrocontroller.net ist die optimale Antenne 17 cm lang.
Ich habe mir vorerst mit einer längeren, aufgebogenen Büroklammer beholfen, die ich an den Antennen-Kontakt gelegt habe, da auf die schnelle kein anderer Draht da war. Sieht komisch aus, funktioniert aber tadellos – auch über das Stockwerk hinweg ins andre Eck des Hauses:

Raspberry Pi mit 433 MHz-Sender
Raspberry Pi mit 433 MHz-Sender

Sieht erst mal komisch aus, funktioniert aber tadellos.

Das Anbringen der Komponente sollte natürlich bei ausgeschaltetem Pi passieren.

Bei der Schaltung und Pin-Belegung hat mir dieser Beitrag  ganz gut geholfen, hier ist die Belegung der Pins auch noch etwas besser bildlich aufbereitet, allerdings wird dort mit der Softwareinstallation etwas anders verfahren.

Funksteckdose von Shell aus ansteuern

Zuerst sind ein paar benötigte Pakete zu installieren. Das Exec-Binding erlaubt das Ausführen beliebigen Codes aus openHAB  heraus. Für das Fernsteuern von 433MHz-Sendern benötigen wir wiringpi und dieses werden wir dann per exec ansteuern.
Zum Nutzen von wiringpi wird raspberry-remote benötigt, welches wir per git beziehen können.

sudo apt-get install openhab-addon-binding-exec wiringpi git-core

Nun benötigen wir noch raspberry-remote.

cd
git clone git://github.com/xkonni/raspberry-remote.git
cd raspberry-remote
make send
cd
sudo mv raspberry-remote /opt/raspberry-remote

Um im Exec-Binding von openHAB später auch send-Kommandos absetzen zu können ist es notwendig, dass der Benutzer openhab sudo für das send-tool – ohne Eingabe eines Passworts – ausführen darf. Hierzu müssen wir die sudoers-Datei anpassen:

sudo mcedit /etc/sudoers

# User privilege specification
 root ALL=(ALL:ALL) ALL
 openhab ALL=NOPASSWD: /opt/raspberry-remote/send*

Nun testen wir das Senden von Kommandos. Ein Blick auf die Einstellmöglichkeit der Funksteckdose zeigt zuerst den Hauscode (1-5) und dann die „Dose“.

DIP-Schalter der ELRO-Funksteckdose
DIP-Schalter der ELRO-Funksteckdose

Das send-Tool erwartet drei Parameter, jeweils Zahlenwerte:
– Hauscode (5-stellig)
– Nr. der Dose (1-stellig)
– Kommando (An oder Aus, einstellig)

Pin oben bedeutet beim Hauscode „1“ und Pin unten „0“.
Bei der „Dose“ kann nur ein Pin oben sein. „A“ bedeutet „1“, „B“ bedeutet „2“ usw.
Das Kommanto für „an“ ist „1“ und für „aus“ ist es „0“.

Die Dose im Bild ist mit folgendem Code anschaltbar:

sudo ./send 11111 1 1

..und mit folgendem Code ausschaltbar

sudo ./send 11111 1 0

…und das Ganze kann bequem per Shell getestet werden.

Einbindung in openHAB

Nun geht es an die Einbindung in openHAB

Mittels des bereits installierten exec-bindings können wir nun die einzelnen Dosen als item definieren und hier den Code zum an- und ausschalten hinterlegen:

Switch funkdose_1 "Dose 1" {exec=">[OFF:sudo /opt/raspberry-remote/send 11111 1 0] >[ON:sudo /opt/raspberry-remote/send 11111 1 1]"}
Switch funkdose_2 "Dose 2" {exec=">[OFF:sudo /opt/raspberry-remote/send 11111 2 0] >[ON:sudo /opt/raspberry-remote/send 11111 2 1]"}
Switch funkdose_3 "Dose 3" {exec=">[OFF:sudo /opt/raspberry-remote/send 11111 3 0] >[ON:sudo /opt/raspberry-remote/send 11111 3 1]"}
Switch funkdose_4 "Dose 4" {exec=">[OFF:sudo /opt/raspberry-remote/send 11111 4 0] >[ON:sudo /opt/raspberry-remote/send 11111 4 1]"}

In der Sitemap binden wir die Items dann als Switch, also als an-aus-Schalter ein.

Frame label="Funkdosen" {
        Switch item=funkdose_1
        Switch item=funkdose_2
        Switch item=funkdose_3
        Switch item=funkdose_4
        Switch item=funkdose_5
    }

Nun sind die Dosen alle per openHAB-Interface steuerbar.

Das schöne an den ELRO-Dosen ist, dass diese sich den Zustand merken, für den Fall eines Stromausfalls. D.h. wenn der Strom kurz weg ist – nach Anschalten der Sicherung ist er erst einmal gleich wieder da und es bleibt nicht dunkel.

Update 12/2017:

Zwischenzeitlich gab es durch rpi-updates hervorgerufene Inkompatibilitäten beim Senden.

Beim Start von gpio -r erhielt ich folgenden Fehler:

Unable to determine hardware version. I see: Hardware : BCM2835
,
– expecting BCM2708 or BCM2709.

Geholfen hat es, die Firmware-Version wieder etwas herunterzufahren:

sudo rpi-update 52241088c1da59a359110d39c1875cda56496764

(Danke hier an https://www.domoticz.com/forum/viewtopic.php?t=16852)

12 Antworten auf „Mit 433Mhz Funksender mit Raspberry Pi & openHAB Funksteckdosen schalten“

  1. Hallo,
    vielen Dank für dieses gut beschriebene Tutorial.
    Leider klappt das bei mir nicht so:

    ich habe die .item Datei und die . sitemaps Dateien ganz genau gleich wie Sie. Ich nutze auch die Raspberrypi-Remote und in der Shell funktioniert das An und Abschalten wunderbar, in der App wird zwar alles richtig dargestellt, aber es tut sich einfach nichts.

    Was nicht funktionierte bei der Konfiguration ist:

    sudo apt-get install openhab-addon-binding-exec wiringpi git-core

    und

    sudo mcedit /etc/sudoers. Diesen Befehl hier habe ich mit sudo nano /etc/sudoers ausgeführt — passt das ?

    Den Befehl oben hab ich leider nicht ausführen können.
    Ich benutze OpenHAB 2 auf meinem Pi3 mit Rasbian.

    Ich würde mich wirklich freuen, wenn Sie mir weiterhelfen könnten.

    Danke

    1. Hallo Dominik

      Danke für das Feedback. Das Problem ist nun wohl zum Teil, dass das Tutorial für openhab1 geschrieben wurde.

      Vielleicht helfen aber folgende Punkte:

      1. openhab2 benötigt nicht nur sitemap und items, auch „things“ werden benötigt. Hier am besten etwas in die Konfiguration von openhab2 auf den openhab-Seiten einlesen.

      2. bezüglich der Fehler beim Ausführen der Befehle: Hier weiß ich nicht genau, welche Fehler kamen, aber das Paket openhab-addons-binding-exec ist auch die openhab1-Variante. Wenn das Paket grundsätzlich nicht gefunden wird (und man auch das openhab1-Paket will) wäre die sources.list von Raspbian abzugleichen. Siehe hierzu die entsprechenden Installationsanleitungen auf den openhab-Seiten

      3. Bezüglich des Editors: Ich bevorzuge einfach mcedit, letztlich ist es aber völlig egal, mit welchem Editor die Veränderungen vorgenommen wurden

      Grundsätzlich: Dass es auf shell-Ebene funktioniert, ist schon mal prima! Das Problem ist nun nur noch das Verknüpfen von Item mit entsprechendem Befehl des Exec-Bindings. Hier sollten die Logfiles von openhab (/var/log/openhab oder var/log/openhab2 – je nach Version) beim Ausführen der Tests im Auge behalten werden. Dort stehen immer wieder gute Meldungen und Fehlermeldungen.

      Viel Erfolg noch!

  2. Also ich habe alle Funksteckdosen Schaltbefehle, je einen für an und einen für aus, in ausführbare Shells gepackt und diese funktionieren auch alle schön über den Terminal.

    Wenn ich jetzt aber eben diese in Things bei openHAB packe, sagt der mir:
    __________________________________________________________
    Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die Regeln erklärt hat. Normalerweise läuft es auf drei Regeln hinaus: #1) Resprektieren Sie die Privatsphäre anderer. #2) Denken Sie nach bevor Sie tippen. #3) Mit großer Macht kommt große Verantwortung. sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
    __________________________________________________________

    ich habe nun die Berechtigungen in visudo alle voll aufgemacht, soll heißen das openhab statt nur dem Pfad ALL bekommen hat.
    Aber die Meldung bleibt unverändert.

    Was mache ich falsch?

    1. Versuche es einmal aus der Shell heraus als openhab-Benutzer zu starten (via su / sudo zum Benutzer wechseln oder/und temporär in /etc/shadow auch eine Login-Shell zuweisen / erlauben) und prüfe die Ausgaben. Mit der Konfiguration des Artikels sollte es eigentlich problemlos funktionieren. Läfut openhab auch wirklich als user „openhab“? Nicht, dass hier ein Fehler vorliegt.

  3. Hi Florian,

    danke für das Tutorial, hat mir auf jeden Fall geholfen, auch wenn ich auf openHAB2 unterwegs bin. Ich habe dazu noch eine Frage die mich brennend interessiert. Die Funkdosen lassen sich mittlerweile prima über OpenHAB steuern, wenn ich allerdings die Fernbedienung der Dosen nutze bekommt OpenHAB davon nichts mit, ändert also auch den Status der Dosen im System nicht. Hast du vll eine Idee, wie man den 433-Sniffer dazu bewegen kann die Befehle an OpenHAB weiterzuleiten, damit man quasi unabhängig ist, welchen Weg man geht?

    Danke für einen Denkanstoß und beste Grüße
    Fabian

    1. Hallo Fabian,

      danke für dein Feedback. Magst Du eventuell deine Konfiguration für openhab2 mir zukommen lassen oder hier als Kommentar-Antwort hinterlassen? Da ich selbst im openhab2-Szenario meine Dosen inzwischen nicht mehr per Exec-Binding steuere könnte ich so recht einfach auch eine rein openhab2-kompatible Variante im Artikel veröffentlichen. Ich selbst steuere meine Dosen via http-Binding und Aufruf eines PHP-Scriptes auf einem Apache-Webserver des Ziel-Raspberries.

      Zu deiner Idee: Da die 433MHz-Dosen ja nur empfangen weiß openhab nie, welchen Zustand die Dinger haben. Auch wenn openhab „an“ schickt kann es sein, dass die Dosen aus bleiben, weil der Funk nicht durchkam. Gleiches andersrum. Der Status lässt sich daher im Gegensatz zu teurerer smarthome-Software auch von den Dosen nicht abfragen. Das mitsniffen wäre sicherlich möglich, aber wie man dan den Status an openhab übergibt ist mir auf Anhieb nicht ganz klar. Möglich wäre es sicherlich. Als Idee würde ich hier wie folgt vorgehen:

      • Ein Script snifft ständig mit und schreibt den Status der Dose in eine Datei
      • Openhab hat eine rule, die per Cron minütlich gestartet wird und die Datei ausliest
      • Hat sich der Status geändert wird in openhab der Status angepasst, indem via sendCommand auf die funkdose der aktuelle Zustand nochmal geschickt wird. Dadurch wird zwar der An- oder Auschaltbefehl nochmal geschickt aber das macht ja nichts denn der Zustand der Dose ändert sich dadurch nicht, nur der Zustand des Items wird in openhab geupdated.

      Vielleicht gibt es noch schönere Ansätze aber ich denke das könnte funktionieren. Voraussetzung ist nur, das dein Raspberry auch die Befehle der Funkverbedienung mitbekommt. Ich habe das einmal probiert aber der Erfolg war nur mäßig. Vielleicht war auch nur mein 433MHz-Receiver zu schlecht…

      Lass uns wissen wenn es geklappt hat!

      Viele Grüße
      Florian

  4. Es wäre schön, wenn Sie am Anfang des Artikels erwähnen, dass dieses Tutorial nicht für Openhab 2.x geeignet ist.
    Ich habe mir dadurch den Sudoers-File zerschossenen und darf alles neu aufsetzen…

    1. Hallo Miroo,
      in Bezug auf das sudoer-File ist es völlig unerheblich, welche openhab-Version genutzt wird. Lediglich das Handling in den Item-Files passt bei openhab2 nicht ganz und muss anders lauten.
      Zudem bezweifle ich, dass wegen jederzeit einfachst rückgängig machbaren Eintragungen in der sudoers-Datei „alles“ neu aufgesetzt werden muss…
      Viele Grüße
      Florian

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Durch die weitere Nutzung der Seite wird der Verwendung von Cookies und den Inhalten der Datenschutzerklärung zugestimmt. 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