Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angezeigt

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

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

Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angezeigt

Beitrag von Nudge » 13.01.2018, 13:15

Die Anzeige "Energie-Zähler RaspMatic" des HM-ES-TX-WM wird im RaspberryMatic 2.29.2320171216 fehlerhaft berechnet, wenn man einen Neustart des Raspberry Pi 3B via Zentralen-Wartung des RaspberryMatic durchführt.

Nach jedem Neustart wird der aktuelle Gesamt-Energieverbrauch auf den bereits vorhandenen Gesamt-Energieverbrauch hinzuaddiert.

Beispiel:

1. Wert von "Energie-Zähler RaspMatic" in RaspberryMatic = 10 kWh
2. Neustart des Raspi via Zentralen-Wartung durchführen
3. Nach erfolgtem Neustart neu anmelden
4. Wert von "Energie-Zähler RaspMatic" in RaspberryMatic = 10 kWh
5. Aktualisierung des Wertes "Energie-Zähler RaspMatic" abwarten
6. Wert von "Energie-Zähler RaspMatic" in RaspberryMatic = 20,xx kWh (xx = 10 kWh + in der Zwischenzeit von Punkt 1-5 verbrauchte Energie)

Das kann man beliebig oft wiederholen: nach JEDEM Neustart und REFRESH des Wertes wird der Energiewert neu hinzuaddiert.

Ich vermute, daß der Effekt auch dann auftritt, wenn man den Raspi runterfährt, die Stromversorgung zum Raspi trennt und wiederherstellt und den Raspi dann neu startet.

Ich habe das Problem schon als Bug an Jens gemeldet. Er wollte nun wissen, ob das Problem auch bei einer CCU2 auftritt. Das kann ich leider nicht überprüfen, da ich meine CCU2 schon "platt gemacht" habe. Daher wäre es gut, wenn das hier ein paar Leute mit einer CCU2 überprüfen könnten.
Es wäre auch hilfreich mal nachzuschauen, ob Ihr das oben beschriebene Problem auch bei Eurem RaspberryMatic nachstellen könnt.

Dankeschön!

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

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von Nudge » 14.01.2018, 03:12

Ist wirklich keine einzige Person hier in der Lage das mal gegenzuchecken??? :shock:

NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von NickHM » 14.01.2018, 08:28

Guten Morgen

das Problem gab es auf der CCU2 vor einigen Firmwareversionen. Ist schon > 1 Jahr her.

Die Berechnung erfolgt im systeminternen Script, dass mit dem Energiesensor verbunden ist und bei Aktualisierung des Zählerstandes ausgeführt wird. Das Script wird beim Anlernen des Gerätes angelegt.

Du hast jetzt mehrere Möglichkeiten

- ein aktuelles Script von einem anderen User besorgen und Zeile für zeile vergleichen. Der einzige Unterschied dürfte die ID des Zählers am Anfang des Scriptes sein. Der Rest muss gleich sein.

- wenn Du eine aktuelle FW benutzt, dann das Gerät ablernen. Prüfen, ob das systeminterne Programm zu dem Energiezähler gelöscht wurde, sonst manuell löschen. Gerät neu anlernen. Script wird mit der aktuellen Vorlage neu erstellt.

- warten bis ein RasPiMatic Besitzer antwortet

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

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von Nudge » 14.01.2018, 14:32

Super! Danke für die Info :D

Was mich etwas wundert: ich bin mir zu 100% sicher, daß ich VOR dem Anlernen von Geräten zuerst die Firmware der CCU2 geupdatet habe. Daher sollte das Script eigentlich aktuell sein.

Aber kann mir hier jemand ein Script schicken, damit ich das mal vergleichen kann? Wenn ich das Gerät neu anlerne, sind wohl alle meine Diagramme weg, was ich vermeiden möchte. Ich nutze hier einen Sensor mit Ferraris-Zähler.

NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von NickHM » 14.01.2018, 14:56

Code: Alles auswählen

