Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
tgw
Beiträge: 579
Registriert: 10.10.2013, 22:35
System: CCU
Wohnort: Recklinghausen
Hat sich bedankt: 38 Mal
Danksagung erhalten: 5 Mal

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von tgw » 15.02.2023, 13:19

tgw hat geschrieben:
20.06.2022, 13:11
Hat jemand auch eine Antwort auf meine Fragen vom 29.03.22?

?
Push
Viele Grüße aus Recklinghausen im Ruhrpott

Der TGW

CCU3 / Solaredge PV integriert / Daikin Klima WLAN integriert - gerne für Rückfragen offen.

Fmc
Beiträge: 67
Registriert: 05.01.2018, 15:19

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von Fmc » 22.03.2023, 09:52

Guten Morgen Zusammen,

ich habe folgende Frage:

Da ich eine PV Anlage habe, musste der Zähler getauscht werden.
Ich habe jetzt einen Smart Meter ES-IEC am laufen.
Jetzt werden die Variablen nicht richtig gefüllt.
Kann es an den unterschiedlichen Einheiten liegen ?
Die Messwerte werden ja jetzt in Kwh übermittelt und nicht mehr in Watt.

Muss das Skript bearbeitet werden ?

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();
      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,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

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von Xel66 » 22.03.2023, 10:19

Fmc hat geschrieben:
22.03.2023, 09:52
Jetzt werden die Variablen nicht richtig gefüllt.
Oh, ich liebe solche ausführlichen und detaillierten Fehlerbeschreibungen. Geh mal zu einem KFZ'ler und sage ihm, dass Dein Auto "komische Geräusche" macht. :lol: Dessen Gesicht verformt sich zum Fragezeichen.
Fmc hat geschrieben:
22.03.2023, 09:52
Kann es an den unterschiedlichen Einheiten liegen ?
Klar, wenn Du die Dimensionen änderst, dann musst Du natürlich auch die Berechnung darauf anpassen. Im Abschnitt "! Wenn dies ein Stromzaehler ist muessen wir die Werte von..." hat das der Scriptersteller schon mehr oder minder vorgesehen, bzw. rechnet intern schon mit kWh. Einfach die beiden Zeilen "diffValue = diffValue / 1000.0;" und "curValue = curValue / 1000.0;" durch ein vorgestelltes Ausrufezeichen (!) auskommentieren (z.B. ! diffValue = diffValue / 1000.0; - das Leerzeichen nach dem Ausrufezeichen ist wichtig).

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

Benutzeravatar
tgw
Beiträge: 579
Registriert: 10.10.2013, 22:35
System: CCU
Wohnort: Recklinghausen
Hat sich bedankt: 38 Mal
Danksagung erhalten: 5 Mal

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von tgw » 22.03.2023, 11:41

Also ich hatte damals sehr sehr ausführlich alles beschrieben und habe bis heute noch keine Antwort.
Was mache ich falsch?
tgw hat geschrieben:
15.02.2023, 13:19
tgw hat geschrieben:
20.06.2022, 13:11
Hat jemand auch eine Antwort auf meine Fragen vom 29.03.22?

?
Push
Viele Grüße aus Recklinghausen im Ruhrpott

Der TGW

CCU3 / Solaredge PV integriert / Daikin Klima WLAN integriert - gerne für Rückfragen offen.

Fmc
Beiträge: 67
Registriert: 05.01.2018, 15:19

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von Fmc » 22.03.2023, 15:26

Xel66 hat geschrieben:
22.03.2023, 10:19
Fmc hat geschrieben:
22.03.2023, 09:52
Jetzt werden die Variablen nicht richtig gefüllt.
Oh, ich liebe solche ausführlichen und detaillierten Fehlerbeschreibungen. Geh mal zu einem KFZ'ler und sage ihm, dass Dein Auto "komische Geräusche" macht. :lol: Dessen Gesicht verformt sich zum Fragezeichen.
Fmc hat geschrieben:
22.03.2023, 09:52
Kann es an den unterschiedlichen Einheiten liegen ?
Klar, wenn Du die Dimensionen änderst, dann musst Du natürlich auch die Berechnung darauf anpassen. Im Abschnitt "! Wenn dies ein Stromzaehler ist muessen wir die Werte von..." hat das der Scriptersteller schon mehr oder minder vorgesehen, bzw. rechnet intern schon mit kWh. Einfach die beiden Zeilen "diffValue = diffValue / 1000.0;" und "curValue = curValue / 1000.0;" durch ein vorgestelltes Ausrufezeichen (!) auskommentieren (z.B. ! diffValue = diffValue / 1000.0; - das Leerzeichen nach dem Ausrufezeichen ist wichtig).

Gruß Xel66
Ah, ich hatte das ! direkt ohne Lehrzeichen eingefügt.
Jetzt warte ich, dass die Batterie leer ist und Strom verbraucht wird und berichte.

