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.
Moin Alexander,
ich habe das Problem, wenn ich die Weboberfläche aufrufe steht : Could not connect to socket-
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
Wo steht das noch mal genau? wie erstell ich start.sh? Im Ordner raspberry-remote finde ich auch die datei nicht.
Danke für deine Hilfe!
Hi dobi,
start.sh und rc.local? Ich weiß gerade nicht, wo du diese Angaben her hast, aber der in der Anleitung beschriebene Schritt mit dem restart-Script sollte problemlos klappen und den Daemon sogar bei Absturz automatisiert neu starten.
Toller Blog !!!
Wie sieht’s denn mit der Reichweite aus? Lässt sich diese (wie) verbessern?
Hallo Wolf,
danke! :)
Die Reichweite lässt sich durch eine zusätzliche Antenne am Sender vergrößern (das kleine Loch oben rechts am Sender). Dort einfach ein ca. 17cm langes Drahtstück befestigen. Ansonsten hilft es noch, den Sender mit einer höheren Spannung zu betreiben. Am Pi wären 5V statt 3,3V möglich – für mehr braucht es eine externe Stromquelle.
Was mir auch aufgefallen ist: Die Sender haben je nach China-Lieferanten deutliche Reichweitenunterschiede. Meine Sender von dealextrem haben bisher die beste Reichweite.
Hi,
Ich habe auch das Problem, dass auf der Website “could not connect to socket“ steht.
Leider funktionieren die Lösungen nicht.
Was kann ich tun?
Richtig guter Blog!
LG
Ethan
Hi Ethan,
da momentan wohl viele Leute dieses Problem haben, habe ich nochmal das raspberry-remote repository angesehen. Dort ist mir aufgefallen, dass es vor 19 Tagen einige Änderungen gab. Evtl. versuchst du mal die alte Version herunterzuladen (via https://github.com/xkonni/raspberry-remote/tree/d24123ef3d719c9aa766fc33d90c5040ffd8e9f1), sollte sich nicht weitere notwendige Software geändert haben, sollte es damit funktionieren.
Hallo, hat jemand vielleicht eine Zeit Steuerung am laufen?
Würde gerne meine Funk Steckdosen über Zeit Einstellung steuern.
Vielen Dank !!!!
Mach das doch über CRON
Hallo,
hat das schon mal jemand mit den ja weit verbreiteten DÜWI oder Intertechno Steckdosen probiert, die man per Poti auf den Code einstellt?
Hallo exmerci,
am besten googlest du nach dem bestimmten Modell in Kombination mit dem Raspberry Pi – für die allermeisten dieser Dosen sollte es Möglichkeiten geben, diese über den Pi zu schalten.
Ich habe noch Elro AB601S hier, die baugleich mit den Düwi B402 sein sollen – diese funktionieren mit einer modifizierten send-Datei problemlos. RC-Switch (auf dem Raspberry-Remote beruht) wurde für zahlreiche Modelle bereits von Nutzern erweitert, lediglich den Daemon für das Webinterface müsste man sich selbst schreiben. In Python sollte das aber auch kein Problem sein. Einen Beispielcode für einen individuellen Socket-Server habe ich im Lichtwecker-Artikel bereits beschrieben.
Hallo, bei mir lässt sich mit jedem Webinterface die 5. Steckdose (E) nicht schalten. Mit dem ./send Befehl funktioniert es, ab die Webanwendung reagiert überhaupt nicht auf den Befehl.
Hat jemand eine Idee? Vielen Dank im Voraus.
Hallo Andre,
welche Steckdosen verwendest du? Meine Elro 440 gehen nur bis D – ein E gibt es nicht.
Hi, vielen Dank für die Antwort. Ich habe einfach die Codierung geändert und jetzt funktioniert alles. TOP Tutorial. Vielen Dank.
Hi Andre,
danke für die Rückmeldung! Das mit der anderen Codierung ist sicher eine gute Idee, wenn deine Steckdosen mehr Codes erlauben als das Webinterface.
Bekomme auf der Website folgende Fehlermeldung:
php_network_getaddresses: getaddrinfo failed: No address associated with hostname (0)
DNS funktioniert.
localhost, hostname und google.de sind anpingbar
Hallo Markus,
hmm…klingt komisch, vor allem, da eigentlich kein DNS benötigt wird – zumindest im eigenen Netz.
Was hast du in der config.php bei „$target“ eingetragen?
Hi Alex,
hi rest ;),
erstmal super vielen Dank für deine Arbeit, ich kann kaum noch erwarten bis es bei mir läuft. Allerdings beiße ich mir seit 2 Tagen die Zähne aus.
kann mittlerweile jemand sagen was es mit dem „Could not bind to socket“ auf sich hat. Mit einer älteren Version bekomme ich es nämlich auch nicht hin.
Webserver läuft, .send #Code‘ funktioniert auch. Es hapert an der Verbindung zwischen php Seite und Raspberry Remote. Jemand einen TIP?
Viele Grüße
Danke
Hallo Tobi,
das ist ärgerlich. Läuft denn der Daemon sicher im Hintergrund? Wie sieht es mit einer Firewall im Netzwerk aus?
Du kannst auch überprüfen, ob du dich von einem anderen Rechner aus (oder alternativ vom Pi selbst aus) mit dem Socket-Server verbinden kannst. Ich habe hier ein kleines Python-Script dazu veröffentlicht, das sich mit dem Socket-Server des Daemons verbindet und den Status ausliest. Funktioniert das, liegt irgendein Problem mit dem Webserver vor – dann können wir dort weitersehen ;)
Hi Alex, erstmal vielen dank für den Support.
Also, ich habe das Skript mal auf den Pi gepackt.
Ich bekomme immer die Rückmeldung aus. (unabhängig vom schaltzustand ?)
[email protected] ~/aaa $ python skript.sh 01
aus
ändere ich im Skript die IP Adresse (Gegenprobe)
[email protected] ~/aaa $ python skript.sh 01
^[[A[Errno 113] No route to host
Status konnte nicht ermittelt werden
ändere ich im Skript den Port (Gegenprobe)
[email protected] ~/aaa $ python skript.sh 01
[Errno 111] Connection refused
Status konnte nicht ermittelt werden
– heißt für mich der deamon läuft. undzwar auf port 11337. Firewall würde ich ausschließen.
– Warum Zeigt also das Skript falsche Sachen an?
– Warum gehts nicht ;) ? heißt ja der Fehler muss wirklich im php sein oder?
Smartcontrol meldet weiterhin „Could not bind to socket“ (zur Erinnerung senden über den Send befehl funktioniert) ;(
Gruß
Hi Tobi,
die Rückmeldung passt soweit – der Daemon geht im neu gestarteten Zustand immer von einem „Aus-Zustand“ aus, da der Status nicht mit den send-Befehlen synchronisiert wird. Das Script gibt also das aus, was das Webinterface auch anzeigen würde.
Es scheint also tatsächlich an Apache bzw. PHP zu liegen. Jetzt könnte ein Blick in den Apache-Fehlerlog hilfreich sein. Dazu am Pi „tail /var/log/apache2/error.log“ mal ausführen und die Anzeige posten. Vielleicht sind die Meldungen in der Logdatei ausführlicher.
Andbei das error log:
[Sat Oct 10 13:04:50.022402 2015] [:error] [pid 722] [client 192.168.0.16:53027] PHP Notice: Undefined index: 192.168.0.10 in /var/www/html/config.php on line 13, referer: http://192.168.0.10/
[Sat Oct 10 13:04:50.022914 2015] [:error] [pid 722] [client 192.168.0.16:53027] PHP Warning: shell_exec() expects exactly 1 parameter, 0 given in /var/www/html/config.php on line 14, referer: http://192.168.0.10/
[Sat Oct 10 13:04:50.042692 2015] [:error] [pid 722] [client 192.168.0.16:53027] PHP Warning: socket_bind(): Host lookup failed [-10004]: No address associated with name in /var/www/html/remote.php on line 59, referer: http://192.168.0.10/
[Sat Oct 10 13:04:51.104583 2015] [:error] [pid 722] [client 192.168.0.16:53027] PHP Notice: Undefined index: 192.168.0.10 in /var/www/html/config.php on line 13, referer: http://192.168.0.10/
[Sat Oct 10 13:04:51.104996 2015] [:error] [pid 722] [client 192.168.0.16:53027] PHP Warning: shell_exec() expects exactly 1 parameter, 0 given in /var/www/html/config.php on line 14, referer: http://192.168.0.10/
[Sat Oct 10 13:04:51.121265 2015] [:error] [pid 722] [client 192.168.0.16:53027] PHP Warning: socket_bind(): Host lookup failed [-10004]: No address associated with name in /var/www/html/remote.php on line 59, referer: http://192.168.0.10/
was bedeutet eigentlich was der daemon zurückwirft, wenn man ihn startet?
[email protected] ~/raspberry-remote $ sudo ./daemon &
[1] 1177
die config.php sieht so aus:
hab smartcontrol als seite genommen, und sie liegt bei mir in www/html/ nicht in remote.
danke für deine hilfe.
Hi Tobi,
das was der Daemon anzeigt, stammt eigentlich vom Betriebssystem und ist die process-id des Daemons, eine Zahl, die den gestarteten Prozess identifiziert. Diese wird z.B. dann benötigt, wenn der Prozess geschlossen werden soll (sudo kill xxx).
Wo die Seite liegt sollte egal sein. Hast du mal die config.php? Ich hab sie mir mal auf der GitHub-Seite angesehen, ich würde sie anders schreiben.
Oben:
$source = $_SERVER[‚SERVER_ADDR‘];
$target = $_SERVER[‚SERVER_ADDR‘];
$port = 11337;
Damit wird die shell exec umgangen. Dann könnte das Array unten noch Probleme machen (habe den restlichen Code des umgeschriebenen Webinterfaces allerdings nicht ganz durchgelesen), falls es mit den obigen Modifikationen nicht geht, kannst du versuchen das auch umzuändern, mit diesem Aufbau:
$config=array(
array(„11010“, „01“, „Drucker“),
array(„11010“, „02“, „Repeater“),
„“,
„“,
)
inkl. der 2 „“ am Ende.
Hallo ,
Ich wollte fragen ,ob man irgendwie unter dem Design von Matteo ein Bild einsetzten kann , welches die Funktion hat mich auf eine andere Webseite zu bringen , wenn ich drauf klicke.Ich habe diese Steuerung nämlich in mein Smarthomesystem eingebunden und wollte eine Art Homebutton , der mich wieder auf die Hauptseite bringt , haben .
Ich frage mich nur wie das geht ,denn ich habe mich eigentlich nie mit diesem Thema beschäftigt.
MFG
Hallo Philipp,
das sollte problemlos mit einfachem HTML funktionieren, das ein Bild zeigt und einen Link beinhaltet. Da hier PHP zum Einsatz kommt, einfach den entsprechenden Code in ein „echo“ packen.
So, jetzt möchte ich nochmal ne Rückmeldung geben, ich weiß mitlerweile was das problem war. die ordnerrechte von dem remote Ordner waren falsch. sodass apache nicht drangekommen ist. – hatte einen kumpel drangelassen, und alles andere war richtig, nachdem er die rechte gesetzt hatte, funktioniert alles prima….. leider bin ich ich jetzt in das nächste getappt. Wobei das eher zum anderen Aritkel passt. kurzform hier : homekitserver über z-wave läuft. aber seit (und das isnt eine vermutung) update auf 9.1. findet eve die bridge nichtmehr. leider finde ich so gut wie keine einstellungen.
Alexander könntest du irgendwo Dropbox oder so ( zur not auch Mail) ein Backup deiner SD Karte mit dem Programm zum Steuern von den Steckdosen über HomeKit zugänglich machen?
Hallo!
Zuerst mal ein grossen Lob an das gute Tutorial – funktioniert wunderbar.
Ich wollte aber soeben das „Interface von Dan“ einspielen – ich erhalte dann die Fehlermeldung „Could not bind to socket“ – mit den Original-Files funktioniert alles wunderbar.
Was mache ich falsch, bzw. vergesse ich etwas zu beachten? :-/
Danke
Viele Grüße
Clemens
Hallo Clemens,
bei der .zip-Datei ist keine config.php dabei. Hast du die entsprechende Datei vom funktionierenden Webinterface in den Ordner von Dan´s Interface kopiert?
Hi Alexander,
ja habe ich.
Zur Info:
Ich habe alle Ordner gesichert, dann gelöscht, und den Inhalt des ZIP Folders in den Ordner kopiert + die bestehende config-datei hineinkopiert.
Das ist ja richtig so oder?
LG
Clemens
Hallo Clemens,
klingt vernünftig ;)
Was ich mir als Fehlerquelle vorstellen könnte: Wenn du die neueste Version von raspberry remote installiert hast, gab es da einige Änderungen seit dem Erstellen des Artikels. Vielleicht probierst du erst mal die ältere Version des Webinterfaces zu installieren (zu finden hier) und schaust, ob das Interface von Dan damit bei dir läuft.
Guten Tag!
Funktioniert diese Anleitung auch mit dem neuen, günstigen Pi Zero?
Falls ja wo muss ich dort was anschließen, um meine Funksteckdosen steuern zu können?
Vielen Dank im Voraus!
Günther
Hi Günther,
ja – das sollte auch auf dem Raspberry Zero laufen, da Wiring Pi wie unter dem B+-Modell laufen sollte. Pin #17 sollte an der selben Stelle zu finden sein.
hi zusammen!
besteht eigentlich die möglichkeit auf das Webinterface von Mattheo (Übrigens: Hervorragende Arbeit!) einen Button zu integrieren, der bei Klick den Rechner per WOL hochfährt (entsprechendes PHP-Script hätte ich) und bei zweitem klick ihn per remote-shutdown herrunterfährt (bspw. über php oder über client von Shutdown7 (shutdown7.com)).
Momentan starte ich den PC über die Funksteckdose und mit eingeschaltetem Bios AC power loss.
Ist aber nervig, da danach immer die Steckdose manuell ausgeschaltet werden muss :(
Hallo Mikel,
generell sollte das möglich sein – die Umsetzung erfordert allerdings etwas Arbeit.
Eine Möglichkeit wäre, den Socketserver um die Funktion zu erweitern bei einem bestimmte Gerätecode – hier wären keine Änderungen am Webinterface notwendig.
Eine andere Möglichkeit wäre, der entsprechenden Steckdose über JS mit 2 onclick-Funktionen jeweils einen HTTP-Request ausführen zu lassen. Hier bräuchtest du dann noch einen weitere Socketserver, der für das WOL-Zeug zuständig ist und ein kleines PHP-Script zur Ansteuerung dazu.
Es gibt sicher noch weitere Möglichkeiten, das umzusetzen, aber das waren so meine ersten Ideen dazu.
Hi,
unter Jessie will der Cronjob zum Daemon nicht mehr wie er soll. Zwar startet der Job und laut Log kommt es zu keinem Fehler, doch leider startet daemon_restart.sh wohl doch nicht.
Das ganze geht erst, nachdem ich manuell mit „sudo /home/pi/raspberry-remote/daemon_restart.sh“ starte. Oder eben den Daemon selbst starten. Unter Wheezy lief es.
Weiß jemand wie man das beheben kann?
Hi Chris,
puh – komische Sache. Nutze kein Jessie und kann daher das Verhalten gerade nicht nachstellen.
Wenn es bei manuellem Start funktioniert, könnte es sein, dass für alle Befehle im Bash-Script der komplette Pfad zum jew. Programm notwendig sind (also für ps, pgrep,…).
Ansonsten vielleicht noch den Tipp von dieser Seite probieren.
Hi,
Danke für die Antwort. Leider funktioniert es auch nach der Anleitung nicht. Die einzige Übergangslösung besteht jetzt darin, in rc.local „/home/pi/daemon_restart.sh“ einzutragen:-/
Leider kenne ich mich nicht gut mit Linux und dem Raspberry aus. Das blöde an meiner „Lösung“ ist ja, dass nach einem Daemon Absturz nichts mehr geht.
In der Syslog finde ich jedenfalls keine Fehlermeldung, aber auch nichts wo explizit daemon_restart steht . Ein Eintrag mit sudo nano /etc/crontab funktioniert auch nicht. Glaub ich Versuchedas jetzt schon 5 Std ;-)
Vielleicht klärt es sich ja bad auf, wenn sich Jessie weiter verbreitet hat.
Hi ,
erstmal dickes Lob ! Klasse Blog!
Kennst du unterputz Lichtschalter die da problemlos integriert werden können?
Hallo Grischdy,
danke für dein Lob! :)
Unterputzschalter verwende ich selbst nicht, allerdings gibt es aus dem Elro 440-Sortiment welche, die wohl kompatibel dazu sind (Elro AB440IS). Aber wie gesagt: Selbst habe ich die noch nicht ausprobiert, daher keine Garantie.
Also ich habe wieder wheezy aufgesetzt und es geht jetzt sofort mit Crontab. Schade, doch viele Sachen laufen mit Jessie nicht.
Hallo,
super Blog. Hat mich schon sehr weit gebracht. Die moderne Hausautomation kann kommen ;-)
Benutze Deine Anleitung zur Steuerung meines Aquariums (Licht, CO2, O2). Es funktioniert wunderbar. Benutze den send-Befehl im crontab.
Eines funktioniert allerdings nicht – Das Webinterface. Nach Deiner Beschreibung sollte die Seite über ‚http://[meine IP]/remote/‘ aufrufbar sein. Bekomme stattdessen aber den Fehler ‚404 Not Found‘. Trage ich nur die IP ein, dann kommt die Standardseite ‚Apache2 Debian Default Page‘.
Bin ein absoluter Neuling in Sachen Linux und vor allem Apache.
Gruß
Martin
Hi Martin,
was sagt denn „ls -R /var/www/“?
Hallo,
das Webinterfacce von Z-Wave funktiniert einwandfrei, jedoch lassen sich die Funksteckdosen am RaspberryPi nicht per webinterface ansteuern -über ssh mit dem Befehl „sudo ~/raspberry-remote/send 11010 1 1“ kann ich die Funksteckdose EIN und mit „sudo ~/raspberry-remote/send 11010 1 0 AUS schalten – was muss ich im WebInterface von Z-Wave eintragen ?
Hi Uwe,
im Webinterface von z-wave müssen die URLs aus dem Webinterface von raspberry-remote eingetragen werden.
Hi Alex,
ich kann mit dem Befehl „sudo ~/raspberry-remote/send 11010 1 1“ EIN und
mit dem Befehl „sudo ~/raspberry-remote/send 11010 1 0“ die Funksteckdose 1 über ssh EIN und AUS schalten –
die IP des PIs lautet „19.168.0.16“
was muss ich nun im Webinterface von Z-Wave zum EIN und was zum AUS schalten eintragen ?
Danke im vorraus –
Uwe
die IP ist falsch – sie lautet 192.168.0.16 – Entschuldigung !!
Hallo Uwe,
für z-wave muss wie gesagt das Webinterface von raspberry-remote auch noch eingerichtet – der send-Befehl vom Terminal lässt sich dort meines Wissens nach nicht direkt verwenden.
Hallo Alex,
erstmal Danke für das gute Tutorial. Leider bekomm ich das Schalten der Steckdosen nicht zum laufen.
Ich habe mir ein 3er Set von Pollin bestellt, dann deine Anleitung befolgt und ich kann wunderbar senden. Aber es passiert nichts.
Liegt es daran, dass ich den FS1000A 433mhz Sender habe? Billig-ware?
Raspberry Pi 2 Model B v1.1
VCC geht an 5V (Pin 2)
GND geht an GND (Pin 6)
DATA geht an WiringPi 0 bzw. GPIO 17 (Pin 11)
Ich habe sowohl die neuste Version von raspberry-remote als auch eine ältere Version probiert, die du weiter oben erwähnt hast…leider nichts zu machen.
Wo ist mein Fehler? :-D
Vielen Dank für deine Hilfe
Gruß
Stefan
Hallo Stefan,
das Schalten über das Terminal klappt auch nicht? Hm – merkwürdig. Ich habe die Dosen von Pollin nicht, aber wenn sie sich mit DIP-Schaltern einstellen lassen, sollten sie eigentlich gleich den hier erwähnten Elro 440 funktionieren.
Der Sender ist zwar Billigware, funktioniert bei mir aber recht gut – gerade mit externer Antenne.
Um den Fehler zu finden, würde ich erst einmal die Dosen in die Nähe des Senders bringen und ein Stück Draht (ca. 17cm) als externe Antenne an den Antennen-Pin des Senders anbringen. Hilft das nichts, wäre der 433MHz Receiver praktisch, um herauszufinden, ob überhaupt etwas gesendet wird. Wird was gesendet könnten die Pollin-Dosen einen anderen Code verwenden. Dann könnte man über den Receiver die Fernbedienung auslesen.
Das sind aber nur Ansätze, da man sich der Reihe nach vortasten muss ;)
Hi Alex,
Danke für deine Tipps, habe eine 17cm Antenne angebaut.
Aber eins vorweg: Es läuft immer noch nicht -.-
Ich habe mit einem 433MHz Receiver mal getestet, ob überhaupt mein 433MHz Sender Signale sendet -> Ja, das klappt wunderbar. Eigene Signale empfange ich super. Ich sehe also, wenn ich „send 11011 1 1“ eingebe etc.
Dann hab ich in allen Positionen die Fernbedinung dran gehalten und bekommen zwar Input, aber einfach zu viele. Von Wetterstationen, bis impulse switch, elro_800_switch, elro_800_contact, clarus_switch, tfa, ev1527, heitech, logilink_switch und daycom.
Hier ist nochmal der gesamte Output: http://pastebin.com/r1jbh33B
Liegt es vielleicht daran, dass ich zu viele Störquellen habe?
Und ich habe den Sender an 5V angeklemmt, nicht 3V, ist doch okay so?
Ach und der Sender liegt im warsten Sinne des Worte auf der Steckdose.
Irgendwo hab ich doch einen Denkfehler, fällt dir noch was ein?
Vielen Dank nochmal an dich.
Gruß
Stefan
Hi Stefan,
puh – das ist schon recht viel, was da reinkommt. Gerade mit dem billigen Empfänger ist das m.M.n. doch recht ungewöhnlich – aber je nach Wohnlage durchaus möglich.
Danke für den Output. Einmal ist zwar ein pollin-Gerät dabei, allerdings wird dort der systemcode + unitcode 0 ausgebenen, das sollte einem „./send 00000 00000 1“ gleichkommen – sehr merkwürdig. Gut möglich, dass etwas die Signale der FB derart stört, dass sie unbrauchbar sind. Evtl. probierst du mal eine Antenne an den Empfänger anzubringen.
5V am Sender sind völlig OK – der verträgt sogar mehr und mit 5V solltest du ein stärkeres Signal erzeugen können als mit 3V, von daher alles im grünen Bereich.
Klingt jetzt vielleicht komisch – aber das könnte auch ein Problem darstellen. Hier in den Kommentaren hatte jemand das Problem, dass die Dosen nicht schalteten, wenn der Sender zu nahe daran war. Etwas Abstand schadet nicht – auch zum Testen.
Hier und hier habe ich was zu den Pollin-Dosen gefunden. Es sollte also mit rcSwitch bzw. raspberry-remote problemlos klappen. Interessant ist vielleicht, dass im 2ten Link die Puls-Länge auf 422 µs festgelegt wurde – ob das wirklich notwenig ist, kann ich nicht sagen, aber einen Versuch ist es wert (in der send.cpp „mySwitch.setPulseLength(300);“ auf „mySwitch.setPulseLength(422);“ ändern + neu kompilieren).
Ansonsten wäre der Vergleich der empfangenen Daten von der FB mit denen vom Raspberry gesendeten interessant, vielleicht lässt sich da was raus lesen (auch wenn es bei den zahlrechen empfangenen Signalen mühsam sein kann).