[Gelöst ab DOIF-Version 28543] Doppelte Events mit den DOIF-Aggregatsfunktionen

Begonnen von cwagner, 22 Februar 2024, 14:43:08

Vorheriges Thema - Nächstes Thema

cwagner

Um unnötige Schaltvorgänge zu vermeiden, beschäftige ich mich wieder neu mit den Aggregatsfunktionen und habe dafür das Beispiel aus dem Forum eingebunden. Dabei stellte ich fest, dass bei mir in derselben logischen Sekunde jede der Funktionen zwei Events mit unterschiedlichen Werten erzeugte. Beispiel:
2024-02-22 14:35:53 DOIF accu med3: 31.8125
2024-02-22 14:35:53 DOIF accu diff5: 1.25
2024-02-22 14:35:53 DOIF accu avg5: 31.275
2024-02-22 14:35:53 DOIF accu med: 32.0625
2024-02-22 14:35:53 DOIF accu diff3: 0.3125
2024-02-22 14:35:53 DOIF accu avg: 32.0625
2024-02-22 14:35:53 DOIF accu med5: 31.5
2024-02-22 14:35:53 DOIF accu diff: -0.5
2024-02-22 14:35:53 DOIF accu avg3: 31.875
2024-02-22 14:35:53 DOIF accu med3: 32.3125
2024-02-22 14:35:53 DOIF accu diff5: 2.5
2024-02-22 14:35:53 DOIF accu avg5: 31.7
2024-02-22 14:35:53 DOIF accu med: 32.25
2024-02-22 14:35:53 DOIF accu diff3: 0.375
2024-02-22 14:35:53 DOIF accu avg: 32.25
2024-02-22 14:35:53 DOIF accu med5: 31.8125
2024-02-22 14:35:53 DOIF accu diff: 0.875
2024-02-22 14:35:53 DOIF accu avg3: 32.2708333333333
2024-02-22 14:38:53 DOIF accu med3: 32.3125
2024-02-22 14:38:53 DOIF accu diff5: 2.5
2024-02-22 14:38:53 DOIF accu avg5: 31.7
2024-02-22 14:38:53 DOIF accu med: 32.25
2024-02-22 14:38:53 DOIF accu diff3: 0.375
2024-02-22 14:38:53 DOIF accu avg: 32.25
2024-02-22 14:38:53 DOIF accu med5: 31.8125
2024-02-22 14:38:53 DOIF accu diff: 0.875
2024-02-22 14:38:53 DOIF accu avg3: 32.2708333333333
2024-02-22 14:38:53 DOIF accu med3: 32.6875
2024-02-22 14:38:53 DOIF accu diff5: 1.8125
2024-02-22 14:38:53 DOIF accu avg5: 32.325
2024-02-22 14:38:53 DOIF accu med: 33
2024-02-22 14:38:53 DOIF accu diff3: 1.5
2024-02-22 14:38:53 DOIF accu avg: 33
2024-02-22 14:38:53 DOIF accu med5: 32.3125
2024-02-22 14:38:53 DOIF accu diff: 0.625
2024-02-22 14:38:53 DOIF accu avg3: 32.6041666666667

