Mit dem Raspberry Pi und OpenHAB Funksteckdosen (433 MHz) schalten
Wer zur Miete wohnt oder nicht seine Wände aufreißen möchte, der wird wahrscheinlich nicht unbedingt Relais nutzen können, um seine Geräte per Smart Home Panel zu steuern. Stattdessen können Geräte aber auch über Steckdosen per 433 MHz Funk gesteuert werden. Dazu bietet der Raspberry Pi eine hervorragende Plattform, um die OpenHAB Funksteckdosen auszulesen und per Klick an- und auszuschalten.
In diesem Tutorial nehmen wir daher jene Funksteckdosen in unsere Hausautomatisierung hinzu. Im speziellen lesen wir die Steckdosen aus und erstellen die Weboberfläche zum Schalten der Steckdosen.
Zubehör


433MHz Funksteckdosen
Damit wir die 433.92 MHz Funksteckdosen über das Raspberry Pi und OpenHAB 2 verwenden und per Weboberfläche bzw. Touchscreen schalten können, ist folgendes Zubehör nötig:
- Raspberry Pi
- Funksteckdosen (siehe Hinweis unten)
- 433 MHz RF Set (Sender & Empfänger)
- Jumper Kabel
- Breadboard
Hinweis: Achte darauf, dass die Funksteckdosen manuell einstellbar (einstellbarer Hauscode) sind und nicht Plug & Play sind. Ich rate dazu die verlinkten 433 MHz Funksteckdosen von Brennenstuhl zu nehmen, da es mit diesen definitiv funktioniert und das Tutorial auch damit erstellt wurde. Weitere funktionierende Modelle können gerne in den Kommentaren verlinkt werden.
Eine weitere Möglichkeit bieten das Brennenstuhl Brematic Home Automation Gateway GWY 433, welches speziell auf deren Funksteckdosen ausgerichtet ist und natürlich auch mit OpenHAB genutzt werden kann. Allerdings wird dieses Gerät in diesem Tutorial nicht benötigt, da wir uns für wenige Euro das ganze auch selber bauen können.
OpenHAB Funksteckdosen vorbereiten
Beginnen wir mit der Verkabelung des 433 MHz Senders und Empfängers. Der Empfänger ist nicht unbedingt dauerhaft nötigt, aber mindestens jedoch zum Auslesen der Codes. Beide Module (Transmitter/Sender und Receiver/Empfänger) brauchen 5V Spannung. Daher wird VCC des Moduls an 5V angeschlossen des Raspberry Pi’s (Pin 2) und GND an einen freien GND Pin (z.B: Pin 6) angeschlossen.
Darüber hinaus wird der ATAD (Daten) Pin des Senders (im Bild rechts) an GPIO 17 angeschlossen. Einen der mittleren beiden Pins des Empfängers schließen wir an GPIO 27 an. Die der schematische Aufbau:
Die Steckdosen sind per Hauscode einstellbar. Dazu musst du die Hinterseite öffnen und einen Code einstellen. Dabei sind die ersten fünf Schalter der Code (Unten: Null, Oben: Eins) und danach die Auswahl von A-E. In diesem Bild ist es Code 00011 für Steckdose E:
Den gleichen Hauscode stellst du auch in der Fernbedienung ein:
Schließe die Steckdose an und teste sie auf Funktionalität.
Software für 433 MHz Funksteckdosen installieren
Wir nutzen rc-switch und die 433Utils von ninjablocks, um die Funkcodes auszulesen. Öffne dazu eine SSH Verbindung zu OpenHAB und klone das Verzeichnis (git muss installiert sein: sudo apt-get install git
):
cd /opt/ git clone --recursive git://github.com/ninjablocks/433Utils.git
Anschließend kompilieren wir die Dateien, wofür allerdings wiringpi notwendig ist:
sudo apt-get install wiringpi cd /opt/433Utils/RPi_utils/ make
Nun kümmern wir uns um das Auslesen der Codes. Falls du die Codes bereits aus einem früheren Tutorial kennst, brauchst du sie nicht erneut auszulesen. Falls du sie nicht kennst, ist es sehr einfach diese Auszulesen. Starte dazu im Verzeichnis die ausführbare RFSniffer Datei:
./RFSniffer
Drücke anschließend die Tasten der Funkfernbedienung, mit denen du die Steckdose an- bzw. ausschaltest. Die Codes werden nacheinander angezeigt. Es ist möglich, dass zwischen vielen Wiederholungen mal ein anderer Code angezeigt wird – dies ist aber oftmals einfach zu ignorieren. Drücke den Knopf am besten mehrere Sekunden und siehe welcher Code am häufigsten auftritt – dieser ist es mit hoher Wahrscheinlichkeit. Gleich wirst du es auch noch testen können.
Bei mir sind es diese Codes für meine zu schaltende 433 MHz Funksteckdose:
- An: 5506385
- Aus: 5506388
Nun senden wir die Codes als Überprüfung (passe deine Codes an):
./codesend 5506385
Die Steckdose sollte nun an- bzw. ausgeschaltet werden (je nachdem, welchen Code du gesendet hast).
Dieses Skript soll anschließend von OpenHAB aus aufgerufen werden, weshalb wir noch eine Bash Datei erstellen, in welcher die Codes gespeichert werden (inkl.
sudo nano /opt/433Utils/RPi_utils/run.sh
Die Datei bekommt den nachfolgenden Inhalt. Falls du mehrere Steckdosen schalten willst, kannst du das Skript entsprechend anpassen. Beachte auch, dass du deine entsprechenden Codes angibst:
#!/bin/sh if [ "$1" = "D" ]; then if [ "$2" = "off" ] || [ "$2" = "0" ] || [ "$2" = "OFF" ]; then /opt/433Utils/RPi_utils/codesend 5506388 else /opt/433Utils/RPi_utils/codesend 5506385 fi fi
Speichere mit STRG+O und kehre zurück ins Terminal mit Strg+X. Mit den nötigen Input Parametern (bspw: D OFF) kannst du das Skript auch bereits testen.
Für uns ist nachfolgend nur noch die codesend sowie unsere erstellte Bash Datei wichtig, daher geben wir diesen die nötigen Rechte:
sudo chmod +x /opt/433Utils/RPi_utils/codesend sudo chmod +x /opt/433Utils/RPi_utils/run.sh
Übrigens: Falls du andere GPIO Pins nutzt, so musst du die Dateien vor dem Kompilieren bearbeiten (die Pin Nummerierung kannst du hier entnehmen).
OpenHAB Vorbereitung
In OpenHAB 2 müssen wir nun noch Things und Items für jede Steckdose anlegen. Wenn du mehr als eine Steckdose nutzt, so sollte das Shell Skript natürlich ebenfalls angepasst sein. In diesem Beispiel erstellen wir die Dateien allerdings erst einmal nur für eine 433 MHz Funksteckdose in OpenHAB.
Wir erstellen also zunächst ein Thing:
sudo nano /etc/openhab2/things/poweroutlets.things
Folgender Inhalt kommt hinein:
Thing exec:command:poweroutletD-control [ command="/opt/433Utils/RPi_utils/run.sh D %2$s", interval=0, autorun=true ]
Nach dem Speichern erstellen wir ebenfalls noch ein Item in einer separaten Datei:
sudo nano /etc/openhab2/items/poweroutlets.items
Dieser Inhalt kommt hier hinein (Namen etc. können angepasst werden):
Group grp_poweroutlets "Funksteckdosen Gruppe" <poweroutlet> String poweroutletDSwitch "Funksteckdose D" <poweroutlet> (grp_poweroutlets) [ "Switchable" ] { channel="exec:command:poweroutletD-control:input", autoupdate="true" }
Als letztes erstellen wir nur noch die Sitemap. Natürlich kann ebenso eine existierende Sitemap einfach erweitert werden, falls dies gewünscht ist:
sudo nano /etc/openhab2/sitemaps/poweroutlets.sitemap
1 2 3 4 5 |
sitemap poweroutlets label="Funksteckdosen" { Frame label="Funksteckdosen Gruppe" { Switch item=poweroutletDSwitch //mappings=[ "ON"="ON", "OFF"="OFF" ] } } |
Das war es auch bereits. Nach speichern der Datei können wir zum nächsten Schritt gehen – dem Testen.
Testen der OpenHAB Funksteckdosen
Um das User Interface und die Funksteckdosen in OpenHAB 2 zu testen, rufen wir die gerade erstellte Sitemap über einen Browser (Desktop PC oder Smartphone) aus dem selben Netzwerk auf:
http://openhabianpi:8080/basicui/app?sitemap=poweroutlets
Hierbei sollte ein solches Bild erscheinen:
Durch betätigen des Schalters kannst du nun die Steckdose an- und ausschalten.
Damit ist es natürlich auch möglich seine 433 MHz Funksteckdosen über das Smartphone fernzusteuern. Gerade, wenn der Abstand der Steckdosen zum 433 MHz Sender größer ist, kann es sein, dass die Verbindung unterbrochen wird. In diesem Fall eignen sich ESP8266 Außenstationen, die ähnlich angesteuert werden.
Weiteres zur Benutzung von OpenHAB 2 und 433 MHz Funksteckdosen
Ein Problem, das wir bei der Benutzung haben, ist, dass beim Neustart des Raspberry Pi’s bzw. OpenHABs der Status der Steckdose verloren geht. Dies können wir allerdings durch Installieren des Perstistence Add-ons umgehen.
Ein weiterer Punkt ist, falls du die Steckdosen per Handsender schaltest, wird der Status in OpenHAB nicht automatisch geändert. Daher musst du in diesem Fall den RFSniffer im Hintergrund laufen lassen und bei erkanntem Signal den Status auch in OpenHAB 2 updaten. Dies geht zum Beispiel mit der REST API von OpenHAB 2.
Ach ja: Solltest du das ganze ohne Raspberry Pi und OpenHAB umsetzen wollen, ist dies auch möglich: Ein einfacher ESP8266 NodeMCU für wenige Euro ist ausreichend, um die Brennenstuhl Funksteckdosen zu schalten.
Ich bin dabei das Setup mit einem ESP8266 aufzubauen, der per MQTT mit OpenHAB auf dem RasPi kommuniziert.
Ich persistiere den Status und die Fernbedienung wird weggelassen ?
Aktuell versuche ich nun eine Zeitschaltuhr in OpenHAB nachzubilden. Aber so richtig gelingt mir das noch nicht. Ich habe es mir einer Regel versucht, doch irgendwie wird diese noch nicht ausgeführt.
Tutorials zu MQTT Steckdosen sowie der Kommunikation zum ESP8266 via MQTT kommen bald 🙂
Vielen Dank für die Anleitung aber auch für die weitergehend Tipps am Ende des Beitrags.
Frage: Wozu ist eigentlich Input Parameter „D“ gut? Welchen Sinn hat der?
Könnte ich den auch weg lassen.
„D“ ist in meinem Fall die Steckdose (A-D). Das war gedacht, falls du mit einem Skript mehrere Steckdosen steuern willst.
Hallo,
kannst Du demnächst vielleicht ein Beispiel posten, wie Du den Status in OpenHAB mit der „REST API“ und RFSniffer erfassen würdest? Das wäre klasse. Habe mir gerade die REST API Docu angeschaut und bin schwer ins Grübeln gekommen, wie das gehen soll.
Vielen Dank, Andreas
Ich habe länger mit RasPi und 433 MHz Funksteckdosen experimentiert. Ein Problem war in meinen Augen der fehlende Rückkanal: Man sieht nur, dass man einen Befehl gesendet hat, aber nicht, ob die Funksteckdose den auch ausführt.
Wenn ich das richtig verstehe, wird auch der RFSniffer nur den Sendeimpuls eines Fremdsenders aufschnappen und den Status entsprechend auf dem RasPi anpassen. Damit ist aber nicht gesagt, dass die Funksteckdose auch wirklich geschaltet hat. Oder sehe ich das falsch?
Ich bin schließlich auf teure AVM DECT Funksteckdosen umgestiegen, die ich mit dem RasPi schalte. Ein Zusatznutzen war dabei, dass man damit auch die Temperatur am Ort der Steckdose abfragen kann (ZB für Gewächshausheizung).
Das ist richtig. Daher wird das nächste Tutorial um Wlan Funksteckdosen gehen, bei denen man eine sichere Rückantwort bekommt. Ich wollte dennoch beide Möglichkeiten aufzeigen.
Inzwischen ist das Tutorial zu den Wifi Steckdosen da: Raspberry Pi + OpenHAB: Sonoff S20 Wifi Steckdose steuern
Super Anleitung
Bei mir hat es auf Anhieb geklappt. Habe aber noch ein kleiner Problem zwar ist die Kennung [„Switchable“] ja vorhanden aber Alexa erkennt die Steckdose nicht hat das was mit dem String zu tun ?
Vielen Dank, Tim
Tolle Anleitung und vielen Dank für die ausführliche Erklärung.
Befasse mich nun gerade wenige Tage mit der Thematik – das Schalten einer Steckdose habe ich – dank Deiner Anleitung auch hinbekommen.
Kannst Du mir bitte erklären, weche Schritte (Erweiteungen in den jeweiligen scripten) notwendig sind, um mehrere Dosen zu schalten?
Für die Unterstützung schon mal besten Dank…,
Christian
Naja im Grunde das ganze für mehrere Steckdosen wiederholen (inkl. verschiedener Code, für jede Dose ein Item, usw).
Hallo,
hört sich sehr interessant an. Leider scheitere ich gerade an eine sehr frühen Stelle…
Ich benutze die Steckdosen von Brennenstuhl. Die Steckdosen funktionieren mit der Fernbedienung.
Und ich habe den Aufbau mit Sender und Empfänger realisiert. Mit „codesend“ und „RFSniffer./RFSniffer“ funktioniert der Aufbau.
Ich kann die Codes der FB nicht empfangen 🙁
Da ich die Codes aus einem früheren Aufbau kenne, habe ich sie gesendet. Leider auch das ohne Erfolg.
Hallo und danke für die Anleitung.
Ich habe zwei 4er Sets Funksteckdosen verschiedener MArken (Elro und Intertechno) eingebunden und kann sie per openHAB nun steuern.
Sinn des ganzen war, sie dann mit Alexa steuern zu können.
Leider klappt das nicht.
Wie oben schon von Tim geschrieben, scheint der Grund die Definition als „String“ zu sein.
Die offizielle Dokumentation ist zwar recht kurz ausgefallen, aber in diversen Foren wird erwähnt, dass ein als „Switchable“ getaggtes Item auch ein Switch sein muss für Alexa.
Lässt sich das bei der hier Beschriebenen Lösung irgendwie anpassen?
PS: Da es hier gefragt wurde, hier mein Code zum Steuern mehrerer Steckdoesen:
Hallo Michael, würde auch gerne mehrere Steckdosen schalten, weiß aber nicht wie der Code aussehen muss. Wenn du dieses Skript benutzt, wie sieht dann deine entsprechende Thing- und Item-Datei für diesen Part aus? Danke und Gruß Stephan
Hallo,
das Tutorial hat mir wirklich weitergeholfen.
Nun möchte ich aber die Alexa-Sprachsteuerung benutzen, die soweit auch unter Openhabian (auf den Raspberry Pi) funktioniert.
Leider kann Alexa den .Item-Eintrag „String poweroutletDSwitch „Funksteckdose D“ ….“ nicht finden, während „Switch“-Einträge gefunden werden.
Danke im Vorraus
Nachdem ich Tage lang erfolglos nach einer Lösung für Alexa recherchiert habe (offenbar hat niemand sonst das Alexa-Einbindeproblem), kommte ich mir selbst etwas erbasteln. Ich habe mir die Rules Thematik angeschaut und kam auf die Idee, ‚Dummy‘-Switche an zu legen, die per Rule dann die eigentlichen String Items der Funksteckdosen triggern. Funktioniert super mit Alexa.
Ich poste hier meinen Code, reduziert auf 2 meiner 8 Funksteckdosen.
(Achtung, ich habe die Bezeichnungen dem Tutorial gegenüber geändert)
Inhalt der xxx.items Datei:
Inhalt der alexa.rules Datei:
Die eigentliche Schaltung des ‚echten‘ Items erfolgt durch sendCommand. Das postUpdate ändert den Zustand des Items, der würde andernfalls nämlich trotz Schaltvorgang nicht geändert werden.
Viel Erfolg damit.
Hi, dein Post hat eine 3 Tage andauernde Openhab Alexa Beziehungskrise gelöst, vielen Dank, er sollte direkt in das Tutorial eingearbeitet werden. Ich habe gefühlt 1000 Tutorials gelesen und probiert, aber erst dein Post hat zu dem gewünschten Ergebnis geführt.
Super, auf Anhieb hat fast alles geklappt…
Per rus.sh schalten geht.
danach habe ich item, thing und sitemap 1:1 erstellt.
Die Sitemap im Browser aufrufen geht, aber der Schalter hat keine Wirkung…
Gibt es sowas wie einen Debugmodus, oder wie kann ich den Fehler suchen?
Hi,
ich habe das gleiche Problem. Sehe den Schalter auch in der App auf dem Iphone. Der schaltet auch, was man im Log sehen kann. Aber irgendwie tut sich nichts. Wenn ich das Script in der Shell ausführe funktioniert es. Kann das an den Berechtigungen liegen? Die angegebene URL http://openhabianpi:8080/basicui/app?sitemap=poweroutlets funktioniert bei mir auch nicht. Fehler 404 not found. Komisch aber dass es die Handyapp tut.
Versuch es mal mit
sudo -u openhab
aus der Shell zu starten. Dass die Sitemap nicht geladen wird, deutet auf einen anderen Namen hin.Hi, sudo -u openhab funktoniert auch. Das mit der Sitemap habe ich nun auch hinbekommen. Die war einfach im Standardsetup nicht intstalliert. Leider habe ich immer noch das Problem, dass die Schalter ohne Funktion sind.
Habe das gleiche Problem (Schalter ohne Reaktion). Ich habe die Weboberfläche einfach über die IP aufgerufen und mich zum BasciUI durchgeklickt. Laut event.log tut sich auch was, aber die Steckdosen bleiben aus. Die run.sh alleine funktioniert.
So, hab jetzt den Fehler gefunden.
@Sodamann. Bei mir war nach der Installation das Exec Binding nicht installiert. Dies macht das Ausführen von Scripts auf Kommandozeilenebene erst möglich. Also in der PaperUI unter Bindings auf das + gehen und das Exec Binding installieren. Danach funktionieren auch die Schalter.
Hallo, habe das gleiche Problem. Hast du bereits eine Lösung gefunden?
Mit freundlichen Grüßen
Moin,
erst mal Danke für die Anleitung und generell für die coolen Projekte. Ich habe deine Anleitung befolgt und meine Steckdosen (aktuell zwei) laufen auch sowohl per ./codesend, als auch per Script Bsp. exec /../../run.sh D ON bzw. OFF (gleiche mit C). Jedoch gehen die beiden nicht über das Interface von openHAB zu schalten. Sowohl einzeln nicht, wenn ich deine Anleitung eins zu eins befolge, als zu zweit eben nicht.
Bin gerade etwas ratlos :/.
Viele Grüße
Dennis
Auch die Exec Binding deinstalliert und wieder installiert hat leider nichts geholfen :/