DoIf wiederholen und bei Schaltung "Aus" des Bezug-Gerätes final ausführen.

Begonnen von AnBad, 07 August 2021, 13:58:59

Vorheriges Thema - Nächstes Thema

AnBad

Hallo,
ich habe mir folgende DoIf/DoElseIf geschrieben.

Diese soll ausführen:

A) nach dem Moment, wenn das Bezugs-Gerät dev_Zwischenschalter3 "Aus" geschaltet wird, einmal die finalen Strom-Messdaten vom Bezugs-Gerät dev_Zwischenschalter3 abholen & andere Infos aktualisieren;
B) während dem das Gerät dev_Zwischenschalter3 "An" ist, soll die DoIf alle 5 Minuten die Messdaten abholen.

Ich dachte ich mache das mit "attr repeatcmd 300". Das funktioniert leider nicht. Damit sich im Fall von "Off" nicht auch ständig die Sache wiederholt, dachte ich mir, beim letzten Abholen, schaltet sich die doif selbst auf "disable". Ob das mit "disable" funktioniert und auch Sinn macht, weiß ich nicht.

Bin ich damit auf dem richtigen Weg? Oder löst man das anders?


defmod doif_Strommesser_Ende DOIF
([dev_Zwischenschalter3:state] eq "Aus")
(
(get dev_Zwischenschalter3 measurement 0 power)
(setreading dev_Zwischenschalter3 B_Aktuell {ReadingsTimestamp("dev_Zwischenschalter3","power0",0)})
(get dev_Zwischenschalter3 measurement 0 energy)
(set DBLogging addLog dev_Zwischenschalter3:(T_Name|A_Beginn|B_Aktuell|F_Stromverbrauch_kWh_Gesamt|energy|power0) !useExcludes)
(set doif_Strommesser_Ende disable)
)
DOELSEIF ([dev_Zwischenschalter3:state] eq "An")
(
(get dev_Zwischenschalter3 measurement 0 power)
(setreading dev_Zwischenschalter3 B_Aktuell {ReadingsTimestamp("dev_Zwischenschalter3","power0",0)})
(get dev_Zwischenschalter3 measurement 0 energy)
(set DBLogging addLog dev_Zwischenschalter3:(F_Stromverbrauch_kWh_Gesamt|energy|power0) !useExcludes)

McShire

Wenn das DOIF bei Aus disabled wird, reagiert es auf Statusänderung An auch nicht mehr und bleibt außer Betrieb bis es durch irgendetwas wieder auf disable = 0 gesetzt wird.
Besser bei An und Aus jeweils das repeatcmd ändern.

xenos1984

Kann man repeatcmd nicht pro Zweig setzen (ungetestet)?

attr doif_Strommesser_Ende repeatcmd :300

(Vor dem Doppelpunkt nichts = keine Wiederholung von Zweig 1, danach 300 = alle 5 Minuten Zweig 2.)