433MHz-Sender auf hifiberry amp+ raspberry pi via openHAB fernsteuern

Über das Thema Funksteckdosen über 433MHz-Sender mit Raspberry Pi schalten habe ich bereits geschrieben.

Funksteckdosen sind schon etwas Schönes. Es gibt sie von vielen Herstellern von Smarthome-Systemen: homematic, fritz / AVM, usw. Diese haben aber alle etwas gemeinsam: sie sind recht teuer. Billiger sind einfache Funksteckdosen wie z.B. die von ELRO. Diese 433MHz-Protokolle sind zwar nicht verschlüsselt und nicht so sicher wie die teureren Dosen, aber es kommt eben auch immer darauf an, was man damit schalten will und ob ein unbefugtes Schalten kritisch wäre oder nicht.

Nun war ein kleiner Umbau notwenig. Hintergrund ist, dass der Raspberry Pi, welcher als Smart-Home-Server in meinem Haus seine Dienste leistet und der zuvor als 433 MHz-Sender via Exec-Binding aus openHAB heraus verwendet wurde, die betroffenen Empfänger nicht so ganz in idealer Reichweite hatte. Ein andere Raspberry Pi, und zwar mein mittels des Verstärkers hifiberry amp+ umgesetztes Webradio ist in unmittelbarer Reichweiter der drei anzusprechenden 433MHz-Funksteckdosen.

Folgendes ist nun zu tun

  • Raspberry-Remote ist so zu installieren, dass es zum hifiberry amp+ – Aufsatz passt und die PINs sich nicht in die Quere kommen
  • Raspberry-Remote am Zielsystem muss vom openHAB-Server ansprechbar sein

Raspberry und Hifibery AMP+ zusammenbringen

Die Hifiberry amp+ – Karte belegt grundsätzlich von der Bauart her alle GPIO-Pins des Raspberry Pi. Allerdings ist es nicht so, dass diese PINs auch allesamt benutzt werden.

Meinen Recherchen nach nutzt die Karte folgende PINs (für Belegung siehe auch diesen Link):

  • GPIO PIN 2 für 5V-Input
  • GPIO PIN 3, 5, 18, 27, 28, 35, 38 und 40 um mit dem Raspberry entsprechend kommunizieren zu können

Demzufolge können verwendet werden:

  • GPIO PIN 4 für 5V-Input zum 433MHz-Sendemodul
  • GPIO PIN 9 für Ground / Masse
  • GPIO PIN 11 für Datenübertragung zum 433MHz-Sendemodul (=wiringPi PIN 0, Default-Belegung von raspberry-remote)

Raspberry-Remote mit entfernter openHAB-Installation zusammenbringen

Sicherlich wäre es möglich, openHAB via Exec-Binding per SSH auf den Zielrechner zugreifen zu lassen und das sende-Script entsprechend anzustoßen, aber die Schlüsselkonfiguration wollte ich mir sparen. Ich habe mich eher für einen Weg entschieden, eine Webschnittstelle zu implementieren, welche das Sende-Script entsprechend aufruft.

Auf meinem Pi, der nun das Sendemodul angestöpselt hat, habe ich einen apache-Webserver installiert und dort unter einer entsprechenden URL folgendes PHP-Script abgelegt. Der Rasbperry-Remote-Pfad ist ggf. noch anzupassen.

PHP-Web-Schnittstelle:

<?php
// Konfiguration des rasbperry-remote - send-Pfads
$send = '/opt/raspberry-remote/send';

// Nichts mehr verändern
$hauscode = (int) $_REQUEST['hauscode'];
$dosenNr = (int) $_REQUEST['dose'];
$kommando = (int) $_REQUEST['kommando'];

if (($hauscode == 0) || ($dosenNr == 0) || (($kommando != 1) && ($kommando != 0))) {
 echo 'Fehler beim Aufruf (hauscode=' . $hauscode . ' ' . $dosenNr . ' ' . $kommand . ')';
} else {
 $cmd = $send . ' ' . $hauscode . ' ' . $dosenNr . ' ' . $kommando;
 $result = shell_exec($cmd);
 if ($result) {
 echo 'Ausführen erfolgreich';
 } else {
 echo 'Ausführen nicht erfolgreich';
 }
 echo '<br/>Parameter: (hauscode=' . $hauscode . ' dose=' . $dosenNr . ' kommando=' . $kommando . ')';
}
?>

In openHAB selbst sind die Lampen (also Funksteckdosen), die per 433MHz geschalten werden sollen, lediglich als Switch angelegt:

items-File:

Switch eg_licht_kueche_unterlicht "Küche Arbeitsplatte"

Das Schalten selbst übernimmt nun eine Rule, sobald sich der Switch verändert hat.

rules-File:

Die funk433URL (URL des obigen PHP-Scriptes) muss sicherlich entsprechend angepasst werden. Meine Hauscodes habe ich im Beispiel durch x ersetzt, auch diese sind entsprechend anzupassen. Mehr zu diesen Codes sind meinem ursprünglichen Artikel zum Thema 433MHz-Funksteckdosen enthalten.

val String funk433Url = 'http://soundpi.fritz.box/433pi/433pi.php'

rule "Funksteckdose Nr 1 - Küche Unterlichter schalten"
when Item eg_licht_kueche_unterlicht received command
then
 if (eg_licht_kueche_unterlicht.state == ON) {
 sendHttpGetRequest(funk433Url + '?hauscode=xxxxx&dose=1&kommando=1');
 } else {
 sendHttpGetRequest(funk433Url + '?hauscode=xxxxx&dose=1&kommando=0'); 
 }
end

rule "Funksteckdose Nr 2 - Weihnachtsstern schalten"
when Item funkdose_Weihnachtsstern received command
then
 if (funkdose_Weihnachtsstern.state == ON) {
 sendHttpGetRequest(funk433Url + '?hauscode=xxxxx&dose=2&kommando=1');
 } else {
 sendHttpGetRequest(funk433Url + '?hauscode=xxxxx&dose=2&kommando=0'); 
 }
end

So schalte ich via Switch derzeit einen Weihnachtsstern im Küchenfenster und die Beleuchtung der Küchen-Arbeitsplatte.

Man muss sicherlich beachten, dass das Script nun im Hausnetz frei zugänglich ist. Jeder, der auf den Port des Apachen des Raspberry Pis Zugriff hat, der könnte nun theoretisch die Lichter einfach schalten.  Aber ich denke das Risiko ist sehr begrenzt 😉

Schreibe einen Kommentar

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.