Seite 1 von 1

Zeitlicher Mittelwert für Tages und Monatsmittelwerte

Verfasst: So Feb 09, 2020 5:33 pm
von Robert_Mini
Hallo zusammen!

Wie angekündigt ein weiterer Baustein zur Mittelwertberechnung für die Auswertung klassischer Mittelwerte wie mittlere Tagestemperatur oder mittlere Monatstemperatur.

Funktion:
Der Baustein berechnet kontinuierlich die Mittelwerte aus den Daten am Eingang, zB aktuelle Temperatur die zyklisch auf den Bus gesendet wird.
Der Tagesmittelwert wird um Mitternacht zurückgesetzt, der Monatsmittelwert um Mitternacht am 1. des Monats.
Hinweis: Persistenz muss aktiviert sein, damit nach einem Reboot o.ä. der Mittelwert korrekt weiter berechnet wird.

Anwendungsbeispiele:
Tagesmittelwert verschiedener Temperaturen, o.ä.

Eingänge:
  • Eingang: Messgröße, die gemittelt werden soll zB ein Temperaturwert.
Ausgänge:
  • Mittelwert Tag aktuell: Laufender Mittelwert des aktuellen Tages, der aus allen empfangenen Werten seit Mitternacht gebildet wird.
  • Mittelwert Vortag: Mittelwert des Vortages, wird nur 1x beim Reset gesetzt und kann zB zum Abspeichern oder Anzeige in der Visu (zB. Vortag) verwendet werden.
  • Mittelwert Monat aktuell (optional über + einblendbar): Laufender Mittelwert des aktuellen Monats, der aus allen empfangenen Werten seit Monatswechsel gebildet wird.
  • Mittelwert Vormonat (optional über + einblendbar): Mittelwert des Vormonats, wird nur 1x beim Reset gesetzt und kann zB zum Abspeichern oder Anzeige in der Visu (zB. Vormonat) verwendet werden.
  • Counter Tag (optional über + einblendbar): Anzahl der Messwerte, aus der der aktuelle Tagesmittelwert gebildet wird.
  • Counter Monat (optional über + einblendbar): Anzahl der Messwerte, aus der der aktuelle Monatsmittelwert gebildet wird.
  • Reset (optional über + einblendbar): Sendet beim Reset 1, danach wieder 0.
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.

Falls wer einen freiwilligen Beitrag zur Motivation leisten will: Klick

Viel Spaß damit und gerne Rückmeldung, wenn was fehlt oder euch die Sache gefällt.
Robert


Der Baustein:

Minimal:
Bild

Mit allen Ausgängen:
Bild

Code: Alles auswählen

/**===========================================================
Zeitliche Mittelwerte mit Reset bei Tages und Monatswechsel 
und Möglichkeit zur Speicherung/Senden des letzten Wertes 
vor dem Reset 
============================================================*/

