[Gelöst] Modify sunrise timespecs mit InternalVal?

Begonnen von Z-Rick, 28 Februar 2017, 13:49:05

Vorheriges Thema - Nächstes Thema

Z-Rick

Hallo liebe Foren-Mitglieder,

seit Monaten lese ich mich nun in das Thema "Hausautomatisierung" ein und konnte insbesondere durch die vielen Lösungsansätze von Euch bisher immer eine Lösung finden - daher erst einmal: vielen vielen Dank. Nun bin ich jedoch am Verzweifeln und habe mich durchgerungen, andere mit meiner Frage zu belästigen.

Ich habe das Residents-Modul installiert und starte jeden Morgen ein WakeUp-Light im Schlafzimmer - die Sequenz dauert dabei 20 Minuten. Im Wohnzimmer wird abhängig vom realen Sonnenaufgang ebenfalls eine rudimentäre Beleuchtung gestartet, damit man nicht im Stockfinsteren durch die Bude stolpern muss.

Nun möchte ich gerne, dass die Lampe im Wohnzimmer frühestens angeht, wenn auch die WakeUp-Sequenz gestartet wird (manchmal wird man ja bereits vor Ablauf der Sequenz wach und entscheidet sich früher aufzustehen).

Die WakeUp-Sequenz-Startzeit liegt in den Internals meiner Residents-Weck-Routine vor und kann entsprechend abgerufen werden:

{InternalVal("at_rr_Benutzer_wakeuptimer1","NTM",0)}

Nun bietet die sunrise_abs, die ich für At verwende ja die Möglichkeit einen frühesten und einen spätesten Startzeitpunkt festzulegen. Nach meinem naiven Verständnis, müsste eigentlich nichts anderes gemacht werden, als den Internal-Wert als Minimum im sunrise_abs zu setzen, was jedoch scheinbar nicht so einfach zu machen ist. Ich schätze, dass ich die Werte mit einem notify per modify verändern muss, da sich die Weckzeit von Tag zu Tag ändern kann und immer die aktuelle Weckzeit im At als früheste definiert sein müsste.

Wahrscheinlich ließe sich das am Einfachsten über eine DOIF lösen, jedoch wollte ich im Forum wenigstens Fragen, ob es auch eine andere Möglichkeit gibt, die Internals als Variable für einen timespec zu verwenden und diese stetig aktuell zu halten.

define WZ.LampeMorgensAn at *{sunrise_abs("REAL",0,"{InternalVal("at_rr_Benutzer_wakeuptimer1","NTM",0)}","08:00:00")} set WohnzimmerLampe on

Dieser Versuch meiner Umsetzung liefert den Fehler zurück, dass ich die Werte als "HH:MM:SS oder <perl-code>" eingeben muss.

Hat jemand vielleicht einen kreativeren Denkansatz, weil ich mich scheinbar gerade in einer Sackgasse befinde.

Ich danke euch für eure Mühe :-)

rudolfkoenig

define WZ.LampeMorgensAn at *{sunrise_abs("REAL",0,InternalVal("at_rr_Benutzer_wakeuptimer1","NTM",0),"08:00")} set WohnzimmerLampe on
(ungetestet).

Achtung: at evaluiert timespec beim define/modify und (mit *) nach der Ausfuehrung.
Ziwschenzeitliche Aenderungen an at_rr_Benutzer_wakeuptimer1 gehen verloren.
Weiterhin sollte man dafuer sorgen, dass at_rr_Benutzer_wakeuptimer1 in der fhem.cfg vor dem WZ.LampeMorgensAn definiert ist
(siehe NR Internal)

betateilchen

Zitat von: rudolfkoenig am 28 Februar 2017, 14:05:44
Weiterhin sollte man dafuer sorgen, dass at_rr_Benutzer_wakeuptimer1 in der fhem.cfg vor dem WZ.LampeMorgensAn definiert ist

nicht nur in der fhem.cfg
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Z-Rick

Es ist wie Magie... vielen Dank! Es funktioniert :-)