Natürlich kann der Raspberry Pi als Universalgenie auch drahtlose Aktoren (Funk Schalt-Steckdosen und anderes) fernsteuern. Gerade in der Home Automation bieten sich hier schier unbegrenzte Möglichkeiten. Das geht auch recht einfach. Wie man mit dem Pi handelsübliche 433MHz Funk Schalt-Steckdosen fernsteuern kann, steht in nachfolgender Anleitung.
Inhalt
Update November 2023
Der hier stehende Beitrag ist nun über 9 Jahre alt. Einiges hat sich geändert, so dass Manches von dem hier Beschriebenen nicht mehr ganz auf der Höhe der Zeit ist. So gibt es zum Beispiel inzwischen ganz andere Raspberry Pi Modelle. Auch würde ich anstatt der 433Mhz Schalter eher einen Shelly Switch oder einen Shelly Plug verwenden, der sehr viel betriebssicherer über WiFi angesteuert wird.
Anhand der immer noch erfolgenden, zahlreichen Aufrufe dieses Beitrags sehe ich, dass es wohl noch genug Personen gibt, die mit einem 433MHz Anwendungsfall arbeiten. Also ans Werk!
Rahmenbedingungen / Voraussetzungen
Um mit dem Pi eine oder mehrere 433 MHz Schaltsteckdosen fernzusteuern brauchst du:
- Grundkenntnisse im Handling des Raspberry Pi: wie man eine Datei erzeugt, sie z.B. mit Nano editiert, Owner und Dateimodus ändert und all so was.
- Einen Raspberry Pi: ob Modell A oder B ist egal, das Modell B ist im headless Betrieb (also ohne angeschlossenen Monitor) einfacher zu konfigurieren und kostet nur marginal mehr.
- Einen 433 MHz Sender: gibts bei Amazon oder günstiger und schneller bei Watterott electronic – die haben auch Datenblätter dazu.
- Ferner noch eine oder mehrere 433MHz Funkschaltdosen. Hier gibt es ein großes Angebot, ich habe ein 2er Set inkl. Fernbedienung von Elro genommen, die gibts auch bei Amazon oder im Baumarkt. Ich kann leider nicht garantieren, dass diese Anleitung mit Schaltdosen von anderen Herstellern funktioniert – mit Produkten von Elro seid ihr jedenfalls auf der sicheren Seite.
- Ein genialisches Python Programm zum Schalten der Steckdosen über den mit dem Pi verbundenen 433MHz Sender – geschrieben von HeikoHeiko. Gibt es bei http://pastebin.com/aRipYrZ6. Einfach das dort abgebildete Programm in eine auf dem Pi zu erzeugende Datei namens elropi.py pasten.
- Außerdem muss noch die
rpi.gpio
Python Library installiert werden. Wie das geht steht hier. - Im Folgenden gehe ich davon aus, dass der User Pi heißt und dass die hier erwähnten Routinen im Verzeichnis
/home/pi/433mhz
liegen - WiringPi braucht ihr nicht. Imho nur überflüssiger Ballast. Im Internet findet ihr aber sicher auch jede Menge anderer Anleitungen, die auf WiringPi basieren.
Anschluss des Senders
Der Sender hat 4 Pins. Einer davon ist die Antenne [ANT], an welchem wir einen 17cm langen Draht befestigen. Ob ihr das mit dem Lötkolben macht oder den Buchse-Buchse Bastelkabeln vom Pi, bleibt euch überlassen.
Ich habe mich für die Steckervariante entschieden und nach dem Test des Aufbaus die Stecker mit etwas Heißkleber fixiert.
Jetzt wirds leider etwas tricky! Es gibt viele Varianten des Senders und ich garantiere nicht, dass die Pinbelegung immer dieselbe ist. In meinem Fall ist die Belegung wie folgt:
1 – Ground (Masse) geht an Pin 6 oder 25 des Pi
2 – Data In wird mit einem freien GPIO Pin des Pi verbunden –
bei mir ist das Pin 26 für GPIO#7
3 – Schließlich noch die Stromversorgung 3,3 Volt an Pin 1 oder Pin 17 des Pi
4 – Die Antenne wie oben beschrieben. Über kurze Entfernungen von 1-2 Metern braucht man die Antenne nicht unbedingt.
Wer sich mit den Paspberry Pi Kontakten nicht so richtig auskennt, dem empfehle ich die Lektüre von Elinux Org – RPi Low Level Peripherals.
Ob und wie ihr das in ein Gehäuse einbaut, bleibt euch überlassen. Für diesen Anwendungsfall habe ich dieses Gehäuse hier verwandt . Ist der USB Stecker vom Stromanschluss – wie meist – gerade ausgeführt, muss man an der passenden Stelle eine Aussparung in die Frontplatte für den Micro-USB Stecker bohren. Die SD Speicherkarte steckt bei meiner eigenen Lösung in einem Micro SD Adaper, also steht sie nicht über. ggf. also auch hier noch bohren und feilen. Alternativ gehen auch Gefrierdosen zum Verpacken der Elektronik.
In Höhe der Befestigungsbohrungen des Pi habe ich mit Heißkleber zwei Holzklötzchen in das Gehäuse geklebt, um den Pi darauf festzuschrauben. Den Sender habe ich direkt mit dem Gehäuse verklebt. Generell finde ich die Gehäusesituation für den permanenten Verbau des Pi mit angeschlossener Peripherie eher unbefriedigend.
Einrichten der Funksteckdose
Die Funktsteckdose muss erst einmal codiert werden. Dazu hat sie i.d.R. eine kleine mit einem Deckel versehene Öffnung unter der sich ein 10-fach DIP Schalter befindet. Schalterchen 1 bis 5 sind für den Systemcode da.
Wir können eine beliebige Kombination wählen z.b 1-0-1-0-1 und merken uns diese. Ebenso können wir nun die Fernbedienung codieren. Die Fernbedienung wird eigentlich nicht benötigt, ist aber ganz praktisch zum Testen.
Die Schalterchen 6 bis 10 legen fest, welche Taste der Fernbedienung gedrückt werden muss um die Dose zu schalten. Der erste Schalter (= Nr. 6) auf ON bedeutet, dass Taste A der Fernsteuerung die Dose schaltet. Schalterchen 7 bis 10 bleiben auf OFF.
Im Weiteren gehe ich davon aus, dass die Dose genauso konfiguriert ist, d.h. auf Taste A liegt. Jetzt könnt ihr schon einmal mit der Fernbedienung ausprobieren, ob das funktioniert – vorausgesetzt, ihr habt eine solche.
Programm einrichten
Das Programm elropi.py haben wir schon auf den Pi kopiert und wir machen es im Editor auf.
1 |
nano elropi.py |
Fast am Ende der Datei (ca. Zeile 91) finden sich zwei Zeilen
1 2 3 4 |
# Change the default_key[ ] variable below according to the dipswitches on your Elro receivers. default_key = [1,0,0,0,1] # change the pin accpording to your wiring default_pin = 7 |
Die Werte in den eckigen Klammern der Zeile default_key ändern wir so ab, dass sie dem oben eingestellten Systemcode entsprechen. Den default_pin ändern wir auf den von uns gewählten GPIO Pin unseres Raspberry Pi. Der hier verwendete GPIO Pin #7 entspricht dem physischen Pin #26.
Achtung: Bitte beachtet, dass die GPIO Pin Nummerierung etwas inkonsistent gehandhabt wird. GPIO Pin #7 ist nicht mit dem physikalischen Pin #7 zu verwechseln! Zu allem Überfluss gibt es noch Unterschiede in der Pinbelegung zwischen den ersten Rev. 1 Boards und den aktuelleren Rev. 2 Boards. Am besten ihr schaut euch die oben erwähnte Seite bei elinux.org an oder nutzt diese sehr hilfreiche Grafik hier und druckt sie euch als Referenz aus.
Die oben erwähnten Änderungen werden eigentlich nur benötigt, wenn man elropi.py direkt anspricht, um die Dose zu schalten. Das können wir jetzt schon mal testen
1 |
sudo python elropi.py 1 0 |
schaltet die Dose Nummer 1 aus,
1 |
sudo python elropi.py 1 1 |
schaltet sie ein. Der erste Parameter ist also die Dosennummer (hier A), der zweite der gewünschte Zustand. Weil wir hier direkt mit der Maschine reden, kann das nur als superuser ausgeführt werden, deshalb der sudo
vornedran.
Für den Fall, dass ihr mehr als eine Schaltsteckdose anschließen wollt: Die Dosennummer wird in 2er Potenzen hochgezählt: Dose A =1, Dose B =2, Dose C = 4, Dose D = 8)
In eigene Programme einbinden
Für eigene Shell Programme (Bash Skript) könnt ihr den Programmaufruf wie oben direkt in das Skript einbinden.
Bei Python geht man wie folgt vor:
Am Anfang des Python Skripts einfach die Zeile
1 |
from elropi import RemoteSwitch |
einfügen. Das vorhin erstellte Programm elropi.py
sollte im selben Verzeichnis liegen, wie euer Python Programm. Wer Python besser beherrscht als ich, wird sicher auch eine elegantere Lösung finden, bei der elropi.py
in einem zentralen Library Verzeichnis abgelegt und von dort aus aufgerufen werden.
Die weiter oben vorgenommenen Einstellungen im Programm elropi.py nützen uns hier nichts. Bei Verwendung der importierten Klasse müssen die die Steuerungsparameter deshalb im aufrufenden Programm wie folgt eingestellt werden
1 2 3 4 5 6 |
# change device number according to your requirements deviceno=1 # Change the key[] variable below according to the dipswitches on your Elro receivers. default_key = [1,0,1,0,1] # change the GPIO pin according to your wiring default_pin =7 |
und mit
1 2 |
# set parameters for class elropi.py device = RemoteSwitch(device=deviceno,key=default_key,pin=default_pin) |
in das Device Objekt hineingeschrieben. Eingeschaltet wird die Dose dann mit
1 |
device.switchOn() |
Ausgeschaltet mit
1 |
device.switchOff() |
Dabei die Groß/Kleinschreibung beachten…
Hier zwei Anwendungsbeispiele: Hängenden Router automatisch rebooten und IoT Heizungssteuerung. Viel Spaß!
Kommentare jederzeit willkommen.
Klasse Anleitung – auch für Anfänger im Raspi-/Python-Umfeld!
Auch das Programm von HeikoHeiko ist wirklich "genialisch"
Vielen Dank.
Hat gleich geklappt – auch bei Funksteckdosen von arendo
http://www.amazon.de/gp/product/B00KM83Q1U?psc=1&redirect=true&ref_=oh_aui_detailpage_o06_s00