Wie man mit dem Raspberry Pi und einem Webserver einfach und schnell Funksteckdosen steuert

funksteckdose

Im Baumarkt erhältliche Funksteckdosen sind meist günstig und können mit einem Raspberry Pi und einem günstigen Funkmodul (MX-05V) mit wenigen Terminal-Eingaben steuerbar gemacht werden. Im Folgenden installieren und konfigurieren wir die hierfür benötigten Pakete wiringPi und 433utils, verbinden das Funkmodul mit den richtigen GPIO-Pins und steuern unsere Steckdose über das Terminal. Zusätzlich lernen wir, wie man bequem im Browser von anderen Computern oder Smartphones aus unsere Steckdosen steuert.

Raspbian aktualisieren, wiringPi und 433utils installieren

Zunnächst aktualisieren wir unser Raspbian-Linux und laden die benötigten Pakete herunter:
sudo apt-get update && sudo apt-get -y upgrade

Unser Zielordner für unsere git-Downloads ist ‚~/bin‘. Dieser wird, falls er noch nicht vorhanden ist, erstellt und in diesen gewechselt:
if ! [ -d ~/bin/ ] ; then
mkdir ~/bin/
fi
cd ~/bin/

Nun laden wir per git die benötigten Pakete herunter. Falls git noch nicht installiert sein sollte, muss dieses mit folgendem Befehl nachgeholt werden:
sudo apt-get install git git-core

Wie man git nicht nur installiert, sondern auch ordentlich einrichtet, kann hier nachgelesen werden.

Schließlich laden wir per git unsere Pakete wiringPi und 433utils:
git clone git://git.drogon.net/wiringPi
git clone git://github.com/ninjablocks/433Utils.git

Danach kompilieren wir unsere Pakete:
cd wiringPi
build
cd ..
cd 433Utils/RPi_utils
make

Funkmodul MX-05V an Raspberry Pi anschließen

Unser Raspberry Pi ist nun für die Bedienung von Funksteckdosen Software-seitig eingerichtet. Jetzt geht es an die Verkabelung des Funkmoduls mit den GPIO-Pins. Zur Hilfe hier eine Abbildung der jeweiligen Pins:

Quelle: ww.raspberrypi.org
Quelle: ww.raspberrypi.org

Pin 2 (5V) an VCC
Pin 6 (GND) an GND
Pin 11 (GPIO17) an ATAD

Einfacher geht es nicht! Für die Verbesserung der Reichweite unseres MX-05V kann an dieses eine Antenne gelötet werden. Man kann hierfür auch gewöhnlichen Klingeldraht verwenden:

Funkmodul MX05V mit Klingeldraht als Antenne
Funkmodul MX05V mit Klingeldraht als Antenne

Funksteckdosen einrichten

Auf der Hinterseite der Funktsteckdose öffnen wir mit einem Schraubendreher die Abdeckung und betrachten die Stellung der einzelnen Schalter. Mit diesen kann man den Funksteckdosen ein System und eine Kennung zuordnen. Rechnerisch sind damit 1024 unterschiedliche Zuordnungen möglich (10 Schalter mit Binär-Zustand: 2^10). Wir ziehen alle Stifte der Zahlen und Buchstaben herunter, die Zahl 2 und der Buchstaben C ausgenommen; diese werden gegebenenfalls hochgestellt. So sollte sich folgendes Bild ergeben:

funksteckdoseHinterseite

Die Steckdose kann wieder zugeschraubt und eingesteckt werden.

Im Terminal Funksteckdose steuern

433Utils besteht aus Programmen für den Arduino und den Raspberry Pi. ‚RPi_utils‘ beinhaltet die von uns benötigten Programme. Mit folgender Anweisung schalten wir nun unsere Funksteckdose an:
sudo /home/pi/bin/433Utils/RPi_utils/send 01000 3 1

