openHAB :: Einbinden von Funksteckdosen

33Wie wir aus diesem Artikel wissen, können wir die recht günstigen Funksteckdosensets der Firma Brennenstuhl mit einem 433MHz-Funksender auch mit einem Raspberry steuern.

In dem erwähnten Artikel geben wir uns damit zufrieden, die entsprechenden Kommandos in die Konsole zu hämmern. Wäre es nicht schön, diese Funksteckdosen auch in openHAB zu integrieren? Wie das realisiert werden kann, möchte ich in diesem neuen Beitrag zeigen.

 

 

 

Verfügbare Artikel zu openHAB

little_blue_dot Einleitunglittle_blue_dot Einbinden der Internetgeschwindigkeitlittle_blue_dot RFID-Lesegerät einbinden
little_blue_dot Installationlittle_blue_dot Präsenzerkennung via Bluetooth und Pinglittle_blue_dot Einbinden von DS18B20-Sensoren
little_blue_dot Konfigurationlittle_blue_dot Kleines Netzwerkmonitoringlittle_blue_dot ical-Abfallkalender einbinden
little_blue_dot Reverse-Proxy für OpenHABlittle_blue_dot Einbinden von LG-Fernsehern [Update]little_blue_dot openHAB als Wecker
little_blue_dot Datenspeicherung und Statistikenlittle_blue_dot Einbinden Schaltern und Kontaktenlittle_blue_dot Einbinden von Bewegungssensoren
little_blue_dot Regeln planen und konfigurierenlittle_blue_dot Einbinden von Funksteckdosen (433 MHz)little_blue_dot Einbinden einer FritzBox
little_blue_dot Einbinden von USB-Steckdosenleisten (SIS-PMS)little_blue_dot Infrarotgesteuerte Geräte einbindenlittle_blue_dot Sprachausgabe auf einem Raspberry
little_blue_dot Einbinden von Temperatursensorenlittle_blue_dot Steuerung mit NFC-Tagslittle_blue_dot Schaltbare Steckdosenleiste mit Relais
little_blue_dot Externer Zugriff mit my.openhab

 

 

Unser Beispielszenario ist wie folgt konfiguriert:

Wir verfügen über einen Server mit einer lauffähigen openHAB-Instanz, welche wir zuvor installierten und konfigurierten. Dieser Server ist unter der IP-Adresse „192.168.23.212“ erreichbar. Zudem befinden sich verteilt im Haushalt drei Raspberry Pi, die mit den Adressen „192.168.23.235„, „192.168.23.236“ und „192.168.23.237“ konfiguriert wurden. Wir haben zuvor sichergestellt, dass dem Server ein SSH-Login ohne Passworteingabe auf allen Raspberry gestattet wird. Grafisch kann man dieses Szenario so darstellen:

 

szenario

 

 

Für diesen Beitrag interessieren uns jedoch lediglich die angeschlossenen 433MHz-Funksender. Als zu schaltendes Beispielobjekt führe ich in diesem Artikel ein Paar Lautsprecher auf, die sich im Wohnzimmer befinden.

Zunächst prüfen wir, wie auch in allen anderen Artikeln der openHAB-Serie, ob die Funktionalität lokal am Raspberry gewährleistet ist. Dazu melden wir uns via SSH am Raspberry an und schalten die Lautsprecher mit dem entsprechenden Haus- sowie Gerätecode ein:

/usr/local/bin/send 11101 3 1

 

Ein hörbares Klick der Funksteckdose sowie die Status-LED der Lautsprecher vermitteln uns nun möglicherweise das erste Erfolgserlebnis. Als Nächstes testen wir, ob dieser Vorgang fehlerfrei remote vom openHAB-Server aus möglich ist:

/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.235 "/usr/local/bin/send 11101 3 0"

 

Nun sollten die Lautsprecher wieder ausgeschaltet worden sein. Da wir über drei in der Wohnung verteilte Raspberry verfügen, ist es durchaus sinnvoll, dass der entsprechende Schaltbefehl via Funk von allen Sendern aus erfolgt. Das hier vorgestellte Funksteckdosensystem verfügt leider über keinen Rückkanal, so dass wir nicht hundertprozentig wissen können, ob der Schaltvorgang erfolgreich verlief oder nicht. Möglicherweise konnte einer der Funksender den Funkaktor, also die Funksteckdose, nicht erreichen. Daher schadet es nicht, wenn der Schaltbefehl von drei Seiten „gleichzeitig“ erfolgt. Und genau das verpacken wir nun in ein kleines Bash-Script „/scripts/fsd.sh„:

