Event-aggregator: Unterschied zwischen den Versionen
K (Alternative: DOIF hinzugefügt) |
K (Baustellenhinweis entfernt, wikifiziert, Formatierung überarbeitet, ...) |
||
Zeile 1: | Zeile 1: | ||
{{SEITENTITEL:event-aggregator}} <!-- da richtige Schreibweise kleinen Anfangsbuchstaben hat --> | {{SEITENTITEL:event-aggregator}} <!-- da richtige Schreibweise kleinen Anfangsbuchstaben hat --> | ||
Mit dem [[Attribut]] [[event-aggregator]] können (nach Wunsch zeitlich gewichtete) Durchschnittswerte, Minima, Maxima oder Median etc. berechnet werden. Der Median kann hilfreich sein, um Messwerte mit Ausreissern (unsinnige Werte, z.B. durch Übertragungsfehler) zu glätten. | |||
Mit dem Attribut [[event-aggregator]] können (nach Wunsch zeitlich gewichtete) Durchschnittswerte, Minima, Maxima oder Median etc. berechnet werden. Der Median kann hilfreich sein, um Messwerte mit Ausreissern (unsinnige Werte, z.B. durch Übertragungsfehler) zu glätten. | |||
== Syntax == | == Syntax == | ||
Zeile 11: | Zeile 9: | ||
Die einzelnen Teile haben folgende Bedeutung: | Die einzelnen Teile haben folgende Bedeutung: | ||
=== reading === | === reading === | ||
Das zu aggregierende Reading des aktuellen Gerätes. Das Reading selbst muss seine Werte aus einer Aktion oder einem Event in FHEM erhalten (beispielsweise, indem Temperaturwerte ausgegeben oder andere Größen in das Reading geschrieben werden). Indem dann der event-aggregator auf dieses Reading angewandt wird, werden die erhaltenen Größen bearbeitet - je nach Installation wird dann also das Minimum, das Maximum oder der Median der Werte beim Reading ausgegeben. | Das zu aggregierende [[Reading]] des aktuellen Gerätes. Das Reading selbst muss seine Werte aus einer Aktion oder einem [[Event]] in FHEM erhalten (beispielsweise, indem Temperaturwerte ausgegeben oder andere Größen in das Reading geschrieben werden). Indem dann der event-aggregator auf dieses Reading angewandt wird, werden die erhaltenen Größen bearbeitet - je nach Installation wird dann also das Minimum, das Maximum oder der Median der Werte beim Reading ausgegeben. | ||
Wichtig: Es kann immer nur einen event-aggregator pro Reading geben. Will man daher mehrere Werte (z.B. min, max, avg), muss man weitere Readings erzeugen (z.B. mit userReadings oder notify). Der Aggregator kann als regulärer Ausdruck angegeben werden ( | '''Wichtig''': Es kann immer nur einen event-aggregator pro Reading geben. Will man daher mehrere Werte (z.B. min, max, avg), muss man weitere Readings erzeugen (z.B. mit userReadings oder [[notify]]). Der Aggregator kann als regulärer Ausdruck angegeben werden (bspielsweise <code>.*_rain.*</code>) | ||
=== interval === | === interval === | ||
Updates des <readings> werden ignoriert, Events werden für mindestens <interval> Sekunden unterdrückt. | Updates des <readings> werden ignoriert, Events werden für mindestens <interval> Sekunden unterdrückt. | ||
Nach der | Nach der Interval-periode wird das reading mit einem Wert aktualisiert, der sich aus den Werten und Zeitstempeln der vorher ignorierten Updates zusammensetzt. | ||
=== method === | === method === | ||
betrifft die Gewichtung nach Zeitintervallen | betrifft die Gewichtung nach Zeitintervallen | ||
* <code>none</code>: keine zeitliche Gewichtung | * <code>none</code>: keine zeitliche Gewichtung | ||
Zeile 30: | Zeile 27: | ||
=== function === | === function === | ||
* <code>count</code> Anzahl | * <code>count</code> Anzahl | ||
* <code>min</code> Minimum | * <code>min</code> Minimum | ||
* <code>max</code> Maximum | * <code>max</code> Maximum | ||
* <code>mean</code> | * <code>mean</code> arithmetischer Mittelwert | ||
* <code>sd</code> Standardabweichung | * <code>sd</code> Standardabweichung | ||
* <code>integral</code> Summe (falls holdTime nicht angegeben) oder Integral für den Zeitraum holdTime | * <code>integral</code> Summe (falls holdTime nicht angegeben) oder Integral für den Zeitraum holdTime | ||
* <code>median</code> [https://de.wikipedia.org/wiki/Median Median] (nur für method <code>none</code> und gesetzte holdTime) - im Gegensatz zum Mittelwert nicht anfällig für Ausreisser, hilfreich bei Sensoren mit sporadisch unsinnigen Messwerten | * <code>median</code> [https://de.wikipedia.org/wiki/Median Median] (nur für ''method'' <code>none</code> und gesetzte ''holdTime'') - im Gegensatz zum Mittelwert nicht anfällig für Ausreisser, hilfreich bei Sensoren mit sporadisch unsinnigen Messwerten | ||
=== holdTime === | === holdTime === | ||
Zeitfenster in Sekunden, für die die vergangenen Werte gehalten werden, um die Aggregatfunktion zu berechnen. | Zeitfenster in Sekunden, für die die vergangenen Werte gehalten werden, um die Aggregatfunktion zu berechnen. | ||
== Duplizieren von Readings== | == Duplizieren von Readings== | ||
Wenn mehrere Funktionen für ein Reading berechnet werden sollen, muss dieses Reading zuvor dupliziert werden. | Wenn mehrere Funktionen für ein Reading berechnet werden sollen, muss dieses Reading zuvor dupliziert werden. In der Commandref wird ein notify vorgeschlagen, evtl. können aber auch [[DOIF]]_Readings, event_Readings und userReadings verwendet werden: | ||
In der Commandref wird ein notify vorgeschlagen, evtl. können aber auch | :<code>original_reading:interval:method:function:holdTime</code> | ||
=== DOIF_Readings === | === DOIF_Readings === | ||
TODO! | TODO! | ||
<code> | :<code>original_reading:interval:method:function:holdTime</code> | ||
original_reading:interval:method:function:holdTime | Es gibt mittlerweile auch bei DOIF eine Funktion, die diverse Mittelwerte berechnet. Für alle, die mit event-aggregator hadern, ggf. eine Alternative. | ||
</code> | |||
=== event_Readings === | === event_Readings === | ||
<code> | :<code>attr DOIF-Device event_Readings original_reading:[<Device>:<Reading>], </code> | ||
attr DOIF-Device event_Readings | :<code>copy_1:[$SELF:original_reading], </code> | ||
original_reading:[<Device>:<Reading>], < | :<code><s>copy_2:int(10*[$SELF:copy_1])/10</s> Funktioniert so nicht!!! </code> | ||
copy_1:[$SELF:original_reading], < | :<code>attr DOIF-Device event-aggregator copy_1:interval:method:function:holdTime</code> | ||
<s>copy_2:int(10*[$SELF:copy_1])/10</s> Funktioniert so nicht!!! < | |||
attr DOIF-Device event-aggregator copy_1:interval:method:function:holdTime | |||
</code> | |||
=== userReadings === | === userReadings === | ||
<code> | :<code>attr DOIF-Device userReadings original_reading {ReadingsVal("<Device>","<Reading>",0)}, </code> | ||
attr DOIF-Device userReadings | :<code>copy_1 {ReadingsVal($name,"original_reading",0)}, </code> | ||
original_reading {ReadingsVal("<Device>","<Reading>",0)}, < | :<code>copy_2 {int(10*ReadingsVal($name,"copy_1",0))/10} </code> | ||
copy_1 {ReadingsVal($name,"original_reading",0)}, < | :<code>attr DOIF-Device event-aggregator copy_1:interval:method:function:holdTime</code> | ||
copy_2 {int(10*ReadingsVal($name,"copy_1",0))/10}< | Dabei darf anscheinend kein Leerzeichen zwischen mehreren Readings vorkommen (siehe {{Link2Forum|Topic=114947|Message=1091775|LinkText=diesen Forenbeitrag}}). | ||
attr DOIF-Device event-aggregator copy_1:interval:method:function:holdTime | |||
</code> | |||
Dabei darf anscheinend kein Leerzeichen zwischen mehreren Readings vorkommen | |||
== Wechselwirkungen == | == Wechselwirkungen == | ||
Zeile 79: | Zeile 65: | ||
== Beispiele == | == Beispiele == | ||
; aus der {{Link2CmdRef|Anker=Event-aggregator}} | ; aus der {{Link2CmdRef|Anker=Event-aggregator}} | ||
<code> | :<code>attr myPowerMeter event-aggregator EP_POWER_METER:300:linear:mean,EP_ENERGY_METER:300:none:v:</code> | ||
attr myPowerMeter event-aggregator EP_POWER_METER:300:linear:mean,EP_ENERGY_METER:300:none:v | :<code>attr myBadSensor event-aggregator TEMP::none:median:300:</code> | ||
:<code>attr mySunMeter event-aggregator SUN_INTENSITY_24H::const:integral:86400</code> | |||
attr myBadSensor event-aggregator TEMP::none:median:300 | |||
attr mySunMeter event-aggregator SUN_INTENSITY_24H::const:integral:86400 | |||
</code> | |||
== Siehe auch == | == Siehe auch == | ||
Zeile 91: | Zeile 73: | ||
*[[event-min-interval]] | *[[event-min-interval]] | ||
*[[event-aggregator]] | *[[event-aggregator]] | ||
== Links == | == Links == |
Version vom 19. Januar 2021, 11:01 Uhr
Mit dem Attribut event-aggregator können (nach Wunsch zeitlich gewichtete) Durchschnittswerte, Minima, Maxima oder Median etc. berechnet werden. Der Median kann hilfreich sein, um Messwerte mit Ausreissern (unsinnige Werte, z.B. durch Übertragungsfehler) zu glätten.
Syntax
Das event-aggregator Attribut wird in der folgenden Weise spezifiziert:
attr <device> event-aggregator reading:interval:method:function:holdTime
Mehrere Readings werden als kommagetrennte Liste angegeben.
Die einzelnen Teile haben folgende Bedeutung:
reading
Das zu aggregierende Reading des aktuellen Gerätes. Das Reading selbst muss seine Werte aus einer Aktion oder einem Event in FHEM erhalten (beispielsweise, indem Temperaturwerte ausgegeben oder andere Größen in das Reading geschrieben werden). Indem dann der event-aggregator auf dieses Reading angewandt wird, werden die erhaltenen Größen bearbeitet - je nach Installation wird dann also das Minimum, das Maximum oder der Median der Werte beim Reading ausgegeben.
Wichtig: Es kann immer nur einen event-aggregator pro Reading geben. Will man daher mehrere Werte (z.B. min, max, avg), muss man weitere Readings erzeugen (z.B. mit userReadings oder notify). Der Aggregator kann als regulärer Ausdruck angegeben werden (bspielsweise .*_rain.*
)
interval
Updates des <readings> werden ignoriert, Events werden für mindestens <interval> Sekunden unterdrückt.
Nach der Interval-periode wird das reading mit einem Wert aktualisiert, der sich aus den Werten und Zeitstempeln der vorher ignorierten Updates zusammensetzt.
method
betrifft die Gewichtung nach Zeitintervallen
none
: keine zeitliche Gewichtungconst
: Annahme, dass zwischen den zwei Messpunkten keine Veränderung stattgefunden hatlinear
: Annahme, dass der Wert sich zwischen zwei Messpunkten linear verändert hat.
function
count
Anzahlmin
Minimummax
Maximummean
arithmetischer Mittelwertsd
Standardabweichungintegral
Summe (falls holdTime nicht angegeben) oder Integral für den Zeitraum holdTimemedian
Median (nur für methodnone
und gesetzte holdTime) - im Gegensatz zum Mittelwert nicht anfällig für Ausreisser, hilfreich bei Sensoren mit sporadisch unsinnigen Messwerten
holdTime
Zeitfenster in Sekunden, für die die vergangenen Werte gehalten werden, um die Aggregatfunktion zu berechnen.
Duplizieren von Readings
Wenn mehrere Funktionen für ein Reading berechnet werden sollen, muss dieses Reading zuvor dupliziert werden. In der Commandref wird ein notify vorgeschlagen, evtl. können aber auch DOIF_Readings, event_Readings und userReadings verwendet werden:
original_reading:interval:method:function:holdTime
DOIF_Readings
TODO!
original_reading:interval:method:function:holdTime
Es gibt mittlerweile auch bei DOIF eine Funktion, die diverse Mittelwerte berechnet. Für alle, die mit event-aggregator hadern, ggf. eine Alternative.
event_Readings
attr DOIF-Device event_Readings original_reading:[<Device>:<Reading>],
copy_1:[$SELF:original_reading],
copy_2:int(10*[$SELF:copy_1])/10Funktioniert so nicht!!!attr DOIF-Device event-aggregator copy_1:interval:method:function:holdTime
userReadings
attr DOIF-Device userReadings original_reading {ReadingsVal("<Device>","<Reading>",0)},
copy_1 {ReadingsVal($name,"original_reading",0)},
copy_2 {int(10*ReadingsVal($name,"copy_1",0))/10}
attr DOIF-Device event-aggregator copy_1:interval:method:function:holdTime
Dabei darf anscheinend kein Leerzeichen zwischen mehreren Readings vorkommen (siehe diesen Forenbeitrag).
Wechselwirkungen
- keine bekannt -
Beispiele
- aus der commandref/Event-aggregator
attr myPowerMeter event-aggregator EP_POWER_METER:300:linear:mean,EP_ENERGY_METER:300:none:v:
attr myBadSensor event-aggregator TEMP::none:median:300:
attr mySunMeter event-aggregator SUN_INTENSITY_24H::const:integral:86400
Siehe auch
Links
- Benutzungstipps (Best Practice) für das Attribut in diesem Forenthread