Hallo zusammen,
Ich schalte über 1-Wire eine HQI-Lampe. Wenn die ausgeschaltet wird, muss sie vor dem nächsten Einschalten abgekühlt sein, denn sonst zündet sie nicht.
Nun habe ich 2 Ideen:
- Ein Dummy beim Ausschalten auf die Zahl der Sperrminuten setzen und dann mit einem minütlichen DOIF auf 0 runter zählen. Das Charmante daran ist, dass man einen Slider o.ä. nehmen kann und die Sperre gut visualisieren kann.
- Den Dummy beim Ausschalten mit der Zeit zu füllen und beim Einschalten das Delta prüfen.
Aber sicher gibt es hier noch einen ganz einfachen, dummyfreien Weg, den ich nicht kenne ::)
Kann ich z.B. den HourCounter benutzen? Aber der aktualisiert sich scheinbar nur beim Schalten?!
vereinfachungswütige Grüße
Niels
Konfig:
define 1Wire_TerraSwitch OWDevice 12.7B9C9D000000 6
attr 1Wire_TerraSwitch IODev localOWServer
attr 1Wire_TerraSwitch alias E.T. Schaltmodul
attr 1Wire_TerraSwitch event-on-change-reading 1
attr 1Wire_TerraSwitch group Terrarium
attr 1Wire_TerraSwitch model DS2406
attr 1Wire_TerraSwitch room OWDevice
define Terra_BetrStunden_Hotspot HourCounter Terra_Switch_2.1 Terra_Switch_2.0
attr Terra_BetrStunden_Hotspot alias Betriebsstundenzähler Lampe Hotspot
attr Terra_BetrStunden_Hotspot room Terrarium
attr Terra_BetrStunden_Hotspot stateFormat BetrStunden
attr Terra_BetrStunden_Hotspot userReadings BetrStunden { int (ReadingsVal("Terra_BetrStunden_Hotspot","pulseTimeOverall",0) / 3600 + 0.5 )}
define Terra_Switch_2 dummy
attr Terra_Switch_2 alias Licht Hotspot
attr Terra_Switch_2 devStateIcon 1:general_an:0 0:general_aus:1
attr Terra_Switch_2 group Schalter
attr Terra_Switch_2 room Terrarium
define Terra_Switch2_notify notify Terra_Switch_2 set 1Wire_TerraSwitch PIO.B $EVENT
So, ich habe mich jetzt mal an dem Dummy-Countdown versucht und bin grandios gescheitert:define TerraEinschaltsperre dummy
attr TerraEinschaltsperre room Terrarium
attr TerraEinschaltsperre setList state:slider,0,1,10
attr TerraEinschaltsperre widgetOverride state:slider,0,1,10
define testWES DOIF ([+00:00:15] and [TerraEinschaltsperre:state] > 0) (set TerraEinschaltsperre {int(ReadingsVal("TerraEinschaltsperre","state",0) - 1)})
Irgendwie habe ich hier massive syntaktische Probleme. In dieser Konstellation passiert nichts...
Noch etwas Recherche vereinfachte die Sache:
define testWES DOIF ([+00:00:15] and [TerraEinschaltsperre:state] > 0) (set TerraEinschaltsperre {int(Value("TerraEinschaltsperre") - 1)})
Doch nun wird einfach der String '{int(Value("TerraEinschaltsperre") - 1)}' in den Dummy geschrieben.
legasthenische Grüße
Niels
So, nach einigem Üben habe ich die Syntaxproblematik besiegt:define testWES DOIF ([+00:00:15] and [TerraEinschaltsperre:state] > 0) (set TerraEinschaltsperre {([TerraEinschaltsperre:state])-1})
Doch leider bringe ich da FHEM mit in's Straucheln. Beim ersten Start des DOIF werden gleich 2 Schritte runter gezählt. Ich vermute da ist die interne Verarbeitung einfach zu schnell... Danach war das DOIF dann wohl in einem undefinierten Zustand und wurde (scheinbar) nicht mehr ausgeführt.
Mit einem 2.Dummy konnte ich Ruhe rein bringen:
define TerraEinschaltsperre dummy
attr TerraEinschaltsperre userReadings newState { ReadingsVal("TerraEinschaltsperre","state",0)-1}
define TerraEinschaltsperre_tmp dummy
define testWES DOIF ([+00:00:15] and [TerraEinschaltsperre:state] > 0) (set TerraEinschaltsperre_tmp {([TerraEinschaltsperre:newState])}, sleep 1;; set TerraEinschaltsperre {([TerraEinschaltsperre_tmp:state])})
Das UserReadings resultiert aus zwischenzeitlichen Tests, so kann man sicher auch ohne dem auskommen. Aber elegant ist das wohl kaum :-\
unelegante Grüße
Niels
Zitat von: Muschelpuster am 08 Juni 2015, 17:53:21
So, nach einigem Üben habe ich die Syntaxproblematik besiegt:define testWES DOIF ([+00:00:15] and [TerraEinschaltsperre:state] > 0) (set TerraEinschaltsperre {([TerraEinschaltsperre:state])-1})
Doch leider bringe ich da FHEM mit in's Straucheln. Beim ersten Start des DOIF werden gleich 2 Schritte runter gezählt. Ich vermute da ist die interne Verarbeitung einfach zu schnell... Danach war das DOIF dann wohl in einem undefinierten Zustand und wurde (scheinbar) nicht mehr ausgeführt.
Mit einem 2.Dummy konnte ich Ruhe rein bringen:
define TerraEinschaltsperre dummy
attr TerraEinschaltsperre userReadings newState { ReadingsVal("TerraEinschaltsperre","state",0)-1}
define TerraEinschaltsperre_tmp dummy
define testWES DOIF ([+00:00:15] and [TerraEinschaltsperre:state] > 0) (set TerraEinschaltsperre_tmp {([TerraEinschaltsperre:newState])}, sleep 1;; set TerraEinschaltsperre {([TerraEinschaltsperre_tmp:state])})
Das UserReadings resultiert aus zwischenzeitlichen Tests, so kann man sicher auch ohne dem auskommen. Aber elegant ist das wohl kaum :-\
unelegante Grüße
Niels
Auch
define testWES DOIF ([+00:00:15] and [?TerraEinschaltsperre:state] > 0) (set TerraEinschaltsperre {([TerraEinschaltsperre:state])-1})
hätte es getan. Das Setzen von TerraTerraEinschaltsperre führte zur Selbsttriggerung des Moduls. Mit dem Fragezeichen triggert TerraEinschaltsperre das Modul nicht mehr.
Gruß
Damian
Danke Damian,
Ich wusste, dass es einfacher geht ;)
Aber mit Deinem Beispiel wird der Countdown auch nur 1x ausgeführt, danach passiert nichts mehr...
unvollendete Grüße
Niels
Zitat von: Muschelpuster am 08 Juni 2015, 21:50:02
Danke Damian,
Ich wusste, dass es einfacher geht ;)
Aber mit Deinem Beispiel wird der Countdown auch nur 1x ausgeführt, danach passiert nichts mehr...
unvollendete Grüße
Niels
Dass do always gesetzt sein sollte, war für mich selbstverständlich.
Gruß
Damian
Und dabei hast Du das so ausführlich in Deiner Hilfe beschrieben! Es ist also wie immer: Wer lesen kann ist klar im Vorteil 8)
Und kaum macht man es richtig, funktioniert es auch wie gewünscht.
nachgelesene Grüße
Niels