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:
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“.
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)
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
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!
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?
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.
Wie sollte denn der Eintrag beim openhab thing aussehen, wenn man sich genau an diese Anleitung hält?
Hallo Christian,
Die Anleitung ist noch für openhab 1. Ich selbst habe noch nicht auf openhab 2 geupdated.
Es scheint aber nicht so kompliziert zu sein. Siehe hierzu https://docs.openhab.org/addons/bindings/exec/readme.html
Ein command Thing muss eingebunden werden um die entsprechenden Befehle hinterlegen zu können. Die sollten dann per Item des Typs switch verlinkt werden.
Viele Grüße
Florian
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
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:
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
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…
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