UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[NEUHEIT] Zeitlicher Mittelwert für Tages und Monatsmittelwerte

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

Zeitlicher Mittelwert für Tages und Monatsmittelwerte

#1

Beitrag 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. */
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

azietz
Reactions:
Beiträge: 16
Registriert: Do Mär 14, 2019 12:46 pm
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 37 Mal

#2

Beitrag 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
Zuletzt geändert von Robert_Mini am Fr Mär 31, 2023 8:19 pm, insgesamt 1-mal geändert.
-----------------------------------------------
TWS3500 id: 908 VPN offen Reboot nach Rücksprache
TWS3500 id: 1089 VPN offen Reboot nach Rücksprache

KNX seit 1993
wiregate seit 2015
timberwolf seit 2019

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#3

Beitrag 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
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

azietz
Reactions:
Beiträge: 16
Registriert: Do Mär 14, 2019 12:46 pm
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 37 Mal

#4

Beitrag 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
-----------------------------------------------
TWS3500 id: 908 VPN offen Reboot nach Rücksprache
TWS3500 id: 1089 VPN offen Reboot nach Rücksprache

KNX seit 1993
wiregate seit 2015
timberwolf seit 2019

strippe186
Reactions:
Beiträge: 124
Registriert: Fr Aug 24, 2018 3:29 pm
Hat sich bedankt: 33 Mal
Danksagung erhalten: 38 Mal

#5

Beitrag von strippe186 »

Hallo Robert,
in dem letzten Code ist in der letzten Modul-Zeile ein Komma zu viel.

Gruß
Bernd
Bernd
TW2600 #197
Antworten

Zurück zu „Zusätzliche Logikbausteine“