Visualisierung von Verbräuchen

Begonnen von Damian, 16 Dezember 2024, 18:38:14

Vorheriges Thema - Nächstes Thema

Damian

Das doppelte Triggern kann ich mir nicht erklären. Du musst das Problem einkreisen. Du könntest ein zweites DOIF mit gleicher Template-Definition anlegen und dort nur das eine Reading im Template angeben und schauen ob das Problem wieder auftritt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cotecmania

Hallo Damian,

Ich habe nun das Device kopiert und alles auskommentiert bis auf zwei Zeilen und nur ein Device eingebunden.
Minütliches Update des Readings um das debuggen zu vereinfachen.

$1_EnergyDay 
  {
    ## Taeglichen Energieverbrauch aufsteigend in Reading schreiben
    if ([$1:"^$2:.*$"]) {fhem ("setreading $1 JR_energy_day_ongoing ".(([?$1:$2:d]) - ([?$1:JR_energy_morning,0])))}

    ## Energiestand morgens in Reading sichern. Alte auflaufende Tagesenergie vom Vortag loeschen. (Ist aber im logfile)
##    if ([00:00:01]) {fhem ("setreading $1 JR_energy_morning ".([?$1:$2:d])); fhem("setreading $1 JR_energy_day_ongoing 0")}

    ## Taeglichen Energieverbrauch abends in separates Reading uebernehmen
 ##   if ([23:59:40]) {fhem ("setreading $1 JR_energy_day ".([?$1:JR_energy_day_ongoing,0:d]))}
    if ([+00:01]) {fhem ("setreading $1 JR_energy_day ".([?$1:JR_energy_day_ongoing,0:d]))}

    ## Taeglichen Energieverbrauch dann wieder loeschen. (Verbleibt aber im Logfile)
##    if ([23:59:55]) {fhem ("deletereading $1 energy_day")}
  }

So bekomme ich immer 2 Einträge im Log jede Minute.
2025-05-19_21:16:01 EZ1_Inverter1 JR_energy_day: 132.8055
2025-05-19_21:16:01 EZ1_Inverter1 JR_energy_day: 132.8055
2025-05-19_21:17:02 EZ1_Inverter1 JR_energy_day: 132.8055
2025-05-19_21:17:02 EZ1_Inverter1 JR_energy_day: 132.8055
2025-05-19_21:18:02 EZ1_Inverter1 JR_energy_day: 132.8055
2025-05-19_21:18:02 EZ1_Inverter1 JR_energy_day: 132.8055
2025-05-19_21:19:02 EZ1_Inverter1 JR_energy_day: 132.8055
2025-05-19_21:19:02 EZ1_Inverter1 JR_energy_day: 132.8055

Wenn ich die erste Zeile auskommentiere habe ich nur einen Eintrag.

Verstehen tue ich das nicht.
Ich muss das irgendwie fixen ...
Hast Du noch eine Idee ?

Danke
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Damian

Jeder Perlblock reagiert auf alle Trigger, die sich innerhalb des Block befinden. Durch setreading erzeugst du einen Trigger auf den du im selben Block (erste Zeile) reagierst - der Block wird erneut ausgeführt. Offenbar ist hier noch die Zeitbedingung wahr und führt zur wiederholten Ausführung.

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

Damian

Als Tipp habe ich noch ein paar Verbesserungsvorschläge.

1) Wenn man sich meine Lösung anschaut, dann sieht man, dass ich immer nur einen Timer für beliebig viele Readings habe und nicht für jedes Reading einen eigenen.

2) Pro Perlblock habe ich nur einen Trigger und nicht mehrere, das führt zu keinen Nebeneffekten und belastet wie bei 1) das System weniger.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cotecmania

Hallo Damian,

Danke.

2 Blöcke drauss gemacht und schon hab ich nur noch einen Eintrag im Logfile.

bzgl. nur einem Timer
Es ist hier wichtig, dass Befehle hintereinander bzw. in der richtigen Reihenfolge ablaufen. Deshalb auch die vielen Timer.
Ist es gewährleistet, dass wenn ich z.B. 3 fhem Befehle hintereinander absetze, der nächste erst ausgeführt wird, wenn der vorherige komplett beendet ist ?
Oder könnte es sein, dass mehrere parallel ausgeführt werden und das Ganze durcheinander kommt ?

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Damian

Zitat von: cotecmania am 20 Mai 2025, 17:08:02Hallo Damian,

Danke.

2 Blöcke drauss gemacht und schon hab ich nur noch einen Eintrag im Logfile.

bzgl. nur einem Timer
Es ist hier wichtig, dass Befehle hintereinander bzw. in der richtigen Reihenfolge ablaufen. Deshalb auch die vielen Timer.
Ist es gewährleistet, dass wenn ich z.B. 3 fhem Befehle hintereinander absetze, der nächste erst ausgeführt wird, wenn der vorherige komplett beendet ist ?
Oder könnte es sein, dass mehrere parallel ausgeführt werden und das Ganze durcheinander kommt ?

Gruss
Joe

Parallel gibt es in FHEM nicht, sondern immer nur sequentiell. Timer werden im FHEM-System gesetzt. Wenn die gleiche Zeit definiert ist, dann weiß ich nicht, ob FHEM die Reihenfolge, in der sie definiert wurden einhält. Es könnte sein, dass es nicht der Fall ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF