Zählersensor HM-ES-TX-WM - Universelle Zählerstandberechnung

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

Borland
Beiträge: 415
Registriert: 28.10.2015, 21:12
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Borland » 09.02.2018, 13:18

Meinst du?
Strom Verbrauch heute mit 345kWh ?
Ich warte mal bis morgen ;)

Viele Grüße
B.

Benutzeravatar
shartelt
Beiträge: 7421
Registriert: 14.01.2015, 14:59
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 524 Mal
Danksagung erhalten: 753 Mal

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von shartelt » 09.02.2018, 13:26

Dein Zähler zählt aber korrekt? Also ist gut kalibriert?
Abgesehen von dem Startwert für heute....wenn Du in ner Stunde das Delta anschaust, stimmt das mit dem überein, was Dein Zähler sagt?

Nudge
Beiträge: 91
Registriert: 30.01.2017, 11:42

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Nudge » 09.02.2018, 14:35

Borland hat geschrieben:Ich habe jetzt mal alles (Programm, Variablen) gelöscht und neu angelegt.
Die Bezeichnungen der Variablen habe ich extra aus dem Skript kopiert um keine Schreibfehler zu machen.
Et lüpt wieder nich :-(
Doch, da paßt nun alles ;)
Es ist auch eine Differenz zwischen dem Zählerstand den ich im Skript eingebe und dem was bei Skript testen ausgegeben wird.
Das ist normal. Vom Zählerwert, den Du eingibst, wird der bereits aufgelaufene Zählerstand des Gerätes abgezogen. Schließlich hast Du ja schon Strom verbraucht!
Wenn Du da jungfräuliche Werte möchtest, mußt Du den Energiezähler nullen und dann das Script für den Referenzzähler ZEITNAH ausführen. Dann wird exakt Dein abgelsener Wert übernommen.
Es werden auch gleiche Werte für Woche, heute Monat angezeigt.
Auch das ist normal. Der Wert für "gestern" wird täglich um Mitternacht geschrieben, der Wochenzähler wöchentlich um Mitternacht von Sonntag auf Montag, der Monatszähler monatlich am 1.
Du mußt also einfach nur warten. Bis zu diesen Zeitpunkten laufen alle Zähler synchron.

Nudge
Beiträge: 91
Registriert: 30.01.2017, 11:42

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Nudge » 09.02.2018, 14:44

Borland hat geschrieben: Strom Verbrauch heute mit 345kWh ?
Nunja, auf Deinem Zähler befinden sich doch bereits 345 kWh. Die Referenz für heute wird erst um Mitternacht geschrieben, vorher steht 0 in der Referenz. Daher wird der heutige Stromverbrauch auf 345kWh gesetzt.

Wie gesagt: wenn Du möchtest, daß gleich "korrekt" gerechnet wird, mußt Du den Energiezähler resetten und gleich danach das Script zum Setzen des Referenzzählers ausführen.

Borland
Beiträge: 415
Registriert: 28.10.2015, 21:12
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Borland » 09.02.2018, 15:04

Ok, alles klar.
Vielen Dank und viele Grüße !

B.

Borland
Beiträge: 415
Registriert: 28.10.2015, 21:12
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Borland » 11.02.2018, 07:41

Moin zusammen, hat alles funktioniert.
Zählerstände / Berechnungen Ist und Vortag sind jetzt richtig.
Wochen -Monats und Jahresberechnungen folgen nach und nach.
Ich habe mir auch direkt noch mal eine HM Messsteckdose besorgt um die schlimmsten Stromfresser
zu identifizieren.
Außerdem das Ganze schon mal angefangen auf dem Flurtablet (NEO) zu visualisieren um das auch im Auge zu behalten.
Da CCU Historian im Hintergrund auf meiner Synology läuft schaue ich heute mal wie ich auf dem Flurtablet (auf Folgeseiten) das auch noch als Diagramme darstellen kann.

Danke für die Hilfe und Grüße

B.

Borland
Beiträge: 415
Registriert: 28.10.2015, 21:12
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Borland » 24.02.2018, 08:07

Gute Morgen,
leider habe ich erst wieder jetzt Zeit gefunden mir das mal anzuschauen.
Irgendwas läuft immer noch nicht richtig.
Die Werte für Vortag, IST, heute etc. werden richtig angezeigt.
Da ist das erst am 10.02. eingerichtet habe ist es ok das noch keine Monatsverbrauch angezeigt wird.
Aber warum wird im Wochenverbrauch immer der Ist Wert aus dem Energiezähler angezeigt?
Ich habe bestimmt was falsch gemacht, weis aber nicht was...

Weis jemand Rat? Was soll ich noch liefern?

VG

B.

Bildschirmfoto 2018-02-24 um 08.00.40.png
Hier das Skript dazu:

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);
        }
      }
    }
  }
}
Hier die Variablen dazu:
Bildschirmfoto 2018-02-24 um 08.14.43.png
Bildschirmfoto 2018-02-24 um 08.15.06.png

Borland
Beiträge: 415
Registriert: 28.10.2015, 21:12
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Borland » 26.02.2018, 06:37

So, jetzt läufts.
Ich habe einfach alles noch mal neu gemacht.
Auch den Energiesensor auf Null gesetzt.
Die „Kunst“ ist es einfach richtig zu überlegen.
Um die korrekten Wochenwerte etc. Angezeigt zu bekommen muss man auch alle Variablen
anlegen die im Skript aufgeführt sind ;)

Dann klappt das auch.

VG
B.

Nudge
Beiträge: 91
Registriert: 30.01.2017, 11:42

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Nudge » 26.02.2018, 10:36

Borland hat geschrieben: Die „Kunst“ ist es einfach richtig zu überlegen.
Man muß sich einfach etwas mit dem Script von Jens beschäftigen. Mittlerweile nutze ich das Script auch in Verbindung mit CUxD und Highchart und lasse mir stündlich, täglich, wöchentlich und monatlich die jeweiligen Gesamtsummen ins Logfile schreiben. Tägliche, wöchentliche und monatliche Durchschnittswerte laß ich mir auch noch berechnen.

Borland
Beiträge: 415
Registriert: 28.10.2015, 21:12
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Zählersensor HM-ES-TX-WM - Universelle Zählerstandberech

Beitrag von Borland » 26.02.2018, 11:59

Hmm, zeig mal wie Du das machst;)
Bin ja schon froh das ich das jetzt so weit hinbekommen habe, aber das wäre noch das „i-Tüpfelchen“
Mir würden Tages, Wochen, Monats und Jahreswerte reichen.

VG
B.

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“