Programmierung Raspberry Pi

Raspberry Pi: 433 MHz Funksteckdose schalten

Raspberry Pi 2 mit 443 MHz Sender
Geschrieben von Tony

Ein großes Einsatzgebiet des Raspberry Pi ist die Realisierung einer kostengünstigen und individuellen Hausautomation. Dabei ist das Schalten von 433 MHz Funksteckdosen oder anderen kompatiblen Geräten eine beliebte Anwendung. Der Pi fungiert dabei als Sender auf einer Frequenz von 433 MHz. Im folgenden Tutorial erfährst du, wie man mit dem Raspberry Pi Funksteckdose schalten kann.

Die passende Funksteckdose

Funksteckdosen sind in der Regel bei allen Elektrofachgeschäften, als auch in diversen Onlineshops erhältlich. Funksteckdosen sind so konzipiert, dass man an der Steckdose über einen DIP Schalter einen 1-0-Code einstellt, über den diese ansprechbar ist. Funksteckdosen vom Typ Elro AB440S und viele andere gehören unteranderem dazu und sind im Zusammenhang mit dem Pi sehr beliebt. Ich verwende für dieses Tutorial die folgenden Funksteckdosen.

CSL Funksteckdosen (Amazon)

Mittlerweile gibt es bereits Funksteckdosen, welche selbstlernend sind. Das bedeutet, dass es zur Konfiguration des 1-0-Codes keine Dip-Schalter gibt. Dieses Tutorial bezieht sich auf Funksteckdosen mit Dip-Schaltern. Für selbstlernende Funksteckdosen müsste man mit dem 433 MHz Empfängermodul zunächst den Code empfangen, welches man auch von der Fernbedienung aus sendet um die Steckdose zu schalten.

433 MHz Sendemodul

Um die Funksteckdose ansteuern zu können müssen wir den Raspberry Pi mit einem 433 MHz Sendemodul ausrüsten. Solche Module gibt es meist in Kombination mit einem Empfängermodul für wenig Geld.

433 MHz Funk- Sende und Empfänger Modul (Amazon)

433 MHz Funk- Sende und Empfänger Modul

433 MHz Funk- Sende und Empfänger Modul

Im linken Teil des Bildes ist das für uns relevante Sendemodul dargestellt. Dieses verfügt über 3 bzw. 4 Anschlüsse:

  • Pin 1: ATAD (Daten)
  • Pin 2: VCC (Versorgungsspannung)
  • Pin 3: GND (Masse)
  • Pin 4: Ant (Antenne)

Pin 1, 2 und 3 verbinden wir mit dem Raspberry Pi. An Pin 4 (Ant) können wir eine Antenne anschließen bzw. anlöten um die Reichweite des Sendemoduls zu erhöhen. Für die Antenne genügt ein Stück Draht mit der Länge 17 cm. Die Pinbelegung von anderen Modulen kann abweichen, sollte aber dennoch eine ähnliche Struktur aufweisen.

Schaltungsaufbau

Üblicherweise arbeitet das 433 MHz Sendemodul mit einer Betriebsspannung von 3,3 Volt bis 5 Volt. Für das hier verwendete Sendemodul verwenden wir eine Betriebsspannung von 5 Volt. Dadurch erhöht sich die Sendeleistung und die Reichweite. Im Detail bedeutet das, dass wir den Pin 2 (VCC) des Moduls mit Pin 2 oder 4 (5V) am Raspberry Pi verbinden. Weiterhin verbinden wir Pin 3 GND mit einem Ground-Pin vom Pi. Für dieses Tutorial verwenden wir Pin 6 des Raspberry Pi. Zuletzt schließt man die Datenleitung des 433 MHz Sendemoduls (Pin 1 ATAD) an Pin 11 (GPIO-Pin 17) am Pi an.

Raspberry Pi 433 MHz Sendemodul Schaltung (Bild: Eagle)

Raspberry Pi 433 MHz Sendemodul Schaltung (Bild: Eagle)

Software: Vorbereitung

Zum Schalten der Funksteckdose(n) bedarf es der Installation einiger Tools. Im ersten Schritt bringen wir unser System auf den neusten Stand und installieren falls notwendig den Git-Core.