object chn = dom.GetObject('24278');
object oBoot = chn.DPByControl('POWERMETER_IEC1.BOOT');
object oEnergyCounter = chn.DPByControl('POWERMETER_IEC1.ENERGY_COUNTER');
object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_24278_MEQ0705547:1');
object oSysVarEnergyCounterOldVal = dom.GetObject('svEnergyCounterOldVal_24278');
object oSysVarEnergyCounterResetPressed = dom.GetObject('svEnergyCounter_24278_MEQ0705547:1_RESET');
object oSysVarEnergyCounterTmpOldVal = dom.GetObject('svEnergyCounter_24278_MEQ0705547:1_TMP_OLDVAL');
object oSysVarEnergyCounterDeviceReset = dom.GetObject('svEnergyCounter_24278_MEQ0705547:1_DEVICE_RESET');
boolean bootFlag = oBoot.Value();
real devVal = oEnergyCounter.Value();
real devValMax = oEnergyCounter.ValueMax();
real oldDevVal = oSysVarEnergyCounterOldVal.Value();
real tmpOldDevVal = oSysVarEnergyCounterTmpOldVal.Value();
integer ioldDevVal = (tmpOldDevVal.ToString().ToFloat() * 100000).ToInteger();
real diffVal = 0.0;
real sysVarVal = oSysVarEnergyCounter.Value();
integer tmp_devVal = (devVal.ToString().ToFloat() * 100000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 100000).ToInteger();
if ( oBoot.Value() == true ) {
   oSysVarEnergyCounterDeviceReset.State(true);
   if (ioldDevVal <= 0) {
     oSysVarEnergyCounter.State(0);
   }
} else {
   boolean resetPressed = oSysVarEnergyCounterResetPressed.Value();
   ! boolean devReset = oSysVarEnergyCounterDeviceReset.Value();
   if ( (resetPressed == true) && (oSysVarEnergyCounterDeviceReset.Value() == true) ) {
       oSysVarEnergyCounterTmpOldVal.State(0);
       tmpOldDevVal = 0;
   }
  !Normales Hochzaehlen. Geraetwert > vorheriger Wert
  if ((tmp_devVal >= tmp_oldDevVal) && (oSysVarEnergyCounterDeviceReset.Value() == false)) {
   if (resetPressed == false) {
      diffVal = oEnergyCounter.Value() - oldDevVal;
    } else {
      !Reset pressed
      diffVal = oEnergyCounter.Value() - tmpOldDevVal;
      if ((diffVal.ToString().ToFloat() * 100000).ToInteger() < 0 ) {
		     diffVal = oEnergyCounter.Value();
      }
      oSysVarEnergyCounterResetPressed.State(0);
    }
  } else {
    !Geraetewert ist kleiner vorheriger Wert
   !Entweder Ueberlauf, oder Batterietausch
    if (oSysVarEnergyCounterDeviceReset.Value() == false) {
      !Normaler Geraeteueberlauf
      if(tmp_devVal > 0) {
         diffVal = (oEnergyCounter.Value() + devValMax) - oldDevVal;
      }
    } else {
         !Zaehle Geraetewert zum CCU-Zaehler
          diffVal = oEnergyCounter.Value();
          if ((diffVal.ToString().ToFloat() * 100000).ToInteger() == 0) {
	            oSysVarEnergyCounterDeviceReset.State(true);
           } else {
            oSysVarEnergyCounterDeviceReset.State(false);
          }
    }
  }
  !Erhoehe den CCU-Zaehler
  oSysVarEnergyCounter.State(sysVarVal + diffVal);
  oSysVarEnergyCounterOldVal.State(oEnergyCounter.Value());
  oSysVarEnergyCounterTmpOldVal.State(oEnergyCounter.Value());
}

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von Black » 14.01.2018, 16:38

genau den effekt hatte ich auch.
ich habs so gelöst

Code: Alles auswählen

!- Stromzähler
!- Modifiziertes Original Script
object oSRC  = dom.GetObject ("$src$");
if (oSRC) {

hier steht das komplette Original script

} !- Diese klammer am ende nicht vergessen
das sorgt dafür, das nach einem reboot das script nicht bearbeitet wird, sondern nur, wenn dieses mit gültigem trigger (veränderung des Zählers) aufgerufen wird.


Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

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

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von Nudge » 14.01.2018, 17:10

So, ich hab eben einen Differenzreport über Dein File und mein eigenes drüberlaufen lassen. Die Files sind, bis auf die Objektnummer, absolut identisch! Wie kann es dann sein, daß es bei Dir fehlerfrei läuft, bei mir aber nicht :?:
NickHM hat geschrieben:

Code: Alles auswählen

