Seite 3 von 3

Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten

Verfasst: 13.06.2019, 19:32
von emeins
Ich habe es für meine HMIP-PSMs und HMIP-FSMs getestet. Hat jeweils nur nach Ab- und wieder Anlernen funktioniert. Den Grund hatte @alchy ja schon in einem älteren Reply genannt. Ich hatte es für ein Gerät vergessen und genau dort hat das Problem trotz neuer Firmware wieder zugeschlagen.
Aus meiner Sicht funktioniert es jetzt, nur das neue Anlernen ist halt etwas nervig. Dabei ändert sich auch die Geräte ID, was dann ggf. in den eigenen Scripten wieder angepasst werden muss.

Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten

Verfasst: 14.06.2019, 09:28
von Baxxy
emeins hat geschrieben:
13.06.2019, 19:32
Ich habe es für meine HMIP-PSMs und HMIP-FSMs getestet.
Hallo emeins,
könntest du mal ein aktuelles Script (prgEnergyCounter_... ) für einen HmIP-FSM posten? Ich würde dann mal probieren das "aktuelle" Script mit Anpassung der ID's gegen das "alte" Script auszutauschen. Vielleicht kann ich mir ja dadurch die ganze Ab/Anlerngeschichte sparen.

Danke und Grüße
baxxy

Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten

Verfasst: 14.06.2019, 10:26
von emeins
Für PSMs:

Code: Alles auswählen

object chn = dom.GetObject('10193');
object oOverflow = chn.DPByControl('POWERMETER_PSM.ENERGY_COUNTER_OVERFLOW');
object oEnergyCounter = chn.DPByControl('POWERMETER_PSM.ENERGY_COUNTER');
object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_10193_ABCDEFGABCDEF:6');
object oSysVarEnergyCounterOldVal = dom.GetObject('svEnergyCounterOldVal_10193');
boolean overFlowFlag = oOverflow.Value();
real devVal = oEnergyCounter.Value();
real devValMax = oEnergyCounter.ValueMax();
real oldDevVal = oSysVarEnergyCounterOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarEnergyCounter.Value();
integer tmp_devVal = (devVal.ToString().ToFloat() * 1000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 1000).ToInteger();
if (overFlowFlag == false) {
! Normal conditions
if (tmp_oldDevVal <= tmp_devVal) {
diffVal = devVal - oldDevVal;
}
! Device has rebooted
if (tmp_oldDevVal > tmp_devVal) {
diffVal = devVal;
}
} else {
!overFlow is true
if (tmp_oldDevVal > tmp_devVal) {
! An device overflow has occured
diffVal = (devVal + devValMax) - oldDevVal;
} else {
! Once the overflow flag has been set it will only be false when the device reboots
! Therefore this is the normal condition after an device overflow
diffVal = devVal - oldDevVal;
}
}
if (tmp_devVal != 0) {oSysVarEnergyCounterOldVal.State(devVal);
oSysVarEnergyCounter.State(sysVarVal + diffVal);
}

Für FSMs (obwohl im Script "PSM" steht, geht aber im Vergleich zum PSM (:6) auf eine andere Instanz => :5) :

Code: Alles auswählen

object chn = dom.GetObject('11886');
object oOverflow = chn.DPByControl('POWERMETER_PSM.ENERGY_COUNTER_OVERFLOW');
object oEnergyCounter = chn.DPByControl('POWERMETER_PSM.ENERGY_COUNTER');
object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_11886_1234567890ABC:5');
object oSysVarEnergyCounterOldVal = dom.GetObject('svEnergyCounterOldVal_11886');
boolean overFlowFlag = oOverflow.Value();
real devVal = oEnergyCounter.Value();
real devValMax = oEnergyCounter.ValueMax();
real oldDevVal = oSysVarEnergyCounterOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarEnergyCounter.Value();
integer tmp_devVal = (devVal.ToString().ToFloat() * 1000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 1000).ToInteger();
if (overFlowFlag == false) {
! Normal conditions
if (tmp_oldDevVal <= tmp_devVal) {
diffVal = devVal - oldDevVal;
}
! Device has rebooted
if (tmp_oldDevVal > tmp_devVal) {
diffVal = devVal;
}
} else {
!overFlow is true
if (tmp_oldDevVal > tmp_devVal) {
! An device overflow has occured
diffVal = (devVal + devValMax) - oldDevVal;
} else {
! Once the overflow flag has been set it will only be false when the device reboots
! Therefore this is the normal condition after an device overflow
diffVal = devVal - oldDevVal;
}
}
if (tmp_devVal != 0) {oSysVarEnergyCounterOldVal.State(devVal);
oSysVarEnergyCounter.State(sysVarVal + diffVal);
}

Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten

Verfasst: 14.06.2019, 12:49
von NickHM
Baxxy hat geschrieben:
14.06.2019, 09:28
Ich würde dann mal probieren das "aktuelle" Script mit Anpassung der ID's gegen das "alte" Script auszutauschen. Vielleicht kann ich mir ja dadurch die ganze Ab/Anlerngeschichte sparen.

Danke und Grüße
baxxy
Hallo

Du kannst auch die Scripte vergleichen und die 1...3 Zeilen einfach in dem alten Script umschreiben.

Das Ab / Anlernen dient im dem Fall nur dazu, das alte Script zu löschen (was auch nicht immer funktioniert und Leichen produziert) und aus der neuen korrigierten Vorlage ein Script für den Aktor und seine neue ID zu erzeugen.

Ob jetzt das ganze Script rein kopiert wird, um dann die iDs auf die eigene Anlage anzupassen, oder im eigenen Script die Änderungen ein zu pflegen dürfte vom Aufwand ähnlich sein.

Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten

Verfasst: 14.06.2019, 14:15
von Baxxy
Hallo emeins und NickHM,
vielen Dank für die Scripte und Tipps zum umsetzen. Ich werde es bei Gelegenheit mal testen.

Schönes Wochenende!
baxxy

Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten

Verfasst: 16.06.2019, 18:37
von Baxxy
Hallo,
hier der Script-Vergleich zwischen meinem FSM (angelernt ca. Januar 2019) und emeins aktuellem gepostetem FSM Script.
FSM_svEnergyCounter_Vergleich_baxxy.JPG
Wenn man nur die letzten 3 Zeilen austauscht sollte es klappen.
Grüße
baxxy

Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten

Verfasst: 16.01.2023, 19:47
von hube_mic
Hallo zusammen,

ich bin von dem Problem auch betroffen mit meinen beiden HM-ES-WM-TX Zählern (Strom + Wasserzähler). Ich habe es gelöst mit dieser Anleitung: https://smart-wohnen.org/homematic-ausf ... terbinden/
Wenn das Skript später ausgeführt wird, dann tritt das Problem nicht mehr auf. Soweit ich das analysieren konnte ist die Systemvariable svEnergyCounterOldVal_xxx am Anfang noch 0 und deshalb wird einfach der Zählerstand des Gerätes zur Systemvariable der CCU hinzugezählt.

Vielleicht hilft es noch jemanden...

VG