Nachfolgend möchte ich Euch drei Skripte für die Verwendung mit der Zählersensor-Sendeeinheit, HM-ES-TX-WM, zur Ermittlung des täglichen Strom-, Gas- und Wasserverbrauchs vorstellen. Dazu wird um eine einstellbare Zeit (vorzugsweise 23:59 Uhr) das WebUI-Programm "UG HWR PRG Energiezähler" ausgeführt, das die drei Skripte im Dann-Zweig enthält.
Jedes Skript legt automatisch jeweils drei Systemvariablen "UG HWR SV XXXverbrauch Tag", "UG HWR SV XXXverbrauch Liste" und "UG HWR SV XXXzähler Stand" an, sofern diese noch nicht existieren, wobei "XXX" für "Strom", "Gas" oder "Wasser" steht.
Die Namen der Systemvariablen können selbstverständlich individuell in den Skripten durch entsprechendes Setzen der lokalen Skriptvariablen "svDay", "svList" und "svValue" angepasst werden. Bei mir unterliegt die Nomenklatur sämtlicher Geräte, Kanäle, Programme, Systemvariablen und virtuellen Kanäle der Systematik "Ort Typ Funktion", wobei "Typ" mit "PRG", "SV" oder "VT" belegt wird. Dies hat den Vorteil, dass es keine Doppelbezeichnungen geben kann und ich immer eine schnelle und eindeutige Zuordnung erziele.
ACHTUNG: Ab Version 3.4 sind die bis dahin benutzten Systemvariablen "UG HWR SV XXXverbrauch Woche" nicht mehr gültig, da sie durch die neuen Systemvariablen "UG HWR SV XXXverbrauch Liste" ersetzt wurden. Ihr müsst also die Systemvariablen "UG HWR SV XXXverbrauch Woche" manuell löschen und das Zählerprogramm ein Mal manuell starten, um die Sytemvariablen automatisch anlegen zu lassen (siehe unter Ersteinrichtung).
Man kann festlegen, an welchen Tagen eine Push-Nachricht mit den Energieverbräuchen gesendet werden soll und welchen zurückliegenden Zeitraum diese abdecken soll.
Code: Alles auswählen
! +++++ Liste der Wochen- oder Monatstage, an dem eine Push-Nachricht gesendet werden soll (Trennung beliebig) +++++
! z.B. "1 6 10 20", "1 Sonntag", "Montag Mittwoch Freitag", "täglich"; keine Nachricht: ""
string sendDatesList = "1 15 Sonntag";
! +++++ Anzahl der Tage, für die die zurückliegenden Verbrauchswerte angezeigt werden sollen +++++
integer numDays = 14;
Da die Listen in den jeweiligen Systemvariablen erst sukzessive mit jedem Tag gefüllt werden, kann es die in "numDays" eingetragene Anzahl von Tagen dauern, bis die zugehörigen Push-Nachrichten vollständig angezeigt werden.
Weiterhin lässt sich mit "sendDatesList= "";" einstellen, dass man im Regelbetrieb ("regular = true;") gar keine Push-Nachricht erhalten möchte. Im nicht regulären Betrieb ("regular = false;") und bei der Ersteinrichtung bzw. beim Reset ("offset = -1.0;") wird dagegen immer eine Push-Nachricht gesendet.
Mit der lokalen Skriptvariablen "setTime" setzt man in den Skripten die Zeit, zu der das zugehörige WebUI-Programm ausgeführt wird. Also z.B. "23:59".
Code: Alles auswählen
string setTime = "23:59";
Skripte für den Strom-, Gas- und Wasserzähler
Ersteinrichtung
Für die Ersteinrichtung müsst ihr neben den obigen lokalen Skriptvariablen noch den Namen des Kanals 1 der jeweiligen Zählersensor-Sendeeinheit, HM-ES-TX-WM, unter "channel" eintragen. Danach setzt ihr die Variable "offset" auf -1.0. Anschließend führt ihr manuell das Programm "UG HWR PRG Energiezähler" im WebUI unter "Status und Bedienung | Programme" aus.
Hinweis für IEC-Sensor: Solltet ihr die Firmware-Version 2.2 auf der Zählersensor-Sendeeinheit HM-ES-TX-WM in Verbindung mit einer IEC-Sensor nutzen, dann müsst ihr die lokale Skriptvariable "iecFlag" auf true setzen.
Sind die benötigten Systemvariablen zu diesem Zeitpunkt noch nicht vorhanden, werden sie automatisch angelegt. Bitte prüft nach dem ersten Durchlauf, ob die Systemvariablen korrekt angelegt wurden.
Danach wiederholt ihr einfach die Programm-Ausführung, woraufhin ihr von jedem Skript eine Push-Nachricht mit folgendem Inhalt erhalten solltet:
Dies ist der aktuelle Wert des Parameters "ENERGY_COUNTER", "GAS_ENERGY_COUNTER" bzw. "IEC_ENERGY_COUNTER" der jeweiligen Zählersensor-Sendeeinheit (Wasser- und Gasverbrauch werden gleichermaßen erfasst). Nun müsst ihr noch den tatsächlichen Zählerstand Eures Strom-, Gas- bzw. Wasserzählers ablesen und davon den in der Push-Nachricht angezeigten Wert abziehen. Diesen Wert tragt ihr im jeweiligen Skript in die lokale Skriptvariable "offset" ein.
Nehmen wir mal das obige Beispiel. Hier hat das Stromzählerskript 264.4878 kWh angezeigt. Wenn auf dem Stromzähler nun z.B. 2349 kWh angezeigt werden, müsst ihr in das Stromzähler-Skript "offset = 2048.5122" eintragen. Entsprechend verfahrt ihr mit dem Gas- und dem Wasserzähler.
Achtung: auf jeden Fall den Wert als relle Zahl mit mindestens einer Nachkommastelle eintragen und als Komma den Punkt verwenden!
In den Push-Nachrichten steht noch der Hinweis, dass ihr ggf. die lokale Variable "regular" wieder auf true setzen müsst. Das ist für die Ersteinrichtung nicht notwendig, da das automatisch mit offset = -1.0 ein- und mit offset ~= -1.0 wieder ausgeschaltet wird.
Übrigens, ihr könnt auf diese Weise jeden Zähler einzeln initialisieren. Ihr könnt aber auch zwei oder drei Skripte auf einmal ausführen. Ganz, wie es euch beliebt.
Regelbetrieb
Wenn ihr nun den tatsächlichen Wert für "offset" eingetragen habt, müsst ihr das Skript eigentlich nur noch abspeichern und warten, bis es durch das WebUI-Programm ausgeführt wird. Um 23:59 Uhr sollten dann alle Systemvariablen mit ersten Werten befüllt sein.
Die zugesandten Push-Nachrichten für den zurückliegenden Zeitraum sehen dann so aus, wobei der jüngste Wert immer ganz oben in der Liste steht.
Überlaufen
Die Skripte fangen das Überlaufen von "ENERGY_COUNTER", "GAS_ENERGY_COUNTER" bzw. "IEC_ENERGY_COUNTER" automatisch ab, so dass ihr Euch hierüber keine Gedanken machen müsst. Dazu gibt es eine while-Schleife, die ausgehend vom eingetragenen offset-Wert bei einem Sprung von z.B. 830 auf 2 den Wert 838.8607 (beim Standard-Stromzähler) bzw. 838860.7 (beim Gas-, Wasser- und IEC-Zähler) so lange hinzu addiert, bis das Resultat positiv ist. Dies ist besonders für den Standard-Stromzähler notwendig, da hier die Wh gezählt werden, was zu einem relativ schnellen Überlaufen führt. Beim Gas-, Wasser- und IEC-Zähler dürfte es dagegen in der Regel kaum zum Überlauf kommen.
Manuelles Setzen der Systemvariablen
Zum zwischenzeitlichen Setzen der Systemvariablen und zum Überprüfen eines Zwischenverbrauchs muss man die lokale Variable "regular" auf den Wert false setzen. Führt man dann das WebUI-Programm "UG HWR PRG Energiezähler" wie in der Ersteinrichtung beschrieben aus, werden alle Systemvariablen unmittelbar beschrieben.
Aber Achtung: die Tageswerte zeigen immer die Differenz zwischen zwei Triggerzeitpunkten an, was bedeutet, dass sie bei manueller Auslösung eben keine Tageswerte sind. Dies ist nur beim Regelbetrieb gewährleistet. Das ist aber nicht weiter tragisch, da zum übernächsten Triggerzeitpunkt im Regelbetrieb wieder automatisch die Tageswerte angezeigt werden. Andererseits kann man damit aber auch sehr bequem einen Zwischenverbrauch ermitteln, indem man das Programm ein Mal vor und ein Mal nach dem gewünschten Zeitfenster triggert.
Nach dem manuellen Betrieb solltet ihr die lokale Variable "regular" für den Regelbetrieb wieder auf true setzen. Daran werdet ihr aber auch durch die Push-Nachrichten erinnert.
Bargraph-Anzeige
Es gibt die Möglichkeit einer vorangestellten Bargraph-Anzeige für die Tagesverbrauchswerte in der Wochenliste. Dazu gebt ihr mit der lokalen Varialben "range" den maximalen Verbrauchswert und mit der lokalen Variablen "bars" die Anzahl der Bars bis zum Erreichen des maximalen Verbrauchswerts an. Hier müsst ihr einfach etwas experimentieren, was Euch von der Optik und Euren individuellen Verbrauchswerten her am besten gefällt. In den obigen Skripten sind jeweils 10 Bars eingestellt, die sich beim Stromzählerskript über den Bereich von 0 bis 12 kWh, beim Gaszählerskript von 0 bis 7 m³ und beim Wasserzählerskript von 0 bis 1 m³ Tagesverbrauch erstrecken. Überschreitet der Tagesverbrauchswert den eingestellten Wert für "range", wird der Bargraph orange bzw. fett dargestellt.
Mit "range = 0" kann die Bargraph-Anzeige vollständig ausgeblendet werden.
Batterie- und/oder Zählerwechsel
Nach einem Batterie- und/oder Zählerwechsel dürfte in der Regel eine Neueinrichtung notwendig sein. In diesem Fall verfahrt ihr, wie unter dem Punkt "Ersteinrichtung", wobei natürlich die Seriennummern der jeweiligen Zählersensor-Sendeeinheit schon in den Skripten eingetragen ist. Im Falle eines Batteriewechsels sollte eine Ausführung des Programms nun jeweils den Wert 0.0 liefern, so dass ihr einfach nur den tatsächlich angezeigten Wert des jeweiligen Zählers als offset einzutragen braucht. Nach einem Zählerwechsel könnte ein negativer Offset notwendig sein. Das stellt aber kein Problem für die Skripte dar.
Gruß,
Thorsten