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
cd /usr/local/bin
sudo chmod 755 send
sudo chown root send
sudo chmod u+s send
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). 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. 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)
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. Anschließend den Dateinamen (hier: 'setModes.php') eingeben und 'OK' klicken. 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){
//Hauscode und Steckdosennummer aus Datenbank laden
$query = $db->prepare("SELECT * FROM 'funksteckdosen' WHERE ROOM == :room AND DEVICE == :device");
$query->execute(array('room' => $room, 'device' => $device));
//Abfrageergebnisse speichern
if($result = $query->fetch(PDO::FETCH_ASSOC)){
$hauscode = $result['HAUSCODE'];
$steckdosennummer = $result['STECKDOSENNUMMER'];
}
//Schaltbefehl für Steckdosen
shell_exec("/usr/local/bin/send ".$hauscode." ".$steckdosennummer." ".$zustand);
//Status der geschalteten Steckdose aktualisieren
$query = $db->prepare("UPDATE 'funksteckdosen' SET 'ZUSTAND' = :zustand WHERE ROOM == :room AND DEVICE == :device");
$query->execute(array('zustand' => $zustand, 'room' => $room, 'device' => $device));
//Rückgabe
return "SET ".$device." IN ".$room." TO ".$zustand;
}
?>
Dieses Tutorial als Video
Dieser Beitrag hat dir gefallen?
Dann abonniere doch unseren Newsletter!