{
  "Input": [
        ["Eingang","Messgröße","$I_Input","a"]
  ],
  "Output": [
	["Mittelwert Tag aktuell","aktueller Mittelwert seit Tagesreset","$Avg","ct"],
	["Mittelwert Vortag","Mittelwert vor letztem Tagesreset","$Avg_Vortag","ct"],
	["Mittelwert Monat aktuell","Mittelwert seit Monatswechsel","$Avg_Monat?","c"],
	["Mittelwert Vormonat","Mittelwert vor letztem Monatsreset","$Avg_Vormonat?","c"],
	["Counter Tag","Anzahl Werte","$Counter?","c"],
	["Counter Monat","Anzahl Werte","$Counter2_?","c"],
	["Reset","Reset","$Reset?","c"]
  ],
  "Level": [
	["$I_Input","float",0.0],
	["$I_Reset","bool",false],
	["$Sum","float",0.0],
	["$Sum_Monat","float",0.0],
	["$Sum_MonatNeu","float",0.0],
	["$Avg","float",0.0],
	["$Avg_Vortag","float",0.0],
	["$Avg_Monat","float",0.0],
	["$Avg_Vormonat","float",0.0],
	["$Counter","integer",0],
	["$Counter2_","integer",0],
	["$Counter2Neu","integer",0],
	["$Reset","bool",false],
	["$ResetTagTrigger","bool",false],
	["$ResetMonatTrigger","bool",false],
	["$ResetTag","string","30 0 0 2-31 * *"],
	["$ResetMonat","string","30 0 0 1 * *"],
	["$KonstTrue","bool",true],
	["$Konst0","float",0.0],
	["$Konst1","float",1.0],
	["$KonstFalse","bool",false]
  ],
  "Module": [
	// Trigger für Reset
	["Cron","$KonstTrue","$ResetTagTrigger",0,"$ResetTag"],
	["Cron","$KonstTrue","$ResetMonatTrigger",0,"$ResetMonat"],
	["Or" , ["$ResetTagTrigger" , "$ResetMonatTrigger"], "$Reset"],
		
	// Wert auf Vortag speichern
	["Latch","$Avg","$Avg_Vortag","$Reset",0],
		
	// Summe und Counter für Tagmittelwert zurücksetzen
	["Multiplexer",["$Counter","$Konst0"],"$Counter","$Reset"],
	["Multiplexer",["$Sum","$Konst0"],"$Sum","$Reset"],
		
	// Wert auf Vortag speichern
	["Latch","$Avg_Monat","$Avg_Vormonat","$ResetMonatTrigger",0],
		
	// Summe und Counter für Monatsmittelwert zurücksetzen
	["Multiplexer",["$Counter2_","$Konst0"],"$Counter2_","$ResetMonatTrigger"],
	["Multiplexer",["$Sum_Monat","$Konst0"],"$Sum_Monat","$ResetMonatTrigger"],
		
	// Summe um aktuellen Mittelwert erhöhen + Counter+1
	["Polynomial","$Konst1","$Sum",["$Sum","$I_Input"]],
	["Polynomial","$Konst1","$Counter",["$Counter","$Konst1"]],
	// Mittelwert aktualisieren 
	["Ratio", "$Sum", "$Avg", "$Counter"],
	//
	// Wert für Monatsmittel addieren, wenn nicht ResetTag getriggert wurde
	["Polynomial","$Konst1","$Sum_MonatNeu",["$Sum_Monat","$I_Input"]],
	["Polynomial","$Konst1","$Counter2Neu",["$Counter2_","$Konst1"]],
	["Multiplexer",["$Sum_Monat","$Sum_MonatNeu"],"$Sum_Monat","-$ResetTagTrigger"],
	["Multiplexer",["$Counter2_","$Counter2Neu"],"$Counter2_","-$ResetTagTrigger"],
	// Mittelwert aktualisieren 
	["Ratio", "$Sum_Monat", "$Avg_Monat", "$Counter2_"]
  ]
}

/** 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. */

Re: Zeitlicher Mittelwert für Tages und Monatsmittelwerte

Verfasst: So Mär 19, 2023 6:02 pm
von azietz
Hallo zusammen.

erstmal herzlichen Dank an @Robert_Mini für den Beitrag.
Ich habe das für mich nochmal ergänzt und weitere Ausgänge hinzugefügt:
  • Mittelwert Jahr
  • Mittelwert Vorjahr
  • Counter Jahr
  • Maximum Tag
  • Minimum Tag
Alle Ausgänge sind optional aktivierbar.

Hier der Baustein, mit einigen Ausgängen:

Bild

Und hier der Code:

Code: Alles auswählen

/**===========================================================
Zeitliche Mittelwerte mit Reset bei Tages und Monatswechsel 
und Möglichkeit zur Speicherung/Senden des letzten Wertes 
vor dem Reset 
============================================================*/

