Ich habe die Steuerung von Funksteckdosen mit dem Raspberry Pi umgesetzt und eine Schnittstelle zur Homematic Zentrale geknüpft. Das ganze Projekt beschreibt euch der folgende Artikel detailliert in einer Schritt für Schritt Anleitung.

Einführung

Neben dem „großen Bruder“ KNX (ich weiß, der Vergleich hinkt) gibt es viele weitere Systeme und Möglichkeiten der Hausautomation. In unserer Mietwohnung ist eine Umsetzung mit KNX aus verschiedenen Gründen nicht möglich. Deshalb haben wir für die Rolladensteuerung das Homematic System von EQ-3 installiert. Mit der zugehörigen Zentrale CCU2 können primä nur Komponenten von Homematic gesteuert werden. Diese sind zum Teil recht teuer. So z.B. die Schaltbaren Steckdosen, von denen ich zu versuchszwecken eine mit Leistungsmessung besitze. Der Preis ist mit über 50 € pro Stück natürlich recht hoch.

Schaltbare Steckdosen gibt es – unabhängig von Homematic – mit einer Funkfernbedienung bereits sehr günstig. Dreier Sets bestehend aus 3 Funksteckdosen und einer Fernbedienung gibt es bereits für unter 20 €. Ich besitze zwei dieser Sets der Firma Brennenstuhl. Diese Funksteckdosen nutzen 433MHz als Frequenz. Für den Raspberry Pi gibt es entsprechende Funkmodule die sich entsprechend steuern lassen um so die Funksteckdosen mit dem Raspberry zu schalten. Da wir als zentrale die Homematic Zentrale CCU2 besitzen, möchte ich das Ganze hierüber integrieren. Daher muss noch eine Anbindung an die Homematic Zentrale erfolgen. Als App dient die AIO Remote App.

Die Komponenten für den Raspberry Pi

Neben dem lauffähigen Raspberry Pi (im vorliegenden Fall Revision 3) werden einige Bauteile benötigt, die im Folgenden aufgelistet sind

  • 433 MHz Funkmodul (z.B. dieses hier)
  • Lochplatine oder Breadboard
  • Jumper-Kabel

Später werden wir unsere Sendeleistung durch wenige Modifikationen deutlich erhöhen. Hier werden dann noch benötigt:

Zusammenbau der Hardware

Grundlegender Anschluss des RF-Moduls an den Raspberry Pi. Im weiteren Verlauf wurde zur Erhöhung der Sendeleistung die Schaltung abgewandelt und das RF Modul mit einer 12V Stromquelle versehen.

Die Software

Die folgenden Ausführungen setzen einige Dinge voraus, auf die hier nicht näher eingegangen wird:

  • Raspberry Pi (z.B. 2 Model B oder neuer) mit entsprechendem Betriebsystem (ich nutzte für dieses Tutorial Raspian Jessie)
  • wiringPi (im vorliegenden Tutorial 2.32 verwendet)
  • GIT (im vorliegenden Tutorial 2.1.4 verwendet)

rcswitch-pi

Bei der Software wurde für die grundlegender Verwendung rcswitch-pi gewählt. Dieses kann aus dem GIT-Repository  geklont werden:

git clone https://github.com/r10r/rcswitch-pi.git

Dieses wird anschließend mit make kompiliert:

cd rcswitch-pi
make

Nun ist es bereits möglich, dass die Funksteckdosen über die Konsole gesteuert werden können. Der Grundlegender Befehlsaufbau lautet:

sudo ./send <Systemcode> <Gerätecode> <Status>

Für den Systemcode und den Gerätecode müssen die Steckdosen entsprechend „eingestellt“ werden. Dafür gibt es unter der Abdeckung 10 DIP-Schalter. Die ersten 5 repräsentieren den Systemcode, die anderen 5 entsprechend den Gerätecode. DIP-Stellung oben entspricht „1“ und DIP-Stellung unten entspricht „0“.

Die DIP-Schalter der Steckdose: Die DIPs 1-5 sind für den Systemcode, die DIPs 6-10 für den Gerätecode. Hier also Systemcode 10110 sowie Gerätecode 10000 bzw. Gerät Nr. 1

Also können wir die o.g. Steckdose mit dem folgenden Befehl ein- bzw. ausschalten:

# einschalten
sudo ./send 10110 1 1

#ausschalten
sudo ./send 10110 1 0

Schnittstelle zur Homematic-Zentrale

Webserver einrichten