Das Argument ‚01000‘  benennt das System und ‚3‘ die Funksteckdose, die wir ansteuern wollen. Hätten wir eben anstelle von ‚2‘ die Zahl ‚1‘ oder ‚3‘ hoch und alle anderen herunter hochgestellt, müsste das Argument folglich ‚10000‘  oder ‚00100″ lauten.

Und das letzte Argument ‚1‘ schaltet unsere Steckdose an; ‚0‘ würde sie wieder ausschalten.

Und jetzt wollen wir sie testweise auch wieder ausschalten:
sudo /home/pi/bin/433Utils/RPi_utils/send 01000 3 0

Sollte das geklappt haben, kann man sich beglückwünschen. Die Hauptarbeit ist erledigt. Wir sind nun in der Lage, unsere Funksteckdosen mit unserem Raspberry Pi zu steuern. Doch wenn es schnell gehen soll, kann man sich nicht jedes Mal per SSH einwählen und lange Anweisungen eingeben. Ein eigener Webserver würde da Abhilfe schaffen. Dieser wäre mit jedem beliebigen Browser erreichbar, sofern man sich im selben Netzwerk aufhält. Praktischerweise könnte man sich die URL des eigenen Servers als Favorit auf den Homescreens seines Smartphones legen.

PHP-Datei erstellen und mit HTML-Knöpfen Funksteckdose an- und ausschalten

Die folgenden Schritte setzen einen funktionierenden nginx-Webserver und eine PHP-Unterstützung voraus.

Sobald unser Webserver installiert und einsatzbereit ist, erstellen wir im Ordner ‚/var/www/html‘ eine Datei ‚funksteckdose.php‘ und befüllen diese mit unserem Code. Dies geschieht der Einfachheit halber mit folgender Anweisung:
cat<<EOF>>/var/www/html/funksteckdose.php
<?php if (isset($_POST['switch3-0'])) { exec('sudo /home/pi/bin/433Utils/RPi_utils/send 01000 3 0'); } ?>
<?php if (isset($_POST['switch3-1'])) { exec('sudo /home/pi/bin/433Utils/RPi_utils/send 01000 3 1'); } ?>
<html>
<head>
<title>Funksteckdose</title>
<meta charset="utf-8"/>
<meta http-equiv="expires" content="0"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=yes"/>
<meta name="date" content="$(date +"%Y-%-m-%d@%H:%M:%S")"/>
<meta name="description" content="Wir schalten unsere Funksteckdosen mit einem Raspberry Pi, dem Funkmodul MX-05V, einem nginx-Webserver und PHP-Unterstützung"/>
<meta name="keywords" content="Raspberry Pi, MX-05V, Funksteckdose"/>
<style>
body {
background-color: lightgrey;
font-family: Monospace;
font-size: 14px;
font-color: black;
}
a {
color: black;
text-decoration: underline;
}
a:active,a:visited {
color: black;
}
a:hover {
text-decoration: none;
color: black;
}
footer {
font-size: 12px;
}
</style>
</head>
<body>
<main>
<h2>Funksteckdose</h2>
<form action="" method="post"><p>
<button name="switch3-1" type="submit">An</button>
<button name="switch3-0" type="submit">Aus</button>
</form>
</main>
<footer>Erstellt $(date +"%Y-%-m-%d@%H:%M:%S") &#183; Quelle: <a href="http://www.nazim-kenan.de/" target="_blank">Nazim Kenan</a></footer>
</body>
</html>
EOF

Eventuell muss unsere eben erstelle php-Datei auch ausführbar gemacht werden, sollte es Probleme beim Ausführen geben:
chmod +x funksteckdose.php

Zusätzlich muss unserem Webserver die Möglichkeit gegeben werden, die ’sudo […]/send […]‘-Befehle ausführen zu dürfen, da hierfür root-Rechte benötigt werden:
sudo /bin/su -c "usermod -aG sudo www-data
sudo cat<<EOF>>/etc/sudoers
www-data ALL=(ALL) NOPASSWD: ALL
EOF"