sudo apt-get update
sudo apt-get install git-core

Software: WiringPi installieren

Zur Ansteuerung des 433 MHz Senders über die GPIO-Pins benötigen wir das Tool bzw. die Programmbibliothek WiringPi. Mit folgendem Befehl laden wir WiringPi herunter.

git clone git://git.drogon.net/wiringPi

Anschließend wechseln wir in das Verzeichnis von WiringPi und führen den Buid-Skript aus, um das Tool zu installieren. Die Installation nimmt einen kurzen Augenblick in Anspruch.

cd wiringPi
./build

Nach der Installation von WiringPi wechseln wir in das Ursprungsverzeichnis zurück.

cd

Software: Raspberry-Remote installieren

Zum Steuern unserer Funksteckdosen verwenden wir das Tool Raspberry-Remote von xkonni. Dieses laden wir uns von Github herunter, wechseln in das entsprechende Verzeichnis und installieren bzw. kompilieren es.

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

Das wars auch schon! Der Raspberry Pi kann jetzt mit der installierten Software und der wie beschrieben verbundenen Hardware Funksteckdosen steuern. Zum Steuern einer Steckdose müssen wir einen entsprechenden 1-0-Code heraussenden. Dieser Code ist an jeder Funksteckdose (z.B. Typ Elro AB440S und einigen anderen Modellen) prinzipiell über Dip-Schalter konfigurierbar. Der Key setzt sich folgendermaßen zusammen:

(Systemcode, 5 Stellen)(Unitcode, 5 Stellen)

Der meist dazugehörige Handsender verfügt ebenfalls über einen 5-stelligen Dip-Schalter. Dort wird der Systemcode (oder auch Hauscode) konfiguriert, mit welchem die Steckdosen arbeiten. Dies ist in unserem Fall aber nicht zwingend notwendig, da wir die Funksteckdosen ja mit dem Raspberry Pi und nicht mit dem Handsender schalten wollen. Es empfiehlt sich aber den einheitlichen Hauscode an den Steckdosen etwas zu verändern, sodass nicht zufällig der Nachbar eure Steckdosen schaltet und umgekehrt. Prinzipiell sollte der Hauscode an allen Steckdosen gleich sein, jediglich die Dip-Konfiguartion sollte sich immer unterscheiden. Es sei denn, es sollen mehrere Steckdosen gleichzeitig geschalten werden. Für die Einstellung des Unitcodes, also der 5-stelligen Steckdosennummer an der Funksteckdose ergibt sich folgende Übersetzung (Beispiele):

(Unitcode) = 01000 bedeutet Steckdosennummer:2
(Unitcode) = 00001 bedeutet Steckdosennummer:5

Jetzt haben wir alle nötigen Informationen um eine Steckdose konkret zu schalten. Im Terminal geben wir dazu folgenden Befehl ein:

sudo ./send (Systemcode)(Steckdosennummer)(Zustand 1 An, 0 Aus)

Für die Steckdosennummer verwenden wir nicht den eingestellten 1-0-Code, sondern dessen Übersetzung. Im nachfolgenden Beispiel wollen wir die Funksteckdose mit dem Hauscode 11101, der Steckdosennummer 2 auf An schalten:

sudo ./send 11101 2 1

Raspberry Remote (Screenshot Raspbian)

Raspberry Remote (Screenshot Raspbian)

Theoretisch sollte die Funksteckdose nun einschalten.

Steuerung über Webinterface

Zur Steuerung der Steckdosen mit Raspberry-Remote bietet sich ein Webinterface an, da sonst jedes mal ein Login via SSH oder Remotedesktop notwendig wäre. Raspberry-Remote bringt dazu ein eigenes simples Webinterface mit. Um dieses zu verwenden benötigen wir zunächst einen Webserver. Ich verwende in diesem Fall den Apache Webserver 2 und PHP5.

sudo apt-get install apache2
sudo apt-get install php5

Mehr Informationen zur Instalaltion eines Apache Webservers findet ihr hier. Ist der Webserver eingerichtet können wir das bereits bei Raspberry-Remote mitgelieferte Webinterface in den Anzeigeordner (Public-Ordner) des Webservers verschieben. Wir verwenden hier noch den Unterordner send443.

