Vertständnis von event-aggregator

Begonnen von sz_wolfi, 14 Dezember 2019, 21:09:24

Vorheriges Thema - Nächstes Thema

sz_wolfi

Hallo,

ich habe jetzt die commandref bzgl. "event-aggregator" durchgelesen, aber mein event-aggregator funktioniert irgendwie nicht.

was ich habe:

Einen Aeotec ZW100 Sensor - von dem ich die Anzahl der Bewegungsmeldungen innerhalb einer Zeit zählen will.
...bzw. eigentlich will ich sie aufintegrieren ... - aber Zählen ist einfacher zu verifizieren.

in der Commandref zu 'attr event-aggregator' steht - dass man idealerweise ein userReading dazu nehmen sollte.

gemacht, getan - GEHT auch wie erwartet:


attr SENSOR_2 userReadings alarmTime:.*alarm.*Motion.* {ReadingsTimestamp("$NAME","alarm",99999);; }, MotionFreq:basicSet.* \
{ if (ReadingsNum("$NAME","basicSet",0) > 0) { Log 1,"uR: $NAME = 1.0";; return 1.0;;} else {Log 1,"uR: $NAME = 0.0";; return 0.0;;} }


...und diese zwei userReadings funktionieren auch soweit - laut Log-Meldungen - insbes. das "MotionFreq" Reading:


2019.12.14 20:04:18 1: uR: SENSOR_2 = 1.0
2019.12.14 20:06:02 1: uR: SENSOR_2 = 0.0
2019.12.14 20:07:13 1: uR: SENSOR_2 = 1.0
2019.12.14 20:07:53 1: uR: SENSOR_2 = 0.0
2019.12.14 20:07:53 1: uR: SENSOR_2 = 0.0
2019.12.14 20:07:53 1: uR: SENSOR_2 = 0.0
2019.12.14 20:08:13 1: uR: SENSOR_2 = 1.0
2019.12.14 20:08:38 1: uR: SENSOR_2 = 0.0
2019.12.14 20:08:43 1: uR: SENSOR_2 = 1.0
2019.12.14 20:10:28 1: uR: SENSOR_2 = 0.0
2019.12.14 20:12:17 1: uR: SENSOR_2 = 1.0


DIES funktioniert wirklich, weil ich es mit einem Notify kontrolliert habe:


defmod ntf_sensor2_motionFreq notify SENSOR_2:MotionFreq.* { Log 1,"Notify MotionFreq: $NAME $EVENT";;}


Output im Log FAST wie erwartet: (man sieht, es sind INT nicht Float Werte - macht nix)


2019.12.14 20:50:48 1: uR: SENSOR_2 = 1.0
2019.12.14 20:50:48 1: Notify MotionFreq: SENSOR_2 MotionFreq: 1


Soweit - so gut :-)