Rufen wir nun im Browser die Adresse unseres Raspberry Pi auf und hängen ‚/funksteckdose.php‘ an, entdecken wir unsere Fernbedienung. In den meisten Fällen wurde der Hostname des Raspberry Pi nicht geändert, sodass folgender Aufruf im Browser zu unserer Fernbedienung führen sollte:
http://raspberrypi/funksteckdose.php

Wir haben nun eine Webserver-basierte Fernbedienung, die wir beliebig erweitern können. Für jede neue Funksteckdose müssen jeweils zwei php-Anweisungen und zwei HTML-Knöpfe eingefügt werden. Zu ändern sind hierbei die ’switch‘-Namen und die Parameter für den ’send‘-Befehl.

Mit install433UtilsEtherwake.sh Installation und Konfiguration automatisieren

Die oben stehende Schritte habe ich in einem Shellskript zusammengefasst und um das Tool ‚etherwake‘ erweitert:
curl -O https://raw.githubusercontent.com/NazimKenan/shellscripts/master/install433UtilsEtherwake.sh && chmod +x install433UtilsEtherwake.sh && ./install433UtilsEtherwake.sh

14 Gedanken zu „Wie man mit dem Raspberry Pi und einem Webserver einfach und schnell Funksteckdosen steuert“

  1. Sehr gute Erklärung. Hat bei mir geklappt. Ihnen ist nur ein Fehler unterlaufen. Sie beschreiben, dass im Ordner /var/www/ die Datei funksteckdose.php angelegt werden soll, erstellen sie aber mit cat im Unterordner html/ ?

    1. Vielen Dank für den Hinweis, Burkardt. Sie haben vollkommen Recht. Da hat sich wohl ein kleiner Fehler eingeschlichen, den ich jetzt auch korrigiert habe. Es freut mich zu hören, dass es bei Ihnen reibungslos geklappt hat.

  2. dafür würde sich ein dyndns hoster anbieten z.B. no-ip.com oder ähnliche dann kann man über die domain des Anbieter von unterwegs auf das PHP Script Zugreifen, hier würde ich allerdings empfehlen den Zugang zum Script abzusichern, damit nicht jeder der bewusst oder zufällig auf die Seite gelang die Steckdosen schalten kann.

  3. Hallo Leute, super Tutorial. Jedoch schalte meine Funksteckdosen nicht.

    Ich weiß auch nichts so recht mit diesem Befehl anzufangen.

    sudo /bin/su -c „usermod -aG sudo www-data
    sudo cat<>/etc/sudoers
    www-data ALL=(ALL) NOPASSWD: ALL
    EOF“

    Grüße
    Carsten

    1. Mit diesen Anweisungen werden dem Nutzer www-data die benötigten Admin-Rechte vergeben, ohne die die send-Befehle ansonsten mangels Berechtigung nicht funktioniert würden. In einer Produktivumgebung wäre dies selbstverständlich nicht sinnvoll. Aber für den privaten Gebrauch im lokalen Netzwerk halte ich das für vertretbar.

    1. Mir ist aktuell keines bekannt. Diese Anleitung ist auch eher für Nutzer gedacht, die einen Einstieg in die Materie finden wollen.

  4. Hallo Nazim!

    Diese Anleitung war für mich sehr gut geeignet und enthält alle wichtigen Schritte damit der Sender zum laufen gebracht werden kann. Allerdings ist mir aufgefallen, dass im bash shell listing etwas fehlt:

    cd wiringPi
    build
    cd ..

    Dies sollte – insbesondere damit es auch für Anfänger geeignet ist, wie folgt lauten:

    cd wiringPi
    ./build
    cd ..

    Ich bleibe auf Empfang und würde mich über weitere Hardware Tutorials von Dir freuen! :-)

    Viele Grüße
    Tobias Topyla

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *