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