Dann setze ich auf 'MotionFreq' einen event-aggregator - und es passiert NIX mehr :-(

...zuerst ganz banal - er soll zählen, wieviele Events es innerhalb von 300 Sekunden es gab:


attr SENSOR_2 event-aggregator MotionFreq::none:count:300:10


...leider will das Teil nicht mal zählen - und auch der Notify 'sieht' nie wieder ein Event von DEM userReading :-(

da die commandref nicht "lügt" - muss ich irgendwas hier ziemlich falsch machen - aber WAS?

amenomade

Wo hast Du "count" in den Methoden gesehen?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

sz_wolfi

Zitat von: amenomade am 14 Dezember 2019, 22:10:03
Wo hast Du "count" in den Methoden gesehen?

'count' sollte doch die 'function' sein, weil 'interval' leer ist, 'none' ist die Methode:


attr SENSOR_2 event-aggregator MotionFreq::none:count:300:10


... nochmal genau nachgesehen --- das WIKI sagt, dass es 'count' gibt:
https://wiki.fhem.de/wiki/Event-aggregator

Allerdings - die commandref erwähnt das in der Tat nicht.

die syntax aus der commandref:  reading:interval:method:function:holdTime

OK - dann, gleiches Problem mit der integral Funktion.

'interval' darf ja leer bleiben ("With holdTime defined the interval can be kept undefined"),
weil ich ja 'holdTime' verwenden will (sonst wuerde er ja nur summieren, das waere ja praktisch 'count' :-)  )
'const' als 'method' --- 'integral' als 'function' - und 600 Sek als 'holdTime':


attr SENSOR_2 event-aggregator MotionFreq::const:integral:600


...geht genausowenig - bzw. macht nicht das was ich erwarte :-( - und das Reading bleibt auf 0.



amenomade

#3
Zeig mal ein "list" vom Device bitte


Du hast mind. ein Parameter zu viel.
MotionFreq::none:count:300:10
reading:interval:method:function:holdTime

Steht nichts in der Log?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

sz_wolfi

hier in aller Pracht:


Internals:
   DEF        cff0272b 25
   FUUID      5d1a1c38-f33f-431b-666d-45f4a2bd6b1d28ad
   IMAGE      /fhem/deviceimages/zwave/ZC10-17115891
   IODev      ZSTICK
   LASTInputDev ZSTICK
   MSGCNT     1695
   NAME       SENSOR_2
   NR         209
   STATE      configGroup1Interval 300
   TYPE       ZWave
   ZSTICK_MSGCNT 1695
   ZSTICK_RAWMSG 00040019053105050136
   ZSTICK_TIME 2019-12-14 23:32:58
   ZWaveSubDevice no
   homeId     cff0272b
   isWakeUp   
   lastMsgSent 1576360994.9127
   nodeIdHex  19
   READINGS:
     2018-12-17 23:18:05   CMD             ZW_APPLICATION_UPDATE
     2019-12-14 23:29:12   MotionFreq      0
     2018-12-18 00:02:15   SEND_DATA       failed:00
     2019-12-07 07:11:16   UNPARSED        COLOR_CONTROL 0133
     2019-12-14 23:29:12   alarm           HomeSecurity: Event cleared: Previous Events cleared
     2019-12-14 23:28:48   alarmTime       2019-12-14 23:28:48
     2019-11-21 16:35:28   alarmTypeSupported HomeSecurity
     2018-12-17 23:10:04   assocGroup_1    Max 5 Nodes ZSTICK
     2018-12-17 23:10:04   assocGroups     1
     2019-12-14 23:29:12   basicSet        0
     2019-11-21 16:56:48   battery         100 %
     2019-11-21 16:56:48   batteryPercent  100
     2019-11-21 16:56:48   batteryState    ok
     2019-11-21 16:34:33   configAwakeTimeout 15
     2019-11-21 16:34:34   configBatteryReportingThreshold 10
     2019-11-21 16:34:34   configCommandOptions BasicSet
     2019-11-21 16:34:35   configCurrentPowerMode 2
     2019-11-21 16:34:35   configEnableDisableLockConfiguration Disable
     2019-11-21 16:34:36   configEnableDisableToSendAReportOn48 0
     2019-11-21 16:34:36   configEnableMotionSensor EnabledLevel5
     2019-11-21 16:34:36   configGetTheOutOfLimitStateOfThe61 0
     2019-11-22 17:29:41   configGroup1Interval 120
     2019-11-21 16:34:39   configGroup1Reports 240
     2019-11-21 16:34:39   configGroup2Interval 3600
     2019-11-21 16:34:40   configGroup2Reports 0
     2019-11-21 16:34:40   configGroup3Interval 3600
     2019-11-21 16:34:41   configGroup3Reports 0
     2019-11-21 16:34:41   configHumidityCalibration 3
     2019-11-21 16:34:42   configHumidityReportingThreshold 3
     2019-11-21 16:34:42   configLEDBlinkingReport EnableLEDBlinking
     2019-11-21 16:34:43   configLowBattery 20
     2019-11-21 16:34:43   configLowTempAlarm Enabled
     2019-11-21 16:34:44   configLuminanceCalibration 0
     2019-11-21 16:34:44   configLuminanceReportingThreshold 3
     2019-11-21 16:34:45   configOnTime    15
     2019-11-21 16:34:45   configReportOnlyOnThresholds Enabled
     2019-11-21 16:34:46   configSetTheLowerLimitValueOf50 256
     2019-11-21 16:34:46   configSetTheLowerLimitValueOf56 4
     2019-11-21 16:34:47   configSetTheLowerLimitValueOfHumidity52 50
     2019-11-21 16:34:49   configSetTheLowerLimitValueOfLighting54 100
     2019-11-21 16:34:49   configSetTheRecoverLimitValueOf57 5121
     2019-11-21 16:34:50   configSetTheRecoverLimitValueOf58 5
     2019-11-21 16:34:50   configSetTheRecoverLimitValueOf59 10
     2019-11-21 16:34:50   configSetTheRecoverLimitValueOf60 2
     2019-11-21 16:34:51   configSetTheUpperLimitValueOf49 18350336
     2019-11-21 16:34:51   configSetTheUpperLimitValueOf55 8
     2019-11-21 16:34:52   configSetTheUpperLimitValueOfHumidity51 60
     2019-11-21 16:34:53   configSetTheUpperLimitValueOfLighting53 1000
     2019-11-26 13:24:51   configTemperatureCalibration 61185
     2019-11-21 16:34:54   configTemperatureReportingThreshold 1310976
     2019-11-21 16:34:54   configTemperatureScale Celsius
     2019-11-21 16:34:55   configUVReportingThreshold 2
     2019-11-21 16:34:55   configUltravioletCalibration 0
     2019-11-21 16:34:56   configWakeUp10MinutesOnPowerOn EnableFr
     2019-12-14 23:32:58   dewPoint        9.58
     2019-12-14 23:32:58   humidity        54 %
     2019-12-14 23:32:56   luminance       22 Lux
     2019-10-10 22:01:57   model           AEON Labs ZW100 MultiSensor 6
     2019-10-10 22:01:57   modelConfig     aeotec/zw100.xml
     2019-10-10 22:01:57   modelId         0086-0002-0064
     2019-10-15 20:35:40   neighborList    STECKER_1 ALWAYS_ON ZBULB1 DIMMER_OFFICE THERMOSTAT_OFFICE1 THERMOSTAT_OFFICE2
     2019-11-21 16:38:47   neighborUpdate  done
     2019-11-21 16:33:54   powerlvl        current 0 remain 0
     2019-11-21 16:33:45   powerlvlTest    node 14 status 1 frameAck 100
     2019-10-06 17:06:25   reportedState   closed
     2019-10-26 05:49:52   seismicIntensity 0 mercalli
     2019-11-22 17:29:56   state           configGroup1Interval 300
     2019-12-14 23:32:58   temperature     19.1 C
     2019-12-14 23:03:15   timeToAck       0.223
     2019-12-14 23:03:15   transmit        OK
     2019-12-14 23:32:56   ultraviolet     0 UV
     2019-10-10 23:06:05   version         Lib 3 Prot 4.54 App 1.13 HW 100 FWCounter 0
     2019-12-14 23:03:12   wakeup          notification
Attributes:
   IODev      ZSTICK
   classes    ZWAVEPLUS_INFO VERSION MANUFACTURER_SPECIFIC ASSOCIATION_GRP_INFO ASSOCIATION POWERLEVEL ALARM BATTERY SENSOR_BINARY SENSOR_MULTILEVEL CONFIGURATION FIRMWARE_UPDATE_MD DEVICE_RESET_LOCALLY MARK
   comment    1
   devStateIcon .*:temperature_humidity
   event-aggregator MotionFreq::const:integral:600
   icon       temperature_humidity
   neighborListPos 104.69,351.19
   room       OFFICE,ZWave
   userReadings alarmTime:.*alarm.*Motion.* {ReadingsTimestamp("$NAME","alarm",99999); }, MotionFreq:basicSet.*
{ if (ReadingsNum("$NAME","basicSet",0) > 0) { Log 1,"uR: $NAME = 1.0"; return 1.0;} else {Log 1,"uR: $NAME = 0.0"; return 0.0;} }, dewPoint:temperature.* {urDewpoint($name)}
   vclasses   ALARM:3 ASSOCIATION:2 ASSOCIATION_GRP_INFO:1 BATTERY:1 CONFIGURATION:1 DEVICE_RESET_LOCALLY:1 FIRMWARE_UPDATE_MD:2 MANUFACTURER_SPECIFIC:2 POWERLEVEL:1 SENSOR_BINARY:1 SENSOR_MULTILEVEL:5 VERSION:2 WAKE_UP:2 ZWAVEPLUS_INFO:2



sz_wolfi

Zitat von: amenomade am 14 Dezember 2019, 23:30:40
Du hast mind. ein Parameter zu viel.
MotionFreq::none:count:300:10
reading:interval:method:function:holdTime

ja, bei DER Version mit 'count' - in der Tat - aber akt. mit 'integral' sollte es korrekt sein:

event-aggregator MotionFreq::const:integral:600

Zitat
Steht nichts in der Log?

wie schon geschrieben: nein - also nix offensichtliches, keine Fehler etc.

die debug-Log-Meldungen des userReadings kommen nach wie vor im fhem-Log.
und im Sensor-Log-File - sieht alles ok aus, bis auf den Punkt, dass keine Updates von diesem userReading 'MotionFreq' erfolgen.
die anderen userReadings werden ja generiert. (z.B. 'alarmTime' und 'dewPoint' )

wenn ich das event-aggregator Attribut loesche, dann funktioniert der Notify auf das 'MotionFreq' Reading sofort wieder.
(und es kommen auch im Sensor_log-file die entsprechenden Meldungen)

ist der event-aggregator gesetzt - passiert nix mehr. :-(


amenomade

Hmmm komisch. Ich kann das nicht reproduzieren.
Hast Du genüge Events auf basicSet, damit die Integrale auf der Periode nicht 0 ist?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Kannst Du bei dir mit folgendem dummy testen?
defmod SENSOR_2_test dummy
attr SENSOR_2_test event-aggregator MotionFreq::const:integral:600
attr SENSOR_2_test readingList basicSet
attr SENSOR_2_test setList basicSet:slider,0,1,100
attr SENSOR_2_test userReadings MotionFreq:basicSet.* { if (ReadingsNum("$NAME","basicSet",0) > 0) { Log 1,"uR: $NAME = 1.0";; return 1.0;;} else {Log 1,"uR: $NAME = 0.0";; return 0.0;;} }
attr SENSOR_2_test webCmd basicSet
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Und bei Gelegenheit, zeig mal das Ergebnis von:
{ Dumper($defs{"SENSOR_2"}{READINGS}{"MotionFreq"}{".ts"}) } in der Kommandozeile
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

sz_wolfi


{ Dumper($defs{"SENSOR_2"}{READINGS}{"MotionFreq"}{".ts"}) }

$VAR1 = bless( {
                 '_M' => '222145.995299021',
                 '_S' => '535654274279.998',
                 '_t' => '1576368930.00505',
                 '_t0' => '1576368441.61963',
                 '_v' => 10000,
                 'autoreset' => undef,
                 'count' => 7,
                 'holdTime' => 600,
                 'integral' => '1332875.97179413',
                 'lost' => 0,
                 'max' => 10000,
                 'mean' => '2729.1477529466',
                 'median' => undef,
                 'method' => 'const',
                 'min' => 0,
                 'n' => 6,
                 'sd' => '4021.10899610649',
                 't' => '1576368930.00505',
                 't0' => '1576368441.61963',
                 'tSeries' => [
                                '1576368441.61963',
                                '1576368492.06582',
                                '1576368493.26136',
                                '1576368518.90147',
                                '1576368864.72274',
                                '1576368921.92403',
                                '1576368930.00505'
                              ],
                 'v' => 10000,
                 'v0' => 10000,
                 'vSeries' => [
                                10000,
                                0,
                                10000,
                                0,
                                10000,
                                0,
                                10000
                              ]
               }, 'TimeSeries' );



sz_wolfi

Zitat von: amenomade am 15 Dezember 2019, 00:13:58
Kannst Du bei dir mit folgendem dummy testen?
defmod SENSOR_2_test dummy
attr SENSOR_2_test event-aggregator MotionFreq::const:integral:600
attr SENSOR_2_test readingList basicSet
attr SENSOR_2_test setList basicSet:slider,0,1,100
attr SENSOR_2_test userReadings MotionFreq:basicSet.* { if (ReadingsNum("$NAME","basicSet",0) > 0) { Log 1,"uR: $NAME = 1.0";; return 1.0;;} else {Log 1,"uR: $NAME = 0.0";; return 0.0;;} }
attr SENSOR_2_test webCmd basicSet


verhaelt sich bei mir wie 'bekannt':

a.) basicSet auf 100 - und 'set'
b.) F5 - zum web-reload - und MotionFreq steht auf '1'
c.) basicSet auf 0 - 'set' ---> reload -> MotionFreq ist '0'