mv ~/raspberry-remote/webinterface/* /var/www/send443

Damit der PHP-Skript ordnungsgemäßg funktioniert müssen wir die Datei config.php bearbeiten.

cd /var/www/send443
nano config.php

Im Quellcode ändern wir den Inhalt der Variable $target auf die IP-Adresse unseres Pi´s. Gleichzeitig können wir im unteren Bereich der Konfigurationsdatei die Hauscodes und Funksteckdosennummern, sowie deren Bezeichnung im Webinterface festlegen. Anschließend kann die Datei geschlossen und gespeichert werden. Schalten wir später über das Webinterface unsere Funksteckdosen, dann greift der Webskript auf den Raspberry-Remote Daemon zurück. Damit wir diesen nutzen können, muss dieser erstmal installiert bzw. kompiliert werden.

cd raspberry-remote
make daemon

Ist der Daemon installiert können wir ihn mit folgendem Befehl starten. Das & im in der folgenden Zeile bewirkt, dass der Prozess im Hintergrund ausgeführt wird.

sudo ./daemon &

Öffnen wir im Webinterface nun Raspberry-Remote sollte sich das folgende Bild zeigen. Zum Öffnen geben wir die IP-Adresse des Raspberry Pi in die Browserzeile ein und navigieren zum entsprechendem Unterordner: http://IP/send443

Screenshot Raspberry Remote

Screenshot Raspberry Remote

Damit der Daemon bei jedem Systemstart automatisch startet, schreiben wir einen kleinen Skript:

sudo nano /home/pi/raspberry-remote/send443.sh

Die die Datei fügen wir folgenden Inhalt ein.

#!/bin/bash
cd /home/pi/raspberry-remote/
sudo ./daemon &
exit 0

Abschließend setzen wir noch die entsprechenden Rechte.

sudo chmod 755 /home/pi/raspberry-remote/send443.sh

Damit der gerade geschriebene Skript unseren Daemon bei jedem Start ausführt, fügen wir die send443.sh in die rc.local ein.

sudo nano /etc/rc.local

Dort fügen wir folgende Zeile ein und speichern die Datei.

/home/pi/raspberry-remote/send443.sh

Geschafft! Jetzt können wir sowohl über die Konsole, als auch bequem über ein Webinterface unsere Funksteckdosen steuern.

Quellen: gtkdb.de

Über den Autor

Tony

Ich bin Tony, begeistert von Einplatinencomputer und berichte über meine Erfahrungen und Projekte mit dem Raspberry Pi, Banana Pi und anderen Minicomputern.

Hinterlasse eine Antwort

Kommentare

  • Schade, dass die Anleitung, nur für die 2 angegebenen Steckdosen passt. Ich benutze diverse Funksteckdosen, unterschiedlicher Hersteller, nicht alle lassen sich über Mäuseklavier einstellen. Z.B. meine REV Ritter… aber auch das ist kein Problem, denn es gibt diverse Methoden, um die Codes rauszubekommen. Ich benutze dazu den o.g. Empfänger, der an einen Buspirate angeschlossen wird und die Software OpenLogic Sniffer. Aus dem Ergebnis, kann man dann unter Zuhilfenahme des Datenblattes vom PT2260 (http://www.spelektroniikka.fi/kuvat/PT2260.pdf ) die Codes zusammenbasteln.

    • Hallo Hubert,

      danke für deien Kommentar. Diese Anleitung bezieht sich zunächst erstmal nur auf Funksteckdosen, welche über DIP Schalter konfiguriert werden können. Bei selbstlernenden Steckdosen muss der zu sendende Code natürich erst herausgefunden werden – Zum Beispiel mit deiner Variante. Das Tool Pilight für den Pi hat aber auch schon viele Protokolle von selbstlernenden Steckdosen implementiert, sodass dies ebenfalls eine gute Alternative ist.

    • Hallo Hubert,
      habe gerade diesen Beitrag gefunden.
      Ich habe auch 3 Steckdosen der Firma Ritter habe aber keine Ahnung
      wie man den Code umstellt.
      Mit Sniffer bekomme ich folgende Codes:
      Taste 1
      Received 14013444 – on
      Received 14013441 – off

      Taste 2
      Received 13988876 – on
      Received 13988867 – off

      Taste 3
      Received 13982732 – on
      Received 13982721 – off

      Kannst du mir bitte erklaeren wie ich den Code fuer die config.php
      rauskriege?
      Danke

    • Hallo Mirko,

      die Antennen sind mittlerweile nicht mehr standardmäßig beim Sender / Empfänger dabei. Zu Kaufen gibt es diese beispielsweise bei Amazon (habe ich allerdings noch nicht probiert). Ich nehme dafür immer selber Draht aus der Bastelkiste. Ich hab gute Erfahrungen gemacht mit normalem Draht (Einzelader). Wichtig ist das der Draht und damit die Antenne 17 cm lang ist für 433 MHz 🙂

    • Schick 🙂 Aber wieso unbedingt MySQL? Ich nehme an ihr nutzt MySQL zu speichern der Gerätedaten? Dann ist MySQL ein bisschen to much. Der MySQL Dienst zieht auf dem Pi relativ viele Ressourcen, dabei sollen bei eurem Projekt „nur“ ein paar Geräteadresse abgelegt werden. SQLite wäre da besser 🙂

  • Achtung auf aktuellen Rasbian-Installationen muss der Unterordner http für das Webinterface verwendet werden:
    mv ~/raspberry-remote/webinterface/* /var/www/http/send443

    Ansonsten ist die Seite nicht erreichbar.
    Danke für die tolle Anleitung.
    Viele Grüße
    Darius

    • Hallo Darius, du scheinst dich vor kurzem erst mit der Thematik auseinandergesetzt zu haben. Bei mir funktioniert das Web Interface einfach nicht. Ich habe die Anleitung schon einige Male durchgearbeitet, aber irgendwas scheint nicht zu funktionieren.
      Die Steckdose lässt sich schalten. In der Konsole kommen auch keine Fehlermeldungen, wenn ich die Befehle dort eingebe. Trotzdem öffnet sich nicht das Bild wie oben mit den Schaltern und den Roten Vierecken.
      Ich bekomme immer nur die Meldung:
      Not Found

      The requested URL /send443 was not found on this server.

      Apache/2.4.10 (Raspbian) Server at 192.168.178.57 Port 80

      wenn ich http://192.168.178.xx/send443 in Chrome eintippe.
      Deinen Hinweis, send443 noch in http umzukopieren habe ich auch befolgt. Also was mache ich verkehrt??? Bitte hilf mir jemand. Ich sitze da nicht den ersten Tag vor.
      Viele Grüsse
      Basti

  • Bei mir kommt es zu einer Fehlermeldung, wenn ich den Befehl
    „mv ~/raspberry-remote/webinterface/* /var/www/send443“. Nämlich zu:

    mv: target ‘/var/www/send44’ is not a Directory

    Was kann ich dagegen machen ?
    Danke

  • Hallo, äusserst interessant!!
    Ich bin Neuling in der Haustechnik und suche zum Probieren eine kostengünstige und einfache Lösung. Meine Frage wäre ob deine Installation (RPi + GPIO 433Mhz Antennen) auch mit FHEM betrieben werden kann? Braucht es zusätzliche SW? Möchte momentan ein paar Intertechno schalter bedienen…

    Vielen Dank für die Hilfe!!!

    • Hallo Torsten,

      mit diesen Sendemodulen kannst du auch mit FHEM arbeiten. Wie diese in FHEM eingebunden werden weiß ich leider nicht, da ich damit noch nicht groß gearbeitet habe.

  • Hallo Tony,

    erstmal danke für die gute Anleitung, allerdings scheitere ich bereits an dem Befehl mv ~/raspberry-remote/webinterface /* /var/www/http/send443, da dort ständig die Meldung kommt: mv: der Aufruf von stat für „/home/pi/raspberry-remote/webinterface/*“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden.
    Daraufhin hab ich mal nachgeschaut ob das Verzeichnis überhaupt existiert aber ich fand nur einen html Ordner in www. Anschließend habe ich versucht die Datei in diesen Ordner zu verschieben, jedoch kam dort dieselbe Fehlermeldung. Was soll ich machen damit das Webinterface funktioniert? Ich habe bereits versucht das Verzeichnis von Hand zu erstellen aber dazu habe ich keine Rechte und ich bezweifle, dass das so funktionieren würde. Ich hoffe dass du mir da weiterhelfen kannst. Ich brauche die Steuerung in ca. einem Monat für eine Präsentation in der Schule.
    Danke schon mal im Voraus für deine Hilfe

    Grüße Tobias

  • Hallo Tony,

    super Anleitung 🙂

    Da dies mein Einstiegsprojekt in die Pi Welt ist, stellt sich mir die fragen der mehrfach Nutzungen eines Pis. Ich überlege nämlich auch einen Media Center mir einzurichten.
    Ist es möglich den 433 MHz Sender und einen Media Center auf einem Pi laufen zulassen oder überfordert das den Pi?

    Viele Grüße
    Martin

    • Hallo Martin,

      das kannst du natürlich so machen. Der Sender zieht nicht viel an Ressourcen – eigentlich gar nix. Wenn dann ist es der Apache der hier auf die Ressourcen schlägt. Aber da du ja keine Webseite mit mehreren hundert Seitenaufrufen in kurzen Zeiträumen betreibst, ist das kein Problem 🙂

  • Vielen Dank für die tolle Anleitung, hat auf Anhieb funktioniert. Ich habe mit speziell die Funksteckdosen mit DIP Schalter besorgt, da fällt schon eine Schwierigkeit weg und teurer sind sie auch nicht.

    • Das Set kannst du nehmen. Ist im Grunde das gleiche, welches ich verlinkt habe. Eine Antenne brauchst du, sowhl am Sender als auch am Empfänger. Mit den dort beiliegenden Antennen hatte ich noch nicht all zu gute Erfahrungen, zumindest das eine mal wo ich diese verwendet habe. Ich fahr immer ganz gut wenn ich mir selbst einen 17,2 cm langen Draht nehme, diese wickel und anlöte 🙂

  • Hi,
    ich wollte mich auch einmal für dein tolles TuT bedanken ! Ich hatte mir bereits vorgestern alle Teile bestellt ( deine Links Amazon etc. ) diese kamen dann gestern endlich an 🙂

    Heute werde ich das alles einmal ausprobieren! Eine Frage ist mir noch gekommen, ich habe unten ein Garagen Tor dieses ist ebenfalls mit DIP Schaltern ausgestattet ( ca 15 Stck – genau müsste ich nochmal in der Fernbedienung nachsehen ) ist es auch möglich das Tor zu öffnen / ich weiss leider nicht was für ne Frequenz das Tor hat – kann ich das iwie rausfinden ?

    Vielen Dank

    Und weiter so !

    • Du kannst mit einem 433 MHz Sniffer mal schauen ob da Daten reinkommen wenn du mit der eigentlich Fernbedienung schaltest – wenn ja dann kannst du das Ding auch mit dem Raspi ansteuern mit dem gleichen Modul. Beim Sniffen kannst du aber natürlich auch anderes von den Nachbarn etc empfangen. Hier sollte ein Blick ins Handbuch / Datenblatt der sinnvollere Weg sein bzw. der Kontakt zum Hersteller.

  • Hi

    Ich habe die Anleitung befolgt und alles funktioniert soweit, jedoch kann ich die Steckdose nur ansteuern, wenn das Handy und der Raspberry im gleichen WLAN sind. Ist es nicht möglich, mit dem Handy von unterwegs darauf zuzugreifen?

  • Hallo ich kann mir das Webinterface leider nicht aufrufen 🙁
    per Terminal kann ich schalten und walten aber würde es gerne bevorzugen es per Webinterface zu machen

    Fehler 404 Page not Found

    ich bin noch ein Neuling im diesem Thema, er findet nach meinem Verständnis den Ordner nicht oder verstehe ich das was falsch?
    Kann mir da jemand weiter helfen?

    • Navigiere mal im Terminal zum Public-Verzeichnis des Apache und kontrolliere ob die Webseite dort auch abgelegt wurde. Prüfe außerdem die Rechte des Ordners 🙂

  • Tolle Anleitung die auch bei mir funktioniert!
    Habe es bisher noch ohne Webserver laufen und gebe im Terminal immer: „/home/pi/raspberry-remote/send 11101 2 1“ ein wenn der Pi gestartet ist. Werde jetzt daran arbeiten diese Funktion mit FHEM zu verknüpfen, um dann das ganze per Handy, Tablet oder Webinterface zu steuern.

    Größtes Ziel ist es, dass ganze wie Amazon Echo „Alexa“ per Sprachbefehl zu steuern.

    So erspart man sich den Kauf teurer Wlan-Steckdosen.

    Danke für deine Anleitung!

    Gruß Joschi

    • Die Möglichkeiten durch die neusten „Softwareerrungenschaften“ sind enor. Bei mir ist ebenfalls ein Magic Mirror gemeinsam mit Alexa am laufen. Als nächstes möchte ich mich an die Alexa-Skills wagen und eine Sprachsteuerung von Smart Home Komponenten bauen 🙂

  • Ich hab das ganze jetzt schon länger am laufen, habe aber eine Frage. Gibt es eine Möglichkeit um über eine Anfrage beim Webinterface den selben Befehl mehrmals auszuführen?

    • Dazu müsste man selbst Hand anlegen, entweder im Webinterface selbst, oder im C-Code. Wenn ich mich recht erinnere sendet das Tool bereits von sich aus 3 oder 4 mal.

  • Hallo Tony, vielen Dank für diese sehr einfache Anleitung. (is mein ersten Projekt mit dem pi)

    Ich habe alles so gemacht, wie beschrieben (bislang nur der erste Teil ohne Webinterface), und die Installation ist fehlerfrei durchgelaufen und die Befehle werden abgeschickt.

    Mein Problem ist nun, das rein gar nichts passiert.

    Ich habe bereits mehrfach die Codes an der Steckdose geändert und auch die Fernbedienung umkonfiguriert um zu sehen, ob sich die Steckdosen ansteuern lassen (Hätte ja sein können, das die kaputt sind) jedenfalls läuft das alles Problemlos.
    An der Distanz kann es auch nicht liegen, da der Sender unmittelbar neben der (in der Steckdose eingesteckten) Funkdose liegt.
    Ich habe bereits die GND-pins alle ausprobiert und auch den zweiten 5Volt Pi getestet, aber leider passiert rein gar nichts

  • Hallo Tony, toller Beitrag!
    Was bedeutet wir benutzen nicht den 0-1-Code sondern dessen Übersetzung?
    Ich werde dieses Projekt dazu nutzen eine Außenbeleuchtung, mehrere Jalousien, eine Markise und ein Garagentor via 433 MHz zu schalten. Ich hoffe der Code der jeweiligen Fernbedienungen lässt sich problemlos auslesen. Material dafür ist heute jedenfalls von Reichelt gekommen. 🙂

    LG Björn

    • Um von der Konsole aus zu senden mittels des vorgestellten Tools, verwendet man als Argumente im Befehl den Hauscode der Steckdose in binär Darstellung, die Steckdosennummer aber als dezimale Ziffer, also nicht den binären 1-0 Code 🙂

  • Hallo Tony, ich bin Rentner und habe bei der Bestellung von Festplatten einen Raspberry Pi 3 als Zugabe bekommen. Durch Ihre klaren Tutorien habe ich richtig Lust auf die Steuerung von vorhandenen Funksteckdosen bekommen. Hardwaremäßig ist alles klar. Bei der Softwareprogrammierung usw. komme ich aber nicht mehr mit. Schade, ich hätte großen Spaß dabei, denn mit Windows, Mac, Androide usw. bin ich eigentlich noch richtig gut ausgestattet und dabei. Vielleicht vertreibt auch mal jemand die Softwaremodule oder entsprechende Hilfen. Nochmals vielen Dank für die kompetenten Beschreibungen. Super.

  • Hy möchte gerne das ELV Modul nutzen und PIN 17 ist schon belegt. Gibt es eine möglichkeit nen anderen GPIO zu nutzen mit BiWiring? Danke Micha