Seite 1 von 2

Logik zur Werteaggregierung

Verfasst: Fr Okt 29, 2021 10:18 am
von EarlBacid
Hallo zusammen,

wie ich hier beschrieben habe, habe ich nun meinen Smappee Energiemonitor via MQTT mit meinem Wolf verbunden. Allerdings werden die Werte im Sekundentakt geliefert (nicht einstellbar) und ich habe die Befürchtung, dass ich damit früher oder später die InfluxDB oder die Auswertung in Grafana überstrapaziere.

Ich suche nun eine Logik, die diese Werte auf einem Eingang im Sekundentakt annimmt und daraus einen Mittelwert der z.B. letzten 10 Sekunden bildet, und diesen dann alle 10 Sekunden auf den Ausgang gibt.

Hat jemand eine Idee wie man das realisieren könnte? Am liebsten mit einem Standardbaustein, zur Not aber auch mit einer Custom Logik.

VG
Earl

Re: Logik zur Werteaggregierung

Verfasst: Fr Okt 29, 2021 11:24 am
von Dragonos2000
Wie wäre es mit einem Tiefpass eingangsseitig und senden des Outputs per Timer?

Re: Logik zur Werteaggregierung

Verfasst: Fr Okt 29, 2021 2:44 pm
von EarlBacid
top, funktioniert!

und nach ein wenig Suchen im Forum habe ich auch entsprechende Anleitung gefunden:
viewtopic.php?f=24&t=1524&p=15889&hilit=tiefpass#p15889

VG
Earl

Re: Logik zur Werteaggregierung

Verfasst: Fr Okt 29, 2021 3:03 pm
von terseek
Dragonos2000 hat geschrieben: Fr Okt 29, 2021 11:24 am Tiefpass
Ob man das so machen kann hängt davon ab, was Du mit den Werten anfangen möchtest. Wenn Du den zeitlichen Verlauf der Leistung beobachten möchtest, ist diese Lösung wahrscheinlich gut genug.

Wenn Du allerdings aus den Leistungswerten Deinen Energieverbrauch bestimmen willst könnte der Tiefpass Fehler verursachen. Dazu würdest Du nämlich genau den Durchnittswert der Einzelwerte benötigen und ob der Tiefpass das liefert ist mindestens fraglich und müsste ggf. geklärt werden.

Re: Logik zur Werteaggregierung

Verfasst: So Okt 31, 2021 1:20 am
von EarlBacid
@terseek hast du denn eine bessere Idee? So für den Fall, dass ich darüber den Energieverbrauch bestimmen wollte?

VG
Earl

Re: Logik zur Werteaggregierung

Verfasst: So Okt 31, 2021 7:07 am
von Robosoc
Ich denke, das wird ohne Customlogik nicht gehen...
Zumindest wenn man annehmen darf dass der Wert wirklich genau 1x je Sekunde geliefert wird. Wenn man jedoch (um die Genauigkeit zu erhöhen) auch Zeitstempel nutzen will, wird es komplizierter...denn ich denke mal der Leistubgszähler liefert keinen Zeitstempel auf einem zweiten GA, oder?

Re: Logik zur Werteaggregierung

Verfasst: So Okt 31, 2021 9:15 am
von terseek
EarlBacid hat geschrieben: So Okt 31, 2021 1:20 am hast du denn eine bessere Idee?
Leider nein, habe zwar schon ein paar ganz einfache Logiken im Einsatz, aber was Du hier brauchst übersteigt meine Fähigkeiten.

Re: Logik zur Werteaggregierung

Verfasst: So Okt 31, 2021 10:45 am
von EarlBacid
@Robosoc die Werte kommen über MQTT im Json Format und beinhalten tatsächlich auch jeweils einen Timestamp.
Der update Intervall ist sollte exakt eine Sekunde sein. Da der Timestamp aber eine Genauigkeit von nur einer Sekunde hat, wird die vermutlich nicht sonderlich hilfreich sein.
Von dem her wäre ein durchschnitt über die letzten x Werte hinreichend genau für meinen Anwendungsfall.

Re: Logik zur Werteaggregierung

Verfasst: So Okt 31, 2021 2:28 pm
von Robosoc
Sollte funktionieren...Du kannst über einen Eingang die Sprungweite einstellen...zum Testen habe ich da mit dem Wert 3 und 5 gearbeitet. Default ist 10, falls Du nichts vorgibst.

Code: Alles auswählen

/**
* Durchschnitt über Anzahl von Werten berechnen / Wert-Aggregation
* https://forum.timberwolf.io/viewtopic.php?f=24&t=3025&sid=879f2f2e9efcd6fc4c2058b515b49af7
*
* Nutzungsrechte:
* Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. 
*/

{
  "Level": [
   	 ["$In","float",0.0],
    	["$Mittel","float",0.0],
	["$Integral","float",0.0],
    	["$Zwischenwert","float",0.0],
    	["$n","integer",10],
	["$counter","integer",0],
	["$counter+1","integer",0],
    	["$Reset","bool",false],
	["$const_1","integer",1],
    	["$VAR<Inhibit?>","bool",false]
  ],
  "Module": [
	["Break", ["$VAR<Inhibit?>"]],
	["Polynomial", "$In", "$Integral",["$Integral", "$const_1"]],
	["Polynomial", "$const_1", "$counter",["$counter", "$const_1"]],
    	["Ratio" , "$Integral" , "$Zwischenwert" , "$counter"],
	["Polynomial", "$const_1", "$counter+1",["$counter", "$const_1"]],
	["Comparator" , "$counter+1" , "$Reset" , "$n"],
	["Latch","$Zwischenwert","$Mittel","$Reset",1],
	["Latch",0,"$counter","$Reset",1],
	["Latch",0,"$Integral","$Reset",1]
  ],  
  "Input": [
    	["Messwert","Eingang, der regelmässig mit einem neuen Wert versorgt wird.","$In","a"],
    	["Anzahl Werte","Anzahl der Werte, über die der Durchschnitt gerechnet werden soll","$n","u"],
    	["Inhibit","Inhibit","$VAR<Inhibit?>","u"]
  ],
  "Output": [
	["Mittelwert","","$Mittel","c"],
	["Zwischenwerte","","$Zwischenwert?","c"]
  ]
}

Re: Logik zur Werteaggregierung

Verfasst: So Okt 31, 2021 9:11 pm
von EarlBacid
@Robosoc besten Dank, die Custom Logik funktioniert einwandfrei.

Hier auch gleich mal ein Screenshot der den Unterschied der Custom Logik (blau) zur Tiefpass Logik (rot) zeigt. Beide sind so eingestellt, dass sie die sekündlich ankommenden Werte (grün) in eine 10 Sekunden Aggregation zusammenfassen.

zum einen läuft die Tiefpass Logik dem zeitlichen Verlauf nochmals mindestens eine Iteration weiter hinter her. Zum anderen scheint der Tiefpass mit der momentanen Einstellung unter Umständen sensibel für sich regelmäßig wiederholende Spitzen zu sein.
Bild