Mein Listing:
Internals:
  .FhemMetaInternals 1
  DEF        ##
  FUUID      65d72411-f33f-e1df-a056-e70a9358d9137c70
  FVERSION  98_DOIF.pm:0.277400/2023-07-10
  MODEL      FHEM
  NAME      accu
  NOTIFYDEV  global,T_Kollektor
  NR        320
  NTFY_ORDER 50-accu
  STATE      ???
  TYPE      DOIF
  VERSION    27740 2023-07-10 09:31:11
  eventCount 333
  .attraggr:
  .attrminint:
  Helper:
    DBLOG:
      avg:
        logdb:
          TIME      1708609230.75012
          VALUE      33.15625
      avg3:
        logdb:
          TIME      1708609230.78119
          VALUE      33
      avg5:
        logdb:
          TIME      1708609230.71903
          VALUE      32.625
      diff:
        logdb:
          TIME      1708609230.77081
          VALUE      -0.3125
      diff3:
        logdb:
          TIME      1708609230.7398
          VALUE      0.3125
      diff5:
        logdb:
          TIME      1708609230.70872
          VALUE      0.6875
      med:
        logdb:
          TIME      1708609230.72948
          VALUE      33.15625
      med3:
        logdb:
          TIME      1708609230.69839
          VALUE      33
      med5:
        logdb:
          TIME      1708609230.76049
          VALUE      32.6875
  READINGS:
    2024-02-22 14:40:30  avg            33.15625
    2024-02-22 14:40:30  avg3            33
    2024-02-22 14:40:30  avg5            32.625
    2024-02-22 14:40:30  diff            -0.3125
    2024-02-22 14:40:30  diff3          0.3125
    2024-02-22 14:40:30  diff5          0.6875
    2024-02-22 14:40:30  med            33.15625
    2024-02-22 14:40:30  med3            33
    2024-02-22 14:40:30  med5            32.6875
  Regex:
    accu:
      T_Kollektor:
        accu:
          temperature ^T_Kollektor$:^temperature:
    bar:
    barAvg:
    collect:
    event_Readings:
      T_Kollektor:
        avg:
          temperature ^T_Kollektor$:^temperature:
        avg3:
          temperature ^T_Kollektor$:^temperature:
        avg5:
          temperature ^T_Kollektor$:^temperature:
        diff:
          temperature ^T_Kollektor$:^temperature:
        diff3:
          temperature ^T_Kollektor$:^temperature:
        diff5:
          temperature ^T_Kollektor$:^temperature:
        med:
          temperature ^T_Kollektor$:^temperature:
        med3:
          temperature ^T_Kollektor$:^temperature:
        med5:
          temperature ^T_Kollektor$:^temperature:
  accu:
    T_Kollektor temperature:
      dim        5
      value:
        32.3125
        31.8125
        32.6875
        33.3125
        33
  condition:
  do:
    0:
  event_Readings:
    avg        ::ReadingValDoIf($hash,'T_Kollektor','temperature','','avg')
    avg3      ::ReadingValDoIf($hash,'T_Kollektor','temperature','','avg3')
    avg5      ::ReadingValDoIf($hash,'T_Kollektor','temperature','','avg5')
    diff      ::ReadingValDoIf($hash,'T_Kollektor','temperature','','diff')
    diff3      ::ReadingValDoIf($hash,'T_Kollektor','temperature','','diff3')
    diff5      ::ReadingValDoIf($hash,'T_Kollektor','temperature','','diff5')
    med        ::ReadingValDoIf($hash,'T_Kollektor','temperature','','med')
    med3      ::ReadingValDoIf($hash,'T_Kollektor','temperature','','med3')
    med5      ::ReadingValDoIf($hash,'T_Kollektor','temperature','','med5')
  helper:
    NOTIFYDEV  global,T_Kollektor
    event      temperature: 33
    globalinit 1
    last_timer 0
    sleeptimer -1
    triggerDev T_Kollektor
    triggerEvents:
      temperature: 33
    triggerEventsState:
      temperature: 33
  perlblock:
  uiState:
  uiTable:
Attributes:
  DbLogInclude avg,avg3,avg5,med,med3,med5,diff,diff3,diff5
  event_Readings avg:[T_Kollektor:temperature:avg],
avg3:[T_Kollektor:temperature:avg3],
avg5:[T_Kollektor:temperature:avg5],
med:[T_Kollektor:temperature:med],
med3:[T_Kollektor:temperature:med3],
med5:[T_Kollektor:temperature:med5],
diff:[T_Kollektor:temperature:diff],
diff3:[T_Kollektor:temperature:diff3],
diff5:[T_Kollektor:temperature:diff5]
  room      Solarwaerme

Das Verhalten beobachte ich auf zwei verschiedenen Systemen in unterschiedlichen Updateständen auch mit der Funktion INC. Die Beispiele stammen aus einem System, das DOIF-mäßig auf neusten Release-Stand ist. Was übersehe ich bzw. habe ich falsch gemacht?
Und noch eine Detailfrage: Hätte erwartet, dass die Events im Intervall des Quell-Device (interval=90 sec) kommen. Woher kommt denn nun der Takt 60 sec, in dem die DOIF-Events gefeuert werden. Wie könnte ich den reduzieren?

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Merkwürdig. Normalerweise ist der Trigger das Reading selbst, warum alle 10 Sekunden der Trigger kommt, kann ich nicht sehen.

Kannst du mal das System durchstarten und noch mal testen? Dann wäre die Frage: Passiert das auch, wenn du nur ein Eventreading definierst?

Hier muss man wohl das Problem einkreisen, um es genau zu identifizieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

Hey, Blitzreaktion, Damian! Neustart hatte ich sicherheitshalber gemacht und jetzt noch einmal wiederholt. Keine Änderung.
Das zweite System, das ich erwähnte, hat nur zwei Funktionen (DIFF und INC zum Vergleich) und da ist es auch doppelt.
Und mit einer einzigen Funktion ist das Ergebnis auch wie beschrieben:
Events (Filter: accu_d.*)   FHEM log

2024-02-22 15:19:09 DOIF accu_d med3: 32.125
2024-02-22 15:19:09 DOIF accu_d med3: 32
2024-02-22 15:20:50 DOIF accu_d med3: 32
2024-02-22 15:20:50 DOIF accu_d med3: 31.875

Aufgefallen war mir das in einem Graphen, der trotz avg und med "zappelte" und da schaute ich mir den "processed input" an, der sich auch in der Datenbank bestätigte.

PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Ich konnte das Problem nachvollziehen. Ich werde es morgen beheben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

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

cwagner

Treffer! Mit dem heutigen Update auf [28543 2024-02-22 23:10:54] kommen je Zyklus die Werte nur noch einmal, egal wie viele ich in einem DOIF gleichzeitig rechnen lassen.

Der update erfolgt im Interval des Quell-Devices, also auch das ist nun ok.
Vielen Dank!


Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB