Hallo zusammen,
ich möchte ein Attribut von mehreren Devices auslesen, und den maximalen Wert ermitteln. Klappt alles mit Aggregation - nur das ich bei der Änderung eines Attributes eines Devices kein Event auslöse, und damit auch das DOIF-Reading nicht aktualisiert wird.
Gibt es was Eleganteres, als alle Devices durchzuschalten (dann wird's richtig aktualisiert), oder die Zuweisung schlicht einmal am Tag im DOIF über "set $SELF..." durchzuführen?
Hintergrund - Bewässerung mit 9 Kreisen; Laufzeiten sind berechnet und folgen min / max werten; Geräte werden in Gruppen zusammengefasst, um mehrere Geräte gleichzeitig zu nutzen; ich brauche das Maximum der errechneten Laufzeit, um die einzelnen Gruppen sauber nacheinander zu fahren. Die Attribute werden über alle Geräte hinweg in einer Readingsgroup modifiziert.
VG Timmo
Auszug List DOIF
Internals:
VERSION 21224 2020-02-18 18:45:49
DOIF_Readings:
Runtime_Beete_Kueche_max ::AggregateDoIf($hash,'#max:','RainSW_.*','"^Runtime"','AttrVal($name,"Rain_Group_A","a") eq "Beete_Kueche"')
Runtime_Beete_Vorne_max ::AggregateDoIf($hash,'#max:','RainSW_.*','"^Runtime"','AttrVal($name,"Rain_Group_A","a") eq "Beete_Vorne"')
Runtime_Rasen_max ::AggregateDoIf($hash,'#max:','RainSW_.*','"^Runtime"','AttrVal($name,"Rain_Group_A","a") eq "Rasen"')
Runtime_Terrasse_max ::AggregateDoIf($hash,'#max:','RainSW_.*','"^Runtime"','AttrVal($name,"Rain_Group_A","a") eq "Terrasse"')
READINGS:
2020-04-14 21:52:33 Runtime_Beete_Kueche_max 15
2020-04-14 21:50:50 Runtime_Beete_Vorne_max 6
2020-04-14 21:50:50 Runtime_Rasen_max 45
2020-04-14 21:50:50 Runtime_Terrasse_max 12
Regex:
DOIF_Readings:
:
Runtime_Beete_Kueche_max:
"RainSW_.*" RainSW_.*
Runtime_Beete_Vorne_max:
"RainSW_.*" RainSW_.*
Runtime_Rasen_max:
"RainSW_.*" RainSW_.*
Runtime_Terrasse_max:
"RainSW_.*" RainSW_.*
accu:
Attributes:
DOIF_Readings Runtime_Rasen_max:[#max:"RainSW_.*":"^Runtime":AttrVal($name,"Rain_Group_A","a") eq "Rasen"],
Runtime_Beete_Vorne_max:[#max:"RainSW_.*":"^Runtime":AttrVal($name,"Rain_Group_A","a") eq "Beete_Vorne"],
Runtime_Beete_Kueche_max:[#max:"RainSW_.*":"^Runtime":AttrVal($name,"Rain_Group_A","a") eq "Beete_Kueche"],
Runtime_Terrasse_max:[#max:"RainSW_.*":"^Runtime":AttrVal($name,"Rain_Group_A","a") eq "Terrasse"]
Auszug List eines Devices
Internals:
NAME RainSW_1_Beet_Teich
NOTIFYDEV global
NR 89
NTFY_ORDER 50-RainSW_1_1
STATE off
TYPE CUL_HM
(usw)
2020-04-14 21:52:34 state off
2020-04-14 21:52:34 timedOn off
2020-04-14 21:52:34 trigLast fhem:02
Attributes:
Rain_Days_A 2
Rain_Factor_A 1.0
Rain_Group_A Beete_Vorne
Rain_Runtime_max_A 135
Rain_Runtime_min_A 6
Du könntest auf das Global-Event beim Ändern von Attributen triggern.
Es wäre allerdings besser min-, max-Werte in Readings abzulegen.
Hi Damian,
danke für die Anregung - die Min/Max Werte sind Vorgaben pro Gerät (hängt vom Beet ab) - daher meine Idee, das über Attribute zu machen, die sollen sich ja nicht ständig ändern. Die eigentliche Beregnungszeit wird über Verdunstung berechnet, nur dann wird jeweils der aktuelle Maximalwert errechnet und über die Aggregation geholt, um das DOIF sauber zu timen.
Aber ich denke, ich gehe zurück auf Readings, scheint einfacher zu sein - oder ich mache einmal am Tag eine DOIF Ausführung, um die Attribute per Befehl einzusammeln, mal schauen.
BTW - einfach mal herzlichen Dank für Deine Arbeit, schon die Bastelei an den Aggregationsfunktionen war für mich echte Gehirnakrobatik - wie viel Zeit hast Du in das ganze Modul reingesteckt...
VG Timmo
Attributsänderungen bedeuten Änderung der Konfiguration, also sollten sie sich nicht ständig ändern. Ich würde sie zeitgesteuert entsprechend auswerten.
Es gibt eigentlich für die User die AggrDoIf-Funktion, die ohne interne $hash-Angaben auskommt.
PS: Wenn man etwas in der Freizeit als Hobby macht, dann zählt man nicht die Stunden, die man in sein Hobby investiert :)
Hi Damian,
Ok, mache ich so.
Die Hashes sind tatsächlich nur im List, sonst habe ich ganz normal mit den Aggregationsfunktionen gearbeitet (sieht man unten in der Definition). Kann durch das list entstanden sein, oder ein Überbleibsel der AggrDoif versuche... hash hatte ich nicht in Verwendung).
Viele Grüße - Timmo
Zitat von: Tsturm am 15 April 2020, 09:21:30
Hi Damian,
Ok, mache ich so.
Die Hashes sind tatsächlich nur im List, sonst habe ich ganz normal mit den Aggregationsfunktionen gearbeitet (sieht man unten in der Definition). Kann durch das list entstanden sein, oder ein Überbleibsel der AggrDoif versuche... hash hatte ich nicht in Verwendung).
Viele Grüße - Timmo
ja, ist mir später aufgefallen - es ist die interne Perldefinition im DOIF-Modul, weiter unten sind die tatsächlichen DOIF-Readings Definitionen zu sehen.