DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe

Begonnen von Damian, 06 November 2015, 22:05:57

Vorheriges Thema - Nächstes Thema

fhemjan

Oder andere Herangehensweise.
Ist es möglich im Userreading eine Abfrage der folgenden Art zu machen:
if Luftf. > 60 = true
elif Luftf. <= 58 = false
else = vorheriger bool Wert bleibt bestehen

Toto1973

Hallo!
Ich habe genau zu dem Thema eine Frage:
Die folgende DOIF Abfrage habe ich gebastelt.
defmod hell_dunkel DOIF ([({sunset(0,"16:00","23:00")}-[01:30])-({sunset(0,"16:00","23:00")}+[00:30])]) (set fhempyserver_15733 restart) \
DOELSEIF ([{sunrise(0,"03:00","10:00")}-({sunrise(0,"03:00","10:00")}+[02:00])]) (set fhempyserver_15733 restart)
attr hell_dunkel alias Restart FHEMBY
attr hell_dunkel cmdState es wird dunkel|es wird hell
attr hell_dunkel do always
attr hell_dunkel group DOIF
attr hell_dunkel repeatcmd 300:300
attr hell_dunkel room Unsorted

setstate hell_dunkel es wird hell
setstate hell_dunkel 2025-06-18 10:30:14 cmd 2
setstate hell_dunkel 2025-06-18 10:30:14 cmd_event timer_3
setstate hell_dunkel 2025-06-18 10:30:14 cmd_nr 2
setstate hell_dunkel 2025-06-18 00:14:17 last_cmd es wird dunkel
setstate hell_dunkel 2025-06-18 00:14:40 mode enabled
setstate hell_dunkel 2025-06-18 10:30:14 state es wird hell
setstate hell_dunkel 2025-06-18 10:33:58 timer_01_c01 18.06.2025 20:52:50
setstate hell_dunkel 2025-06-18 10:33:58 timer_02_c01 18.06.2025 22:52:50
setstate hell_dunkel 2025-06-18 10:33:58 timer_03_c02 19.06.2025 04:30:14
setstate hell_dunkel 2025-06-18 10:33:58 timer_04_c02 19.06.2025 06:30:14

Nach meinem Verständnis müsste doch nun die Ausführung solange alle 300 Sekunden gemacht werden, bis der Zeitpunkt timer_02_c01 und timer_04_c02 erreicht ist.
Das macht es aber nicht!
Das DOIF macht auch über dieses Zeitraum hinaus die Ausführung.
Wo liegt da mein Denkfehler?
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Damian

Wenn der Zeitraum beendet wird, wird zwar die Bedingung nicht mehr wahr, da aber kein DOELSE-Fall vorkommt, wechselt auch nicht der Zustand des Moduls. Dadurch bricht die Wiederholung nicht ab. Du könntest DOELSE einfach dranhängen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rabehd

Zitat von: Toto1973 am 18 Juni 2025, 10:47:03Hallo!
Ich habe genau zu dem Thema eine Frage:
Die folgende DOIF Abfrage habe ich gebastelt.
defmod hell_dunkel DOIF ([({sunset(0,"16:00","23:00")}-[01:30])-({sunset(0,"16:00","23:00")}+[00:30])]) (set fhempyserver_15733 restart) \
DOELSEIF ([{sunrise(0,"03:00","10:00")}-({sunrise(0,"03:00","10:00")}+[02:00])]) (set fhempyserver_15733 restart)
attr hell_dunkel alias Restart FHEMBY
attr hell_dunkel cmdState es wird dunkel|es wird hell
attr hell_dunkel do always
attr hell_dunkel group DOIF
attr hell_dunkel repeatcmd 300:300
attr hell_dunkel room Unsorted

setstate hell_dunkel es wird hell
setstate hell_dunkel 2025-06-18 10:30:14 cmd 2
setstate hell_dunkel 2025-06-18 10:30:14 cmd_event timer_3
setstate hell_dunkel 2025-06-18 10:30:14 cmd_nr 2
setstate hell_dunkel 2025-06-18 00:14:17 last_cmd es wird dunkel
setstate hell_dunkel 2025-06-18 00:14:40 mode enabled
setstate hell_dunkel 2025-06-18 10:30:14 state es wird hell
setstate hell_dunkel 2025-06-18 10:33:58 timer_01_c01 18.06.2025 20:52:50
setstate hell_dunkel 2025-06-18 10:33:58 timer_02_c01 18.06.2025 22:52:50
setstate hell_dunkel 2025-06-18 10:33:58 timer_03_c02 19.06.2025 04:30:14
setstate hell_dunkel 2025-06-18 10:33:58 timer_04_c02 19.06.2025 06:30:14

Nach meinem Verständnis müsste doch nun die Ausführung solange alle 300 Sekunden gemacht werden, bis der Zeitpunkt timer_02_c01 und timer_04_c02 erreicht ist.
Das macht es aber nicht!
Das DOIF macht auch über dieses Zeitraum hinaus die Ausführung.
Wo liegt da mein Denkfehler?
Nebenthema:
Warum addierst du 00:30 (bzw. subtraierst 01:30) und nutzt nicht das Offset der sunset-Funktion?
Auch funktionierende Lösungen kann man hinterfragen.

Toto1973

Zitat von: Damian am 18 Juni 2025, 11:29:51Du könntest DOELSE einfach dranhängen.
Das habe ich jetzt mal gemacht.
Mal sehen, ob es heute Abend richtig funktioniert.
Dankeschön.

Wegen dem Offset, das wäre natürlich die elegantere Lösung!
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000