FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Ralli am 30 September 2019, 15:14:21

Titel: Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Ralli am 30 September 2019, 15:14:21
Hallo,

ich habe ein generalisiertes Device (DOIF), in dem ich von verschiedenen Sensoren Werte aggregiere. Nach meinem Verständnis werden immer dann, wenn ein Sensor einen Wert ändert (oder wenn das generalisierte DOIF abgefragt wird), die Werte für bspw. min, max und average berechnet aus den Readings aller Devices / Sensoren, auf die die Bedingung zutrifft.

Bedeutet: angenommen, ich habe drei Sensoren, von denen nun einer out of service geht, dann wird trotzdem weiterhin aus den Werten von allen drei Sensoren Min, Max und Durchschnitt berechnet, auch wenn die Werte des einen Sensors schon ewig alt sind.

Ist das so? Besteht eine Möglichkeit, das Minimal- und Maximal-Alter von Werten (Readings), die zur Berechnung herangezogen werden, festzulegen? Wenn nein, wäre das was für's Anforderungsmanagement :) ?
Titel: Antw:Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Damian am 30 September 2019, 16:05:21
Zitat von: Ralli am 30 September 2019, 15:14:21
Hallo,

ich habe ein generalisiertes Device (DOIF), in dem ich von verschiedenen Sensoren Werte aggregiere. Nach meinem Verständnis werden immer dann, wenn ein Sensor einen Wert ändert (oder wenn das generalisierte DOIF abgefragt wird), die Werte für bspw. min, max und average berechnet aus den Readings aller Devices / Sensoren, auf die die Bedingung zutrifft.

Bedeutet: angenommen, ich habe drei Sensoren, von denen nun einer out of service geht, dann wird trotzdem weiterhin aus den Werten von allen drei Sensoren Min, Max und Durchschnitt berechnet, auch wenn die Werte des einen Sensors schon ewig alt sind.

Ist das so? Besteht eine Möglichkeit, das Minimal- und Maximal-Alter von Werten (Readings), die zur Berechnung herangezogen werden, festzulegen? Wenn nein, wäre das was für's Anforderungsmanagement :) ?

Ich gehe davon aus, dass du die Aggregationsfunktionen  https://fhem.de/commandref_DE.html#DOIF_aggregation meinst. Bei diesen kannst du beliebige Perlabfragen definieren, insbesondere auch das Alter der Readings abfragen.
Titel: Antw:Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Ralli am 30 September 2019, 16:47:48
Ok, danke.
Titel: Antw:Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Damian am 30 September 2019, 18:39:11
Zitat von: Ralli am 30 September 2019, 16:47:48
Ok, danke.

Und so wird es definiert:

