Zeit wieder einmal eine Custom Logik zu teilen. Damit wird auch der FR (mein eigener): viewtopic.php?f=9&t=1085 gelöst.
Funktion:
Der Baustein basiert auf den Standard-Timer-Bausteinen und ergänzt diese um eine Ausgabe der abgelaufenen Zeit bzw. verbleibenden Zeit.
Mittels Umrechnungsfaktor kann die Zeiteinheit der Ein-/Ausgänge angegeben werden. Zusätzlich kann man in der gleichen Zeiteinheit ein zyklisches Senden während aktivem Timer gesetzt werden.
Anwendungsbeidpiel:
Ich verwende solche Timer an mehreren Stellen, zB. Bewässerungslogik.
Während dem Ablauf des Timers (=Zeitprogramm), soll je Bewässerungskreis auch die abgelaufene Zeit in der Visu angezeigt werden.
Auch die verbeibende Zeit (Restdauer des Programmes) soll laufend aktualisiert werden.
Eingänge:
- Start/Stop: Der Timer wird bei Empfang eines "True" gestartet.
- Faktor Zeit: Damit werden die angegebenen Zeitgrößendie intern in Sekunden umgerechnet.
- Faktor 1 für Sekunden
- Faktor 60 für Minuten
- Faktor 3600 für Stunden
- Faktor 86400 für Tage
- Dauer: Legt fest, wie lange der Timer aktiv sein soll.
- Sendeintervall: Gibt an, wie oft die aktuellen Stati gesendet werden sollen.
Hinweis: Soll auch der Ausgang "Timer aktiv" zyklisch gesendet werden, muss die Sendeoption auf "a" (Always" gesetzt werden).
- Timer aktiv: Zeit an, ob der Timer aktiv ist
- Zeit abgelaufen: Gibt jene Zeit aus, die bereits abgelaufen ist
- Dauer verbleibend: Gibt jene Zeit aus, die bis zum Ablauf des TImers verbleibt.
Ein Grafana Ausschnitt, schön zu sehen, dass bei inaktivem Timer auch keine Werte gesendet werden:
Code: Alles auswählen
/**===========================================================
Timer mit Ausgabe abgelaufener Zeit und Restzeit
============================================================*/
{
"Input": [
["Start/Stop","Timer starten mit Wert 1","$I_Timer","c"],
["Faktor Zeit","Umrechungsfaktor [sec/Zeiteinheit] legt die Zeiteinheit für Dauer und Sendeintervall fest. zb 1 für Sekunden, 60 für Minuten, 3600 für Stunden","$I_Faktor","c"],
["Dauer","Nachtbetrieb","$I_Dauer","c"],
["Sendeintervall","Zyklisch Senden wenn Timer=True","$I_Interval","c"]
],
"Output": [
["Timer aktiv","Ausgang","$State","c"],
["Zeit abgelaufen","Dauer","$Time","c"],
["Dauer verbleibend","Restdauer","$Time_Left","c"]
],
"Level": [
["$I_Timer","bool",false],
["$State","bool",false],
["$I_Dauer","float",0],
["$Dauer_sec","float",0],
["$Time_sec","float",0.0],
["$Time","float",0.0],
["$Time_Left_sec","float",0.0],
["$Time_Left","float",0.0],
["$I_Interval","float",30.0],
["$Interval_sec","float",30.0],
["$I_Faktor","float",1.0],
["$Konst1","float",1.0],
["$Konst0","float",0.0],
["$Val_ok","bool",false]
],
"Module": [
// Umrechnung in Sekunden
["Polynomial", "$I_Faktor", "$Dauer_sec",["$Konst0","$I_Dauer"]],
["Polynomial", "$I_Faktor", "$Interval_sec",["$Konst0","$I_Interval"]],
// Timer und Stopuhr in sec starten bzw. Zeit aktualisieren
["Monoflop","$I_Timer","-$I_Timer","$State","$Dauer_sec",2],
["Stopwatch","$I_Timer", "$Time_sec"],
// Restzeit berechnen
["Polynomial", "$Konst1", "$Time_Left_sec",["$Dauer_sec","-$Time_sec"]],
// Zyklischer Trigger, wenn Timer aktiv
["Clocksignal","$I_Timer",0,"$Interval_sec"],
//
// Ausgabewerte in Eingabeeinheit umrechnen
["Limiter","$Time_Left","$Time_Left","$Val_ok",["$Konst0", "$Dauer_sec"]],
["Ratio", "$Time_Left_sec", "$Time_Left", "$I_Faktor"],
["Ratio", "$Time_sec", "$Time", "$I_Faktor"]
]
}
/** 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.
Viel Spaß damit und gerne Rückmeldung, wenn was fehlt oder euch die Sache gefällt.
Robert