HM-ES-TX-WM - wieso 2 Zähler?

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

Moderatoren: jmaus, Co-Administratoren

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von fischmir » 13.05.2018, 14:18

Hallo zusammen,

ich schlage mich seit Monaten mit dem o.g. Gerät auseinandern; nun möchte ich es aber endlich mal nutzen können.

Ich habe das Gefühl, dass nicht richtig gezählt wird; daher meine erste Frage: Wieso hat das Gerät 2 Energiezähler?

* Energie-Zähler RaspMatic (welcher sich bei mir nicht updated; steht auf 4795.453 kWh)
* Energie-Zähler Gerät (steht aktuell auf 293440.00 Wh und wird regelmäßig höher)

Kann mir jemand sagen, wieso es zwei Zähler gibt?

Viele Grüße,
Christian

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von DrTob » 13.05.2018, 15:55

Der geratezähler ist im Sensor selbst. Er wird bei einem Batteriewechsel zurückgestellt. Der andere wird auf der Zentrale verwaltet und erhöht (über ein Programm, das beim anlernen erstellt wird)

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

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von Xel66 » 13.05.2018, 16:39

DrTob hat geschrieben:(über ein Programm, das beim anlernen erstellt wird)
Genauer über ein als systemintern gekennzeichnetes Programm, welches ein Script ausführt und die Zählerstände bei Übermittlung der Daten durch den Sensor schreibt. Dieses Programm wird beim Anlernen des Sensors automatisch erstellt.

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

NickHM
Beiträge: 3729
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 65 Mal
Danksagung erhalten: 119 Mal

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von NickHM » 13.05.2018, 16:44

Guten Abend

Du kannst das o.g. automatisch erstellte "systeminterne" Programm gefahrlos auf "nicht systemintern" umstellen. Dann siehst Du es auch in Status / Bedienung Programme und dort den Zeitstempel, wann das Programm getriggert wird. So kannst Du fest stellen, ob das darin enthaltene Script überhaupt los läuft, wenn Daten vom Sensor gemeldet werden.

Falls es nicht funktioniert kann man den fehler suchen, oder das Gerät ablernen - Programm wird gelöscht und neu anlernen - Programm wird neu erstellt.

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von fischmir » 13.05.2018, 20:16

DrTob hat geschrieben:Der geratezähler ist im Sensor selbst. Er wird bei einem Batteriewechsel zurückgestellt. Der andere wird auf der Zentrale verwaltet und erhöht (über ein Programm, das beim anlernen erstellt wird)
Ich habe mir die Werte anschaut, aber der Energie-Zähler RaspMatic ändert sich nicht mehr, während Energie-Zähler Gerät immer weiter zählt.
NickHM hat geschrieben:Guten Abend

Du kannst das o.g. automatisch erstellte "systeminterne" Programm gefahrlos auf "nicht systemintern" umstellen. Dann siehst Du es auch in Status / Bedienung Programme und dort den Zeitstempel, wann das Programm getriggert wird. So kannst Du fest stellen, ob das darin enthaltene Script überhaupt los läuft, wenn Daten vom Sensor gemeldet werden.

Falls es nicht funktioniert kann man den fehler suchen, oder das Gerät ablernen - Programm wird gelöscht und neu anlernen - Programm wird neu erstellt.
Die Programm werden ausgeführt (zumindest lt. Zeitstempel), aber offentsichtlich passiert nix; der Zähler bleibt ja stehen.

Hat jemand eine Idee, was ich nun tun könnte? Hat jemand das systemintern Script, welches funktioniert? Dann könnte ich die Programm mal ergleichen. Die ist meins:

Danke und Gruß,
Christian

Code: Alles auswählen

object chn = dom.GetObject('3105');
object oBoot = chn.DPByControl('POWERMETER_IGL.BOOT');
object oEnergyCounter = chn.DPByControl('POWERMETER_IGL.ENERGY_COUNTER');
object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_3105_NEQ0861263:1');
object oSysVarEnergyCounterOldVal = dom.GetObject('svEnergyCounterOldVal_3105');
object oSysVarEnergyCounterResetPressed = dom.GetObject('svEnergyCounter_3105_NEQ0861263:1_RESET');
object oSysVarEnergyCounterTmpOldVal = dom.GetObject('svEnergyCounter_3105_NEQ0861263:1_TMP_OLDVAL');
object oSysVarEnergyCounterDeviceReset = dom.GetObject('svEnergyCounter_3105_NEQ0861263: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());
}


fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von fischmir » 17.05.2018, 22:38

Ich habe mir die Werte anschaut, aber der Energie-Zähler RaspMatic ändert sich nicht mehr, während Energie-Zähler Gerät immer weiter zählt.
Ist das ein Bug in RaspMatic?

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von fischmir » 27.05.2018, 13:38

*Push*

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

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von Black » 27.05.2018, 13:44

das ist ein dummer effekt... ich hatte den vor ner weile auch. obwohl das programm schlüssig war tats das nicht.

der grund war übel versteckt in der funktion des energiezählers, ich habe mir in IOBroker die Datenpunkte mal angesehen und festgestellt, das aus irgendeinem Grund POWERMETER_IGL.BOOT auf true stand. und dann wird das programm schön und vrav getriggert,
mit

Code: Alles auswählen

if ( oBoot.Value() == true ) {
   oSysVarEnergyCounterDeviceReset.State(true);
   if (ioldDevVal <= 0) {
     oSysVarEnergyCounter.State(0);
   }
} else {
wird aber nix gezählt.

Ich habe die Bedingung getillt, nun tuts alles.

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

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von fischmir » 28.05.2018, 13:28

Hallo Black,

erstmal vielen vielen Dank für deine Antwort. Da schöpfe ich ja wieder Hoffnung, doch noch alle laufen zu bekommen.

Nachdem ich den Code geändert habe auf:

Code: Alles auswählen

! fischmir; 28.05.2018
!if ( oBoot.Value() == true ) {
if ( false == true ) {

   oSysVarEnergyCounterDeviceReset.State(true);
   if (ioldDevVal <= 0) {
     oSysVarEnergyCounter.State(0);
   }
} else {
wird zumindest etwas gezähtl.

Aber in der Zeit, in welcher der "Energie-Zähler Gerät" um 6 kWh gestiegen ist, ist der "Energie-Zähler Gerät" nur um gut kWh gestiegen.

Sind deine Werte konsistent?

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: HM-ES-TX-WM - wieso 2 Zähler?

Beitrag von fischmir » 28.05.2018, 14:02

Hmm...ich habe jetzt mal das Script auseinandergenommen und folgende Zeilen hinzugefügt, um die im Kopf definerten Variablen wieder auszugeben:

Code: Alles auswählen

!Ausgabe aller Werte
WriteLine("bootFlag:" # bootFlag);
WriteLine("devVal:" # devVal);
WriteLine("devValMax:" # devValMax);
WriteLine("oldDevVal:" # oldDevVal);
WriteLine("tmpOldDevVal:" # tmpOldDevVal);
WriteLine("ioldDevVal:" # ioldDevVal);
WriteLine("diffVal:" # diffVal);
WriteLine("sysVarVal:" # sysVarVal);
WriteLine("tmp_devVal:" # tmp_devVal);
WriteLine("tmp_oldDevVal:" # tmp_oldDevVal);
Meine Ausgabe sieht wie folgt aus:

Code: Alles auswählen

bootFlag:false
devVal:509200.000000
devValMax:838860.699219
oldDevVal:509200.000000
tmpOldDevVal:509200.000000
ioldDevVal:2147483647
diffVal:0.000000
sysVarVal:4795266.700195
tmp_devVal:2147483647
tmp_oldDevVal:2147483647
Wie man sehen kann, haben die folgenden Variablen einen Wert, welcher nicht korrekt ist (https://de.wikipedia.org/wiki/2147483647):

Code: Alles auswählen

ioldDevVal
tmp_devVal
tmp_oldDevVal
Schauen wir es uns nochmal genauer an:

Code: Alles auswählen

integer tmp_devVal = (devVal.ToString().ToFloat() * 100000).ToInteger();
devVal ist 509200.000000 und als real abgespeichert. Bei der Umwandlung nach integer tmp_devVal scheint etwas schief zu gehen (siehe obrige Zeile), denn der entsprechende int-Wert ist anschließend 2147483647.

Also muss doch hier irgendwo ein Bug drin sein?

Antworten

Zurück zu „RaspberryMatic“