Hallo zusammen,
Ich habe mir mal einen Skript gebaut mit welchem ich die letzte Antwortzeit meines Wettersensor HmIP-SWO-B abfrage und mich benachrichtigt wenn 10 Minuten ohne Aktualsierung überschritten sind. Typischerweise habe ich mehrere Meldungen pro Tag erhalten, interessanterweise hat sich der HMIP Server aber teils wieder "aufgefangen" und die Sensoren haben den Status wieder gemeldet. Wenn 30 Minuten überschritten waren musste der HMIP Server immer neu gestartet werden.
Folgende Massnahmen habe ich in den letzten Wochen erfolglos getestet:
- CCU3 auf Werkszustand zurücksetzen, aber Backup wieder eingespielt
- Duty Cycle überwacht
- Add-on entfernt (Watchdog, Historian)
- neuste Firmware Versionen
- Internet Verbindung überwacht
- HM-IP PSM vom System entfernt
- Standort der CCU3 geändert
- systemnahe Skripte (Service Skript) deaktiviert
Dann bin ich letzte Woche auf einige systeminterne Programme gestossen welche wahrscheinlich die HMIP Geräte selbstständig angelegt haben (Screenshot). Diese habe ich mal vorsorglich alle de-aktiviert und siehe da, seit 6 Tagen kein Problem mehr mit den HMIP Komponenten und nicht eine einzige Meldung, dass sich der Wettersensor seit länger als 10 Minuten nicht gemeldet hat.
Vielleicht kann einer von euch Profis dieser Spur mal nachgehen?
--------------------------
Hier noch einige Information zu diesen Programmen. Es wurden total 4 syteminterne Programme angelegt:
a) @HomeNotificationSenderV2 - wurde von der @Home App angelegt und ist noch aktiv. Ich schliesse dieses als Fehlerursache somit aus
b) prgEnergyCounter_18751_MEQ1342283:2 - bezieht sich auf einen HM-ES-PMSw1-Pl-DN-R5 Schalter, da kein HMIP Gerät wahrscheinlich auch nicht die Fehlerquelle aber hier mal der Skript, dieser wird bei Aktualisierung abgelöst wenn der Energiezähler >0 liefert:
Code: Alles auswählen
object chn = dom.GetObject('18751');
object oBoot = chn.DPByControl('POWERMETER.BOOT');
object oEnergyCounter = chn.DPByControl('POWERMETER.ENERGY_COUNTER');
object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_18751_MEQ1342283:2');
object oSysVarEnergyCounterOldVal = dom.GetObject('svEnergyCounterOldVal_18751');
boolean bootFlag = oBoot.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() * 100000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 100000).ToInteger();
if (oldDevVal <= 0) {
oSysVarEnergyCounterOldVal.State(devVal);
oSysVarEnergyCounter.State(devVal);
} else {
if ( ( bootFlag == true ) && ( tmp_devVal < tmp_oldDevVal ) ) {
diffVal = devVal;
} else {
if (tmp_devVal >= tmp_oldDevVal) {
diffVal = devVal - oldDevVal;
}
if ((tmp_devVal > 0) && (tmp_devVal < tmp_oldDevVal)) {
diffVal = (devVal + devValMax) - oldDevVal;
}
}
if (devVal > 0) {
oSysVarEnergyCounterOldVal.State(devVal);
}
oSysVarEnergyCounter.State(sysVarVal + diffVal);
}
c) prgDailySunshineRainCounter_40570 - wird täglich um 7:00 ausgelöst, da ich die Probleme nie um Punkt 7:00 hatte wohl auch nicht die Ursache des Übels
Code: Alles auswählen
object chn = dom.GetObject('40570');
object oSysVarSunshineCounterToday = dom.GetObject('svHmIPSunshineCounterToday_40570');
object oSysVarSunshineCounterYesterday = dom.GetObject('svHmIPSunshineCounterYesterday_40570');
object oSysVarRainCounterToday = dom.GetObject('svHmIPRainCounterToday_40570');
object oSysVarRainCounterYesterday = dom.GetObject('svHmIPRainCounterYesterday_40570');
if (oSysVarSunshineCounterYesterday && oSysVarSunshineCounterToday) {oSysVarSunshineCounterYesterday.State(oSysVarSunshineCounterToday.Value());}if (oSysVarSunshineCounterToday) {oSysVarSunshineCounterToday.State(0);}if (oSysVarRainCounterYesterday && oSysVarRainCounterToday) {oSysVarRainCounterYesterday.State(oSysVarRainCounterToday.Value());}if (oSysVarRainCounterToday) {oSysVarRainCounterToday.State(0);}
d) prgSunshineCounter_40570_0017D709AE2D51:1 - dieser wird bei Aktualisierung ausgeführt wenn die Helligkeit >= 0 ist, da ich nachts nie einen HMIP Server Ausfall hatte ist dies mein Tipp für die Urasche des HMIP Übels!
Code: Alles auswählen
object chn = dom.GetObject('40570');
object oOverflow = chn.DPByControl('WEATHER_TRANSMIT.SUNSHINEDURATION_OVERFLOW');
object oSunshineCounter = chn.DPByControl('WEATHER_TRANSMIT.SUNSHINEDURATION');
object oSysVarSunshine = dom.GetObject('svHmIPSunshineCounter_40570_0017D709AE2D51:1');
object oSysVarSunshineOldVal = dom.GetObject('svHmIPSunshineCounterOldVal_40570');
object oSysVarCounterToday = dom.GetObject('svHmIPSunshineCounterToday_40570');
object oSysVarCounterYesterday = dom.GetObject('svHmIPSunshineCounterYesterday_40570');
boolean overFlowFlag = oOverflow.Value();
real devVal = oSunshineCounter.Value();
real devValMax = oSunshineCounter.ValueMax();
real oldDevVal = oSysVarSunshineOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarSunshine.Value();
real sysVarTodayVal = oSysVarCounterToday.Value();
real todayTotal = 0.0;
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;
}
}
oSysVarSunshineOldVal.State(devVal);
oSysVarSunshine.State(sysVarVal + diffVal);
todayTotal = sysVarTodayVal + diffVal;
if (todayTotal >= 1440.0) {todayTotal = 0.0;}
oSysVarCounterToday.State(todayTotal);