[?#min"":temperature:ReadingsAge($name,"temperature",0) < 600]

Minimale Temperatur aller Readings "temperature" im System, deren Alter unter 10 Minuten ist.

Bemerkung: Aggregationsfunktionen, die alle Geräte im System überprüfen sollen (hier Angaben:""), sollten nur mit Fragezeichen abgefragt werden, da sie sonst das System lahmlegen können, weil sie sonst auf alle Events reagieren.

Titel: Antw:Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Ralli am 30 September 2019, 19:40:42
Damian, ich ziehe den Hut. Vielen Dank!

Allerdings passt das nicht ganz für meinen Anwendungsfall. Wenn ich es richtig verstanden habe, ist das, was du mir geschrieben hast, für den Bedingungsteil gedacht. Ich habe allerdings das folgende DOIF für ein generisches Device definiert:


def GEN_Aussensensor DOIF ##
attr GEN_Aussensensor event_Readings
LUMINOSITY:[#max:d0:"((?!test).)*_BW_aussen($|_Terrasse$):brightness":brightness]


Kann ich das da auch irgendwie unterbringen?
Titel: Antw:Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Damian am 30 September 2019, 19:58:09
Zitat von: Ralli am 30 September 2019, 19:40:42
Damian, ich ziehe den Hut. Vielen Dank!

Allerdings passt das nicht ganz für meinen Anwendungsfall. Wenn ich es richtig verstanden habe, ist das, was du mir geschrieben hast, für den Bedingungsteil gedacht. Ich habe allerdings das folgende DOIF für ein generisches Device definiert:


def GEN_Aussensensor DOIF ##
attr GEN_Aussensensor event_Readings
LUMINOSITY:[#max:d0:"((?!test).)*_BW_aussen($|_Terrasse$):brightness":brightness]


Kann ich das da auch irgendwie unterbringen?
Das ist doch das Gleiche in Grün: Die Bedingung kommt doch erst nach der Readingangabe:

LUMINOSITY:[#max:d0:"((?!test).)*_BW_aussen($|_Terrasse$):brightness":brightness:ReadingsAge($name,"brightness",0) < 600]
Titel: Antw:Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Ralli am 01 Oktober 2019, 05:51:37
Das hatte ich genau so probiert, da kommt 0 raus, obwohl das nicht der Fall sein dürfte.
Titel: Antw:Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Damian am 01 Oktober 2019, 07:55:14
Zitat von: Ralli am 01 Oktober 2019, 05:51:37
Das hatte ich genau so probiert, da kommt 0 raus, obwohl das nicht der Fall sein dürfte.
Poste mal list-Output von GEN_Aussensensor.

Du kannst statt # auch @ angeben, dann kannst du sehen, welche Geräte gefunden wurden.
Titel: Antw:Maximales / Minimales Alter von Readings bei DOIF_Readings / event_Readings
Beitrag von: Ralli am 01 Oktober 2019, 10:45:08
Vielen Dank - Murphys Gesetz, nun klappt's :).

Trotzdem hier mal ein list:


Internals:
   CFGFN     
   CHANGED   
   DEF        ##
   DOIFDEV    ^global$|((?!test).)*_BW_aussen($|_Terrasse$)|((?!test).)*_BW_aussen($|_Terrasse$)|((?!test).)*_BW_aussen($|_Terrasse$)|((?!test).)*_BW_aussen($|_Terrasse$)
   FUUID      5d923bfb-f33f-f7fe-9491-d409d4bf6da00523
   MODEL      FHEM
   NAME       GEN_Aussensensor
   NR         3130
   NTFY_ORDER 50-GEN_Aussensensor
   STATE      T: 15.0 L: 178.0 P: 0.0
   TYPE       DOIF
   VERSION    20268 2019-09-28 21:00:39
   Helper:
     DBLOG:
       AVR_BRIGHTNESS:
         Eventlog:
           TIME       1569864729.06499
           VALUE      96
       AVR_LUMINOSITY:
         Eventlog:
           TIME       1569917725.36824
           VALUE      176
       AVR_TEMP:
         Eventlog:
           TIME       1569864699.68118
           VALUE      24
       DEV_LUMINOSITY:
         Eventlog:
           TIME       1569917475.3549
           VALUE      ANB_BW_aussen,ANB_BW_aussen_Terrasse,FL_BW_aussen
       LUMINOSITY:
         Eventlog:
           TIME       1569919087.81418
           VALUE      178
       MAX_BRIGHTNESS:
         Eventlog:
           TIME       1569864729.06193
           VALUE      102
       MAX_LUMINOSITY:
         Eventlog:
           TIME       1569918744.61057
           VALUE      196
       MAX_TEMP:
         Eventlog:
           TIME       1569864699.68362
           VALUE      24
       MIN_BRIGHTNESS:
         Eventlog:
           TIME       1569864729.06356
           VALUE      87
       MIN_LUMINOSITY:
         Eventlog:
           TIME       1569917813.83516
           VALUE      163
       MIN_TEMP:
         Eventlog:
           TIME       1569864699.68485
           VALUE      24
       TEMPERATURE:
         Eventlog:
           TIME       1569917258.09122
           VALUE      15
       T_LUMINOSITY:
         Eventlog:
           TIME       1569915485.52033
           VALUE      188
       cmd:
         Eventlog:
           TIME       1569864699.66695
           VALUE      0
       mode:
         Eventlog:
           TIME       1569864699.66695
           VALUE      enabled
       state:
         Eventlog:
           TIME       1569864699.66695
           VALUE      initialized
   OLDREADINGS:
   READINGS:
     2019-10-01 10:38:07   DEV_LUMINOSITY  ANB_BW_aussen,ANB_BW_aussen_Terrasse,FL_BW_aussen
     2019-10-01 10:38:07   LUMINOSITY      178
     2019-10-01 10:38:07   MAX_LUMINOSITY  196
     2019-10-01 10:38:07   MIN_LUMINOSITY  163
     2019-10-01 10:16:53   TEMPERATURE     15
     2019-09-30 19:31:39   cmd             0
     2019-09-30 19:31:39   mode            enabled
     2019-09-30 19:31:39   state           initialized
   Regex:
     accu:
     event_Readings:
       :
         DEV_LUMINOSITY:
           "((?!test).)*_BW_aussen($|_Terrasse$):brightness" ((?!test).)*_BW_aussen($|_Terrasse$):brightness
         LUMINOSITY:
           "((?!test).)*_BW_aussen($|_Terrasse$):brightness" ((?!test).)*_BW_aussen($|_Terrasse$):brightness
         MAX_LUMINOSITY:
           "((?!test).)*_BW_aussen($|_Terrasse$):brightness" ((?!test).)*_BW_aussen($|_Terrasse$):brightness
         MIN_LUMINOSITY:
           "((?!test).)*_BW_aussen($|_Terrasse$):brightness" ((?!test).)*_BW_aussen($|_Terrasse$):brightness
   condition:
   do:
     0:
   event_Readings:
     DEV_LUMINOSITY ::AggregateDoIf($hash,'@','((?!test).)*_BW_aussen($|_Terrasse$)','brightness','ReadingsAge($name,"brightness",0) < 1800')
     LUMINOSITY ::AggregateDoIf($hash,'#average:d0:','((?!test).)*_BW_aussen($|_Terrasse$)','brightness','ReadingsAge($name,"brightness",0) < 1800')
     MAX_LUMINOSITY ::AggregateDoIf($hash,'#max:d0:','((?!test).)*_BW_aussen($|_Terrasse$)','brightness','ReadingsAge($name,"brightness",0) < 1800')
     MIN_LUMINOSITY ::AggregateDoIf($hash,'#min:d0:','((?!test).)*_BW_aussen($|_Terrasse$)','brightness','ReadingsAge($name,"brightness",0) < 1800')
     TEMPERATURE (15)
   helper:
     DEVFILTER  ^global$|((?!test).)*_BW_aussen($|_Terrasse$)|((?!test).)*_BW_aussen($|_Terrasse$)|((?!test).)*_BW_aussen($|_Terrasse$)|((?!test).)*_BW_aussen($|_Terrasse$)
     NOTIFYDEV  global|.*((?!test).)*_BW_aussen($|_Terrasse$).*|.*((?!test).)*_BW_aussen($|_Terrasse$).*|.*((?!test).)*_BW_aussen($|_Terrasse$).*|.*((?!test).)*_BW_aussen($|_Terrasse$).*
     event      brightness: 196
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev FL_BW_aussen
     triggerEvents:
       brightness: 196
     triggerEventsState:
       brightness: 196
   uiState:
   uiTable:
Attributes:
   event-on-change-reading .*
   event-on-update-reading LUMINOSITY,TEMPERATURE
   event_Readings LUMINOSITY:[#average:d0:"((?!test).)*_BW_aussen($|_Terrasse$):brightness":brightness:ReadingsAge($name,"brightness",0) < 1800],
MIN_LUMINOSITY:[#min:d0:"((?!test).)*_BW_aussen($|_Terrasse$):brightness":brightness:ReadingsAge($name,"brightness",0) < 1800],
MAX_LUMINOSITY:[#max:d0:"((?!test).)*_BW_aussen($|_Terrasse$):brightness":brightness:ReadingsAge($name,"brightness",0) < 1800],
DEV_LUMINOSITY:[@"((?!test).)*_BW_aussen($|_Terrasse$):brightness":brightness:ReadingsAge($name,"brightness",0) < 1800],
TEMPERATURE:(15)
   room       System
   stateFormat {no warnings;
my $ap = ReadingsNum($name,"AIR_PRESSURE",0);
my $tp = ReadingsNum($name,"TEMPERATURE",0);
my $lm = ReadingsNum($name,"LUMINOSITY",0);
sprintf("T: %.1f L: %.1f P: %.1f",$tp,$lm,$ap)}