Problem mit at

Begonnen von ptr201711, 11 November 2017, 17:16:12

Vorheriges Thema - Nächstes Thema

ptr201711

Folgende Definition:
define WW_aus at *{Value("WW_aus_zeit").":00"} set WW_ein_set off
hierbei wird "WW_aus_zeit" über setList gebildet.
Funktioniert einwandfrei, wenn ich das über die FHEM-Oberfläche eingebe.
Bei rereadcfg oder Neustart des Systems wird die Definition verworfen.
Fehlermeldung:  define WW_aus at *{Value("WW_aus_zeit").":00"} set WW_ein_set off: the function "Value("WW_aus_zeit").":00"" must return a timespec and not ???:00.
Kann mir jemand helfen?

rudolfkoenig

Beim Anlegen der at Definition (beim Einlesen von fhem.cfg) kennt der Dummy sein Wert nicht.
Habe keine einfache Loesung dafuer, hoechstens etwas in der Art:
- Wert ueber ReadingsVal und(!) sinnvolle Voreinstellung setzen.
- Zusaetzlich mit notify auf "global:INITIALIZED" ein modify aufs at setzen.


Falls solche Konstrukte auch Andere benutzen wollen, dann wuerde ich eine Ausnahmebehandlung in at einbauen.

Nachtrag: beim Aendern der dummy muss man auch ein modify aufs at loslassen, sonst kriegt at die Aenderung nicht mit. Insofern relativiert sich der Nutzen meines Vorschlags.

ptr201711

Danke für die Unterstützung. In Anlehnung an dieses Dokument: https://wiki.fhem.de/wiki/Wakeuplight#Save_the_time_even_after_a_restart_or_rereadcfg
Meine Lösung:
#########################################################################################################
# Warmwasserbetriebszeit einstellen
#########################################################################################################
# Auswahl der Startzeit
define WW_an_zeit dummy
attr WW_an_zeit room test
attr WW_an_zeit setList state:05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:35,06:40,06:45,06:50,06:55,07:00
attr WW_an_zeit webCmd state
# Auswahl der der Stoppzeit
define WW_aus_zeit dummy
attr WW_aus_zeit room test
attr WW_aus_zeit setList state:19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30
attr WW_aus_zeit webCmd state
# Setzen der Zeiten für Ein und Stop
# Übergabe der Startzeit an den at
define WW_an_zeit_set notify WW_an_zeit.* set WW_an modifyTimeSpec $EVTPART0
attr WW_an_zeit_set room test
# Überbabe der Stoppzeit an den at
define WW_aus_zeit_set notify WW_aus_zeit.* set WW_aus modifyTimeSpec $EVTPART0
attr WW_aus_zeit_set room test
# Die Timer für on und off
define WW_an at *04:00 set WW_ein_set on
attr WW_an room test
define WW_aus at *16:45 set WW_ein_set off
attr WW_aus room test
# Initialisieren der Timer bei Neustart oder rereadcfg auf die zuletzt eingestellten Werte bzw. sinnvolle Ersatzwerte
define notify_fhem_reload notify (global:INITIALIZED|global:REREADCFG).* set WW_an modifyTimeSpec {ReadingsVal("WW_an_zeit","state","07:00")};;set WW_aus modifyTimeSpec {ReadingsVal("WW_aus_zeit","state","20:00")}
attr notify_fhem_reload room test
#################################################
#Dummy Variable nur zum Test ob es funktioniert
define WW_ein_set dummy
attr WW_ein_set room test

Anmerkung zum von mir verwendeten Befehl "set WW_aus modifyTimeSpec": Wenn dieser an Web-Oberfläche direkt eingegeben wird, wird die Def geändert, allerdings sieht man dann kein Fragezeichen bei save config. Nach Neustart wird der alte Wert genommen. Wenn aus anderem Grund ein save config gemacht wird, kann es unbeabsichtigte Ergebnisse geben.