DOIF mit Zeitinterval ohne Trigger erstellt trotzdem Timer

Begonnen von Adimarantis, 22 Juli 2024, 08:56:38

Vorheriges Thema - Nächstes Thema

Adimarantis

Hallo Damian,

Ich habe recht häufig DOIFs die nur zu bestimmten Tageszeiten laufen sollen, aber nicht zu den Zeiten triggern sollen.
Dank der umfangreichen Anleitung habe ich die Syntax
[?9:00-11:00]gefunden.
Was ich jetzt allerdings seltsam finde, ist das trotzdem für jeden Zeitbereich zwei Timer erstellt werden.
Bei 4 Zweigen mit Zeitbereichen und einem "echten" Zeittrigger, geht letzterer vor lauter "von-bis" Timern total unter - welche eben meiner Ansicht nach auch überflüssig sind.
Könnte man da was optimieren und die Timer bei "?" weglassen?

Gruß,
Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Damian

Naja, jede Zeitangabe hat ihre Daseinsberechtigung. Jedes (auch mit Fragezeichen) definierte Zeit-Intervall kann mit einem logischen Operator verknüpft werden, daher lässt sich da nichts wegoptimieren.

[?09:00-11:00] and [Taster1] or [?10:00-12:00] and [Taster2]


Und die Timer selbst sind dazu da, Berechnungen für den kommenden Zeitpunkt durchzuführen, auch wenn es keine Trigger für den Anwender gibt, z. B.:
 

[?{sunrise}-{sunset}] and [Taster3]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Adimarantis

Wäre es in beiden Beispielen nicht so, dass der Trigger rein über Event von TasterX reicht?
Erst dann müsste der Zeitbereich geprüft (und ggf. berechnet) werden.
Wenn z.B. Taster1 um 10:00 triggert, dann sollten die Timer doch auch keine Rolle spielen, sondern DOIF prüft wahrscheinlich ob "10:00" zwischen "9:00" und "11:00" liegt.
Oder versteh ich jetzt was falsch?

Natürlich weiss ich nicht, ob meine vorgeschlagenen Optimierung die Abarbeitung intern komplexer macht (Sonderfall).

Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Damian

Du hast Recht, es könnte sogar ohne Timer funktionieren. Allerdings kann ich die Folgen einer Änderung nicht überschauen. Ich kann mich erinnern, dass manche die Timerreadings selbst auswerten. Möglicherweise gibt es danach Probleme wegen der fehlenden Readings.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Damian am 22 Juli 2024, 16:02:22Du hast Recht, es könnte sogar ohne Timer funktionieren. Allerdings kann ich die Folgen einer Änderung nicht überschauen. Ich kann mich erinnern, dass manche die Timerreadings selbst auswerten. Möglicherweise gibt es danach Probleme wegen der fehlenden Readings.

Ich habe mir den Code eben angeschaut. Zum Zeitpunkt der Auswertung eines Zeit-Intervalls, wird die aktuelle Zeit (localtime) in Sekunden gegen die zuvor errechneten absoluten Intervall-Grenzen in Sekunden geprüft. Diese werden ja zum Triggerzeitpunkt des Timers einmal am Tag neu bestimmt.

Dieses Konzept zu ändern wäre zu aufwendig.

Das Einzige was man machen könnte ist per Attribut das Erzeugen der Timerreadings bei keinen Zeittriggern (Fragezeichen) zu unterlassen. Allerdings würden dann Lücken in der Zählung der Timer entstehen, da es intern ja trotzdem die ausgeblendeten Timer gäbe und man hätte wieder ein neues Attribut.




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF