Seite 13 von 14

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

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

?
Push

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

Verfasst: 22.03.2023, 09:52
von Fmc
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

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

Verfasst: 22.03.2023, 10:19
von Xel66
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

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

Verfasst: 22.03.2023, 11:41
von tgw
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

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

Verfasst: 22.03.2023, 15:26
von Fmc
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

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

Verfasst: 16.04.2023, 12:08
von Tinko
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

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

Verfasst: 22.04.2023, 17:59
von ottmannster
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

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

Verfasst: 25.04.2023, 10:11
von mifroe
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

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

Verfasst: 08.05.2023, 11:20
von Slice
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

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

Verfasst: 03.07.2023, 21:52
von onkel_peter
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