Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Moderator: Co-Administratoren
-
- Beiträge: 3729
- Registriert: 23.09.2017, 12:04
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 119 Mal
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Hallo
Du musst die gemerkten Referenzwerte anpassen. Also eigentlich nur wie bei der Inbetriebnahme im ersten Beitrag beschrieben. Die Werte sind wieder richtig, sobald eine Woche / Monat um sind. Hauptsache der aktuelle Zählerstand stimmt wieder.
Du musst die gemerkten Referenzwerte anpassen. Also eigentlich nur wie bei der Inbetriebnahme im ersten Beitrag beschrieben. Die Werte sind wieder richtig, sobald eine Woche / Monat um sind. Hauptsache der aktuelle Zählerstand stimmt wieder.
-
- Beiträge: 96
- Registriert: 09.06.2017, 00:19
-
- Beiträge: 96
- Registriert: 09.06.2017, 00:19
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
So habe jetzt den Impulszähler von Eugen inbetrieb genommen. Und möchte nun gerne mit Jens sein Script auf den Wasserzähler auslesen bisher klappt alles gut.
Nur ich würde gerne wissen ob es eine Möglichkeit die zählerwerte in den Variablen der kanalzuordnung auf 3 stellen hinter dem Komma anzeigen zu lassen bei mir werden nur 2 Stellen angezeigt.
Vielen dank
Nur ich würde gerne wissen ob es eine Möglichkeit die zählerwerte in den Variablen der kanalzuordnung auf 3 stellen hinter dem Komma anzeigen zu lassen bei mir werden nur 2 Stellen angezeigt.
Vielen dank
- NilsG
- Beiträge: 1685
- Registriert: 09.08.2013, 23:44
- System: CCU
- Hat sich bedankt: 381 Mal
- Danksagung erhalten: 30 Mal
- Kontaktdaten:
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Grüße und DANKE!
Nils
-----------------------------------------
CCU3 + 2x LAN-Gateway
Nils
-----------------------------------------
CCU3 + 2x LAN-Gateway
-
- Beiträge: 96
- Registriert: 09.06.2017, 00:19
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Hallo das habe ich gerade gelesen aber wie müsste ich das bei jens im Script anpassen?
Verstehe leider nicht viel vom scripten..hier das script
Vielen dank im Vorraus
Verstehe leider nicht viel vom scripten..hier das script
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, Strom_HZG)
! 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();
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="Gas,Strom,Strom_HZG,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);
}
}
}
}
}
Vielen dank im Vorraus
-
- Beiträge: 73
- Registriert: 27.02.2018, 22:43
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 4 Mal
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Script ist seit geraumer Zeit implementiert und verarbeitet die Verbrauchswerte bei den Zählerständen zuverlässig. Aber: Der else-Zweig zur Speicherung der Historie um Mitternacht hat leider unzuverlässig funktioniert, was ich dann leider nicht mehr logisch nachvollziehen kann. Tagelang klappt's, dann geht's bisweilen eben nicht. Die Gesamtzählerstände sind immer korrekt, so dass "nur" HEUTE und GESTERN durcheinander kommen, was sich am nächsten Tag bereinigt. Ich bin jetzt einfach hergegangen und habe den ELSE-Zweig für Speicherung um Mitternacht in ein eigenes Script verlagert. Scheint jetzt besser zu funktionieren, woran das auch immer liegt...
Könnte es sein, dass die Programmausführung derart verzögert wird, dass die IF-Abfrage "Uhrzeit = 0:00" nicht mehr greift? Das wäre zumindest eine logische Erklärung, warum die Werte von Zeit zu Zeit nicht mehr aktualisiert werden...
Könnte es sein, dass die Programmausführung derart verzögert wird, dass die IF-Abfrage "Uhrzeit = 0:00" nicht mehr greift? Das wäre zumindest eine logische Erklärung, warum die Werte von Zeit zu Zeit nicht mehr aktualisiert werden...
-
- Beiträge: 96
- Registriert: 09.06.2017, 00:19
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Hallo wollte noch mal nachfragen ob es möglich ist in der raspimatic die Systemvariablen bzw die Ausgaben mit 3 oder 4 Stellen nach dem Komma anzeigen zu lassen bin immer noch nicht weiter gekommen.
Lg suenzihome
Lg suenzihome
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Servus allerseits,
habe mir nun auch für meinen Gas- und Stromzähler einen Sensor gegönnt und wollte beginnen, lt. Post. Nr. 1 die Variablen und das Programm anzulegen, jedoch sehe ich lt. den Screenshots beim Programm z.B. Hausanschlus-Strom und bei den anzulegenden Variablen keine Kanalzuordnung..
Meine CCU bietet mir da jeweils Kanal 1 oder 2 an
Ist da jetzt Kanal 1 auszuwählen oder habe ich einen Fehler beim Anlegen des Gerätes gemacht?
Sorry für die wahrscheinlich dumme Frage und schon mal im vorhinein Danke für eure Antworten,
Tom
habe mir nun auch für meinen Gas- und Stromzähler einen Sensor gegönnt und wollte beginnen, lt. Post. Nr. 1 die Variablen und das Programm anzulegen, jedoch sehe ich lt. den Screenshots beim Programm z.B. Hausanschlus-Strom und bei den anzulegenden Variablen keine Kanalzuordnung..
Meine CCU bietet mir da jeweils Kanal 1 oder 2 an
Ist da jetzt Kanal 1 auszuwählen oder habe ich einen Fehler beim Anlegen des Gerätes gemacht?
Sorry für die wahrscheinlich dumme Frage und schon mal im vorhinein Danke für eure Antworten,
Tom
-
- Beiträge: 1192
- Registriert: 03.02.2016, 14:44
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: irgendwo aus Süd BaWü
- Hat sich bedankt: 135 Mal
- Danksagung erhalten: 82 Mal
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Hallo Tom,
ich würde jetzt mal tippen und vermuten das Du den Hinweis keinen Kanal wie den anderen von einem Gerät zu benennen richtig gemacht hast.
Allerdings ergibt sich in diesem Fall eine Besonderheit, auf dem Bild vom Gerät auf Seite 1 werden beide Kanäle gleich benannt!
Dann wirst Du vermutlich auch nur einen Kanal zur Auswahl haben für die Kanalzuordnung.
Ich habe selbst nach dieser Anleitung bei mir Strom und Wasser umgesetzt und läuft auch ohne weitere Probleme.
Grüße,
Slice
ich würde jetzt mal tippen und vermuten das Du den Hinweis keinen Kanal wie den anderen von einem Gerät zu benennen richtig gemacht hast.
Allerdings ergibt sich in diesem Fall eine Besonderheit, auf dem Bild vom Gerät auf Seite 1 werden beide Kanäle gleich benannt!
Dann wirst Du vermutlich auch nur einen Kanal zur Auswahl haben für die Kanalzuordnung.
Ich habe selbst nach dieser Anleitung bei mir Strom und Wasser umgesetzt und läuft auch ohne weitere Probleme.
Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.73.9 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.73.9 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------
Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung
Hallo Slice,
ich hab mir sowas ähnliches ja schon fast gedacht, als ich mit dem tippseln meiner Frage fertig war
Danke für die Rückmeldung,
Tom
ich hab mir sowas ähnliches ja schon fast gedacht, als ich mit dem tippseln meiner Frage fertig war
Danke für die Rückmeldung,
Tom