#!/bin/bash
/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.235 "/usr/local/bin/send $1 $2 $3"
/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.236 "/usr/local/bin/send $1 $2 $3"
/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.237 "/usr/local/bin/send $1 $2 $3"

 

Wir erlauben die Ausführung des Scripts durch

chmod +x /scripts/fsd.sh

und übertragen den Besitz an „openhab“ durch

chown openhab: /scripts/fsd.sh

 

Wir starten nun das Script auf dem openHAB-Server zunächst per Hand und prüfen, ob es ordnungsgemäß funktioniert:

/scripts/fsd.sh 11101 3 1

 

Anschließend können wir die Lautsprecher zunächst auch wieder ausschalten.

 

40
Für die Einbindung in OpenHAB verwenden wir das Addon „exec„, welches wir, wenn noch nicht vorhanden, nachträglich installieren mittels apt-Paketverwaltung:

apt-get install  openhab-addon-binding-exec

 

Wenn alle Vorbereitung für openHAB erfolgreich abgeschlossen wurden, ist es nun an der Zeit, ein entsprechendes Item zu erstellen:

Switch BOXEN_WZ <speaker> (grp_Boxen) { exec=">[ON:/scripts/fsd.sh 11101 3 1] >[OFF:/scripts/fsd.sh 11101 3 0]" }

Die Spalten dieser Definition im Einzelnen:

  • Das Item wird als Typ „Switch“ definiert
  • Das Item wird mit „BOXEN_WZ“ bezeichnet
  • Für die spätere Anzeige in der Sitemap wird das Symbol „speaker“ gewählt
  • Das Item wird der Gruppe „grp_Boxen“ hinzugefügt
  • Das Addon „exec“ wird zum Ein- und Ausschalten genutzt

 

Nun sind wir soweit, dass wir die Funksteckdose in die Sitemap einbinden können:

Switch item=BOXEN_WZ label="Lautsprecher" icon="speaker"  mappings=[ON="An", OFF="Aus"]

Nun wird das Lautsprecherpaar auf der Weboberfläche oder in der openHAB-App so dargestellt:

 

42

 

Eine weitere, interessante Möglichkeit ist die Verwendung des neuen Items in einer bzw. mehreren Regeln. Beispielsweise sollen die Lautsprecher nur eingeschaltet sein, wenn auch der Fernseher läuft, an dem die Lautsprecher angeschlossen sind. Da der Fernseher mit dem lokalen Netzwerk verbunden ist, kann mittels einfacher Ping-Anfragen festgestellt werden, ob dieser in Betrieb ist oder nicht. Das dazu notwendige „Network-Health“ Addon stelle ich in einem weiteren Artikel vor.

Wir definieren also eine Regel, die unser Item „BOXEN_WZ“ einschaltet, wenn sich der Status des Fernsehers (TVC42) zu „ON“ ändert und das Item wieder ausschaltet, wenn auch der Fernseher nicht mehr erreichbar (OFF) ist:

 

rule "Fernseher WZ geht an"
   when
      Item TVC42 changed to ON
   then
      sendCommand(BOXEN_WZ, ON)
end

rule "Fernseher WZ geht aus"
   when
      Item TVC42 changed to OFF
   then
      sendCommand(BOXEN_WZ, OFF)
end

 

attentionBei Gruppenschaltungen von Funksteckdosen ist ein wichtiger Punkt zu beachten, wie ich aus eigener Erfahrung feststellen musste. Grundsätzlich schaltet openHAB alle Elemente dieser Gruppe gleichzeitig. Da wir jedoch jeden Funkschaltbefehl mit allen verfügbaren Raspberries senden, werden dabei einige Mitglieder „übersprungen“. Daher ist es notwendig, zwischen jedem geschalteten Mitglied der Gruppe eine kurze Verzögerung einzubauen. Für eine morgendliche Zeitschaltung habe ich wie in folgender Regel gezeigt, zwischen jedem geschalteten Item eine Pause von zwei Sekunden eingesetzt:

rule "Morgens Tageslichter an"
   when
      Time cron "0 30 5 * * ?"
   then
      grpTier_TAGESLICHT?.members.forEach[Switch|
         sendCommand(Switch, ON)
         Thread::sleep(2000)
      ]
end

 

In dieser Regel werden morgens um 05:30 alle Tageslichter meiner aquaristischen und terraristischen Bewohner (Gruppe „grpTIER_TAGESLICHT„) eingeschaltet.