{
  "Input": [
    ["Eingang","Messgröße","$I_Input","a"]
  ],
  "Output": [
	["Mittelwert Tag aktuell","aktueller Mittelwert seit Tagesreset","$Avg","ct"],
	["Mittelwert Vortag","Mittelwert vor letztem Tagesreset","$Avg_Vortag","ct"],
	["Mittelwert Monat aktuell","Mittelwert seit Monatswechsel","$Avg_Monat?","c"],
	["Mittelwert Vormonat","Mittelwert vor letztem Monatsreset","$Avg_Vormonat?","c"],
	["Mittelwert Jahr aktuell","Mittelwert seit Jahreswechsel","$Avg_Jahr?","c"],
	["Mittelwert Vorjahr","Mittelwert vor letztem Jahressreset","$Avg_Vorjahr?","c"],
	["Counter Tag","Anzahl Werte","$CounterDay?","c"],
	["Maximum Tag","Maximalwert Tag","$MaxDay?","c"],
	["Minimum Tag","Minimalwert Tag","$MinDay?","c"],
	["Counter Monat","Anzahl Werte Monat","$CounterMon?","c"],
	["Counter Jahr","Anzahl Werte Jahr","$CounterJahr?","c"],
	["Reset","Reset","$Reset?","c"]
  ],
  "Level": [
	["$I_Input","float",0.0],
	["$I_Reset","bool",false],
	["$Sum","float",0.0],
	["$Sum_Monat","float",0.0],
	["$Sum_MonatNeu","float",0.0],
	["$Sum_Jahr","float",0.0],
	["$Sum_JahrNeu","float",0.0],
	["$Avg","float",0.0],
	["$MinDay","float",0.0],
	["$MaxDay","float",0.0],
	["$MinMaxNew","bool",false],
	["$Avg_Vortag","float",0.0],
	["$Avg_Monat","float",0.0],
	["$Avg_Vormonat","float",0.0],
	["$Avg_Jahr","float",0.0],
	["$Avg_Vorjahr","float",0.0],
	["$CounterDay","integer",0],
	["$CounterMon","integer",0],
	["$Counter2Neu","integer",0],
	["$CounterJahr","integer",0],
	["$Counter3Neu","integer",0],
	["$Reset","bool",false],
	["$ResetTagTrigger","bool",false],
	["$ResetMonatTrigger","bool",false],
	["$ResetJahrTrigger","bool",false],
	["$ResetTag","string","0 0 8 2-31 * *"],
	["$ResetMonat","string","0 0 8 1 * *"],
	["$ResetJahr","string","0 0 8 1 1 *"],
	["$KonstTrue","bool",true],
	["$Konst0","float",0.0],
	["$Konst1","float",1.0],
	["$KonstFalse","bool",false]
  ],
  "Module": [
	// Trigger für Reset
	["Cron","$KonstTrue","$ResetTagTrigger",0,"$ResetTag"],
	["Cron","$KonstTrue","$ResetMonatTrigger",0,"$ResetMonat"],
	["Cron","$KonstTrue","$ResetJahrTrigger",0,"$ResetJahr"],
	["Or" , ["$ResetTagTrigger" , "$ResetMonatTrigger" ,"$ResetJahrTrigger"], "$Reset"],
		
	// Wert auf Vortag speichern
	["Latch","$Avg","$Avg_Vortag","$Reset",0],
		
	// Summe, Minimal- und Maximalwert und Counter für Tagmittelwert zurücksetzen
	["Multiplexer",["$CounterDay","$Konst0"],"$CounterDay","$Reset"],
	["Multiplexer",["$Sum","$Konst0"],"$Sum","$Reset"],
	["Latch","$I_Input","$MaxDay","$Reset",0],
	["Latch","$I_Input","$MinDay","$Reset",0],
		
	// Wert auf Vormonat speichern
	["Latch","$Avg_Monat","$Avg_Vormonat","$ResetMonatTrigger",0],
	
	// Wert auf Vorjahr speichern
	["Latch","$Avg_Jahr","$Avg_Vorjahr","$ResetJahrTrigger",0],
		
	// Summe und Counter für Monatsmittelwert zurücksetzen
	["Multiplexer",["$CounterMon","$Konst0"],"$CounterMon","$ResetMonatTrigger"],
	["Multiplexer",["$Sum_Monat","$Konst0"],"$Sum_Monat","$ResetMonatTrigger"],

	// Summe und Counter für Jahresmittelwert zurücksetzen
	["Multiplexer",["$CounterJahr","$Konst0"],"$CounterJahr","$ResetJahrTrigger"],
	["Multiplexer",["$Sum_Jahr","$Konst0"],"$Sum_Jahr","$ResetJahrTrigger"],
	
	// Summe um aktuellen Mittelwert erhöhen + CounterDay+1
	["Polynomial","$Konst1","$Sum",["$Sum","$I_Input"]],
	["Polynomial","$Konst1","$CounterDay",["$CounterDay","$Konst1"]],
	// Mittelwert aktualisieren 
	["Ratio", "$Sum", "$Avg", "$CounterDay"],
	//
	// Wert für Monatsmittel addieren, wenn nicht ResetTag getriggert wurde
	["Polynomial","$Konst1","$Sum_MonatNeu",["$Sum_Monat","$I_Input"]],
	["Polynomial","$Konst1","$Counter2Neu",["$CounterMon","$Konst1"]],
	["Multiplexer",["$Sum_Monat","$Sum_MonatNeu"],"$Sum_Monat","-$ResetTagTrigger"],
	["Multiplexer",["$CounterMon","$Counter2Neu"],"$CounterMon","-$ResetTagTrigger"],

	// Wert für Jahresmittel addieren, wenn nicht ResetMonat getriggert wurde
	["Polynomial","$Konst1","$Sum_JahrNeu",["$Sum_Jahr","$I_Input"]],
	["Polynomial","$Konst1","$Counter3Neu",["$CounterJahr","$Konst1"]],
	["Multiplexer",["$Sum_Jahr","$Sum_JahrNeu"],"$Sum_Jahr","-$ResetTagTrigger"],
	["Multiplexer",["$CounterJahr","$Counter3Neu"],"$CounterJahr","-$ResetTagTrigger"],
		
	
	// Mittelwert aktualisieren 
	["Ratio", "$Sum_Monat", "$Avg_Monat", "$CounterMon"],
	["Ratio", "$Sum_Jahr", "$Avg_Jahr", "$CounterJahr"],
	
	//Minimalwert ermitteln
	["Comparator" , "$MinDay" , "$MinMaxNew" , "$I_Input"],
	["Latch","$I_Input","$MinDay","$MinMaxNew",0],
	
	//Maximalwert ermitteln
	["Comparator" , "$I_Input" , "$MinMaxNew" , "$MaxDay"],
	["Latch","$I_Input","$MaxDay","$MinMaxNew",0]
  ]
}

