Hauptmenü

Problem DOIF_Readings

Begonnen von romakrau, 22 November 2022, 09:20:20

Vorheriges Thema - Nächstes Thema

romakrau

Hallo zusammen,
ich habe ein Problem in der Anwendung der DOIF Readings. Ich möchte eine Durchschnittslwert bilden um dadurch eine Trend zu erkennen. Hier mein List:

Internals:
   DEF        ([$SELF.COL:value])
(
    set $SELF Koeln [$SELF.COL:value] ) DOELSEIF
([$SELF.DUS:value])
(
    set $SELF Dus [$SELF.DUS:value] ,setreading $SELF HW1 710
)
   FUUID      60a0f927-f33f-e93f-2bfb-eac8e024582e29f5
   MODEL      FHEM
   NAME       Rheinpegel
   NOTIFYDEV  Rheinpegel.COL,Rheinpegel.DUS,global,Rheinpegel
   NR         239
   NTFY_ORDER 50-Rheinpegel
   STATE      cmd_1
   TYPE       DOIF
   VERSION    26444 2022-09-25 16:29:19
   eventCount 558
   DOIF_Readings:
     TrendCol   ::ReadingValDoIf($hash,'Rheinpegel','Koeln','','avg5')
     TrendDus   ::ReadingValDoIf($hash,'Rheinpegel','Dus','','avg5')
   READINGS:
     2022-11-22 08:56:37   Device          Rheinpegel.COL
     2022-11-22 08:56:37   Dus             295
     2022-11-22 08:56:37   HW1             710
     2022-11-22 08:56:37   Koeln           343
     2022-11-22 03:28:36   TrendCol        342
     2022-11-22 03:28:36   TrendDus        290
     2022-11-22 08:56:37   cmd             1
     2022-11-22 08:56:37   cmd_event       Rheinpegel.COL
     2022-11-22 08:56:37   cmd_nr          1
     2022-11-22 08:56:37   e_Rheinpegel.COL_value 343
     2022-11-22 08:56:37   e_Rheinpegel.DUS_value 295
     2022-01-06 11:11:56   mode            enabled
     2022-11-22 08:56:37   state           cmd_1
   Regex:
     DOIF_Readings:
       Rheinpegel:
         TrendCol:
           Koeln      ^Rheinpegel$:^Koeln:
         TrendDus:
           Dus        ^Rheinpegel$:^Dus:
     accu:
       Rheinpegel:
         accu:
           Dus        ^Rheinpegel$:^Dus:
           Koeln      ^Rheinpegel$:^Koeln:
     collect:
     cond:
       Rheinpegel.COL:
         0:
           value      ^Rheinpegel.COL$:^value:
       Rheinpegel.DUS:
         0:
         1:
           value      ^Rheinpegel.DUS$:^value:
   accu:
     Rheinpegel Dus:
       dim        9
       value:
         290
     Rheinpegel Koeln:
       dim        9
       value:
         342
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Rheinpegel.COL','value')
     1          ::ReadingValDoIf($hash,'Rheinpegel.DUS','value')
   do:
     0:
       0               set Rheinpegel Koeln [Rheinpegel.COL:value]
     1:
       0               set Rheinpegel Dus [Rheinpegel.DUS:value] ,setreading Rheinpegel HW1 710
     2:
   helper:
     NOTIFYDEV  Rheinpegel.COL,Rheinpegel.DUS,global,Rheinpegel
     event      value: 343
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Rheinpegel.COL
     timerevent value: 343
     triggerDev Rheinpegel.COL
     DOIF_eventa:
       cmd_nr: 1
       cmd: 1
       cmd_event: Rheinpegel.COL
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: Rheinpegel.COL
       state: cmd_1
     timerevents:
       value: 343
     timereventsState:
       value: 343
     triggerEvents:
       value: 343
     triggerEventsState:
       value: 343
   internals:
   perlblock:
   readings:
     all         Rheinpegel.COL:value Rheinpegel.DUS:value
   trigger:
   uiState:
   uiTable:
Attributes:
   DOIF_Readings TrendDus:[Rheinpegel:Dus:avg5],TrendCol:[Rheinpegel:Koeln:avg5]
   do         always
   event-on-update-reading Dus,HW1,Koeln
   readingList Koeln Dus
   userReadings HW1


und ein Auszug des Logs in dem Zeitraum:

