Heute ist wieder Samstag, Zeit eine neue Entwicklung zu teilen => Logik für Stromzählerstand oder Regenmengenauswertung.
Update: 22.1.2020: Sendeintervall für Tageszähler und Wochen-/Monats-/Jahreszähler.
Einleitung:
Diese Logik ist ergänzend zur Logik "Leistungberechnung aus Impulszähler mit Telegrammratenbegrenzung" (viewtopic.php?f=65&t=1613) zu sehen, die aus den Impulswerten die aktuelle Leistung oder Regenintensität berechnet.
Die beiden Logiken funktionieren aber unabhängig voneinander.
Funktion:
Nachstehende Logik zählt die eingeheneden Impuls und berechnet auf dieser Basis den aktuellen Zählerstand. Die Zähler für Tag/Woche/Monat und Jahr werden automatisch zum richtigen Zeitpunkt zurückgesetzt. Das Sendeintervall kann für den Tageszähler und die restlichen Zähler getrennt angegeben werden (Hintergrund: so kann man das Zählen in der Visu noch sehen, für die anderen Zähler ist das nicht interessant bzw. die Zahl ohnehin zu groß.)
Typische Anwendung ist die Strom- oder Regenmengenmessung, Voraussetzung ist ein Impulssignal das von 0-1-0-1 wechselt.
Hinweis: Es wird jeder Flankenwechsel gezählt, soll nur jeder Impuls gezählt werden, muss dies im Faktor berücksichtigt werden.
Ein-/Ausgänge:
- Der Impulseingang wird mit dem Impulsgeber verknüpft
- Mit Faktor erfolgt die Umrechnung von Impuls => Menge (im Beispiel im Anhang 0.001, da jeder Impuls 0.001kWh entspricht)
- Min. Interval Tag: Sendeintervall für Tageszähler
- Min. Interval: Sendeintervall für Wochen-/Monats-und Jahreszähler
- Impulszaehler Tag: zeigt die Anzahl der Impulse des aktuellen Tages
- Zählerstand Tag/Woche/Monat Jahr zeigen den jeweiligen Zählerstand an
- Zählerstand Gesamt zeigt den Zählerstand seit Beginn und wird nie zurückgesetzt.
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
Code: Alles auswählen
/**=====================================================================
Zählen von Impulsen und Umrechnung zu Gesamtmenge oder Verbrauch
- Tages/Wochen/Monats/Jahres und Gesamtzähler
- Sendeintervall getrennt für Tageszähler und Wochen/Monats/Jahreszähler.
======================================================================*/
{
"Level": [
["$In","bool",false],
["$In_Last","bool",false],
["$New","bool",false],
["$New1","bool",false],
["$New2","bool",false],
["$ZaehlerTag","integer",0.0],
["$ZaehlerTag2","float",0.0],
["$ZaehlerTag3","float",0.0],
["$ZaehlerTagNeu","integer",0.0],
["$ZaehlerWoche","integer",0.0],
["$ZaehlerWoche2","float",0.0],
["$ZaehlerWoche3","float",0.0],
["$ZaehlerWocheNeu","integer",0.0],
["$ZaehlerMonat","integer",0.0],
["$ZaehlerMonat2","float",0.0],
["$ZaehlerMonat3","float",0.0],
["$ZaehlerMonatNeu","integer",0.0],
["$ZaehlerJahr","integer",0.0],
["$ZaehlerJahr2","float",0.0],
["$ZaehlerJahr3","float",0.0],
["$ZaehlerJahrNeu","integer",0.0],
["$ZaehlerGes","integer",0.0],
["$ZaehlerGes2","float",0.0],
["$ZaehlerGes3","float",0.0],
["$ZaehlerGesNeu","integer",0.0],
["$Faktor","float",2],
["$Interval","float",10.0],
["$Interval2","float",10.0],
["$Delta","integer",0.0],
["$Konst1","float",1.0],
["$Konst0","float",0.0],
["$KonstTrue","bool",true],
["$ResetTag","bool",false],
["$ResetWoche","bool",false],
["$ResetMonat","bool",false],
["$ResetJahr","bool",false],
["$StartZeitTag","string","0 5 0 * * *"],
["$StartZeitWoche","string","1 5 0 * * 1"],
["$StartZeitMonat","string","2 5 0 1 * *"],
["$StartZeitJahr","string","3 5 0 1 1 *"]
],
"Module": [
// Impuls mit altem Wert vergleichen (anderer Trigger?)
["Polynomial","-$Konst1","$Delta",["$In", "$In_Last"]],
["Limiter","$Delta",0,"-$New",["$Konst0","$Konst0"]],
// Anzahl Impuls erhöhen, wenn sich Impuls geändert hat
["Polynomial","$Konst1","$ZaehlerTagNeu",["$ZaehlerTag", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerWocheNeu",["$ZaehlerWoche", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerMonatNeu",["$ZaehlerMonat", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerJahrNeu",["$ZaehlerJahr", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerGesNeu",["$ZaehlerGes", "$Konst1"]],
// Nur addieren, wenn Wert "neu" ist.
["Multiplexer",["$ZaehlerTag","$ZaehlerTagNeu"],"$ZaehlerTag","$New"],
["Multiplexer",["$ZaehlerWoche","$ZaehlerWocheNeu"],"$ZaehlerWoche","$New"],
["Multiplexer",["$ZaehlerMonat","$ZaehlerMonatNeu"],"$ZaehlerMonat","$New"],
["Multiplexer",["$ZaehlerJahr","$ZaehlerJahrNeu"],"$ZaehlerJahr","$New"],
["Multiplexer",["$ZaehlerGes","$ZaehlerGesNeu"],"$ZaehlerGes","$New"],
// Tag Zurücksetzen
["Cron","$KonstTrue","$ResetTag",0,"$StartZeitTag"],
["Multiplexer",["$ZaehlerTag","$Konst0"],"$ZaehlerTag","$ResetTag"],
["Multiplexer",["$ResetTag","$Konst0"],"$ResetTag","$ResetTag"],
// Woche Zurücksetzen
["Cron","$KonstTrue","$ResetWoche",0,"$StartZeitWoche"],
["Multiplexer",["$ZaehlerWoche","$Konst0"],"$ZaehlerWoche","$ResetWoche"],
["Multiplexer",["$ResetWoche","$Konst0"],"$ResetWoche","$ResetWoche"],
// Monat Zurücksetzen
["Cron","$KonstTrue","$ResetMonat",0,"$StartZeitMonat"],
["Multiplexer",["$ZaehlerMonat","$Konst0"],"$ZaehlerMonat","$ResetMonat"],
["Multiplexer",["$ResetMonat","$Konst0"],"$ResetMonat","$ResetMonat"],
// Jahr Zurücksetzen
["Cron","$KonstTrue","$ResetJahr",0,"$StartZeitJahr"],
["Multiplexer",["$ZaehlerJahr","$Konst0"],"$ZaehlerJahr","$ResetJahr"],
["Multiplexer",["$ResetJahr","$Konst0"],"$ResetJahr","$ResetJahr"],
//
// (In_Last = In)
["Polynomial","$Konst1","$In_Last",["$In"]],
// Zahlerstand umrechnen
["Polynomial","$Faktor","$ZaehlerTag2",["$Konst0","$ZaehlerTag"]],
["Polynomial","$Faktor","$ZaehlerWoche2",["$Konst0","$ZaehlerWoche"]],
["Polynomial","$Faktor","$ZaehlerMonat2",["$Konst0","$ZaehlerMonat"]],
["Polynomial","$Faktor","$ZaehlerJahr2",["$Konst0","$ZaehlerJahr"]],
["Polynomial","$Faktor","$ZaehlerGes2",["$Konst0","$ZaehlerGes"]],
// Nur Aktualisieren, wenn Sendebedingung erfüllt ist
["Monoflop","$New","-$KonstTrue","$New2","$Interval2",0],
["Multiplexer",["$ZaehlerTag2","$ZaehlerTag3"],"$ZaehlerTag3","$New2"],
//
["Monoflop","$New","-$KonstTrue","$New1","$Interval",0],
["Multiplexer",["$ZaehlerWoche2","$ZaehlerWoche3"],"$ZaehlerWoche3","$New1"],
["Multiplexer",["$ZaehlerMonat2","$ZaehlerMonat3"],"$ZaehlerMonat3","$New1"],
["Multiplexer",["$ZaehlerJahr2","$ZaehlerJahr3"],"$ZaehlerJahr3","$New1"],
["Multiplexer",["$ZaehlerGes2","$ZaehlerGes3"],"$ZaehlerGes3","$New1"]
],
"Output": [
["Zählerstand Tag","Zählerstand Tag","$ZaehlerTag3","c"],
["Zählerstand Woche","Zählerstand Woche","$ZaehlerWoche3","c"],
["Zählerstand Monat","Zählerstand Monat","$ZaehlerMonat3","c"],
["Zählerstand Jahr","Zählerstand Jahr","$ZaehlerJahr3","c"],
["Zählerstand Gesamt","Zählerstand Gesamt","$ZaehlerGes3","c"],
["New","New","$New","c"],
["Impulszähler Tag","Anzahl der Impulse Tag","$ZaehlerTag","c"],
["Impulszähler Woche","Anzahl der Impulse Woche","$ZaehlerWoche","c"],
["Impulszähler Monat","Anzahl der Impulse Monat","$ZaehlerMonat","c"],
["Impulszähler Jahr","Anzahl der Impulse Jahr","$ZaehlerJahr","c"],
["Impulszähler Gesamt","Anzahl der Impulse Gesamt","$ZaehlerGes","c"]
],
"Input": [
["Impulssignal","Eingang Impulssignal alternierend 1-0-1-0","$In","c"],
["Faktor","Faktor Impulsanzahl => Zählerstand","$Faktor","c"],
["Min. Interval Tag","Mindestzeitinterval zum Senden Tageszähler","$Interval2","c"],
["Min. Interval","Mindestzeitinterval zum Senden Wochen/Monats/Jahreszähler","$Interval","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. */