@marty56 sagte in Homematic Lowbat und Unreach Status fehlerhaft:
@haselchen
Das Löschen hat die Fehler gelöscht. So weit so gut.
Ich würde aber dennoch verstehen, was da passiert ist, denn so kann ich mich auf die Werte gar nicht mehr richtig verlassen.
Ich habe meinen Raspberry erst vor einen Tag neu gestartet.
Hallo,
der Fehler das einige Statusmeldungen nicht im iobroker ankommen/zurückgesetzt werden habe ich leider auch schon lange Zeit.
Was meist sicher funktioniert: status kommt an, z.B. UNREACH,LOWBAT, ...
Oft bleibt der Status aber hängen.
Ich habe ein kleines Skript, was das repariert. Wenn ich in Homematic keine Servicemeldungen habe, dann lösche ich sie auch in iobroker:
var instanz = 'javascript.0.';
// Service Meldungen
var SelectorUNREACH = $('channel[state.id=hm-rpc.0.*.UNREACH]');
//var SelectorUNREACH = $('channel[state.id=*.UNREACH]');
// var SelectorSTICKY_UNREACH = $('channel[state.id=^hm-rpc.0.*.STICKY_UNREACH$]');
var SelectorLOWBAT = $('channel[state.id=hm-rpc.0.*.LOWBAT]');
var SelectorCONFIG_PENDING = $('channel[state.id=hm-rpc.0.*.CONFIG_PENDING]');
function delService(obj) {
var anzahl = 0;
var text = "";
log("Start");
function delid(id) {
try {
// log(id);
var status = getState(id).val; // Zustand abfragen (jedes Element)
if (status) { // wenn Zustand = true, dann löschen
text = text + getObject(id).common.name + ","; // Zu String hinzufügen
++anzahl; // Zählt die Anzahl der Service-Alarme
log(getObject(id).common.name);
setState(id,false);
}
}
catch (err) {
log("ERR:"+err);
}
}
SelectorUNREACH.each(function (id, i) {
// log(id);
delid(id);
});
// SelectorSTICKY_UNREACH.each(function (id, i) {
// var status = getState(id).val; // Zustand abfragen (jedes Element)
// if (status) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
// log('STICKY_UNREACH Meldung: ' + id + ' wurde auf <true> gesetzt. Das Homematic Gerät ist wieder uneingeschränkt erreichbar.');
// setState(id, false); // STICKY_UNREACH werden gelöscht
// }
// });
SelectorLOWBAT.each(function (id, i) {
delid(id);
});
SelectorCONFIG_PENDING.each(function (id, i) {
delid(id);
});
// Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon Service zutreffend) ausgegeben
// die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert
if (!anzahl) {
text = "keine Servicemeldungen";
}
log("Anzahl Homematic-Servicemeldungen: " + anzahl);
log("Text Homematic-Servicemeldungen: " + text);
}
// Ausführung bei Scriptstart
delService();
// deaktiviert
Triggern tue ich dass wenn die Servicemeldungen in der CCU auf 0 gehen (habe ich als Rega-Variable).
Wenn du das mal aus versehen laufen lassen hast, dann mußt du nur rpc mit "Neu einlesen" neu starten, dann ist wieder alles sauber.