...es gibt keine floating-point Zwischenwerte ... - also OK - alles auf 10k skalieren
dann sollten doch 4 Stellen fuer Integer Arithmetik uebrig sein :-)

mit 10000 und 0 probiert - gleiches Verhalten. nur 10k oder 0 - keine Zahl dazwischen.

im webif - wenn ich die 'raw definition' ein/aus-klappe - sehe ich den 'setstate' der Variablen.
die folgen 100% zeitsynchron einander ...

und das Reading loest keine Events/Updates im webif aus - die web-seite bleibt gleich.
erst ein 'Reload' - updated den Zeitstempel vom Reading - aber der Wert ist nur 10k oder 0.
(beim 'basicSet' Reading - sobald ich 'set' mache - wird die Zeit des Readings geupdated und rot gefaerbt, ohne reload)

... er integriert ueber die Zeit nicht.
und wenn ich die holdTime weglasse - muesste er doch hochzaehlen - macht er auch nicht.
der Zustand folgt einfach nur dem basicSet.

der fhem-update-check sagt 'nothing to do' - weil ich das schon heute vormittag gemacht hatte ;-)


amenomade

#11
Zitat'integral' => '1332875.97179413'
Also... wird doch kalkuliert.
Zitat                 'tSeries' => [
                                '1576368441.61963',
                                '1576368492.06582',
                                '1576368493.26136',
                                '1576368518.90147',
                                '1576368864.72274',
                                '1576368921.92403',
                                '1576368930.00505'
                              ],
                 'vSeries' => [
                                10000,
                                0,
                                10000,
                                0,
                                10000,
                                0,
                                10000
                              ]
