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

Fehler in Firmware und WebUI & Workarounds

Moderator: Co-Administratoren

emeins
Beiträge: 9
Registriert: 15.11.2017, 12:50

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.

Baxxy
Beiträge: 29
Registriert: 18.12.2018, 15:45

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: 9
Registriert: 15.11.2017, 12:50

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: 2652
Registriert: 23.09.2017, 12:04

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.

Baxxy
Beiträge: 29
Registriert: 18.12.2018, 15:45

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

Beitrag von Baxxy » 14.06.2019, 14:15

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

Baxxy
Beiträge: 29
Registriert: 18.12.2018, 15:45

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

Antworten

Zurück zu „HomeMatic - bekannte Bugs“