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.
Reboot CCU ändert Energiezähler bei HMIP-Geräten
Moderator: Co-Administratoren
- Baxxy
- Beiträge: 10950
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 618 Mal
- Danksagung erhalten: 2257 Mal
Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten
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
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten
Für PSMs:
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('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
Grund: Code in Codetags posten
-
- Beiträge: 3734
- Registriert: 23.09.2017, 12:04
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 121 Mal
Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten
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: 10950
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 618 Mal
- Danksagung erhalten: 2257 Mal
Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten
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
vielen Dank für die Scripte und Tipps zum umsetzen. Ich werde es bei Gelegenheit mal testen.
Schönes Wochenende!
baxxy
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
- Baxxy
- Beiträge: 10950
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 618 Mal
- Danksagung erhalten: 2257 Mal
Re: Reboot CCU ändert Energiezähler bei HMIP-Geräten
Hallo,
hier der Script-Vergleich zwischen meinem FSM (angelernt ca. Januar 2019) und emeins aktuellem gepostetem FSM Script. Wenn man nur die letzten 3 Zeilen austauscht sollte es klappen.
Grüße
baxxy
hier der Script-Vergleich zwischen meinem FSM (angelernt ca. Januar 2019) und emeins aktuellem gepostetem FSM Script. Wenn man nur die letzten 3 Zeilen austauscht sollte es klappen.
Grüße
baxxy
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
-
- 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
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
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