und er hat mehrere Werte mit unterschiedlichen Timestamps gespeichert

Dein Problem ist wahrscheinlich eher ein Problem von Aktualisierung der Weboberfläsche.
Nw. hast Du mit meiner Definition ein slider neben dem Name, um direkt den Wert zu setzen. basicSet und MotionFreq sollten sofort aktualisieren.

Wie ist das longpoll Attribut auf deiner FHEMWEB (i.d.R. Name=WEB) Instanz gesetzt?

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

sz_wolfi

Zitat von: amenomade am 15 Dezember 2019, 01:27:10
Also... wird doch kalkuliert.und er hat mehrere Werte mit unterschiedlichen Timestamps gespeichert

ACK! - das wuerde ich auch draus lesen :-)

Zitat
Dein Problem ist wahrscheinlich eher ein Problem von Aktualisierung der Weboberfläsche.
Nw. hast Du mit meiner Definition ein slider neben dem Name, um direkt den Wert zu setzen. basicSet und MotionFreq sollten sofort aktualisieren.

Wie ist das longpoll Attribut auf deiner FHEMWEB (i.d.R. Name=WEB) Instanz gesetzt?

vorher hatte ich longpoll gar nicht gesetzt. Laut Dok ist es dann aktiv.
dann habe ich mit 'attr WEB longpoll 1' probiert - kein Unterschied im UI.
dann mit 'attr WEB longpoll 0' - da updated er ja im webBrowser das basicSet nicht, wenn ich den Slider via 'set' setze.
... habe ich 'longpoll 1' - dann ist es wieder OK.

