Liebe Leserinnen und Leser – heute möchte ich euch mal beschreiben, wie ihr mithilfe des Raspberry Pi Funk-Steckdosen schalten könnt. Es gibt sicher einen Haufen praktischer Einsatzmöglichkeiten für diese Anwendung des Raspberry, ich selbst schalte damit meinen Drucker, der sich im Keller befindet ein und aus, da er auch im Standby einiges an Strom zieht und ich ungern für jeden Druck erstmal in den Keller laufen möchte, um ihn einzuschalten und dann wieder auszuschalten.
Aber jetzt zum Projekt selbst: Alles was ihr brauch sind folgende Dinge:
- einen Raspberry Pi
- einen 433MHz Sender (für 1,90 bei dx.com)
- ein paar Jumper-Kabel (gut 3€ bei dx.com) und bei Bedarf noch ein Breadboard (ca. 2,50 € bei dx.com)
- Funksteckdosen vom Typ Elro AB440S (die habe ich zumindest selbst getestet und im Einsatz)
Das ist hardwaretechnisch schon alles, was ihr dafür braucht, also relativ günstig zu bekommen. Der Aufbau der Hardware ist auch relativ simpel. Die folgende Skizze soll den Aufbau verdeutlichen:
Allgemein sieht die Verkabelung folgendermaßen aus:
Sender Raspberry Pi
ANT*
GND GND
DATA #17
VCC 5V
Der (zusätzliche) Antennen-Anschluss (ANT) ist das kleine Loch unten links auf dem Bild. Der Anschluss einer externen Antenne ist optional, da bereits eine auf dem Sender integriert ist (die Spule). Solltet ihr einen anderen Sender mit 433MHz verwenden, der keine integrierte Antenne besitzt (oder euch die Reichweite mit der internen Antenne nicht ausreichen), müsst ihr dort noch einen Jumper (oder ein leitendes Stück Draht) daran befestigen, das als Antenne fungiert. Damit lassen sich auch weiter entfernte Steckdosen steuern.
Das war es auch schon, was hardwaretechnisch zu tun ist, also alles relativ simpel, ohne Löten möglich und auch für handwerklich nicht so begabte Leute sollte das alles machbar sein.
Kommen wir nun zur Software. Hierzu müsst ihr erstmal euren Raspberry Pi starten, an dem alles wie oben beschrieben montiert wurde. Anschließen solltet ihr erst mal
sudo apt-get update
ausführen. Dadurch werden eure Paketquellen aktualisiert. Dann muss git-core installiert werden (falls nicht sowieso schon geschehen):
sudo apt-get install git-core
Um die Ansteuerung des Transmitters zu realisieren gibt es ein Projekt namens WiringPi. Dieses installiert ihr euch auf eurem Raspberry Pi wie folgt:
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
Auch für unseren Zweck, die Steckdosen zu steuern gibt es bereits ein Projekt. Dieses stammt von xkonni und nennt sich Raspberry-Remote. Ihr installiert es euch so:
cd ~
git clone git://github.com/xkonni/raspberry-remote.git
cd raspberry-remote
Damit es läuft, müsst ihr euch noch die send.cpp kompilieren, also folgendes eintippen:
make send
Das war es auch schon mit der Basis! Jetzt könnt ihr schon über das Terminal Befehle an eure Steckdosen schicken, um sie aus- und anzuschalten. Aber zuerst solltet ihr noch den Hauscode bei euren Dosen ändern, nicht, dass euer Nachbar zufällig auch diese Steckdosen hat und ihr euch diese gegenseitig an- und ausschaltet. Dazu öffnet ihr einfach mit einem Kreuz-Schraubendreher die Dosen hinten und legt die Dip-Schalter mit einem Code eurer Wahl um. Also z.B. hoch, hoch, unten, hoch, unten. Diese Kombination solltet ihr bei allen Steckdosen eingeben und dann auch bei dem Handsender. Mit diesem könnt ihr dann auch überprüfen, ob alles soweit schon funktioniert.
Falls dies der Fall ist, seid ihr kurz davor, eure Steckdosen erstmals über den Raspberry zu steuern. Über die gerade vorhin kompilierte send.cpp ist das möglich. Dazu gebt ihr einen Befehl nach dem Schema „sudo ./send <Hauscode> <Steckdosennummer> <Zustand 1 AN, 0 AUS>“ ins Terminal ein, also für den oben genannten Code für die Steckdose B (=2) zum Einschalten:
sudo ./send 11010 2 1
Jetzt sollte die Steckdose B angeschaltet werden. Falls dies der Fall ist: Herzlichen Glückwunsch!
Webinterface
Natürlich ist es etwas umständlich und unkomfortabel, das Ganze immer über das Terminal/eine SSH-Verbindung machen zu müssen. Aber kein Problem! Raspberry-Remote liefert auch gleich ein passendes Webinterface mit. Damit ihr das nutzen könnt, solltet ihr erst mal Apache und PHP installieren auf eurem Raspberry:
sudo apt-get install apache2
sudo apt-get install php5
Jetzt gehts zum Webinterface, was xkonni direkt mitliefert. Dazu habe ich im Ordner /var/www/html einen Unterordner remote erstellt. Anschließend den Inhalt von ~/raspberry-remote/webinterface dorthin verschoben: mv ~/raspberry-remote/webinterface/* /var/www/html/remote . Jetzt muss noch in der config.php Datei die IP Adresse des Raspberry Pis angepasst werden: dazu einfach nano verwenden.
[Update 2.11.2015] Hinweis: Die aktuell auf GitHub erhältliche Version des Webinterfaces von raspberry-remote machte bei mir Probleme, sodass ich auf diese ältere Version zurückgriff. Solltet bei euch die neue Version auch nicht funktionieren, könnt ihr die oben verlinkte, etwas ältere Version versuchen. Läuft die aktuelle Version bei euch, könnt ihr diese natürlich auch verwenden.
Nun fehlt noch der Daemon, auf den das PHP-Script des Webinterfaces zugreift. Dazu gehen wir in das Raspberry-Remote Verzeichnis zurück: cd ~/raspberry-remote und kompilieren den daemon: make daemon
Nun können wir diesen Starten: sudo ./daemon & (Das & bewirkt, dass der Prozess im Hintergrund läuft.
Jetzt können wir unser Glück mit dem Webinterface probieren: Dazu rufen wir von einem anderen Rechner/Handy das Webinterface per http://192.168.11.44/remote/ (Eure IP einsetzen) auf. Wenn das geht und dort die verschiedenen Steckdosen sichtbar sind, dann muss man jetzt nur noch in der config.php die Steckdosen mit Namen versehen und evtl. die Codes, etc. anpassen. Die Konfiguration sollte selbsterklärend sein.
Falls ihr eine Fehlermeldung wie „Switch out of range: GET /:XY“ bekommt, keine Sorge! In der daemon.cpp sind standardmäßig nur die Hauscodes 00000 & 00001 & 00010 abgedeckt. Das lässt sich aber einfach ändern. Geht dazu wieder ins Verzeichnis von Raspberry Remote (bei mir /home/pi/raspberry-remote/, also via cd /home/pi/raspberry-remote/) und öffnet die daemon.cpp mit nano. Darin befindet sich der Eintrag „nPlugs=10;“, welche ihr einfach durch „nPlugs= 1110;“. Anschließend über sudo make daemon neu kompilieren und über sudo ./daemon & wieder starten. Jetzt sollte auch bei euch das Webinterface funktionieren.
Automatischer Start des Daemon und Neustart bei Absturz
Um den Daemon automatisch bei Systemstart zu starten und um ihn bei einem möglichen Absturz neu zu starten, habe ich ein kleines Script geschrieben:
1 2 3 4 5 6 7 | #!/bin/bash # Check if daemon_remote running if ! ps aux | pgrep "daemon_remote" > /dev/null; then cd /home/pi/raspberry-remote/ ./daemon_remote & exit 0 fi |
Zur Verwendung: Zuerst sollte der daemon umbenannt werden in daemon_remote. Dazu die Datei „daemon“ (in /home/pi/raspberry-remote/) nach dem Kompilieren und vor dem Starten umbenennen: sudo mv daemon daemon_remote. Anschließend das obige Skript unter der Datei „daemon_restart.sh“ z.B. unter /home/pi/ abspeichern und über sudo chmod +x daemon_restart.sh ausführbar machen. Um es automatisiert zu starten legt ihr noch 2 Einträge in der root-crontab an via sudo crontab -e Dort diese Zeilen einfügen (einfach untern anhängen, je eine eigene Zeile):
1 2 | @reboot cd /home/pi/ && ./daemon_restart.sh */15 * * * * cd /home/pi/ && ./daemon_restart.sh |
Anschließend speichern und den Pi neu starten. Der Daemon sollte nun automatisch gestartet werden und zudem wird alle 15 Minuten überprüft, ob er noch läuft. Wenn nicht, wird er neu gestartet.
Für Raspbmc-Nutzer: Standardmäßig ist cron hier nicht aktiviert. Ihr müsst es in den Raspbmc-Einstellungen aktivieren, um es nutzen zu können! (Danke Christian!)
Alternative Webinterfaces
Interface von Dan
Dan hat in den Kommentaren (siehe hier) ein Paket bereitgestellt, das ein schöneres Design für das Webinterface bietet – danke dafür! Sicherheitshalber habe ich es auch auf den Blog-Webspace hochgeladen. Es sieht so aus:
Im Paket fehlen aus Lizenzgründen die Switch-Button-Bilder, welche ihr noch nachträglich ergänzen müsst. Da hier Sprites verwendet werden, lässt sich das Interface auch schnell den eigenen Design-Vorstellungen anpassen. Hier meine aktuelle Ansicht, die ich damit realisiert habe:
Zur Nutzung zitiere ich hier mal Dans Kommentar:
Am besten sicherheitshalber die index.php und das CSS backuppen und erst dann alle Dateien aus dem ZIP drüberbügeln.
Die Dateien “ie.css” und “logo_sd.png” sind für Windows Phone 7-Geräte, die aufgrund des alten Internet Explorers nicht mit Retina-Grafiken umgehen können.
Der on/off-Schalter befindet sich in einem Sprite mit den Maßen 106x174px. Die obere Hälfte des Sprites ist der “on”-Zustand, die untere “off”. Das müsstet ihr leider selbst basteln. Auch hier gibt es für WP7 eine Non-Retina-Version “on_off_sd.png” mit der halben Auflösung. Wer nur Android und/oder iOS benutzt, kann sich das sparen.
Interface von Matteo
Matteo hat in den Kommentaren eine Version des Webinterfaces gepostet, das sowohl vom Design angepasst wurde, als auch technisch um eine Login-Funktion erweitert wurde. Ihr könnt es via Github mit oder ohne Passwort-Funktion beziehen. Hier 2 Screenshots davon (der erste Zeigt die Desktop-Ansicht des Webinterfaces und die zweite die mobile Ansicht [sprich Smartphone]):