object chn = dom.GetObject('24278');
object oBoot = chn.DPByControl('POWERMETER_IEC1.BOOT');
object oEnergyCounter = chn.DPByControl('POWERMETER_IEC1.ENERGY_COUNTER');
object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_24278_MEQ0705547:1');
object oSysVarEnergyCounterOldVal = dom.GetObject('svEnergyCounterOldVal_24278');
object oSysVarEnergyCounterResetPressed = dom.GetObject('svEnergyCounter_24278_MEQ0705547:1_RESET');
object oSysVarEnergyCounterTmpOldVal = dom.GetObject('svEnergyCounter_24278_MEQ0705547:1_TMP_OLDVAL');
object oSysVarEnergyCounterDeviceReset = dom.GetObject('svEnergyCounter_24278_MEQ0705547:1_DEVICE_RESET');
boolean bootFlag = oBoot.Value();
real devVal = oEnergyCounter.Value();
real devValMax = oEnergyCounter.ValueMax();
real oldDevVal = oSysVarEnergyCounterOldVal.Value();
real tmpOldDevVal = oSysVarEnergyCounterTmpOldVal.Value();
integer ioldDevVal = (tmpOldDevVal.ToString().ToFloat() * 100000).ToInteger();
real diffVal = 0.0;
real sysVarVal = oSysVarEnergyCounter.Value();
integer tmp_devVal = (devVal.ToString().ToFloat() * 100000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 100000).ToInteger();
if ( oBoot.Value() == true ) {
   oSysVarEnergyCounterDeviceReset.State(true);
   if (ioldDevVal <= 0) {
     oSysVarEnergyCounter.State(0);
   }
} else {
   boolean resetPressed = oSysVarEnergyCounterResetPressed.Value();
   ! boolean devReset = oSysVarEnergyCounterDeviceReset.Value();
   if ( (resetPressed == true) && (oSysVarEnergyCounterDeviceReset.Value() == true) ) {
       oSysVarEnergyCounterTmpOldVal.State(0);
       tmpOldDevVal = 0;
   }
  !Normales Hochzaehlen. Geraetwert > vorheriger Wert
  if ((tmp_devVal >= tmp_oldDevVal) && (oSysVarEnergyCounterDeviceReset.Value() == false)) {
   if (resetPressed == false) {
      diffVal = oEnergyCounter.Value() - oldDevVal;
    } else {
      !Reset pressed
      diffVal = oEnergyCounter.Value() - tmpOldDevVal;
      if ((diffVal.ToString().ToFloat() * 100000).ToInteger() < 0 ) {
		     diffVal = oEnergyCounter.Value();
      }
      oSysVarEnergyCounterResetPressed.State(0);
    }
  } else {
    !Geraetewert ist kleiner vorheriger Wert
   !Entweder Ueberlauf, oder Batterietausch
    if (oSysVarEnergyCounterDeviceReset.Value() == false) {
      !Normaler Geraeteueberlauf
      if(tmp_devVal > 0) {
         diffVal = (oEnergyCounter.Value() + devValMax) - oldDevVal;
      }
    } else {
         !Zaehle Geraetewert zum CCU-Zaehler
          diffVal = oEnergyCounter.Value();
          if ((diffVal.ToString().ToFloat() * 100000).ToInteger() == 0) {
	            oSysVarEnergyCounterDeviceReset.State(true);
           } else {
            oSysVarEnergyCounterDeviceReset.State(false);
          }
    }
  }
  !Erhoehe den CCU-Zaehler
  oSysVarEnergyCounter.State(sysVarVal + diffVal);
  oSysVarEnergyCounterOldVal.State(oEnergyCounter.Value());
  oSysVarEnergyCounterTmpOldVal.State(oEnergyCounter.Value());
}

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

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von Nudge » 14.01.2018, 17:14

Black hat geschrieben:genau den effekt hatte ich auch.
Wurde das Problem denn jemals gelöst? Mein Script ist ja identisch zu dem von Nick. Dann dürfte es bei ihm ja auch Probleme geben.

NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von NickHM » 14.01.2018, 23:17

Guten Abend

bei meiner CCU gib es dass Problem nicht.

Wie sieht denn die Bedingung aus, die in Deinem Programm dafür sorgt, dass es ausgeführt wird?

tubozz
Beiträge: 60
Registriert: 11.01.2018, 22:13
Danksagung erhalten: 3 Mal

Re: Energiezähler-Anzeige für HM-ES-TX-WM wird falsch angeze

Beitrag von tubozz » 14.01.2018, 23:44

viewtopic.php?f=34&t=38418#p377885

alchy beschreibt es dort ja, sollte ja vielleicht auch hier das gleiche Problem sein.
Auch wenn nicht alle Geräte betroffen sind.

Antworten

Zurück zu „RaspberryMatic“