Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Moderator: Co-Administratoren
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Danke, das war der entscheidende Hinweis Nachdem ich nun den Sensor umgesetzt habe, zählt er auch schon richtig.
Was kann denn der andere Sensor mehr, bzw welche weiteren Informationen kann ich noch erfassen?
Gruß
Was kann denn der andere Sensor mehr, bzw welche weiteren Informationen kann ich noch erfassen?
Gruß
-
- Beiträge: 662
- Registriert: 27.03.2019, 21:29
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 111 Mal
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Es handelt sich um einen Zweirichtungszähler. Wenn dieser auch in Lieferrichtung (PV-Überschuss-Einspeisung) betrieben wird, so kann dies nicht korrekt mit dem ES-LED erfasst werden. Außerdem werden mit dem ES-IEC Absolutwerte der Zählerstände und der Momentanleistung gelesen. Fehler oder Sprünge, z. B bei einem Batteriewechsel, kann es damit nicht geben.
-
- Beiträge: 82
- Registriert: 14.03.2020, 16:47
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 1 Mal
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Genau so ist es. Ich habe den Sensor und es funktioniert einfach problemlos. Ich habe beide Zählerstände, von der Einspeisung und vom Verbrauch, zudem die Momentanleistung auf Kanal. Beim Einspeisen ist der Wert negativ, wenn ich Strom beziehe ist der Wert positiv.Don Kanaille hat geschrieben: ↑24.03.2022, 22:35Es handelt sich um einen Zweirichtungszähler. Wenn dieser auch in Lieferrichtung (PV-Überschuss-Einspeisung) betrieben wird, so kann dies nicht korrekt mit dem ES-LED erfasst werden. Außerdem werden mit dem ES-IEC Absolutwerte der Zählerstände und der Momentanleistung gelesen. Fehler oder Sprünge, z. B bei einem Batteriewechsel, kann es damit nicht geben.
Jetzt suche ich noch ein Skript um die Tages, Wochen, Monats und Jahresverbräuche auszurechnen. Zudem die Tages, Wochen, Monats und Jahreseispeisung. Mit welchem Script geht das, oder muss ich mir da selbst was basteln? Ich habe hier schon so viel gelesen und gesucht, aber das richtige war noch nicht dabei. Vor allem für die 2-Richtungsvariante??
-
- Beiträge: 1
- Registriert: 28.11.2021, 21:01
- System: CCU
- Hat sich bedankt: 1 Mal
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
nabend , ich bin gerade auf deinen post gestossen- meine frage ich habe auch einen zwei richtungszähler und würden den auch mit dem Zählersensor HM-ES-TX-WM auslesen. muß ich das genau so machen wie es auf seite 1 beschrieben ist?? bedanke mich jetzt schonmal bei euch für die hilfe
-
- Beiträge: 14164
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 585 Mal
- Danksagung erhalten: 1500 Mal
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Nein, denn für diesen Zählertyp benötigst Du einen anderen Lesekopf und kannst Zählerstände für die Richtungen getrennt direkt auslesen (initialer Zählerstand, Handling des Übertrages oder Batteriewechsels usw. sind nicht notwendig) und nicht nur Impulse zählen. Installiere das erst mal und schaue, was Du wirklich benötigst. Die 2er Firmware verhält sich grundsätzlich anders als die des reinen Impulszählers.jürgen0211 hat geschrieben: ↑29.03.2022, 19:14muß ich das genau so machen wie es auf seite 1 beschrieben ist??
Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Ich habe meinen Fehler Stundenlang gesucht und
dann alle 78 Seiten von diesen Post überflogen und dann die einfache Lösung(s.o)
Vielen Dank, genau hier bin ich auch drüber gestolpert.
Wer lesen kann ist klar im Vorteil.
An dieser Stelle ein Dank an allen, welche hier immer anderen Teilnehmern helfen.
Und vor Allem auch bei Neulingen, sehr geduldig bleiben. Aber sowas macht ein gutes Forum aus.
Gruß
Christian
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Hallo,
ich nutze das Programm/Script nun schon seit 2017 für die Auswertung meines Gaszählers.
Nun habe ich mir noch ein zweiten HM-ES-TX-WM mit IEC Sensor gekauft und möchte meinen Stromzähler auswerten.
In diesem Zuge habe ich das Script von Version 1.1 auf die Version 1.4 aktualisiert.
Mein Gaszähler funktioniert weiter wie gewohnt, alles besten, nur der Stromzähler will einmal nicht richtig funktionieren.
Der Wert des Energie-Zähler Gerät stimmt immer, aber die restlichen Werte laufen nach kurzer Zeit total aus dem Ruder.
Alle Umrechnungen von Wh zu kWh habe ich schon entfernt, trotzdem werden die Werte immer schnell exorbitant größer.
Ich bin mit meinem Latein leider am Ende, vielleicht findet einer von Euch den Fehler.
Hier die Daten meiner Installation.
ich nutze das Programm/Script nun schon seit 2017 für die Auswertung meines Gaszählers.
Nun habe ich mir noch ein zweiten HM-ES-TX-WM mit IEC Sensor gekauft und möchte meinen Stromzähler auswerten.
In diesem Zuge habe ich das Script von Version 1.1 auf die Version 1.4 aktualisiert.
Mein Gaszähler funktioniert weiter wie gewohnt, alles besten, nur der Stromzähler will einmal nicht richtig funktionieren.
Der Wert des Energie-Zähler Gerät stimmt immer, aber die restlichen Werte laufen nach kurzer Zeit total aus dem Ruder.
Alle Umrechnungen von Wh zu kWh habe ich schon entfernt, trotzdem werden die Werte immer schnell exorbitant größer.
Ich bin mit meinem Latein leider am Ende, vielleicht findet einer von Euch den Fehler.
Hier die Daten meiner Installation.
Code: Alles auswählen
! Universelle Zaehlerstandberechnung fuer HM-ES-TX-WM
!
! Copyright (c) 2016-2018 Jens Maus <mail@jens-maus.de>
!
! Version 1.4 (01.01.2018)
! Nun schauen wir wer uns aufgerufen hat (Device-Channel oder Timer) und welches Device
! es genau war (Nutzung der $src$ Variable) und danach entscheiden wir was wir
! zu tun haben.
object counter = dom.GetObject("$src$");
if(counter)
{
object sysvar = dom.GetObject(ID_SYSTEM_VARIABLES);
! Wenn TypeName vom Typ HSSDP ist dann wurde das Program durch ein Event
! eines Devices erzeugt, ansonsten durch ein CALENDARDP welches der
! Ausfuehrung durch das Zeitmodul entspricht
if(counter.TypeName() == "HSSDP")
{
! Nun holen wir unmittelbar am anfang alle counter relevanten Daten ab
! und speichern sie fuer spaeter zwischen und berechnen auch gleich
! noch differenzwerte
integer diffTime = counter.Timestamp().ToInteger() - counter.LastTimestamp().ToInteger();
real curValue = counter.Value();
real lastValue = counter.LastValue();
! Nun extrahieren wir den Zaehlertyp (Gas, Wasser, Strom)
! aus dem Namen des Channel. Ein Device muss also immer mit "XXXXX-Gas"
! bzw. "XXXXXX-Wasser", etc. enden.
object channel = dom.GetObject(counter.Channel());
string type = channel.Name().StrValueByIndex("-",1);
! Nun holen wir alle notwendigen Systemvariablen zum Lesen und Speichern
! unserer verschiedenen Zaehlerwerte
object c = sysvar.Get(type # " Referenz Zaehlerstand");
object d = sysvar.Get(type # " Zaehlerstand");
object e = sysvar.Get(type # " Verbrauch aktuell");
object f = sysvar.Get(type # " Referenz Ablesung");
object g = sysvar.Get(type # " Verbrauch letzte Ablesung");
object h = sysvar.Get(type # " Referenz heute");
object i = sysvar.Get(type # " Verbrauch heute");
object j = sysvar.Get(type # " Referenz Woche");
object k = sysvar.Get(type # " Verbrauch Woche");
object l = sysvar.Get(type # " Referenz Monat");
object m = sysvar.Get(type # " Verbrauch Monat");
object n = sysvar.Get(type # " Referenz Kalenderjahr");
object o = sysvar.Get(type # " Verbrauch Kalenderjahr");
! Nun schauen wir ob der Zaehler uebergelaufen ist (diffValue < 0) weil
! die Zaehlervariablen des HM-ES-TX-WM gerade beim Stromzaehler regelmaessig
! ueberlaufen.
real diffValue = curValue - lastValue;
if(diffValue < 0.0)
{
! Der Zaehler scheint uebergelaufen zu sein -> ValueMax hinzuaddieren
diffValue = diffValue + counter.ValueMax();
! "Referenz Zaehlerstand" dann um ValueMax erhoehen. Beim Stromzaehler
! muss aber erst das ganze noch in Watt umgerechnet werden.
real a = c.Value();
c.State(a + counter.ValueMax());
}
! Aktuellen Verbrauch berechnen
if(diffTime > 0) { e.State(3600.0 * diffValue / diffTime); }
! Aktuellen Zaehlerstand berechnen
d.State(c.Value() + curValue);
! Nun alle Systemvariablen die fuer die Berechnung/Darstellung
! des Verbrauches da sind neu berechnen.
g.State(d.Value() - f.Value());
if(h.Value() != 0) { i.State(d.Value() - h.Value()); }
else { i.State(d.Value() - c.Value()); }
if(j.Value() != 0) { k.State(d.Value() - j.Value()); }
else { k.State(d.Value() - c.Value()); }
if(l.Value() != 0) { m.State(d.Value() - l.Value()); }
else { m.State(d.State() - c.State()); }
if(n.Value() != 0) { o.State(d.Value() - n.Value()); }
else { o.State(d.Value() - c.Value()); }
! Wir aktualisieren auch noch den CCU internen Energiezaehler mit
! dem Wert der letzten Ablesung
if(counter.HssType() != "GAS_ENERGY_COUNTER")
{
object oSysVarEnergyCounter = sysvar.Get("svEnergyCounterIEC_" # channel.ID() # "_" # channel.Address());
if(oSysVarEnergyCounter)
{
oSysVarEnergyCounter.State(d.Value() - f.Value());
}
}
else
{
object oSysVarEnergyCounter = sysvar.Get("svEnergyCounterGas_" # channel.ID() # "_" # channel.Address());
if(oSysVarEnergyCounter)
{
oSysVarEnergyCounter.State(d.Value() - f.Value());
}
}
! Die aktuelle Zeit in eine separate Systemvariable schreiben
! damit man direkt sehen kann wann die Zaehelrstaende das letzte
! mal aktualisiert wurden.
sysvar.Get(type # " Aktualisierung").State(system.Date("%F %X"));
}
else
{
! Tageszaehleraktualisierung fuer alle Hausanschluss-Zaehler
! Hier wird mittels eines Timers der taeglich immer genau um 00:00
! dieses Programm ausfuehrt die Systemvariablen aktualisiert die
! die Tages/Wochen/Monat/Jahreswerte beinhalten.
! Nur weitermachen wenn es wirklich Mitternacht ist
if(system.Date("%H:%M") == "00:00")
{
string a="Gas,Strom,Wasser";
string b;
object c;
object d;
object e;
object f;
! Nun ueber alle Hauszaehler iterieren
foreach(b, a.Split(","))
{
! momentaner Zaehlerstand
c = sysvar.Get(b # " Zaehlerstand");
if(c)
{
! Nach Wochenanfang pruefen
if(system.Date("%a") == "Mon")
{
d = sysvar.Get(b # " Referenz Woche");
e = sysvar.Get(b # " Verbrauch Woche");
f = sysvar.Get(b # " Verbrauch letzte Woche");
! Verbrauch der letzten Woche speichern
f.State(e.Value());
! Referenzwert der Woche speichern
d.State(c.Value());
! Wochenverbrauch auf 0 setzen
e.State(0);
}
! Nach Monatsanfang pruefen
if(system.Date("%d") == "01")
{
d = sysvar.Get(b # " Referenz Monat");
e = sysvar.Get(b # " Verbrauch Monat");
f = sysvar.Get(b # " Verbrauch letzter Monat");
! Verbrauch des letzten Monats speichern
f.State(e.Value());
! Referenzwert des Monats speichern
d.State(c.Value());
! Monatsverbrauch auf 0 setzen
e.State(0);
! Nach Jahresanfang pruefen
if(system.Date("%m") == "01")
{
d = sysvar.Get(b # " Referenz Kalenderjahr");
e = sysvar.Get(b # " Verbrauch Kalenderjahr");
f = sysvar.Get(b # " Verbrauch letztes Kalenderjahr");
! Verbrauch des letzten Kalenderjahr speichern
f.State(e.Value());
! Referenzwert des Kalenderjahr speichern
d.State(c.Value());
! Jahresverbrauch auf 0 setzen
e.State(0);
}
}
! aktueller Tagesverbrauch speichern
d = sysvar.Get(b # " Referenz heute");
e = sysvar.Get(b # " Verbrauch heute");
f = sysvar.Get(b # " Verbrauch gestern");
! Verbrauch der letzten Woche speichern
f.State(e.Value());
! Referenzwert der Woche speichern
d.State(c.Value());
! Tagesverbrauch auf 0 setzen
e.State(0);
}
}
}
}
}
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Hallo,
mittlerweile kann ich den Fehler etwas eingrenzen, irgendein Script, wahrscheinlich Systemintern, speichert die hohen Werte in den Variablen "Strom Zaehlerstand" (Zeitstempel 10:16:11.196) und "Strom Referenz Zaehlerstand" (Zeitstempel 10:16:11.151).
Ich dachte hier im Thread gelesen zu haben, das bei IEC Sensor die Variable "Strom Referenz Zaehlerstand" gar nicht benutzt wird und deswegen immer bei 0 bleibt. Habe ich das so richtig gelesen / verstanden.
Wenn ja warum ändert sich diese bei mir, hat jemand vielleicht eine Idee?
Verlauf der Variable "Strom Referenz Zaehlerstand" Verlauf der Variable "Strom Zaehlerstand"
mittlerweile kann ich den Fehler etwas eingrenzen, irgendein Script, wahrscheinlich Systemintern, speichert die hohen Werte in den Variablen "Strom Zaehlerstand" (Zeitstempel 10:16:11.196) und "Strom Referenz Zaehlerstand" (Zeitstempel 10:16:11.151).
Ich dachte hier im Thread gelesen zu haben, das bei IEC Sensor die Variable "Strom Referenz Zaehlerstand" gar nicht benutzt wird und deswegen immer bei 0 bleibt. Habe ich das so richtig gelesen / verstanden.
Wenn ja warum ändert sich diese bei mir, hat jemand vielleicht eine Idee?
Verlauf der Variable "Strom Referenz Zaehlerstand" Verlauf der Variable "Strom Zaehlerstand"
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Ich habe mir nun mal die Systeminternen Programme anzeigen lassen und dabei festgestellt das ich 6 Programme für die beiden Zähler habe, 5 für eine Seriennummer (GAS) und 1 für die Seriennummer (Strom).
Hier die Auflistung der Systeminternen Programme Hier die Geräte Übersicht der Zähler Ich vermute nun mal das eins der Systeminternen Programme für den Gas Zähler mir die Werte vom Strom Zähler versaut.
Wahrscheinlich, sind die zu vielen Systeminternen Programme noch Überbleibsel von den Firmware Updates, ich hatte den Gaszähler aus Dummheit von Firmware 1.0 auf 2.5 und dann wieder zurück auf 1.2 aktualisiert.
Nach jedem Firmware Update habe ich zwar immer den Zähler gelöscht und ein Werksreset gemacht, aber allem Anschein nach sind doch noch Reste im System übrig geblieben.
Wie bekomme ich nun raus, welche Systeminternen Programme zu viel sind?
Hier die Auflistung der Systeminternen Programme Hier die Geräte Übersicht der Zähler Ich vermute nun mal das eins der Systeminternen Programme für den Gas Zähler mir die Werte vom Strom Zähler versaut.
Wahrscheinlich, sind die zu vielen Systeminternen Programme noch Überbleibsel von den Firmware Updates, ich hatte den Gaszähler aus Dummheit von Firmware 1.0 auf 2.5 und dann wieder zurück auf 1.2 aktualisiert.
Nach jedem Firmware Update habe ich zwar immer den Zähler gelöscht und ein Werksreset gemacht, aber allem Anschein nach sind doch noch Reste im System übrig geblieben.
Wie bekomme ich nun raus, welche Systeminternen Programme zu viel sind?
-
- Beiträge: 96
- Registriert: 09.06.2017, 00:19
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Hallo,Hütte hat geschrieben: ↑14.02.2021, 22:17Bei einem kompletten Zählerwechsel bleibt dir im Moment nichts anderes übrig, als bei Null zu starten. Und das hat absolut nichts mit dem abgewandelten Script von MIchael zu tun, da diese Version des Scriptes darauf zielt, einen Reset des internen Zählers des HM-ES-TX-WM bei einem Batteriewechsel abzufangen..R.Thümer hat geschrieben: ↑06.02.2021, 20:38Hallo, gibt es eine Lösung für den Zählerwechsel? Ein Script ist ja nicht angegeben oder Wie muss ich "1. TODO" verstehen? Mein Zähler wurde gegen einen Smart Meter getauscht und da der aktuelle Zählerstand ja unter dem der letzten Ablesung liegt kann ich diesen über das vorhandene Scipt "Initialejmaus hat geschrieben: ↑07.06.2016, 15:43
Anpassung bei Zählerwechsel:
Da Energieversorger in regelmäßigen Abständen einen neuen/aktualisierten Hausanschlusszähler installieren muss somit auch bei jedem Zählerwechsel der aktualisierte Zählerstand mittels des folgenden Skriptes der CCU mitgeteilt werden:
- TODO
Einrichtung/Anpassung Referenzwert Zählerstand" nicht setzen. Den letzten Zählerstand vom ausgebauten Zähler habe ich mit dem Script "Initiale Einrichtung/Anpassung Referenzwert letzte Ablesung" gesetzt. Muss ich jetzt wieder bei 0 starten oder kann ich alte Werte weiter nutzen?
MfG R.Thümer
Wenn du nun deinen Smartmeter über einen ES-IEC-Sensor statt einem ES-Fer- oder ES-LED-Sensor ausliest, dann musst du zwei Dinge beachten.
1. Bei Einsatz des ES-IEC-Sensors muss die FW-Version 2.5 auf dem HM-ES-TX-WM installiert werden (diese FW ist ausschließlich auf der Downloadseite von eQ-3 zu finden und wird dir nicht auf der Startseite der WebUI angezeigt, da je nach eingesetzem Sensor verschiedede FW-Versionen auf dem jeweiligen HM-ES-TX-WM zu installieren sind.
2. Beim Einsatz des ES-IEC-Sensors werden die Daten/Zählerstände direkt aus dem Zähler in kWh ausgelesen. Damit die späteren Berechnungen stimmen, muss das Original-Script von Jens angepasst werden.
Dazu folgender Bereichzumindest durch folgene Zeilen ersetzt werden:Code: Alles auswählen
! Wenn dies ein Stromzaehler ist muessen wir die Werte von ! Watt zu Kilowatt konvertieren if(counter.HssType() != "GAS_ENERGY_COUNTER") { diffValue = diffValue / 1000.0; curValue = curValue / 1000.0; }
Natürlich unter Annahme, dass es nur einen HM-ES-TX-WM-Zähler gibt, der einen Stromzähler ausliest. Sollte es neben dem Hauptzähler, der einen ES-IEC-Sensor benutzt, noch einen Unterzähler geben, der einen anderen Sensor benutzt, dann wird es komplizierterCode: Alles auswählen
! Wenn dies ein Stromzaehler ist muessen wir die Werte von ! Watt zu Kilowatt konvertieren ! if(counter.HssType() != "GAS_ENERGY_COUNTER") ! { ! diffValue = diffValue / 1000.0; ! curValue = curValue / 1000.0; ! }
Bei mir ist zb der fall das Ich einen HM-ES-TX-WM für Strom, Strom_HZG, Wasser, Gartenwasser habe die laufen alle mit dem ES Led.
Jetzt kommt noch einer hinzu mit IEC Sensor Strom_Bezug.
Wäre es hier möglich wenn ich das Script in ein neues Programm packe und wie von Hütte geschrieben die zeilen auskommentiere sowie die anderen Zähler auch raus nehme unter "String"
Code: Alles auswählen
! Universelle Zaehlerstandberechnung fuer HM-ES-TX-WM
!
! Copyright (c) 2016-2018 Jens Maus <mail@jens-maus.de>
!
! Version 1.4 (01.01.2018)
! Nun schauen wir wer uns aufgerufen hat (Device-Channel oder Timer) und welches Device
! es genau war (Nutzung der $src$ Variable) und danach entscheiden wir was wir
! zu tun haben.
object counter = dom.GetObject("$src$");
if(counter)
{
object sysvar = dom.GetObject(ID_SYSTEM_VARIABLES);
! Wenn TypeName vom Typ HSSDP ist dann wurde das Program durch ein Event
! eines Devices erzeugt, ansonsten durch ein CALENDARDP welches der
! Ausfuehrung durch das Zeitmodul entspricht
if(counter.TypeName() == "HSSDP")
{
! Nun holen wir unmittelbar am anfang alle counter relevanten Daten ab
! und speichern sie fuer spaeter zwischen und berechnen auch gleich
! noch differenzwerte
integer diffTime = counter.Timestamp().ToInteger() - counter.LastTimestamp().ToInteger();
real curValue = counter.Value();
real lastValue = counter.LastValue();
! Nun extrahieren wir den Zaehlertyp (Strom_Bezug)
! aus dem Namen des Channel. Ein Device muss also immer mit "XXXXX-Gas"
! bzw. "XXXXXX-Wasser", etc. enden.
object channel = dom.GetObject(counter.Channel());
string type = channel.Name().StrValueByIndex("-",1);
! Nun holen wir alle notwendigen Systemvariablen zum Lesen und Speichern
! unserer verschiedenen Zaehlerwerte
object c = sysvar.Get(type # " Referenz Zaehlerstand");
object d = sysvar.Get(type # " Zaehlerstand");
object e = sysvar.Get(type # " Verbrauch aktuell");
object f = sysvar.Get(type # " Referenz Ablesung");
object g = sysvar.Get(type # " Verbrauch letzte Ablesung");
object h = sysvar.Get(type # " Referenz heute");
object i = sysvar.Get(type # " Verbrauch heute");
object j = sysvar.Get(type # " Referenz Woche");
object k = sysvar.Get(type # " Verbrauch Woche");
object l = sysvar.Get(type # " Referenz Monat");
object m = sysvar.Get(type # " Verbrauch Monat");
object n = sysvar.Get(type # " Referenz Kalenderjahr");
object o = sysvar.Get(type # " Verbrauch Kalenderjahr");
! Nun schauen wir ob der Zaehler uebergelaufen ist (diffValue < 0) weil
! die Zaehlervariablen des HM-ES-TX-WM gerade beim Stromzaehler regelmaessig
! ueberlaufen.
real diffValue = curValue - lastValue;
if(diffValue < 0.0)
{
! Der Zaehler scheint uebergelaufen zu sein -> ValueMax hinzuaddieren
diffValue = diffValue + counter.ValueMax();
! "Referenz Zaehlerstand" dann um ValueMax erhoehen. Beim Stromzaehler
! muss aber erst das ganze noch in Watt umgerechnet werden.
real a = c.Value().ToFloat().ToString(3);
if(counter.HssType() != "GAS_ENERGY_COUNTER")
{
a = a * 1000.0;
a = a + counter.ValueMax();
c.State(a / 1000.0);
}
else
{
c.State(a + counter.ValueMax());
}
}
! Wenn dies ein Stromzaehler ist muessen wir die Werte von
! Watt zu Kilowatt konvertieren
! if(counter.HssType() != "GAS_ENERGY_COUNTER")
!{
! diffValue = diffValue / 1000.0;
! curValue = curValue / 1000.0;
!}
! Aktuellen Verbrauch berechnen
if(diffTime > 0) { e.State(3600.0 * diffValue / diffTime); }
! Aktuellen Zaehlerstand berechnen
d.State(c.Value() + curValue);
! Nun alle Systemvariablen die fuer die Berechnung/Darstellung
! des Verbrauches da sind neu berechnen.
g.State(d.Value() - f.Value());
if(h.Value() != 0) { i.State(d.Value() - h.Value()); }
else { i.State(d.Value() - c.Value()); }
if(j.Value() != 0) { k.State(d.Value() - j.Value()); }
else { k.State(d.Value() - c.Value()); }
if(l.Value() != 0) { m.State(d.Value() - l.Value()); }
else { m.State(d.State() - c.State()); }
if(n.Value() != 0) { o.State(d.Value() - n.Value()); }
else { o.State(d.Value() - c.Value()); }
! Wir aktualisieren auch noch den CCU internen Energiezaehler mit
! dem Wert der letzten Ablesung
if(counter.HssType() != "GAS_ENERGY_COUNTER")
{
object oSysVarEnergyCounter = sysvar.Get("svEnergyCounter_" # channel.ID() # "_" # channel.Address());
if(oSysVarEnergyCounter)
{
oSysVarEnergyCounter.State((d.Value() - f.Value()) * 1000.0);
}
}
else
{
object oSysVarEnergyCounter = sysvar.Get("svEnergyCounterGas_" # channel.ID() # "_" # channel.Address());
if(oSysVarEnergyCounter)
{
oSysVarEnergyCounter.State(d.Value() - f.Value());
}
}
! Die aktuelle Zeit in eine separate Systemvariable schreiben
! damit man direkt sehen kann wann die Zaehelrstaende das letzte
! mal aktualisiert wurden.
sysvar.Get(type # " Aktualisierung").State(system.Date("%F %X"));
}
else
{
! Tageszaehleraktualisierung fuer alle Hausanschluss-Zaehler
! Hier wird mittels eines Timers der taeglich immer genau um 00:00
! dieses Programm ausfuehrt die Systemvariablen aktualisiert die
! die Tages/Wochen/Monat/Jahreswerte beinhalten.
! Nur weitermachen wenn es wirklich Mitternacht ist
if(system.Date("%H:%M") == "00:00")
{
string a="Strom_Bezug";
string b;
object c;
object d;
object e;
object f;
! Nun ueber alle Hauszaehler iterieren
foreach(b, a.Split(","))
{
! momentaner Zaehlerstand
c = sysvar.Get(b # " Zaehlerstand");
if(c)
{
! Nach Wochenanfang pruefen
if(system.Date("%a") == "Mon")
{
d = sysvar.Get(b # " Referenz Woche");
e = sysvar.Get(b # " Verbrauch Woche");
f = sysvar.Get(b # " Verbrauch letzte Woche");
! Verbrauch der letzten Woche speichern
f.State(e.Value());
! Referenzwert der Woche speichern
d.State(c.Value());
! Wochenverbrauch auf 0 setzen
e.State(0);
}
! Nach Monatsanfang pruefen
if(system.Date("%d") == "01")
{
d = sysvar.Get(b # " Referenz Monat");
e = sysvar.Get(b # " Verbrauch Monat");
f = sysvar.Get(b # " Verbrauch letzter Monat");
! Verbrauch des letzten Monats speichern
f.State(e.Value());
! Referenzwert des Monats speichern
d.State(c.Value());
! Monatsverbrauch auf 0 setzen
e.State(0);
! Nach Jahresanfang pruefen
if(system.Date("%m") == "01")
{
d = sysvar.Get(b # " Referenz Kalenderjahr");
e = sysvar.Get(b # " Verbrauch Kalenderjahr");
f = sysvar.Get(b # " Verbrauch letztes Kalenderjahr");
! Verbrauch des letzten Kalenderjahr speichern
f.State(e.Value());
! Referenzwert des Kalenderjahr speichern
d.State(c.Value());
! Jahresverbrauch auf 0 setzen
e.State(0);
}
}
! aktueller Tagesverbrauch speichern
d = sysvar.Get(b # " Referenz heute");
e = sysvar.Get(b # " Verbrauch heute");
f = sysvar.Get(b # " Verbrauch gestern");
! Verbrauch der letzten Woche speichern
f.State(e.Value());
! Referenzwert der Woche speichern
d.State(c.Value());
! Tagesverbrauch auf 0 setzen
e.State(0);
}
}
}
}
}