Interface für eBook-Reader
Um auch von Schwarz-Weiß-eBook-Readern die Steckdosen bequem steuern zu können habe ich ein kontrastreiches Interface für diese Geräteklasse erstellt. Dieses habe ich bisher auf dem Kobo Glo sowie einem Kindle 5 erfolgreich getestet. Ob es auch auf den Browsern von anderen Lesegeräten und Herstellern korrekt angezeigt wird, weiß ich allerdings nicht, die Browser sind meist auch nur als Beta-Feature in den eBook-Lesegeräten aufgeführt. Die .css-Datei hier habe ich möglichst simpel gehalten und auch die Schrift sollte auf den meisten Lesegeräten funktionieren. Ihr könnt es hier herunterladen. Für die Installation macht ihr am Besten einen eigenen Ordner auf eurem Webserver, z.B. über mkdir /var/www/html/remotebook und kopiert die Heruntergeladenen Dateien dort hinein. Um auf dem Lesegerät schnell darauf zugreifen zu können, empfiehlt es sich (wenn möglich), ein Lesezeichen zur entsprechenden Adresse zu setzen.
Siri-Proxy
Achtung! iOS 7 und neuer funktionieren mit SiriProxy nicht! Siri-Proxy sollte allerdings weiter mit Geräten mit iOS 6 und älter funktionieren, sodass ich diesen Teil noch im Tutorial behalte.
[Update 27.08.2015] Ich habe gerade einen Artikel zur Steuerung über Apples HomeKit verfasst. Das funktioniert auch mit den Funksteckdosen.
Wer seine Steckdosen mit iOS 7 aufwärts per Sprachsteuerung schalten möchte, kann das nach dieser Anleitung machen, in der beschrieben wird, wie ihr Sprachsteuerung und Widget für iOS einrichtet.
Wem selbst das Webinterface noch zu kompliziert ist (oder wer lieber redet statt zu tippen und zu klicken), der kann die Steuerung auch in Siri integrieren. Das funktioniert auch ohne Jailbreak und ist eine tolle Sache – leider auch etwas komplizierter. Zum Glück gibt es aber auch dafür schon Anleitungen und fertige Projekte im Netz, sodass sich der Aufwand in Grenzen hält. Realisieren lässt sich das Vorhaben durch siriproxy, den ihr auf dem Raspberry installieren könnt. Dazu müssen erst mal ein paar neue Pakete installiert werden:
1 | sudo apt-get install openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libc6-dev ncurses-dev subversion libxslt1.1 libxslt-dev xvfb build-essential autoconf libgdbm-dev libncurses5-dev automake libtool bison libffi-dev |
Anschließend führt ihr Folgendes aus:
sudo curl -L https://get.rvm.io | bash -s stable --ruby
Das kann einige Zeit dauern. Lasst den Befehl einfach laufen und gönnt euch eine Tasse Kaffee oder Tee. Wenn der Befehl durchgelaufen ist, tippt folgendes ein:
1 | echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc |
Anschließend:
echo 'export PATH=$HOME/.rvm/bin:$PATH' >> ~/.bashrc
dann:
. ~/.bashrc
dann:
rvm install 2.0.0
dann:
rvm use 2.0.0 --default
dann:
gem install siriproxy
dann:
mkdir ~/.siriproxy
Anschließend sollte siriproxy an sich schon installiert sein auf eurem Raspberry Pi. Damit ihr den Dienst auch auf eurem iOS-Gerät nutzen könnt, müsst ihr euch noch ein Zertifikat generieren lassen:
siriproxy gencerts
Dieses liegt nun im oben generierten Ordner .siriproxy. Ihr lönnt es nun z.B. auf einen USB-Stick kopieren oder es euch direkt vom Raspberry per Mail schicken. Die benötigte Datei heißt „ca.pem“. Am einfachsten ist es wie gesagt sie euch einfach selbst per Mail zu schicken und die Mail dann auf eurem iOS gerät öffnen. Tippt auf eurem iOS-Gerät auf das Zertifikat und installiert es. Jetzt müsst ihr nur noch am iPad bei den WLAN-Einstellungen den DNS-Server ändern. Das geht selbsterklärend. Fügt vor eurem aktuellen (primären) DNS-Server einfach die IP-Adresse eures Raspberry Pi ein. Jetzt noch schnell den Flugmodus an- und ausschalten (damit die neuen WLAN-Einstellungen auch übernommen werden).
Jetzt ist es an der Zeit, siriproxy auf dem Raspberry zu starten:
siriproxy bundle
rvmsudo siriproxy server -d IP_ADRESSE_VOM_RASPBERRY
Wenn alles glatt gelaufen ist, solltet ihr die Meldung „SiriProxy up and running“ erhalten. Wenn das der Fall ist, startet Siri auf eurem iOS-Device und sagt „Test Siri Proxy“. Wenn Siri nun „SiriProxy is up and running“ antwortet, habt ihr alles richtig gemacht! Glückwunsch!
Nun könnt ihr euch daran machen, die Steuerung der Steckdosen in SiriProxy zu integrieren. Leider haben die Tutorials, die ich im Netz dazu gefunden habe bei mir nicht so funktioniert, wie erwünscht. Letztendlich habe ich aber trotzdem eine relativ simple Methode gefunden, eigene Befehle in SiriProxy zu integrieren. Dazu wechselt ihr erstmal das Verzeichnis:
1 2 3 4 | cd /home/pi/.rvm/gems/ruby-2.0.0-p247/gems/siriproxy-0.5.4 cd plugins cd siriproxy-example cd lib |
Darin befindet sich eine Datei namens „siriproxy-example.rb“. Diese nun mit sudo nano öffnen. Fügt darin folgende Zeilen ein:
1 2 3 4 5 6 7 8 9 10 11 | listen_for /drucker einschalten/i do say "Okay, Drucker wird eingeschaltet!" request_completed system("sudo /home/pi/raspberry-remote/./send 11010 1 1") end listen_for /drucker ausschalten/i do say "Okay, Drucker wird ausgeschaltet!" request_completed system("sudo /home/pi/raspberry-remote/./send 11010 1 0") end |
Die Codes solltet ihr noch anpassen, falls ihr andere gewählt habt. Auch die Befehle und Antworten könnt ihr nach Belieben anpassen. Achtet nur darauf, dass bei dem listen-Befehl nur Kleinbuchstaben verwendet werden dürfen. Dann die Datei wieder speichern. Anschließend müsst ihr siriproxy neu starten:
siriproxy bundle
rvmsudo siriproxy server -d IP_ADRESSE_VOM_RASPBERRY
Testet nun an eurem iOS-Gerät, ob alles so funktioniert, wie ihr es wolltet. Falls ja, müsst ihr nur noch siriproxy laufen lassen auf eurem Raspberry. Leider ist das gar nicht so einfach, da siriproxy beendet wird, wenn ihr die ssh-Verbindung zum Raspberry schließt. Nach langem Ausprobieren und vielen frustrierenden – weil nicht funktionierenden – Versuchen, habe ich eine einfach Möglichkeit gefunden, siriproxy weiter laufen zu lassen. Das Ganze habe ich über tmux realisiert. Dazu erst einma tmux installieren:
sudo apt-get install tmux
Anschließend tmux starten. Dann gebt ihr wieder
rvmsudo siriproxy server -d IP_ADRESSE_VOM_RASPBERRY
ein. Jetzt sollte siriproxy gestartet sein. Dann könnt ihr die SSH-Sitzung schließen. Nun wieder eine SSH-Verbindung aufbauen und „tmux attach“ eingeben. Ab jetzt solltet ihr die SSH-Sitzung wieder schließen können und siriproxy sollte auch weiterhin laufen.
Das wars auch schon! Von nun an könnt ihr dank des Raspberry Pi eure Geräte einfach via Terminal, Webinterface oder Siri ein- und ausschalten.
Ich hoffe, ich konnte euch alle Schritte gut erklären und wünsche gutes Gelingen! Falls ihr noch Fragen oder Anregungen habt, immer her damit! Auch wenn ihr Fehler findet, könnt ihr diese im Kommentarfeld posten.
Hallo,
Vielen Dank für die super Anleitung! Tolles Projekt :)
Aktuell gibt es bei mir nur das Problem das ich die Steckdosen manuell via „send“ schalten kann, aber nicht über das webinterface.
Das Problem liegt wahrscheinlich daran das die Steckdosen sich mit 11110 1 1 schalten lassen via send Befehl, beim webinterface allerdings 11110 01 1 eingetragen sein muss. Bei dem Plug wert muss also anscheinend die führende 0 angegeben werden, mit welcher meine Steckdosen aber nicht funktionieren… Hat jmd. eine Idee an welcher Stelle ich das einstellen kann? Das Problem äußert sich so, das die Webinterface Seite gar nicht mehr lädt sobald ich die führende 0 entferne… Viele Grüße, sebastian
hat sich erledigt… hatte vergessen den Wert für nPlugs auf 1110 zu ändern ;) sry
Danke für das Feedback! Die Lösung wird vll auch dem einen oder anderen helfen, der das gleiche Problem hatte :)
Hallo,
Ich hab mir Funksteckdesen bei Amazon gekauft.
Diese hier:http://www.amazon.de/mumbi-Funksteckdosen-Set-Funksteckdose-Fernbedienung/dp/B002UJKW7K/ref=sr_1_1?ie=UTF8&qid=1408299180&sr=8-1&keywords=funksteckdose
Aber da kann man den Hauscode nirgends einstellen sondern wird zugeteilt.
Wie kann ich das dann herausfinden ?? Reciever hab ich auch aber wie kann ich die Abfangen ??
Mit freundlichen Grüßen
Valentin
Da gibt offensichtlich eine neue Version
http://www.amazon.de/review/R9UL5YV98U6CL/ref=cm_srch_res_rtr_alt_1
Das Protokoll ist nicht geeignet
Mist – dann hab ich mir wohl auch die falschen Dosen geholt :/
Also Vielen Dank für die Anleitunge
ich hab allerdings nicht die Web Interface Variante gewählt um die STeckdosen zu steuern,
sondern einfach RaspiSSH
https://play.google.com/store/apps/details?id=at.stoppel.myraspissh&hl=de
Dann einfach die Befehle, die man im Putty etc. zum Testen absetzt, dort hinter den STeuerelementen hinterlegen und fertig
LG Alex
Hallo miteinander,
super tolles Projekt. Ich habe alles nach Vorlage auf raspbmc installiert. Die Steckdosen sind auch schon da – leider fehlt mir noch der Transmitter.
Ich habe aber eine Frage. Gibt es die Möglichkeit eine Art Timer zu programmieren?
Z.B. schalte ich eine Steckdose an und nach z.B. 15 Minuten läuft der Timer ab und gibt das Ausschaltsignal.
Würde da schon einfacher Code genügen oder müsste man da ganz tief einsteigen?
Ich bin um jeden Fetzen Code dankbar! :-)
LG…Groovy
Hi,
wie willst du die Dosen denn schalten? Über das Webinterface geht das mit dem Timer ganz einfach, da dort die delay-Funktion bereits eingebaut ist.
Wenn die Verzögerung beim Schalten übers Terminal erfolgen soll, geht das bei Linux ganz einfach über sleep. Also z.B. nach 10 Minuten wäre:
sleep 10m;sudo ./send 11010 2 1
Hallo Alexander,
vielen Dank für deine Antwort! Das wäre ja dann klasse!
Wie ich schon geschrieben habe, fehlt mir noch der Transmitter, sodass ich es noch nicht ausprobieren konnte! Ich hab also wieder vor der Haue geschrien! ;-)
Aber noch schnell zu deiner Frage: Ja…ich habe vor, die Dosen übers Webinterface zu schalten. Habe sogar schon die Fritzbox mit dem entsprechenden DNS eingerichtet, sodass es übers Internet klappen wird! ;-)
Hallo Alex,
klappt ziemlich gut.
Nun aber ein kleines Problemchen.
Bei schalten via interface wird bei dem 3. und 4. eintrag merkwürdigerweise der state von 2 zurückgegeben. Ich habs mir mal ausgeben lassen, weil mich irritiert hat, dass die anzeige auf „aus“ steht aber der via URL action aus machen möchte.
Ich bin zwar schon ziemlich erfahren in php aber irgendwie bekomm ich nicht raus, warum gerade beim 3. und 4. eintrag. Der 5. läuft einwandfrei.
Hab config und alles schon geprüft..
LG Florian
Hi Florian,
das klingt in der Tat komisch.
Eine kurze Frage noch: Welches Interface verwendest du? Das, das standardmäßig mitgeliefert wurde oder ein anderes?
Werde das dann bei mir nachstellen, momentan habe ich nur 2 Dosen im Einsatz.
Gruß,
Alex
Erstmal das Standard(gleicher fehler) und dann das von matteo
Technisch gesehen laufen beide gleich.
Hallo Florian,

