Hallo zusammen,
ich möchte eine Aktion auslösen, die abhängig vom Mittelwert nach dem x-ten Reading wahr wird, aber nicht bereits beim Ersten.
Dazu habe ich folgenden Test aufgebaut:
Internals:
CFGFN
DEF ## di_ZumTesten
([HHzaehler:power:avg5] > 0 )
{Log3 "$SELF", 3, "$SELF: cmd_1 avg5= [HHzaehler:power:avg5]"."\nHHzaehler:power ".ReadingsVal("HHzaehler","power","<default1>")}
DOELSEIF ([HHzaehler:power:avg5] < 0 )
{Log3 "$SELF", 3, "$SELF: cmd_2 avg5= [HHzaehler:power:avg5]"."\nHHzaehler:power ".ReadingsVal("HHzaehler","power","<default1>")}
DOELSE
{Log3 "$SELF", 3, "$SELF: cmd_3 power DOELSE "."\nHHzaehler:power > 0 ".ReadingsVal("HHzaehler","power","<default1>")."\n<name2>:<reading2> ".ReadingsVal("<name2>","<reading2>","<default2>")}
FUUID 69825a19-f33f-1d1e-cf3e-cc94c10f25575be8
MODEL FHEM
NAME di_ZumTesten
NOTIFYDEV HHzaehler,global
NR 169
NTFY_ORDER 50-di_ZumTesten
STATE cmd_1
TYPE DOIF
VERSION 30659 2025-12-25 12:37:16
eventCount 65
.attraggr:
.attrminint:
READINGS:
2026-02-03 23:21:28 Device HHzaehler
2026-02-03 23:21:28 cmd 1
2026-02-03 23:21:28 cmd_event HHzaehler
2026-02-03 23:21:28 cmd_nr 1
2026-02-03 23:21:28 e_HHzaehler_power 304
2026-02-03 23:12:49 mode enabled
2026-02-03 23:21:28 state cmd_1
Ausgabe:
2026.02.03 23:13:28 3: di_ZumTesten: cmd_1 avg5= 433
HHzaehler:power 433
2026.02.03 23:15:29 3: di_ZumTesten: cmd_1 avg5= 368.5
HHzaehler:power 304
2026.02.03 23:17:28 3: di_ZumTesten: cmd_1 avg5= 350.333333333333
HHzaehler:power 314
2026.02.03 23:19:28 3: di_ZumTesten: cmd_1 avg5= 339.5
HHzaehler:power 307
2026.02.03 23:21:28 3: di_ZumTesten: cmd_1 avg5= 332.4
HHzaehler:power 304
Wenn ich die cmd_1-Bedingung [HHzaehler:power:avg5] > 400 einstelle, wird cmd_1 bereits beim ersten Reading wahr.
Wie kann die Bedingung erst nach 5 Readings (avg5) geprüft werden?
Dann musst du selber zählen und deinen Zähler abfragen. Merken kannst du dir den Zählerstand ein einem Reading. Bei DOIF-Perl kannst du dafür Instanzvariablen nutzen.
Danke für den schnellen Tipp.
Da das mit DOIF-FHEM-Mitteln nicht so einfach zu lösen ist (für mich), habe ich mich für einen anderen Weg mit event-aggregator entschieden:
1. User-Reading im Ursprungs-device: attr MyPower5M:power.* {ReadingsNum("HHzaehler","power",0)}
2. event-aggregator Mittelwert über 300 Sekunden im Ursprungs-device: attr MyPower5M::none:mean:300
3. anstatt [HHzaehler:power:avg5] das neue Reading [HHzaehler:MyPower5M] im doif verwenden