Seite 1 von 1

Advanced Betriebsstundenzaehler

Verfasst: Do Feb 06, 2020 11:43 pm
von Robert_Mini
Hallo zusammen!

Ein weiterer Bausteine ist fertig!

Funktion:
Der Baustein erweitert den Standard Betriebsstundenzaehler auf einen Tages/Monatszähler. Zusätzlich kann das zyklische Sendeintervall getrennt für Zustand Ein/Aus angegeben werden (Hintergrund: im Zustand Aus ändert sich der Zählerstand nicht, so dass ein selteneres Senden ausreichend ist)
2 Weitere Ausgänge senden nicht zyklisch, sondern nur beim Tages-Reset (zB zum Speichern in csv-File).

Anwendungsbeispiele:
Betriebsstundenzähler für Wärmepumpe, Waschmaschine, etc. - alle was seinen Status mit 0/1 auf den Bus sendet.

Eingänge:
  • Aktiv: Status des zu messenden Gerätes.
    Zyklisch Senden: Aktiviert das zyklische Senden
    Sendeintervall 1: Sendeintervall im Zustand EIN
    Sendeintervall 2: Sendeintervall im Zustand AUS
Ausgänge:
  • Betriebsstunden Tag: Tageszähler, wird um Mitternacht zurückgesetzt. Der Wert wird entsprechend Sendeintervall zyklisch und beim Statuswechsel des Eingangs "Aktiv" gesendet.
  • Betriebsstunden Monat: Monatszähler, wird bei Monatswechsel um Mitternacht zurückgesetzt. Der Wert wird entsprechend Sendeintervall zyklisch und beim Statuswechsel des Eingangs "Aktiv" gesendet.
  • Betriebsstunden Tag1: Tageszähler, sendet seinen Wert nur beim Reset.
  • Betriebsstunden Monat1: Monatszähler, sendet seinen Wert nur täglich beim Tagesreset.

Der Baustein:

Bild

Code: Alles auswählen

/**===========================================================
Betriebsstundenzähler für Tages-/Monatsbetriebsdauer 
============================================================*/
{
  "Input": [
        ["Aktiv","True wenn in Betrieb","$I_State","c"], 
		["Zyklisch Senden","Sendeintervalle aktivieren","$I_Interval_Enable","c"],
		["Sendeintervall 1","Sendeintervall im Zustand EIN","$I_Interval_On","c"],
		["Sendeintervall 2","Sendeintervall im Zustand AUS","$I_Interval_Off","c"]
  ],
  "Output": [
		["Betriebsstunden Tag","Betriebsdauer in h seit Tageswechsel","$Betriebsdauer_Tag","ct"],
		["Betriebsstunden Monat","Betriebsdauer in h seit Monatswechsel","$Betriebsdauer_MonatNeu","ct"],
		["Betriebsstunden Tag1","Betriebsdauer in h seit Monatswechsel, sendet 1x/Tag beim Reset","$Betriebsdauer_TagLast","c"],
		["Betriebsstunden Monat1","Betriebsdauer in h seit Monatswechsel, sendet 1x/Tag beim Reset","$Betriebsdauer_MonatLast","c"]
  ],
  "Level": [
		["$I_State","bool",false],
		["$Reset","bool",false],	
		["$ResetTag","bool",false],	
		["$ResetMonat","bool",false],	
		["$Betriebsdauer_Tag","float",0.11],
		["$Betriebsdauer_TagLast","float",0.0],
		["$Betriebsdauer_Monat","float",0.32],
		["$Betriebsdauer_MonatNeu","float",0.0],
		["$Betriebsdauer_MonatLast","float",0.0],
		["$KonstTrue","bool",true],
		["$KonstFalse","bool",false],
		["$Konst1","float",1.0],
		["$Konst0","float",0.0],
		["$I_Interval_Enable","bool",true],
		["$I_Interval_On","float",15.0],
		["$I_Interval_Off","float",60.0],
		["$I_Interval","float",10.0],
		["$Interval","float",3600.0],
		["$Interval_Reset","float",0.1],
		["$StartZeitTag","string","3 0 0 2-31 * *"],
		["$StartZeitMonat","string","3 0 0 1 * *"]
  ],
  "Module": [
		//Sendeintervall setzen (abhängig aktiv/inaktiv)
		["Multiplexer",["$I_Interval_Off","$I_Interval_On"],"$I_Interval","$I_State"],
		// Betriebsdauer aktualisieren
		["HobbsMeter","$I_State","$Betriebsdauer_Tag","$Reset"],
		
		// ResetTag auf 0 setzen (wurde im letzten Aufruf vom Cron aktiviert )
		["Multiplexer",["$ResetTag","$KonstFalse"],"$ResetTag","$ResetTag"],
		
		// Monatszaehler zurücksetzen und ResetMonat auf 0 setzen 
		["Multiplexer",["$Betriebsdauer_Monat","$Konst0"],"$Betriebsdauer_Monat","$ResetMonat"],
		["Multiplexer",["$ResetMonat","$KonstFalse"],"$ResetMonat","$ResetMonat"],
		
		// Timer für Reset Tag/Monat, sendet nochmal die letzten Werte und triggert einen erneuten Aufruf
		["Cron","$KonstTrue","$ResetTag",0,"$StartZeitTag"],
		["Cron","$KonstTrue","$ResetMonat",0,"$StartZeitMonat"],
		["Or" , ["$ResetTag" , "$ResetMonat"], "$Reset"],
		// Bei Reset nochmaligen Aufruf triggern => Intervall verkürzen!
		["Multiplexer",["$I_Interval","$Interval_Reset"],"$Interval","$Reset"],
		
		// Tageszähler laufend zum aktuellen Monatsstand (bis Vortag) addieren
		["Polynomial","$Konst1","$Betriebsdauer_MonatNeu",["$Betriebsdauer_Monat", "$Betriebsdauer_Tag"]],
		
		// Beim Triggern von Reset täglich Monatszaehler speichern
		["Multiplexer",["$Betriebsdauer_Monat","$Betriebsdauer_MonatNeu"],"$Betriebsdauer_Monat","$Reset"],
		// beim Reset letzten Tages-/Monatswert aktualisieren (und senden)
		["Multiplexer",["$Betriebsdauer_MonatLast","$Betriebsdauer_MonatNeu"],"$Betriebsdauer_MonatLast","$Reset"],
		["Multiplexer",["$Betriebsdauer_TagLast","$Betriebsdauer_Tag"],"$Betriebsdauer_TagLast","$Reset"],
	
		// Clocksignal für Sendeintervall
		["Clocksignal","$I_Interval_Enable",0,"$Interval"]
  ]
}


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

