Schon länger wollte ich einmal Funksteckdosen mit einem Raspberry Pi steuern. Also ein & ausschalten!
Und da ich mich in letzter Zeit sehr Intensiv mit meinem neuem 3D Drucker dem Creality Ender 3 Pro (*Amazon Link) beschäftige, musste ich mir die Zeit einfach einmal nehmen 😉
Da ich den 3D Drucker über den Raspberry Pi steuern & überwachen, sowie den Drucker & dessen Beleuchtung ein / ausschalten wollte, habe ich auf dem Raspberry Pi „Octoprint“ installiert.
Was im Prinzip ja nicht anderes ist als Raspbian Linux, nur eben mit der Steuerungssoftware „Octoprint“ bereits vorinstalliert 😉
Es gibt zwar eine Menge an Tutorials dafür, die meisten davon verwenden aber noch alle „alte“ Funksteckdosen mit DIP-Schaltern.
Da ich aber solche Funksteckdosen kaum mehr zu bekommen sind, brauchte ich eine Lösung die auch mit den „neueren“ sogenannten selbstlernenden Funksteckdosen funktioniert 😎
Daher möchte ich hier eine kleine Anleitung schreiben, wie das funktioniert & welche Teile / Hardware ich hierfür verwendet habe 😉
Folgende Hardware habe ich für meinen Testaufbau verwendet bzw. wird benötigt:
- Raspberry Pi (in meinem Fall ein Raspberry Pi 3b+) (*Amazon Link)
- 1x MicroSD Karte für den Rasperry Pi 3b+ (*Amazon Link)
- 1x Netzteil für den Raspberry Pi 5V/2,5A (*Original Raspberry Pi Netzteil (Amazon) oder *Aukuru 5V 3A Netzteil (Amazon))
- Kartenleser (zur Installation des Betriebssystems auf die SD Karte für den Raspberry Pi) (*Amazon Link)
- 1x Funk & Sendemodul 433MHz mit Antennen & Jumper Kabel (Set) Aukuru ( *Amazon Link)
- 1x Set Renkforce Funk-Steckdosen-Set 4teilig Innenbereich 2000W (3x Schalter + 1x Fernbedienung) (Conrad-Link)
- 1x Ethernet Kabel (*Amazon Link)
Software:
- Win32DiskImager (um das Image auf die SD Karte zu schreiben)
- Putty oder anderer SSH Client
Optional noch:
- Offizielles Gehäuse für den Raspberry Pi 3b+ (*Amazon Link)
- Raspberry Pi Breadboard (*Amazon Link)
Hat man alles nötige beisammen, kann es auch schon losgehen 😉
In dieser Anleitung gehe ich übrigens davon aus, dass Raspbian oder Octoprint oder ein anderes Linux schon auf der SD-Karte installiert ist, bzw. auf dem Raspberry Pi läuft!
Auch gehe ich davon aus, dass jeder weiß wie man sich auf dem Pi verbindet & anmeldet 😉
Außerdem setzte ich hier auch grundlegende Linux & Raspberry Pi Kenntnisse voraus 😆
Falls das noch nicht der Fall ist, gibt es im Netz ja genügend gute Anleitungen.
➡ (Sollte aber dennoch jemand Hilfe etc. brauchen, so kann er sich aber gerne an mich wenden!)
Nun kann es los gehen 😉
- Zuerst verbindet man sich mit Putty oder einem anderen SSH Client auf den Raspberry Pi, und loggt sich dort ein.
- Als nächstes aktualisieren wir den Pi nochmals, bevor wir die benötigten Programme installieren mit:
apt-get update
apt-get upgrade - Danach installieren wir „GIT“ und „WiringPi„:
apt-get install git
git clone git://git.drogon.net/wiringPigit
cd wiringPi
./build - Als nächstes müssen wir das Empfangsmodul & das Sendemodul am RPi bzw. dessen GPIO Pin’s anschließen:Für das Sendemodul verbinden wir nun folgende Pin’s mit dem Pi:
Raspberry Pi GPIO 17 -> DATA 433Mhz Sendemodul
Raspberry Pi GND -> GND 433Mhz Sendemodul
Raspberry Pi 5V -> VCC 433Mhz SendemodulFür das Empfangsmodul verbinden wir die folgenden Pin’s mit dem Pi:
(hier sieht man übrigens auch gleich nochmal das vorhin angeschlossene Sendemodul 😉 )Raspberry Pi GPIO 27 -> DATA 433Mhz Sendemodul
Raspberry Pi GND -> GND 433Mhz Sendemodul
Raspberry Pi 5V -> VCC 433Mhz SendemodulUnd hier auch noch (falls es jemand braucht) die Belegung der GPIO Pin’s auf dem Raspberry Pi selbst:
➡ Falls auch noch jemand sehen möchte wie es bei mir im angeschlossenen Zustand ausgesehen hat….. 😎 - Um den 433 MHz Sender & den 433Mhz Empänger nun ansprechen zu können, benötigen wir noch die Bibliothek „433Utils“ Vorher müssen wir aber noch „Git-Core“ installieren mit:
apt-get install git-core
apt-get update
apt-get upgrade
Danach installieren wir die „433Utils“:
git clone --recursive https://github.com/ninjablocks/433Utils.git
cd 433Utils/RPi_utils
make all - Im nächsten Schritt lesen wir den Code für jede Taste der Fernbedienung aus.
Sprich für die erste Steckdose Taste EIN & Taste AUS, gibt es jeweils einen eigenen Code!Hierfür welchen wir in nun in den Unterordner „. /RFSniffer„, und starten das gleichnamige Programm „RFSniffer“
cd RFSniffer
./RFSniffer - Jetzt halten wir die Fernbedienung zum Empängermodul, und drücken dort z.B. für die erste Steckdose die Taste EIN.
In Putty bekommen wir danach eine Meldung die uns den CODE der jeweiligen Taste mitteilt:
➡ Recieved XXXXXXX (wobei die X hier für die Zahlenkombination der jeweiligen Taste steht!)Das ganze wiederholt Ihr nun mit jeder Taste, und das jeweils für EIN & AUS!
Notiert auch diese Codes, penibel!
Also welcher Code für welche Taste ist, und auch ob dieser für EIN oder für AUS ist! 😉
💡 Achja, am besten steckt Ihr bevor Ihr das macht, die Funksteckdosen auch noch in eine richtige Steckdose, mit einem kleinem Verbraucher wie einer Lampe… 😉 - Hat man alle Codes ausgelesen & notiert, beenden wir das Programm „RFSNiffer“ , indem wir „STRG+C“ drücken.
- Jetzt kommen wir zu dem Teil des ganzen hier, der richtig Spaß macht!
Wir steuern erstmals die Funksteckdosen über den Raspberry Pi bzw. eben über SSH….Dafür nutzen wir das Programm „codesend„, dass ebenfalls im Ordner „RPI_utils“ liegt 😉
Steckdose 1 einschalten:
codesend XXXXXXX
(hier wieder die XXX durch die vorhin notierte Zahlenkombination von Steckdose 1 für EIN ersetzen!)
Als reines Beispiel:
codesend 1234567
➡ Natürlich muss dafür die Steckdose 1 auch in einer richtigen Steckdose stecken, und natürlich sollte auch ein Verbraucher wir z.B. eine Lampe angeschlossen sein, um zu sehen ob auch alles funktioniert hat 😉
Steckdose 1 ausschalten:
codesend XXXXXXX
(hier wieder die XXX durch die vorhin notierte Zahlenkombination von Steckdose 1 für AUS ersetzen!)Als reines Beispiel:
codesend 0234567
- Hat man alles richtig gemacht, haben wir gerade erfolgreich einen Verbraucher auf Funksteckdose 1 ein & wieder aus geschaltet 😉
Das ganze lässt sich nun mit den vorhin notierten Codes, auch für die anderen Funksteckdosen wiederholen!
Auch kann man diesen Befehl zum ein & ausschalten nun in seinen eigenen Skripts / Webseiten etc. einbinden.:arrow: Ich z.B: habe bei mir in Octoprint 4x Buttons hinzugefügt, mit denen ich jeweils einmal den 3D Drucker und die Beleuchtung dafür ein & ausschalten kann
Important!
Ein kleiner Hinweis am Rande noch…Je nachdem welches System ihr auf dem Raspberry Pi betreibt, kann es erforderlich sein das vor
allen Befehl noch
sudo
geschrieben werden muss, da man diese Befehle mit „Root“ Rechten ausführen muss.Notice
Wenn man andere PIN’s verwendet, muss man vor dem Ausführen vonmake all
folgende Dateien aus dem Verzeichnis „RPI_utils“ anpassen:
codesend.cpp, send.cpp, RFSniffer
In jeder dieser 3 Dateien gibt es eine Zeile mit „int PIN=x“
In dieser Zeile muss nun die Nummer des PIN’s angegeben werden, die man verwenden will.
Dabei muss die Nummer des PIN’s aber nach der „WiringPi“ Belegung vergeben werden 😉
Diese Belegung sieht man, wenn man gpio readall
in der Konsole ausführt.
Will man den PIN nachträglich ändern, müssen die oben 3 genannten Dateien bearbeitet werden, und anschließend wieder folgende Befehle ausgeführt werden:
make clean
make all
Ich hoffe ich konnte mit dieser kleinen überschaubaren Anleitung dem ein oder anderen ein bisschen weiterhelfen.
Natürlich gäbe es noch 10000 weitere Möglichkeiten, das ganze zu optimieren bzw. das ganze auf die „Spitze“ zu treiben…. 😆
Das würde hier aber den Rahmen sprengen 😆
14 Kommentare
Zum Kommentar-Formular springen
Achtung: Der receiver darf beim raspberry nicht an 5V angeschlossen werden, da die GPIO-pins des pi nur für 3,3V ausgelegt sind!!!
Hallo
hat schon jemand geschafft die aktuellen Modelle zu Schalten?
Fa. Brennenstuhl schreibt auf seiner Hompage selbst, dass deren aktuelle Serie nicht mehr auf diese Weise zu schalten seinen und sie deshalb noch für die Raspi Gemeinschaft die alten noch weiter vertreiben. Die kosten dann aber inzwischen das doppelte.
Jetzt habe ich nochmal welche von einem anderen Hersteller gekauft und auch da funktioniert es nicht.
der Sniffer wirft immer vier verschiedene Codes pro Taste aus, immer in der gleichen Reihenfolge. Das gleiche auch die von Brennenstuhl. Wenn ich die codes nach und nach raus sende, passiert leider nichts. Meine (Ur)alten Funkschalter funktionieren im Übrigen. Somit schließe ich einen Fehler meinerseits erstmal aus.
Im Netz habe ich leider noch nichts dazu gefunden
Ich hab genau das selbe Problem, auch mit einem Brennenstuhl set.
Versuche aktuell das Signal irgendwie Aufzunehmen, und dann wieder zu senden…
Mal schauen wo die Reise hin geht, wäre super wenn jemand seine Erfahrungen auch teilen könnte.
Das Problem hatte ich auch. Ich habe raus gefunden, dass es an der verwendeten Puls-Länge liegt. Es funktioniert nur wenn die Puls-Länge im Bereich von 220-320 Mikrosekunden liegt. Die Lösung ist, die Puls-Länge auf 270 Mikrosekunden im Code oder per Parameter explizit anpassen, weil Default Puls-Länge von RCSwitch außerhalb dieses Bereiches liegt.
Gruß
Ha Son Nguyen
Hallo Daniel,
Danke für Deine Anleitung.
Ich verwende die 12-Kanal Funksteckdosen von Lunvon. Wenn ich mit dem C++ Script und dem RFSniffer arbeite, bekomme ich negative Ergebnisse. Beim Senden der Codes habe ich kein Erfolg (und ja, ich habe auch die Vorzeichen mal weggelassen).
Dann habe ich ein python3-Script ausprobiert. Das wiederum lieferte positive (andere) Zahlen (auch ein Delay und Protokoll wird hier angezeigt) – aber auch hier reagiert die Steckdose nicht!
Das der Sender arbeitet, konnte ich schließlich dadurch prüfen, dass ich beide python-Scripte von verschiedenen Terminals laufen ließ! Wenn ich den Handsender betätigt habe, wurden die selben Parameter angezeigt, wie beim starten des sende-Scripts . Handsender schaltet, mit den Pi3 und 4 „geht’s“ nicht!
Über einen Tip, würde ich mich sehr freuen.
Viele Grüße
und bleib Gesund!
Du must das Protokal auf 2 setzen z.B
codesend -2110168064 2
und das die korrespondierende binär Zahl ja mehr als 24 Bit hat muss du das entsprechend anpassen.
mySwitch.send(code, 32);
in codesend.cpp
Viele Grüße
Ralf
Hi Daniel!
Ich habe es erfolgreich geschafft mit dem obigen Aufbau Funksteckdosen mit dip-schaltern zu steuern.
Jetzt habe ich zudem Funksteckdosen von „dewenwils“
https://www.amazon.de/dp/B07VKNXGKW/ref=sr_1_1?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=dewenwils&qid=1591149976&sr=8-1
und habe auch den Code meiner ersten Steckdose per Fernbedienung, so wie du es beschrieben hast, ausgelesen. Zuvor habe ich sie natürlich erst angelernt.
Jedoch wenn ich für Steckdose EIN diesen Code jetzt mit ./codesend 12720076 sende, passiert gar nichts auch wenn ich den Sender direkt neben die Steckdose halte.
Hast du eine Idee, wie man das dennoch hinbekommen könnte?
Bzw. brauch man vielleicht ein anderes Protokoll?
Musste die Fernbedienung beim Auslesen auch ganz nah an den Empfänger halten damit es funktionierte.
LG Bastian
Autor
Hallo!
und du hast den Sender auch richtig angeschlossen?
was passiert wenn du die Steckdose ganz nahe zum Sender hältst?
Bzw. kommt eine Fehlermeldung?
Stimmt der Code auch wirklich?
Ich hab auch schon Funksteckdosen gesehen die vorher ein Sonderzeichen zb benötigen.
Aber wenn das alles nicht geht, hilft da nur googlen. Bei einer brauchte ich mal ein # vorher was ich auch erst durch google gefunden hatte 😉
LG
Daniel
Hallo,
ich habe leider das gleiche Problem mit einer dewenwils Steckdose.
Gibt es inzwischen eine Lösung?
Viele Grüße
Joans
Hab mir mal ein nettes Wardriving-Script geschrieben, das alle Codes rund um meine Codes ausprobiert hat – meine 433MHz-Steckdosen von Aldi haben vielleicht verrückt gespielt – hahaha, das war mal ein Feuerwerk. Dabei habe ich übrigens noch sehr mehr Codes entdeckt, die funktionieren, als solche die von der Fernbedienung rausgesendet wurden. Daraus lässt sich vielleicht sogar ein Algorithmus reverse-engineeren. Ich hoffe, die Nachbarn haben keine solche Sets. 😉
Hallo Daniel,
prinzipiell eine gute Anleitung, alle Achtung!
Dumm nur, dass meine Steckdosen mit 10-stelligen Codes funktionieren und bei mehr als 8 Stellen macht „codesend“ totalen Mist. Es sendet einen völlig anderen Code als den, den ich eigegeben habe.
Hast Du dafür vielleicht auch eine Lösung?
LG
Hartmut
Autor
Hallo Hartmut!
Da ich leider gerade keine anderen Dosen mit einem 10-stelligen Code hier habe , kann ich dir da leider nicht weiterhelfen.
Ehrlich gesagt wusste ich gar nicht das es auch 10-stellige gibt.
Ich mach mich mal im Internet schlau, und sollte ich fündig werden, melde ich mich hier nochmal 😉
LG
Daniel
Hallo Daniel,
ich habe leider das Problem, dass meine Fernbedienung bei jedem Betätigen einen anderen Code sendet. Selbst, wenn ich mir einen davon aussuche, reagiert die Steckdose leider nicht. Kannst du mir dabei weiterhelfen?
Ansonsten gut geschriebene Anleitung 🙂
Autor
Hallo Friedrich!
Und das obwohl du immer die gleiche Taste nimmst?
Sprich immer für z.B. die erste Steckdose die TASTE EIN?
Welches Steckdosen Set hast du den?
Leider kann ich dir dies aber auch zurzeit nicht beantworten, da ich selbst ja nur ein solches SET habe und lange an dieser funktionierenden Lösung gebastelt & getüftelt habe 😉
Hier, dieses Set habe ich:
https://amzn.to/35SGjl1
LG
Daniel