Funksteckdosen per Internet schalten


29.03.2016  |  Smarthome Server, Tutorial

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){
	//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&uuml;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&uuml;ckgabe
	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

Über den Autor


Sascha Huber

Hallo, ich bin Sascha, der Gründer von Smarthome Blogger.

Mit einer Leidenschaft für Technologie und einem Hintergrund als Software Engineer habe ich 2016 Smarthome Blogger gegründet. Mein Ziel war es schon immer, innovative Lösungen zu entdecken, die unser Leben einfacher und intelligenter gestalten können. In meinem beruflichen Leben arbeite ich täglich mit Software und Technik, aber auch in meiner Freizeit bin ich stets auf der Suche nach neuen technischen Spielereien und Möglichkeiten, mein Zuhause zu automatisieren und zu verbessern.

Auf Smarthome Blogger teile ich mein Wissen, meine Erfahrungen und meine Begeisterung für alles rund um das Thema Smarthome.



Dieser Beitrag hat dir gefallen?

Dann abonniere doch unseren Newsletter!