Funksteckdosen übers Netz schalten
In einem vorherigen Tutorial hast du bereits gelernt, wie man
Funksteckdosen mit dem Raspberry Pi schalten kann. Dieses mal geht es darum, Funksteckdosen auch über das Internet schalten zu können. Mit dieser Funktion ist es möglich, die Steckdosen von überall im Haus zu schalten.
Dazu legen wir uns ein Skript an, an das wir Raum, Gerät und Zustand übergeben können, um so die gewünschte Steckdose zu schalten.
Das Skript kann entweder über die Kommandozeile angelegt und bearbeitet werden oder per FTP.
Ich empfehle das Arbeiten mit einem FTP-Client wie z.b. FileZilla. Als Texteditor verwende ich außerdem Notepad++, da dort die Syntax von allen gängigen Programmiersprachen hervorgehoben werden, was die Coding-Arbeit ungemein erleichtert. Alle Downloads findest du unter dem Menüpunkt
Downloads & Programme.
Vorbereitungen
Um die Steckdosen per Browser steuern zu können, muss die send-Datei aus dem 'raspberry-remote'-Verzeichnis zugänglich für den Nutzer www-data sein. Um dies zu erreichen, kopieren wir mit folgendem Befehl die send-Datei in den Ordner '/usr/local/bin':
sudo cp /home/pi/raspberry-remote/send /usr/local/bin
Anschließend wechseln wir in diesen Ordner und setzen die Rechte entsprechend:
cd /usr/local/bin
sudo chmod 755 send
sudo chown root send
sudo chmod u+s send
Der Besitzer der send-Datei ist nun der Nutzer root. Wird die Datei jedoch ausgeführt, wird sie dank dem Zusatz 'u+s' aus dem letzten Befehl automatisch mit root-Rechten ausgeführt.
Datenbank vorbereiten
Bevor mit der Programmierung des Skripts begonnen werden kann, muss die Datenbank noch entsprechend vorbereitet werden. Dazu rufst du phpLiteAdmin auf (http://[IP DES PI]/database/phpliteadmin.php) und gibst gegebenenfalls das Passwort ein (Standardpasswort: 'admin'). Nun erscheint der Hauptbildschirm von phpLiteAdmin (siehe Screenshot).

In einer neuen Tabelle werden die Daten der Funksteckdosen abgespeichert.
Unter dem Punkt "Create new table on database 'data.sqlite'" gibst du nun bei Name 'funksteckdosen' und bei 'Number of Fields' 5 ein. Anschließend klickst du auf 'Go'. Dies erstellt innerhalb der Datenbank 'data.sqlite' eine neue Tabelle mit dem Namen 'Funksteckdosen' und 5 Feldern. Im folgenden Bildschirm müssen die 5 Felder noch definiert werden. Dies machst du, wie im nächsten Bild zu sehen.

Die Tabelle für die Funksteckdosen wird mit folgenden Werten definiert.
Erklärung der Felder:
- ROOM - Der Raum, in dem sich die Steckdosen befindet
- DEVICE - Das zu schaltende Gerät
- HAUSCODE - Der zugewiesene Hauscode
- STECKDOSENNUMMER - Die zugewiesene Steckdosennummer
- ZUSTAND - Der aktuelle Zustand der Steckdose (an / aus)
Nun klickst du auf 'Create', um den Vorgang abzuschließen. Die Tabelle ist nun erstellt, jedoch immer noch leer. Um dies zu ändern, klickst du in der Leiste links unter dem Punkt 'data.sqlite' auf 'funksteckdosen' und anschließend im Rechten Abschnitt auf 'Click here', um Reihen einzufügen. Im nächsten Bildschirm wird die erste Funksteckdose angelegt. Dazu trägst du in die Felder einfach die gewünschten Werte ein, wie im Screenshot zu sehen.

Mit diesen Werten wird eine neue Reihe erstellt.
Mit einem Klick auf 'Insert' wird die Reihe angelegt.
Das Skript
Um die Funksteckdosen nun per http-Aufruf schalten zu können, legen wir nun entweder per FTP (empfohlen) oder per Kommandozeile im Server-Hauptverzeichnis die Datei 'setModes.php' an. Per FTP funktioniert das folgendermaßen: per Rechtsklick in den Serverbereich das Kontextmenü öffnen und 'Neue Datei erstellen' wählen.

Im Kontextmenü wählst du 'Neue Datei erstellen' aus.
Anschließend den Dateinamen (hier: 'setModes.php') eingeben und 'OK' klicken.

Als Dateinamen gibst du 'setModes.php' ein.
Per Rechtsklick und "Ansehen/Bearbeiten" kannst du die Datei in dem Standardprogramm für den jeweiligen Dateityp öffnen. Für Programmierarbeit nutze ich
Notepad++. Mit dem folgenden Skript werden Hauscode und Steckdosennummer anhand des übergebenen Raumes und des Gerätes aus der Datenbank geladen, die entsprechende Funksteckdose geschaltet und anschließend der neue Zustand dieser Funksteckdose in die Datenbank geschrieben. Somit können neue Funksteckdosen per phpLiteAdmin angelegt werden, ohne das Skript anpassen zu müssen.
<?php
function setModes($room, $device, $zustand, $db){
$query = $db->prepare("SELECT * FROM 'funksteckdosen' WHERE ROOM == :room AND DEVICE == :device");
$query->execute(array('room' => $room, 'device' => $device));
if($result = $query->fetch(PDO::FETCH_ASSOC)){
$hauscode = $result['HAUSCODE'];
$steckdosennummer = $result['STECKDOSENNUMMER'];
}
shell_exec("/usr/local/bin/send ".$hauscode." ".$steckdosennummer." ".$zustand);
$query = $db->prepare("UPDATE 'funksteckdosen' SET 'ZUSTAND' = :zustand WHERE ROOM == :room AND DEVICE == :device");
$query->execute(array('zustand' => $zustand, 'room' => $room, 'device' => $device));
return "SET ".$device." IN ".$room." TO ".$zustand;
}
?>
Anschließend speicherst du das Skript, wechselst wieder zu FileZilla und bestätigst dort die Meldung, ob die Änderungen an den Server gesendet werden sollen.
Die Funksteckdosen können dann über eine Schnittstelle gesteuert werden, die zur Programmierung der Android-App angelegt wird.
Falls du Fragen oder Probleme hast, kannst du gerne einen Kommentar hinterlassen.
Dieses Tutorial als Video