ich habe es bei mir mal nachgestellt, hier funktionieren auch 5 Buttons problemlos, die action-Anweisungen werden jeder Steckdose korrekt zugeordnet. Hier mal mein array aus der config-Datei:
Fraglich ist hier wohl, ob es wirklich ein Problem mit der config-Datei ist, oder doch eher ein Problem mit dem Daemon, der (warum auch immer) falsche Werte zurückliefert.
Ich fürchte, bei diesem Problem muss ich dich an den Entwickler (erreichbar über GitHub ) verweisen. Einem User mit ähnlichen Problem hat der Autor selbst Powerswitch empfohlen, es scheint also wirklich ein Bug zu sein.
Okay. Danke Für die Fixe Info und die schnelle Hilfe.
Bin ich also nicht zu blöd. Ich dachte schon es liegt irgendwo am PHP Script ^^
Mach weiter so! :)
Hey Alex,
unglaublich krass wie du den Support in den Kommentaren ein komplettes Jahr lang durchziehst und immer bemüht bist, jedem zu helfen. Dafür hast du schon bald mehr Respekt als für dein Tutorial verdient ;)
Erlebt man selten … ich ziehe meinen Hut vor Dir.
Viele Grüße
Peeta
P.S.: Werde das Projekt natürlich nachbauen :)
Hi Peeta,
danke für das Lob! :)
Schaut vll nach viel aus, da es aber über ein ganzes Jahr verteilt ist, gibt es nur wenige Fragen/Tag. Da kann man sich schon mal die Zeit nehmen, sie zu beantworten ;)
Viel Erfolg mit dem Projekt & LG
Hallo Alex und Steckdosenexperten :-)
Was haltet ihr von den 12V Relais, die auch über 433 MHZ angesprochen werden können
z.B
http://www.ebay.at/itm/OB-433L1-12-24V-Lernfahiger-Funk-Empfanger-433Mhz-Fernbedienung-Timer-12V-/111249278813?pt=Elektromechanische_Bauelemente&hash=item19e6f9475d
Die funzen ja nach dem selben Prinzip wie die 240V Brüder
Meine Idee geht dahin, in einem Wohnmobil ein PI als Accesspoint zu installieren, und dann über RaspSSH mit den 12V Relais verschiedene Dinge (Beleuchtung etc..) vom Handy aus zu schalten.
Was meint ihr gehts das so, wie ich mir das vorstelle?
Danke
LG Alex
Hi Alex ;)
Müsste meiner Meinung nach problemlos klappen, da man ja mit dem Sender am Raspberry Pi auch nur die Funktion einer „Festcode-Fernbedinung“ nachbildet und diese lt. Beschreibung alle angelernt werden können. Sehe da also keinerlei Probleme für dein Projekt.
Nö das geht leider nicht
schau mal das Bitmuster von der Steckdose
http://i.imgur.com/ySc7Twm.jpg
und dann das andere
http://i.imgur.com/keekf4K.jpg
die ersten 5 Bytes kann man ändern, aber den Unit Code vom Send Befehl nicht …
LG Alex
Hi Alex,
ich bin gerade etwas verwirrt ;)
Das erste Bild zeigt das Signal des Handsenders von den Funksteckdosen bzw. das Signal vom 433MHz-Senders am Pi mit dem send-Befehl, oder?
Aber was zeigt das untere Bild?
In der Beschreibung der Relais steht doch, dass sie die Festcodes aller Funkfernbedienungen nutzen können durch anlernen, warum sollten dann gerade die Signale vom Pi (die ja nichts anderes sind) nicht funktionieren?
Gruß
Das obere Bild ist das von der FB der 220V Funksteckdosen das untere von der FB der 12 V Steckdosen, anderes Protokoll offensichtlich :-( LG Alex
Hi Alex,
endlich ist mein Zeug da.
Ich kann ohne Probleme die Steckdosen über die Konsole schalten, aber über das Interface bekomme ich es einfach nicht hin!
Hier mal meine Config:
$config=array(
array(“01100″, “01”, “Heimkino”),
array(“01100″, “02”, “Stehlampe”),
array(“01100″, “03”, “Zirkulation”),
“”,
“”,
)
?>
Nachdem ich den Hauscode in der config geändert habe, muss ich den noch in einer anderen Datei ändern?
Nachdem ich nämlich im Interface einen Button drücke, tut sich nämlich garnichts! :-(
Bin für jede Hilfe dankbar!
Hi Groovy,
die entsprechende Änderung in der config.php reicht.
Was sagt denn der Apache-Log (cat /var/log/apache2/error.log)?
Und: Was bekommst du für eine URL bei den Buttons angezeigt?
Hi Alex,
lustiger Weise klappt es mit 00010 im Config und den natürlich entsprechend gejumperten Dosen.
Im Error-Log kommt dann folgende Zeile:
[Sat Sep 27 15:49:40 2014] [error] [client 192.168.2.20] PHP Warning: socket_connect(): unable to connect [110]: Connection timed out in /var/www/remote/index.php on line 105, referer: http://192.168.2.27/remote/index.php
Die 192.168.2.27 ist mein Raspi, die 192.168.2.20 mein Smartphone mit dem ich den Befehl absetze.
Das ist der Link, den mein Smartphone angibt:
http://192.168.2.27/remote/index.php?group=01100&switch=02&action=0
Hab ich irgendwo vergessen, nochmal nen make oder ./build zu machen, oder nochmal etwas neu zu starten? Ich bin da leider etwas ein Noob! ;-)
Hallo alle miteinander,
ich hab’s doch tatsächlich hinbekommen!
Nachdem ich mir nochmal ALLE Kommentare durchgelesen habe, lag die Lösung im Beitrag vom 27. Februar 2014 (DANKE Andreas).
In der daemon.cpp nPlugs=10; durch nPlugs=1110; ersetzt, make daemon, Neustart des Raspi … und schon ging’s!
Schön, dass es nun auch bei dir klappt!
Hätte bei dem nPlugs Fehler zwar eine Fehlermeldung erwartet, aber anscheinend bekommt man diese nicht immer.
Vll. füge ich an den Artikel mal ein FAQ Fehlersuche oder so ein, wenn ich Zeit und Muße dazu finde ;)
Hallo zusammen,
Hab noch eine Verbesserung.
In der config.php anstatt der ip einfach
$target = shell_exec(„hostname -I“) ;
Dann wird die IP des RPi’s automatisch benutzt. Kann nützlich sein wenn sich die IP des RPi’s mal öfters ändert, z. B. wenn er mit einem neuen netzwerk verbunden wird.
LG
Hi Matteo,
Danke, das ist sicher ein guter Tipp, um flexibler zu bleiben.
VG
Wenn ich das Webinterface zu oft benutze, stelle es irgendwann den Dienst mit „could not connect to socket“ ein. So als hätte man nur ein bestimmtes Kontingent an Befehlen, bis der Dienst dicht macht. Nach einem Reboot läuft es wieder eine Weile, bis irgendwann wieder die Meldung kommt. Ist mir heute besonders aufgefallen, da ich grade mit Tasker rumbastele und sehr oft an/aus-Befehle abschicke. Jemand eine Idee?
Hi Dan,
mir ist auch schon aufgefallen, dass der Daemon wohl hin- und wieder abstürzt. Bisher hatte ich das 2 oder 3 mal. Habe es immer auf den geringen RAM meines Rev. 1 Pis geschoben, woran es aber genau liegt, weiß ich leider auch nicht. Den Pi muss man übrigens nicht neu starten, es reicht, den Daemon neu zu starten.
Ist vermutlich ein Bug, am Besten direkt an den Entwickler (auf github etc.) wenden.
Wie lässt sich der Daemon denn neu starten? Vielleicht wäre das ja was, das man als stündlichen Job in crontab eintragen kann.
Wenn er abgestürzt ist einfach über:
cd /home/pi/raspberry-remote/
sudo ./daemon &
Wenn man das über einen cronjob macht, sollte man natürlich vorher noch prüfen, ob er noch läuft (über die PID herauszufinden) oder den Error dann ignorieren (Error on binding address).
Bei mir stürzt der Daemon leider genau einmal pro Tag ab ( “could not connect to socket”). Ich kann auch gar nicht genau sagen, wann bzw. warum er das genau tut. Wäre Klasse, wenn man unterhalb der Fehlerausgabe einen Link hätte, der den Daemon wieder zum Laufen bringt. Ist das schwer, das noch reinzuprogrammieren?
@Bernhard: Den Link zum Starten des Daemons kann man recht simpel über die PHP-exec-Funktion einfügen. Es müssen dann nur noch die Rechte entsprechend gesetzt werden, dass www-data den Daemon starten kann.
Wobei ich einen täglichen Absturz schon sehr komisch finde. Auf meinem Pi stürzt der Daemon auch mal ab, aber vll 1-2 mal pro Jahr.
Danke für den Hinweis für die PHP-Funktion!. Kann man den Grund des Absturzes irgendwie auslesen? Gibt es dafür eine Log-Datei?
jetzt hat es geklappt den Daemon per PHP neu zu starten. Nach deinem Hinweis hab ich auf folgender Seite: http://www.forum-raspberrypi.de/Thread-php-sudo-befehle-mit-php-absetzen
den entscheidenten Hinweis (Anleitung) bekommen. Nun hab ich mir neben den Delay-Werten einen weiteren Link eingebaut, mit dem der Daemon neu gestartet werden kann. Danke nochmal und weiter so!!! :-)
Hallo,
da ich bei meinem Raspberry einen anderen PIN nutzen muss als der standardmässig hinterlegte in RCSwitch hatte ich Probleme in der Nutzung des Web-Interfaces raspberry-remote. Der send-Befehl konnte einfach angepasst werden in der Zeile „int PIN = XY;“, dies hat direkt funktioniert.
Das Web-Interface, bzw. eigentlich der daemon, nutzt jedoch nicht den send-Befehl mit dem angepassten PIN, sondern die Klasse RCSwitch direkt. Deshalb muss in der Datei daemon.cpp die folgende Zeile gesucht und angepasst werden:
mySwitch.enableTransmit(0);
Der Wert in der Klammer enthält die Pin-Nummer (nach wiringPi-Systematik, s.o.). Meine Anpassung (als Verbesserungsvorschlag) sieht jetzt analog zur send.cpp wie folgt aus:
// hard-coded output pin for radio module on Raspberry PI. Use wiringPI pin no. instead of gpio!
int PIN = 29;
…
mySwitch.enableTransmit(PIN);
Neukompilieren und Neu-start von daemon nicht vergessen, dann sollte auch das Web-Interface funktionieren!
Hallo,
interpretiere ich die Funktion des webinterface richtig, dass die jeweilige Funktsteckdose beim ersten klick einschaltet, und nach einem weiteren klick wieder aus?
Denn der Link für die Funksteckdose bleibt immer auf 1 stehen und somit sendet ein weiterer klick einfach immer nur einen weiteren EIN Befehl raus. Hab ich was übersehen?
Danke schonmal im vorraus.
Nein 0 oder 1 siehe
Dazu gebt ihr einen Befehl nach dem Schema „sudo ./send “ ins Terminal ein, also für den oben genannten Code für die Steckdose B (=2) zum Einschalten:
LG Alex
Hi,
erstmal vielen Dank für das geile Tutorial! Habe das Design von „Dan“ drübergebügelt und es funktioniert soweit. Allerdings habe ich meine Probleme mit der Delay Funktion. Zum einen wird gar keine Delayzeit angezeigt und zum anderen verstehe ich im Moment nich nicht, wie ich einer Steckdose einer Delayzeit hinzufüge. Z.b. um eine Bettheizung 20min laufen zu lassen, ohne sie manuell ausschalten zu müssen.
Grüße,
Tobi
Hallo Tobi,
sorry für die späte Antwort!
Bei dieser Ansicht wurde die Delay-Funktion nicht integriert. Wie man sie nachträglich noch einfügen kann habe ich in einem obigen Kommentar erklärt (auch die nachfolgenden Kommentare lesen, da ich im ersten Kommentar etwas vergessen habe).
Gruß
Hallo zusammen,
Danke ersteinmal für deine super Erklärung!
Ich hab mir mal daemon.cpp angesehen – also das mit den nPlugs passt so nicht! Der Wert spiegelt nicht eine binäre Zahl wieder, sondern ist ein schnöder Dezimalwert. Der Wert setzt sich aus allen möglichen Kombinationen Hauscode und Gerätecode zusammen: 2^5 *5 = 32*5 = 160. Also dieser Wert sollte für nPlugs eingetragen werden! Somit belegt der daemon code auch auch ’nur‘ 160 int Arrays (*4bytes) und nicht 1110.
Viele Grüße,
Jui
Hallo ich verzweifel langsam ;( bin seid Wochen damit beschäftigt einen Fehler zu beheben ….. und jetzt ist es soweit ich brauche HILFE :D
1. Pi + Funkmodul alles soweit in Ordnung mein selbstgebautes .PHP klappt soweit
2. Jetzt binde ich einen Temperatursensor ein und frage diesen auch per PHP ab und die Steckdosen funktionieren nicht mehr ……….. um die Steckdosen wieder ans laufen zu bekommen half mir bis jetzt nur ein alte images drauf zu packen ohne den temperatur sensor (w-1) // der daemon lässt sich starten aber es passiert nix mehr die error log von apche2 gibt aus socket_connect(): unable to connect [110]: Connection timed out in /var/www/core.php on line 26,
/ vorher war das problem nicht ;( danke schon mal im voraus ….
Hi Juls,
ein sehr komisches Problem :/
Werden denn die Sensoren auch über eine Socket-Verbindung abgefragt?
Mal eine ganz andere Frage: Ich bin kürzlich auf pilight umgestiegen, da es mehr Konfigurationsmöglichkeiten bietet. Wie kann ich raspberry-remote und alles was dazu gehört wieder sauber deinstallieren?
Hi Dan,
so würds ich machen:
Daemon stoppen
evtl. Startscripte entfernen
raspberry-remote-Ordner löschen
Webinterface löschen
evtl. nicht mehr benötigte Pakete via apt deinstallieren
Hi Alex,
bin gerade dabei dein Howto nachzustellen. Habe auch nen Raspberry Pi Model 1 Rev1. Habe den gleichen sender mit integrierter Antenne und habe deine Verkabelung auf einem Steckbrett nachgebaut. Anschließend deine Anleitung druchgearbeitet. Wenn ich nun sudo ./send 11010 2 1 eingebe passiert genau: nichts :-) Über die Fernbedienung gehts. Hast du ne Ahnung was ich hier falsch gemacht habe?
Hi Lennart,
da gibts leider viele Ansatzpunkte ;)
Zum einen sollte die Steckdose für den Test möglichst nahe am Pi eingesteckt werden.
Dann kannst du den Sender auch an 5V anschließen (wenn nicht schon geschehen), was evtl. Probleme beseitigen könnte.
Auch verschiedene Codes könntest du durchprobieren.
Zusätzlich könntest du noch eine externe Antenne am Modul anbringen, die integrierte ist nicht wirklich gut.
Wenn du einen geeigneten DVB-T-Stick besitzt könntest du auch per SDR herausfinden, ob überhaupt ein Signal gesendet wird (einfach mal nach SDR googlen).
Ich möchte drauf hinweisen das die Mumbi Steckdose aus dem Link zu Amazon selbstlernende sind ohne DIP-Schalter. Eine Korrektur wäre toll. Ich hoffe das ich alles zum laufen bekomme.
Hi Daniel,
welchen Link meinst du? In meinem Tutorial habe ich keine Mumbi Steckdose verlinkt ;)
Ups! Mein Fehler. Entweder hat jemand dein Tutorial 1:1 kopiert aufm Handy sah es genau so aus nur mit dem Amazon Links drin. Dann vergess es einfach wieder.
Habe jetzt soweit alles installiert und eine Steckdose per Putty Schalten funktioniert wunderbar. Der Apache2 Webserver ist installiert inkl. PHP5. Aber wenn ich das WebInterface aufrufe. Kommen lauter Fehler „Could not create Socket ….. Der Daemon ist kompiliert und gestartet.
MFG, Daniel J.
Hey Daniel,
hast du schon mal einen anderen Hauscode versucht bzw. dann auch die nplugs-Variable wie beschrieben angepasst? Hier hatte jmd. schon mal das gleiche Problem, was nur daran lag. Der daemon ist etwas buggy und scheint bei manchen auch gerne mal abzustürzen.
Hallo, ich finde den Blog super, eine super Anleitung und das ganze funktioniert wirklich einfach allerdings hatte ich etwas Probleme den richtigen Pin 17 zu finden. Hier ein Weblink unter dem ihr nachlesen könnt das der gemeinte GPIO 17 = physichem PIN 11 ist!
http://pi.gadgetoid.com/pinout
Danach funktionierts prima.
Hi Mirko,
guter Link! In meiner Grafik sollte man den Pin aber auch erkennen können, daher habe ich die Pinbelegung hier nicht verlinkt ;)
Hallo Alex,
Danke für das sehr gute Tutorial. Leider hänge ich ähnlich wie andere Leute beim Zugriff überd en Browser auf die Steckdosen fest. Ich habe schon so einige Dinge probiert, die hier empfohlen werden:
– nPlug umstellen
– 3 unterschiedlicher Hauscodes getestet
– daemon gekilled, neu gebaut, mit ohne Startskript
– apache und php gefixed / neu installiert
– unterschiedliche Browser getestet (Firefox, Chrome, Dolphin)
Bisher leider alles ohne Erfolg. Das Schalten über die Konsole klappt ohne Probleme. Beim Aufruf über die IP sehe ich in der Raspberry Konsole zwar, dass ein Zugriff über mein Gerät erfolgt, aber diese Meldung schon an unterschiedlichen Stellen einfach zu enden und es passiert nichts.
Ich bin mit meinem Latein am Ende. Gibt es hierzu noch neue Erkenntnisse?
Grüße
Sebastian
Hallo Sebastian,
sagt denn der Apache-Error-Log irgendetwas?
hallo,
erstmal super anleitung!
bin eine neuling auf diesem gebiet, habe alles nach der Anleitung gemach und es
hat alles super funktioniert.
Habe aber noch ne frage wie füge ich die neue Weboberfläche ein?
Gibt es eine Zeitschaltung?
Danke
===========================================================
hmmm, wenn ich jetzt die Weboberflöche aufrufe steht Could not connect to socket
===========================================================
hallo, könnt ihr mir bitte helfen, was muss ich hier alles eintragen? sudo nano /etc/rc.local blicke nicht durch.
Danke
Hi,
um ein anderes Webinterface zu verwenden, müssen einfach die entsprechenden Dateien ersetzt werden. Ob das neue Webinterface dann eine Zeitschaltung hat oder nicht, liegt daran, ob die Funktion dort eingearbeitet wurde, oder nicht. Prinzipiell lässt sich die Zeitschaltung in jedes Webinterface integrieren.
„Could not connect to socket“ bedeutet, dass sich das Webinterface nicht mit dem daemon, der für das Schalten der Steckdosen verantwortlich ist, verbinden kann. Entweder läuft dieser gerade nicht, oder es ist ein Fehler im Daemon selbst (mit „falscher“ nplugs-Zahl kompiliert z.B.).
Die Datei /etc/rc.local ist für den Autostart zuständig, in Verbindung mit dem im Tutorial genannten Script wird hier konkret der automatische Start des Daemons nach einem reboot des Raspberry Pi durchgeführt.
Danke für die antwort.
Was muss ich den in der datei /etc/rc.local verändern?
danke
=============================================
wie kann ich die Webinterface daten vom pc auf den pi kopieren?
danke für die hilfe. Aber ich kenne mich nicht aus.
danke danke danke
In die rc.local fügst du nur „/home/pi/raspberry-remote/start.sh“ hinzu. Dieses Script muss vorher wie beschrieben erstellt und ausführbar gemacht werden. Damit wird der daemon in den Autostart gelegt.
Kopieren kannst du Dateien vom PC auf den Raspberry auf vielfältige weiße: Über samba, ftp, scp usw. Ich nutze als SSH-Client unter Windows „SmarTTY“, dort kann man einfach oben auf SCP–> Upload a file/directory gehen.
Für Samba und (S)FTP empfehle ich die verlinkten Artikel auf Jan´s Blog.
Danke werde es ausprobieren
ich habe es hinbekommen!
nach genauem lesen habe ich es geschaft!
aber kannst du mir vielleicht sagen wie ich eine Zeitschaltung einbauen kann?
Kann leider keine Programm schreiben.
Danke
Hey dobi,
schön, dass es nun auch bei dir geklappt hat :)
Am Einfachsten ist es wohl, den Quelltext des Webinterfaces von raspberry-remote anzuschauen, da dort die Zeitschaltung integriert ist. Ist eigentlich nur copy&past und ein einfacher Einstieg in PHP ;)