Danke

Tinko
Beiträge: 190
Registriert: 23.10.2016, 10:15
Hat sich bedankt: 53 Mal
Danksagung erhalten: 1 Mal

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von Tinko » 16.04.2023, 12:08

joesch hat geschrieben:
18.06.2022, 23:08
Hallo zusammen,

die Systemvariablen wurden im ersten Post am Beispiel eines Wasserzählers erläutert. Wie ist die "Wasser Verbrauch heute l" zu "übersetzen"?
Wäre die Variable "Strom Verbrauch heute Wh" zu benennen? Oder kann sie ganz entfallen?

VG, Jörg
@Joesch

has du eine Antwort auf die Frage? Würde mich auch interessieren. Könntest du die Variablen für einen Gaszähler posten (Screenshot). Danke

ottmannster
Beiträge: 39
Registriert: 15.10.2016, 14:57
Danksagung erhalten: 1 Mal

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von ottmannster » 22.04.2023, 17:59

Hallo
habe einen Pipersberg BK G4T Gaszähler und möchte den aktuellen m³ Verbrauch in meiner Homematic CCU3 auslesen. Habe dazu den Zählersensor HM-ES-TX-WM mit dem Energy-Sensor Gas 2 und dem entsprechenden Adapter an den Gaszähler angeschlossen. Imp = 0,01.
Frage: wie bekomme ich den tatsächlichen Zählerstand ausgelesen? Er steht im Augenblick auf 1796,352 m³. Meine Pocket Control zeigt einen Wert von 1,312m³ an. Was für ein Skript benötige ich und evtl welches Programm, um den realen Wert anzeigen zu lassen?
Hat jemand hier das passende Skript und Programm? Blicke durch die vielen Forenbeiträge dazu nicht mehr durch.
VG Stefan

mifroe
Beiträge: 23
Registriert: 31.12.2014, 09:50
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von mifroe » 25.04.2023, 10:11

Hallo ottmaster,
ich habe einen Pipersberg G6 RF1, welcher einen Imp=0,1 hat, angegeben auf dem Zähler selber. Bist Du sicher, dass dein G4 0,01 liefert?
VG
Michael

Slice
Beiträge: 1200
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 139 Mal
Danksagung erhalten: 85 Mal

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von Slice » 08.05.2023, 11:20

Hallo zusammen,

betreibt jemand erfolgreich dieses Script als Stromvariante bei sich?
Ich habe vor kurzem bei mir am Stromzähler einen HM-ES-TX-WM mit einem IS-IEC angeschlossen und dabei auf dieses Script gleich mit umgestellt.
Das Programm an sich scheint zu laufen, aber die Werte sind irgendwie nicht plausibel.
Anbei mal der Screenshot:
Screenshot.jpg
Was komisch ist, der Stromverbrauch heute und gestern bleibt immer bei 0,01 kWh.

Wie ist das bei Euch? Läuft das bei irgendjemanden?

EDIT:
Nach rumprobieren und ändern vom Code in = 1.0:

Code: Alles auswählen

      if ( type == "Strom"  )
      {
        vUmrechnungsfaktor = 1.0;
werden mir nun korrekte Werte angezeigt.

Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.75.7 / 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
----------------------------------------------------------------------------------------

onkel_peter
Beiträge: 90
Registriert: 08.12.2014, 22:16
Wohnort: Erfurt

Re: Zählersensor HM-ES-TX-WM - Zählerstandberechnung - Batteriewechsel berücksichtigt

Beitrag von onkel_peter » 03.07.2023, 21:52

Hallo Michael,
ich weiß nicht ob Du dieses Thema noch im Blick hast.
Ist ja auch schon eine Weile her.
Ich versuche es aber dennoch einmal.
Zuerst: Vielen Dank für Deine Mühe das Programm von J.Maus weiter aufzwerten.
Nach langer Zeit bin ich vor ein paar Tagen auf Deine Variante "umgestiegen".
Soweit ich das bisher Beurteilen kann läuft auch alles ohne Problem sehr gut in der "Strom"-Variante.

Ich habe dazu allerdings ein paar Fragen.
1. Die SV "Strom Verbrauch aktuell" zeigt immer einen wesentlich höheren aktuellen Verbrauch an, als die Leistungsanzeige im Gerät.
Es gibt nur wenige Momente wo beide Anzeigen fast das selbe anzeigen.
Kann das so richtig sein ?
siehe Screenshot
2. Du hattest in einem Beitrag mal erwähnt, dass Du an einer Erweiterung des Pragramms arbeitest um auch die Preise für die
jeweiligen Verbräuche mit zu erfassen und anzuzeigen.
Gibt es schon etwas brauchbares von Dir oder ist das nicht mehr aktuell ?

Vielen Dank
Peter
Dateianhänge
HZ_B1.png

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“