Ich habe einen Regensensor, welcher an einem Binäreingang hängt. Der Eingang ist als Zähler konfiguriert, zählt also bei jedem Impulseingang um eins hoch. Wenn das KNX-Device neu programmiert wird, fängt der Zähler aber wieder bei Null an, was natürlich dann in den Grafana-Auswertungen überhaupt nicht mehr passt (da ich dort mit der tollen Differenz-Funktion die Regenmenge ermittle). Und da ich ein 12fach KNX-Gerät habe kann es eben schon mal vorkommen, dass das Device neu programmiert werden muss.
Die Logik hier macht folgendes:
- Der Zählerwert kann mit einem beliebigen Faktor umgerechnet (bei mir z.B. 0.518 pro Impulseingang)
- Wenn der Zählerstand zurückgesetzt wird und wieder von 0 beginnt, so wird der Gesamtwert dennoch richtig weitergerechnet
- Initiale Werte können ggf. als Parameter im Code übergeben werden
WICHTIG: Logik Persistent aktivieren ist wichtig, damit die Zählerstände auch einen Reset überlegen.
Allfällige Codeoptimierungen sind willkommen.
Code: Alles auswählen
/**=====================================================================
Logik zur Verarbeitung von Zählerwerten, z.B. einem Regensensor.
Der Zählerwert kann mit einem Faktor umgerechnet werden. Bei
Rest des Zählerstandes (z.B. durch Programmierung des KNX-Gerätes)
zählt der Gesamtwert korrekt weiter.
Initiale Werte (Zählerstand, Gesamtwert) können übergeben werden
direkt im Code
======================================================================*/
{
"Level":[
// in diese beiden Variablen hier können ggf. initiale Werte
// übergeben werden
["$Z_gesamt","float",0.0],
["$Z_alt","float",0.0],
// ab hier keine Anpassung mehr
["$Z_neu","float",0.0],
["$Z_delta","float",0.0],
["$Z_offset","float",0.0],
["$Konst_X","float",1.0],
["$Min","float",0.0],
["$Val_ok","bool",false],
["$Trigger","bool",false],
["$Out_val","float",0.0],
["$Out_temp","float",0.0],
["$Faktor","float",1.0]
],
"Module":[
// Prüfen ob Zähler neu <= Zöhler alt ist
["Limiter","$Z_neu","$Out_val","$Val_ok",["$Min", "$Z_alt"]],
// Delta zwischen Zähler alt und Zähler neu
["Polynomial", "$Konst_X", "$Z_delta",["-$Z_alt", "$Z_neu"]],
//Auswahl des Wertes für Offset. Entweder Delta oder neuer Wert (i.d.R. 0)
["Multiplexer",["$Z_delta","$Z_neu"],"$Z_offset","$Val_ok"],
// Zähler Offset zu gesamt addieren
["Polynomial", "$Faktor", "$Z_gesamt",["$Z_gesamt", "$Z_offset"]],
// Trigger zum alten Werte überschreiben
["Limiter","$Z_offset","$Out_temp","-$Trigger",["$Min", "$Min"]],
// Zähler alt korrekt setzen
["Latch","$Z_neu","$Z_alt","$Trigger",0]
],
"Input":[
["Zählerstand","Eingang Zählerstand","$Z_neu","c"],
["Faktor","Faktor für Umrechnung Gesamtzähler","$Faktor","c"]
],
"Output":[
["Gesamtwert","Ausgang Gesamtwert","$Z_gesamt","c"],
["Zähler-Reset","Zähler zurückgesetzt","$Val_ok","c"]
]
}
/**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. */
zu finden z.B. mit dem Suchbegriff "Misol WH-SP-RG"
Gruss
Dani