TV-Beleuchtung automatisiert schalten via openhab durch Homematic-Funksteckdose mit Verbrauchsmessung

Wenn man es sich auf der Couch gemütlich macht ist es manchmal lästig, nochmal aufzustellen, die Lampen so einzustellen, dass man angenehm fernsehen kann.. Da ist es doch leichter, wenn das Haus das von selbst macht.

Ziel soll bei mir folgendes sein: Ist es draußen dunkel oder nach 20:00 Uhr, dann soll die Fernsehbeleuchtung geschalten werden. Das heißt einfach gesagt: Zwei Wandlampen sollen auf 12% gedimmt werden, alles andere soll im Erdgeschoss ausgeschalten werden.

Um mit dem Status des Fernsehs (an / aus) arbeiten zu können habe ich mich testweise für eine Funksteckdose von Homematic mit Verbrauchsmessung entschieden. Wichtig ist nun die Verbrauchsmessung, denn genau diese lässt sich nun gut verwenden, um festzustellen, ob de TV Strom verbraucht oder nicht und damit an oder aus ist. Vielleicht gibt es je TV noch andere Methoden, diese jedoch ist modellunabhängig.

Die Idee hierbei ist: Zeigt die Verbrauchsmessung Werte an, ist der Fernseh an, ansonsten aus. Ist der TV an wird das Licht wie gewünscht geschalten.

Achtung: Der Fernseh funkt wohl nach Hause…

Gleich vorab: Dies hat jedoch nicht ganz geklappt, denn in den ersten Tagen nach Inbetriebnahme war in der früh öfter mal das Licht im Wohnzimmer an. Nach durchforsten des Logfiles habe ich mich dazu entschieden einmal den Verbrauch mitzuplotten und siehe da, mein Philips TV hat ein gewisses eigenleben. Nachts zwischen 2 und 4 Uhr verbraucht er für ca 30 Minuten jeden Tag etwas Strom. Allerdings nicht so viel wie im normalen Betrieb. Ich tippe daher darauf, dass er versucht Updates zu ziehen oder ähnliches – eine ausführliche Analyse des Netzwerkverkehrs war es mir dann auf jeden Fall bisher noch nicht wert, hier näher dahinter zu kommen, was da genau passiert. Ich habe mich daher für eine Einschaltschwelle entschieden, die eben über diesem Wert und unter dem normalen Betriebswert liegt. Damit fahre ich nun seit langer Zeit eigentlich schon ganz gut.

Dann automatisieren wir mal!

Nun geht’s los. Was wir brauchen, sind items, welche den aktuellen Verbrauch abbilden. Dann packen wir eine Rule dazu, welche ermittelt, ob die Sonne bereits untergegangen ist (astro-binding) oder schon wieder aufgegangen ist und ob es evtl schon nach 20:00 Uhr ist. In letzterm Fall oder wenn die Sonne untergegangen ist gehe ich von „dunkler“ Umgebung aus und lasse das TV-Licht schalten.

Das Licht selbst ist über eine Szene abgebildet, welche genau die Lampen definiert, die an bzw. aus sein sollen.

.items-Datei

Number eg_strom_tv_spannung "Spannung [%.1f V]" (debug) {homematic="ad
dress=NEQ1559xxx, channel=2, parameter=VOLTAGE"}
Number eg_strom_tv_strombedarf "Strombedarf aktuell [%.1f mA]" (debug) {homematic="address=NEQ1559xxx
, channel=2, parameter=CURRENT"}
Number eg_strom_tv_verbrauch_aktuell "Momentanleistung [%.1f W]" (debug) {homematic="address=NEQ1559xxx, channel=2, parameter=POWER"}
Number eg_strom_tv_verbrauch_gesamt "Gesamtverbrauch [%.1f Wh]" (debug) {homematic="address=NEQ1559xxx, channel=2, parameter=ENERGY_COUNTER"}
Number szeneEG "Szene EG" <sofa>

OK, zugegeben brauchen wir nicht alle diese Werte aber als item angelegt schaden sie auch an dieser Stelle erst mal nicht. Am Ende brauchen wir noch ein item für das Speichern der Szenenverwaltungs-Szene.

.rules-Datei

Zuerst brauchen wir die Szenen-Verwaltung, welche grunsätzlich auch per Selektion in die GUI von openHAB eingebunden werden könnte.

rule "Szenen-Verwaltung EG"
when
 Item szeneEG received command
then
 switch(receivedCommand) {
 case 1: { // Alles aus
 sendCommand(eg_licht_essen, OFF)
 sendCommand(eg_licht_wohnen, OFF)
 sendCommand(eg_licht_wohnwand, OFF)
 sendCommand(eg_licht_kueche, OFF)
 sendCommand(eg_licht_kueche_unterlicht,0)
 sendCommand(eg_licht_wohnen_wandcouch,0)
 sendCommand(eg_licht_wohnen_wandgarten,0)
 }
 case 2: { // Arbeiten
 // hier ausgelassen
 }
 case 3: { // Fernsehen an
 sendCommand(eg_licht_wohnen_wandcouch,12)
 sendCommand(eg_licht_wohnen_wandgarten,12)
 sendCommand(eg_licht_essen, OFF)
 sendCommand(eg_licht_wohnen, OFF)
 sendCommand(eg_licht_wohnwand, OFF)
 sendCommand(eg_licht_kueche, OFF)
 }
 case 4: { // Fernsehen aus
 }
 // usw...
end

Nun können wir szeneEG nutzen um per weiterer Rule direkt in den Fernsehmodus zu schalten.

var Number letzteAutomatischeRegel = 0 

rule "Szenenautomatic TV an"
when
 Item eg_strom_tv_verbrauch_aktuell received update
then
 // Zwischen Sonnenuntergang und vor Sonnenaufgang Automatik auslösen, wenn Sonnenuntergang nach 20:00 Uhr dann ab 20:00 Uhr
 var DateTime datumSonnenaufgang = new DateTime((astro_Sonnenaufgang.state as DateTimeType).calendar.timeInMillis)
 var DateTime datumSonnenuntergang = new DateTime((astro_Sonnenuntergang.state as DateTimeType).calendar.timeInMillis)
 val boolean istDunkel = datumSonnenaufgang.afterNow || datumSonnenuntergang.beforeNow || now.getHourOfDay.intValue >= 20
 if ((eg_strom_tv_verbrauch_aktuell.state > 33) && (letzteAutomatischeRegel != 3) && (istDunkel)) {
 letzteAutomatischeRegel = 3
 sendCommand(szeneEG, 3)
 }
end

rule "Szenenautomatic TV aus"
when
 Item eg_strom_tv_verbrauch_aktuell received update
then
 if ((eg_strom_tv_verbrauch_aktuell.state <= 5) && (letzteAutomatischeRegel == 3)) {
 letzteAutomatischeRegel = 4
 sendCommand(szeneEG, 4)
 }
end

Die Aktionen, welche ausgeführt werden, können natürlich beliebig abgeändert werden. Natürlich kann man sich die Szenenverwaltung auch sparen und alles in die TV-Rule packen, aber so kann man die Szenen über die Oberfläche auch direkt ansteuerbar machen und hat dadurch Mehrwerte und der Code bleibt übersichtlicher.

Fazit: TV nun einfach anschalten, der Rest läuft von selbst 😉

 

 

Schreibe einen Kommentar

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