Re: Advanced Betriebsstundenzaehler

Verfasst: Mi Feb 10, 2021 8:21 am
von Robert_Mini
Hallo zusammen!

Ich habe vor einigen Wochen eine Anfrage bezüglich Erweiterung um einen Jahreszähler bekommen und diesen Wunsch umgesetzt.
Betriebsstundenzähler.png

Code: Alles auswählen

{
  "Input": [
        ["Aktiv","True wenn in Betrieb","$I_State","c"], 
		["Zyklisch Senden","Sendeintervalle aktivieren","$I_Interval_Enable","c"],
		["Sendeintervall 1","Sendeintervall im Zustand EIN","$I_Interval_On","c"],
		["Sendeintervall 2","Sendeintervall im Zustand AUS","$I_Interval_Off","c"]
  ],
  "Output": [
		["Betriebsstunden Tag","Betriebsdauer in h seit Tageswechsel","$Betriebsdauer_Tag","ct"],
		["Betriebsstunden Monat","Betriebsdauer in h seit Monatswechsel","$Betriebsdauer_MonatNeu","ct"],
        ["Betriebsstunden Jahr","Betriebsdauer in h seit Jahresswechsel","$Betriebsdauer_JahrNeu","ct"],
		["Betriebsstunden Tag1","Betriebsdauer in h seit Monatswechsel, sendet 1x/Tag beim Reset","$Betriebsdauer_TagLast","c"],
		["Betriebsstunden Monat1","Betriebsdauer in h seit Monatswechsel, sendet 1x/Tag beim Reset","$Betriebsdauer_MonatLast","c"],
		["Betriebsstunden Jahr1","Betriebsdauer in h seit Jahreswechsel, sendet 1x/Tag beim Reset","$Betriebsdauer_JahrLast","c"]
  ],
  "Level": [
		["$I_State","bool",false],
		["$Reset","bool",false],	
		["$ResetTag","bool",false],	
		["$ResetMonat","bool",false],
		["$ResetJahr","bool",false],
		["$Betriebsdauer_Tag","float",0.0],
		["$Betriebsdauer_TagLast","float",0.0],
		["$Betriebsdauer_Monat","float",0.0],
		["$Betriebsdauer_MonatNeu","float",0.0],
		["$Betriebsdauer_MonatLast","float",0.0],
		["$Betriebsdauer_Jahr","float",0.0],
		["$Betriebsdauer_JahrNeu","float",0.0],
		["$Betriebsdauer_JahrLast","float",0.0],
		["$KonstTrue","bool",true],
		["$KonstFalse","bool",false],
		["$Konst1","float",1.0],
		["$Konst0","float",0.0],
		["$I_Interval_Enable","bool",true],
		["$I_Interval_On","float",15.0],
		["$I_Interval_Off","float",60.0],
		["$I_Interval","float",10.0],
		["$Interval","float",3600.0],
		["$Interval_Reset","float",0.1],
		["$StartZeitTag","string","22 0 0 2-31 * *"],
		["$StartZeitMonat","string","22 0 0 1 2-12 *"],
		["$StartZeitJahr","string","22 0 0 1 1 *"]
  ],
  "Module": [
		//Sendeintervall setzen (abhängig aktiv/inaktiv)
		["Multiplexer",["$I_Interval_Off","$I_Interval_On"],"$I_Interval","$I_State"],
		// Betriebsdauer aktualisieren
		["HobbsMeter","$I_State","$Betriebsdauer_Tag","$Reset"],
		
		// ResetTag auf 0 setzen (wurde im letzten Aufruf vom Cron aktiviert )
		["Multiplexer",["$ResetTag","$KonstFalse"],"$ResetTag","$ResetTag"],
		
		// Monats-/Jahreszaehler zurücksetzen und ResetMonat auf 0 setzen 
		["Multiplexer",["$Betriebsdauer_Monat","$Konst0"],"$Betriebsdauer_Monat","$ResetMonat"],
		["Multiplexer",["$Betriebsdauer_Jahr","$Konst0"],"$Betriebsdauer_Jahr","$ResetJahr"],
		["Multiplexer",["$ResetMonat","$KonstFalse"],"$ResetMonat","$ResetMonat"],
		["Multiplexer",["$ResetJahr","$KonstFalse"],"$ResetJahr","$ResetJahr"],
		
		// Timer für Reset Tag/Monat, sendet nochmal die letzten Werte und triggert einen erneuten Aufruf
		["Cron","$KonstTrue","$ResetTag",0,"$StartZeitTag"],
		["Cron","$KonstTrue","$ResetMonat",0,"$StartZeitMonat"],
		["Cron","$KonstTrue","$ResetJahr",0,"$StartZeitJahr"],
		["Or" , ["$ResetTag" , "$ResetMonat", "$ResetJahr"], "$Reset"],
		// Bei Reset nochmaligen Aufruf triggern => Intervall verkürzen!
		["Multiplexer",["$I_Interval","$Interval_Reset"],"$Interval","$Reset"],
		// Bei Reset Jahr auch Monat zurücksetzen
		["Latch","$KonstTrue","$ResetMonat","$ResetJahr",0],
		
		// Tageszähler laufend zum aktuellen Monatsstand (bis Vortag) addieren
		["Polynomial","$Konst1","$Betriebsdauer_MonatNeu",["$Betriebsdauer_Monat", "$Betriebsdauer_Tag"]],
		["Polynomial","$Konst1","$Betriebsdauer_JahrNeu",["$Betriebsdauer_Jahr", "$Betriebsdauer_Tag"]],
		
		// Beim Triggern von Reset täglich Monatszaehler speichern
		["Multiplexer",["$Betriebsdauer_Monat","$Betriebsdauer_MonatNeu"],"$Betriebsdauer_Monat","$Reset"],
		["Multiplexer",["$Betriebsdauer_Jahr","$Betriebsdauer_JahrNeu"],"$Betriebsdauer_Jahr","$Reset"],		
		// beim Reset letzten Tages-/Monatswert aktualisieren (und senden)
		["Multiplexer",["$Betriebsdauer_MonatLast","$Betriebsdauer_MonatNeu"],"$Betriebsdauer_MonatLast","$Reset"],
		["Multiplexer",["$Betriebsdauer_JahrLast","$Betriebsdauer_JahrNeu"],"$Betriebsdauer_JahrLast","$Reset"],
		["Multiplexer",["$Betriebsdauer_TagLast","$Betriebsdauer_Tag"],"$Betriebsdauer_TagLast","$Reset"],
		
		// Clocksignal für Sendeintervall
		["Clocksignal","$I_Interval_Enable",0,"$Interval"]
  ]
}
//*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: Advanced Betriebsstundenzaehler

Verfasst: So Dez 15, 2024 10:45 pm
von eib-eg
Ich möchte mich für diese Logik bedanken und gleichzeitig nach oben holen da sie perfekt funktioniert :dance: :bow-yellow: :bow-yellow: .
Danke an @Robert_Mini
Aufgezeichnet werden die Brennerstunden der Heizung und mit dem Temperaturen verglichen und in Grafana übereinandergelegt.

Als nächstes wird vermitlich bei einem Leuchtmittelwechsel wegen Lebensdauer auch aufgezeichnet.
Hier währe dann interesant auf 0 zurücksetzen zu können oder eine neue zu erstellen.
Was haltet ihr davon?