2022-11-22_03:56:37 Rheinpegel Dus: 292
2022-11-22_03:56:37 Rheinpegel HW1: 710
2022-11-22_03:56:37 Rheinpegel Koeln: 343
2022-11-22_04:56:37 Rheinpegel Dus: 293
2022-11-22_04:56:37 Rheinpegel HW1: 710
2022-11-22_05:56:37 Rheinpegel Koeln: 343
2022-11-22_06:56:37 Rheinpegel Dus: 294
2022-11-22_06:56:37 Rheinpegel HW1: 710
2022-11-22_08:56:37 Rheinpegel Dus: 295
2022-11-22_08:56:37 Rheinpegel HW1: 710
2022-11-22_08:56:37 Rheinpegel Koeln: 343


Erwartet hätte ich einen Durchschnitt von 293.5. Was mache ich falsch?
Gruß
Roman

Damian

Hast du jeweils von allen 5 letzten Werten (avg5)  den Durchschnitt berechnet? Ich sehe im Auszug jeweils nur 3.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

romakrau

Sind bisher nur 4. Meinst Du es liegt an der Anzahl und meiner Ungeduld?

romakrau

Auch mit 6 Werten ergibt sich keine Änderung?!
2022-11-22_03:56:37 Rheinpegel Dus: 292
2022-11-22_03:56:37 Rheinpegel HW1: 710
2022-11-22_03:56:37 Rheinpegel Koeln: 343
2022-11-22_04:56:37 Rheinpegel Dus: 293
2022-11-22_04:56:37 Rheinpegel HW1: 710
2022-11-22_05:56:37 Rheinpegel Koeln: 343
2022-11-22_06:56:37 Rheinpegel Dus: 294
2022-11-22_06:56:37 Rheinpegel HW1: 710
2022-11-22_08:56:37 Rheinpegel Dus: 295
2022-11-22_08:56:37 Rheinpegel HW1: 710
2022-11-22_08:56:37 Rheinpegel Koeln: 343
2022-11-22_09:56:37 Rheinpegel Dus: 296
2022-11-22_09:56:37 Rheinpegel HW1: 710
2022-11-22_11:56:37 Rheinpegel Dus: 297
2022-11-22_11:56:37 Rheinpegel HW1: 710
2022-11-22_11:56:37 Rheinpegel Koeln: 343

Damian

Deine geposteten Ausgaben insb.

     2022-11-22 03:28:36   TrendDus        290

ist von 03:28 Uhr, dafür sind die letzten 5 Werte davor, die per Event im DOIF ankamen von Bedeutung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

romakrau

Sorry, das ist der Timestamp der Anlage des DOIF_Readings.

Damian

#6
Irgendetwas stimmt mit deiner Definition nicht. Dort steht nur ein Wert drin mit 290 und die Anzahl der Werte statt 5 9.

Hier ein Auszug meiner Testdefinition.

Internals:
   CFGFN     
   DEF        ##
   FUUID      637d0fea-f33f-c0d4-e7bf-c2abb086fccabcbf
   MODEL      FHEM
   NAME       di_avg
   NOTIFYDEV  global,bla
   NR         2034
   NTFY_ORDER 50-di_avg
   STATE      initialized
   TYPE       DOIF
   VERSION    26655 2022-11-05 18:33:59
   CHANGED:
     avg: 28
   CHANGEDWITHSTATE:
     avg: 28
   DOIF_Readings:
     avg        ::ReadingValDoIf($hash,'bla','state','','avg4')
   READINGS:
     2022-11-22 19:12:31   avg             28
     2022-11-22 19:11:58   cmd             0
     2022-11-22 19:11:58   mode            enabled
     2022-11-22 19:11:58   state           initialized
   Regex:
     DOIF_Readings:
       bla:
         avg:
           state      ^bla$:^state:
     accu:
       bla:
         accu:
           state      ^bla$:^state:
     collect:
   accu:
     bla state:
       dim        4
       value:
         32
         24
   condition:
   do:
     0:
   helper:
     NOTIFYDEV  global,bla
     event      24
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev bla
     triggerEvents:
       24
     triggerEventsState:
       state: 24
   uiState:
   uiTable:
Attributes:
   DOIF_Readings avg:[bla:state:avg4]


hier:

Zitataccu:

    bla state:
       dim        4
       value:
         32
         24

unter accu sieht man die Dimension von avg und darunter die gesammelten Werte, bei mir sind es zwei 32, 24, daher steht im DOIF_Reading korrekterweise 28.

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

romakrau

Bin jetzt außer Haus. Prüfe morgen mal die Definition. Nimmt wohl nur den ersten Wert. Weiß jetzt wonach ich suchen muss. Danke