...das Reading "MotionFreq" muesste aber doch den Wert aus 'integral' aus dem Dumper-Output haben - richtig ?
und events generieren, auf die ein Notify triggert...

amenomade

#13
Zitat von: sz_wolfi am 15 Dezember 2019, 01:56:13

...das Reading "MotionFreq" muesste aber doch den Wert aus 'integral' aus dem Dumper-Output haben - richtig ?
und events generieren, auf die ein Notify triggert...
Sollte, ja. Bzw. vielleicht nicht genau den gleichen Wert sondern den vorherign. Aber doch was.
Mir kommt im Moment keine neue Idee
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

sz_wolfi

Zitat von: amenomade am 15 Dezember 2019, 02:12:14
Sollte, ja. Bzw. vielleicht nicht genau den gleichen Wert sondern den vorherign. Aber doch was.
Mir kommt im Moment keine neue Idee

Danke erstmal - soweit ist mir jetzt klar, dass es 'im Prinzip' korrekt ist/war.
Muss irgendwas spez. an meiner Installation sein ... - zumindest DAS weiss ich jetzt.
Ich werde mir mal 'ne neue VM (centos-7.5) aufsetzen - und mit paar Dummies da weiter testen.
... ich update diesen Thread, wenn ich dazu gekommen bin :-)