/** 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. */
Ich nutze den Reset-Ausgang mit einer zusätzlichen Logik zur Ermittlung des Tagesverbrauchs im Zusammenhang mit einem Zähler.

Bild

Hier noch der Code zu der einfachen Logik

Code: Alles auswählen

/**===========================================================
Differenz zwischen zwei Werten eines Eingangs zu einem Zeitpunkt
============================================================*/

{
  "Input": [
    ["Eingang","Eingangswert","$I_Input","a"],
    ["Trigger","Trigger","$I_Trigger","a"]
  ],
  "Output": [
	["Last","letzter Wert seit Trigger","$Last","ct"],
	["Differenz","Differenz akt. und letzter Wert","$Diff","ct"]
  ],
  "Level": [
	["$I_Input","float",0.0],
	["$I_Trigger","bool",false],
	["$Diff","float",0.0],
	["$Last","float",0.0],
	["$KonstTrue","bool",true],
	["$Konst0","float",0.0],
	["$Konst1","float",1.0],
	["$Konst-1","float",-1.0],
	["$KonstFalse","bool",false]
  ],
  "Module": [

	// Wert auf letzten Wert speichern
	["Latch","$I_Input","$Last","$I_Trigger",0],
		
	// Differenz bilden
	["Polynomial","$Konst-1","$Diff",["$I_Input","$Last"]]
  ]
}

/** 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. */
Für Fragen, Kritik, Ergänzungen ... stehe ich gerne zur Verfügung.

Viel Spaß und noch einen schönen Sonntag!

Arno

Re: Zeitlicher Mittelwert für Tages und Monatsmittelwerte

Verfasst: So Mär 19, 2023 6:09 pm
von Robert_Mini
Hallo Arno!

Super Arbeit und Danke für's Teilen!
Sauber gelöst und dokumentiert - gefällt mir!

Verwendet du den Baustein nur für Temperaturen oder auch für andere Messwerte?

lg
Robert

Re: Zeitlicher Mittelwert für Tages und Monatsmittelwerte

Verfasst: So Mär 19, 2023 6:27 pm
von azietz
Hallo Robert,

ich teile das gerne. Ich denke da haben alle was davon.

Ich nutze die Logik für verchiedene Werte:
  • Brennerleistung
  • elektrische Leistung
  • Gasdurchfluß
  • Temperatur
Die Werte kommen aus der Heizungs- und Zähleranbindung.

Arno

Re: Zeitlicher Mittelwert für Tages und Monatsmittelwerte

Verfasst: Fr Mär 31, 2023 7:54 pm
von strippe186
Hallo Robert,
in dem letzten Code ist in der letzten Modul-Zeile ein Komma zu viel.

Gruß
Bernd