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 😉