NEWS
Abfrage des Batteriestatus
-
Ich versuche mich bereits seit einigen Tagen daran den Batteriestatus meiner Homematic-Geräte abzufragen und daraus einen Systemstatus zu generieren den ich dann wieder im VIS anzeigen möchte.
Ich habe einen z.B. Status BatterieStatusFensterOk erstellt der true oder false sein soll, des lasse ich mir im VIS anzeigen. Nur funktioniert das so wie ich es mache nicht mit dem umschalten. Ich habe bisher versucht:
schedule("* * * * * *", function () { // Büro var Fenster_EDVFFB_Dach01 = getState('hm-rpc.1.NEQ0627501.0.LOWBAT').val; if (Fenster_EDVFFB_Dach01) { setState("System.BatterieStatusFensterOk", false); } else if (!Fenster_EDVFFB_Dach01) { setState("System.BatterieStatusFensterOk", true); } var Fenster_EDVFFB_Dach02 = getState('hm-rpc.1.NEQ0627514.0.LOWBAT').val; if (Fenster_EDVFFB_Dach02) { setState("System.BatterieStatusFensterOk", false); } else if (!Fenster_EDVFFB_Dach02) { setState("System.BatterieStatusFensterOk", true); } var Fenster_EDVFFB_Dach03 = getState('hm-rpc.1.NEQ0627595.0.LOWBAT').val; if (Fenster_EDVFFB_Dach03) { setState("System.BatterieStatusFensterOk", false); } else if (!Fenster_EDVFFB_Dach03) { setState("System.BatterieStatusFensterOk", true); } var Fenster_EDVFFB_1OG = getState('hm-rpc.1.NEQ0063954.0.LOWBAT').val; if (Fenster_EDVFFB_1OG) { setState("System.BatterieStatusFensterOk", false); } else if (!Fenster_EDVFFB_1OG) { setState("System.BatterieStatusFensterOk", true); } var Wandthermostat_EDVFFB = getState('hm-rpc.1.OEQ0578298.0.LOWBAT').val; if (Wandthermostat_EDVFFB) { setState("System.BatterieStatusHeizungOk", false); } else if (!Wandthermostat_EDVFFB) { setState("System.BatterieStatusHeizungOk", true); } var Heizung_EDVFFB = getState('hm-rpc.1.OEQ2633740.0.LOWBAT').val; if (Heizung_EDVFFB) { setState("System.BatterieStatusHeizungOk", false); } else if (!Heizung_EDVFFB) { setState("System.BatterieStatusHeizungOk", true); } var Lichttaster_EDVFFB_2OG = getState('hm-rpc.1.MEQ0444933.0.LOWBAT').val; if (Lichttaster_EDVFFB_2OG) { setState("System.BatterieStatusOk", false); } else if (!Lichttaster_EDVFFB_2OG) { setState("System.BatterieStatusOk", true); } var Lichttaster_EDVFFB_1OG = getState('hm-rpc.1.MEQ0444892.0.LOWBAT').val; if (Lichttaster_EDVFFB_1OG) { setState("System.BatterieStatusOk", false); } else if (!Lichttaster_EDVFFB_1OG) { setState("System.BatterieStatusOk", true); } });
Funktioniert leider nicht wie gewünscht. Alternativ habe ich noch versucht
schedule("* * * * * *", function () { var status=!(getState("hm-rpc.1.NEQ0063951.0.LOWBAT").val || getState("hm-rpc.1.NEQ0627517.0.LOWBAT").val) || getState('hm-rpc.1.NEQ0064004.0.LOWBAT').val;; setState("System.BatterieStatusFensterOk", status); });
Funktioniert nur bei 2 Geräten. Die Abfrage jede Sekunde ist nur testweise, wird wenns läuft auf 15 Minuten geändert.
Was mache ich falsch bzw. hat jemand einen Tip für mich?
Ich möchte es nicht über die CCU machen da ich zukünftig alles über den ioBroker steuern will, das ist übersichtlicher....
Grüße
Norbert -
@funcarv3r
Für solche Abfragen gibt es den $Selector.const idsLOWBAT = $('hm-rpc.1.*.0.LOWBAT'); function lowbatt() { let ok = true; idsLOWBAT.each(function(id, i) { if(getState(id).val) { ok = false; break; } } setState("System.BatterieStatusFensterOk", ok, true); } lowbatt(); // Script start idsLOWBAT.on(lowbatt);
-
@paul53
Hm, muss mich da mal einlesen was den $Selector angeht, ich muss hier weiter filtern auf Gewerke da ich unterscheiden will nach Fenster, Heizung und sonstigenGeräten wie z.B. Bewegungsmeldern.Bei dem Script von dir bekomme ich nur leider einen Fehler:
javascript.0 (601) script.js.common.BatterieStatusOk_Test2 compile failed: at script.js.common.BatterieStatusOk_Test2:10
in Zeile 10 steht der break;
-
@funcarv3r Warum nimmst du nicht das Script von @Pittini?
-
@funcarv3r in diesem script gibt es beispiele für selektoren und homematic - https://forum.iobroker.net/topic/28789/script-fürtabelle-der-batterie-zustände
-