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: 806
Registriert: 03.02.2014, 19:04
Wohnort: Münsterland

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: 3403
Registriert: 29.10.2010, 08:24

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: 3622
Registriert: 08.05.2013, 23:33
Wohnort: Nordwürttemberg

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
---------------------------------------------------------------------------------
242 Kanäle in 89 Geräten und 125 CUxD-Kanäle in 23 CUxD-Geräten,
210 Programme, 145 Systemvariablen und 119 Direktverknüpfungen,
RaspberryMatic Version 2.31.25.20180225
---------------------------------------------------------------------------------

NickHM
Beiträge: 1319
Registriert: 23.09.2017, 12:04

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: 806
Registriert: 03.02.2014, 19:04
Wohnort: Münsterland

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: 806
Registriert: 03.02.2014, 19:04
Wohnort: Münsterland

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: 806
Registriert: 03.02.2014, 19:04
Wohnort: Münsterland

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

Beitrag von fischmir » 27.05.2018, 13:38

*Push*

Benutzeravatar
Black
Beiträge: 697
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
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
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 2.31.25.20180225 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.2
Script Developer V2.27.1

fischmir
Beiträge: 806
Registriert: 03.02.2014, 19:04
Wohnort: Münsterland

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: 806
Registriert: 03.02.2014, 19:04
Wohnort: Münsterland

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“