Damit nun eine Steuerung via Homematic-Zentrale möglich ist, müssen auf dem Raspberry noch eine Voraussetzung geschaffen werden. Und zwar erfolgt der Aufruf aus Homematic via URL. Dafür ist die Installation eines Webservers mit PHP notwendig. Dies soll an dieser Stelle nicht weiter beschrieben werden, da ausreichend Tutorials im Netz dazu zufinden sind.

Rechte anpassen

Ist der Webserver lauffähig eingerichtet geht es nun an die weiteren Schritte. Da der Raspberry hier nur lokal läuft und von außen nicht erreichbar ist, habe ich nun zunächst die Rechte der send-Datei angepasst um diese auch ohne „sudo“ durch das PHP-Skript aufrufbar zu machen:

sudo chown root send
sudo chmod 755 send
sudo chmod u+s send

Hinweis: Mir ist bewusst, dass dies ein Sicherheitsrisiko darstellt, dass ich für eine streng lokale Anwendung und einer entsprechend konfigurierten Firewall der Einfachtheit eingehe.

PHP-Skript

Als nächstes benötigen wir ein PHP-Skript, dass die Anfragen aus Homematic entgegen nimmt und ans Skript weiterleitet. Dies sieht wie folgt aus:

<?php
$s=filter_input(INPUT_GET, 's', FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^(on|off)$/")));
$c=filter_input(INPUT_GET, 'c', FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-z_].+$/")));
$d=filter_input(INPUT_GET, 'd', FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-z_].+$/")));

$gewerke = array(
    "livingroom" => "10110",
// ... weitere Räume
);

$dosen = array(
    "ambilights" => "1",
// ... weitere Dosen
);


if(key_exists($c,$gewerke) && key_exists($d,$dosen)) {
    $sw = (strtolower($s) == 'on') ? '1' : '0';
    $cmd = '/home/pi/rcswitch-pi/send '.$gewerke[$c].' '.$dosen[$d].' '.$sw;
    // echo $cmd;
    shell_exec($cmd);
}
?>

Erläuterung: In Zeile 2-4 werden zunächst die GET-Variablen gefiltert, damit hier kein Schadcode eingeschleust werden kann.  Dann werden Gewerke und Steckdosen definiert. Damit man sich später nicht die Systemcodes und Gerätecodes merken muss, können die als Index definierten Bezeichner dafür verwendet werden. Die Existenz der Indizes die via GET-Parameter übergeben wurden werden dann überprüft (Zeile 18). Wenn alles passt, wird der Code per shell_exec ausgeführt.

Homematic-Programm

In der Homematic-Zentrale wird nun ein Programm definiert. Unter Skript wird dann folgender Code ausgeführt:

string stdout;
string stderr;
system.Exec("wget -q -O - http://my.local.raspidns/send/?s=on&c=livingroom&d=ambilights", &stdout, &stderr);

Es wird also ein einfacher GET-Request aus Homematic abgefeuert. Da wir bei den Funksteckdosen keine Rückmeldung über den Ein- oder Ausschaltzustand bekommen, müssen wir natürlich sowohl ein Programm zum Einschalten (also Parameter s=on) und zum Ausschalten haben (s=off).

Steuerung über AIO Remote-App

In der AIO-Remote-App können nun einfach zwei Buttons eingefügt werden auf die das Programm „einschalten“ bzw. „ausschalten“ gelegt werden muss. Fertig ist die Steuerung der Funksteckdosen über die Homematic-Zentrale und die Remote-App.

Selbstverständlich können die Programme auch über entsprechende Ereignisse (Uhrzeit, etc. pp.) geschaltet werden.

Ausblick und Anregungen

In Kürze werde ich noch die Änderungen an der Schaltung mit einfügen. Um eine optimale Sendeleistung zu erhalten muss zum einen eine entsprechend lange Antenne an den RF-Chip gelötet werden und zum anderen muss die Spannung gesteigert werden. Dies habe ich mit einer A23 Batterie (12 V) nun gemacht. In Kürze ergänze ich das noch in diesem Tutorial.

Quellen

Hinweis

Das Nachbauen geschieht auf eigene Gefahr. Insbesondere übernehme ich keine Garantie für Schäden an der Hardware oder für Personenschäden. Bei unsachgemäßer Anwendung bestehen Gefahren für die Gesundheit sowie für elektronische Bauteile. Beachtet werden müssen außerdem die jeweils geltenden Rechte im Umgang mit Funksignalen. Ggf. ist eine Betriebserlaubnis notwendig.