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

Fehler in Firmware und WebUI & Workarounds

Moderator: Co-Administratoren

emeins
Beiträge: 16
Registriert: 15.11.2017, 12:50
Hat sich bedankt: 1 Mal

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

Beitrag von emeins » 13.06.2019, 19:32

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.

Benutzeravatar
Baxxy
Beiträge: 10646
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 596 Mal
Danksagung erhalten: 2180 Mal

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

Beitrag von Baxxy » 14.06.2019, 09:28

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

emeins
Beiträge: 16
Registriert: 15.11.2017, 12:50
Hat sich bedankt: 1 Mal

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

Beitrag von emeins » 14.06.2019, 10:26

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);
}
Zuletzt geändert von alchy am 16.06.2019, 20:07, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

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

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

Beitrag von NickHM » 14.06.2019, 12:49

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.


Benutzeravatar
Baxxy
Beiträge: 10646
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 596 Mal
Danksagung erhalten: 2180 Mal

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

Beitrag von Baxxy » 16.06.2019, 18:37

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

hube_mic
Beiträge: 18
Registriert: 19.01.2021, 19:25
System: CCU
Wohnort: Bayern
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

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

Beitrag von hube_mic » 16.01.2023, 19:47

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

Antworten

Zurück zu „HomeMatic - bekannte Bugs“