NEWS
[Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe
-
@pittini
Danke probiere ich morgen aus. -
Hallo und vielen Dank für dieses super Script.
Ich habe eine Frage, kann man einstellen, wie häufig das Script ausgeführt wird, bzw. wie häufig die Meldungen kommen.
Ich habe Pushover als Benachrichtigung eingestellt, aber die Nachrichten kommen ca. im Stundentakt.Gruß
Christian -
@c-radi Ich nehm mal an, es geht um dieses Problem: https://github.com/Pittini/iobroker-Batterienauswertung/issues/22 Wird gefixt sobald ich Zeit über hab.
-
Habe das Script erst heute installiert und deswegen noch nicht viel Erfahrung damit, aber ich würde das Problem über ein Array lösen, in dem ich mir einfach die bereits erzeugten Meldungen von einem Tag merken würde und diese dann ignorieren würde.
Ab Zeile 63 ein neues Array "MekerMeldungen" erstellen. (Name kann frei definiert werden)
let MekerMeldungen = [];
Die function Meldung(msg) dann folgendermaßen ändern:
function Meldung(msg) { let Start = msg.indexOf('unter'); if (Start <=0){Start = 0} if (!MekerMeldungen.includes(msg.substr(Start))){ MekerMeldungen.push(msg.substr(Start)); log("Reaching Meldung(), msg=" + msg); if (UseSay) Say(msg); if (UseTelegram) { sendTo(TelegramInstance, "send", { user: TelegramUser, text: msg }); }; if (UseMail) { sendTo("email", { html: msg }); }; if (UseAlexa) { if (AlexaId != "") setState(AlexaInstance + ".Echo-Devices." + AlexaId + ".Commands.announcement"/*announcement*/, AlexaVolume + "; " + msg); }; if (UsePushover) { sendTo(PushoverInstance, { device: PushoverDevice, message: msg, title: PushOverTitle, priority: 0, retry: 60, expire: 600, html: 1 }); }; } if (logging) log(msg); if (UseEventLog) WriteEventLog(msg); if (UsePopUp) ShowPopUp(true, msg, "Batterys", "red"); }
Um aber jeden Tag wieder eine Meldung zu bekommen, muss jetzt nur noch jeden Tag das Array "MekerMeldungen" gelöscht werden.
Am einfachsten über ein Schedule:schedule({hour: 0, minute: 1}, function () { MekerMeldungen = []; });
Vielleicht will ja Pittini das übernehmen oder es gibt eine bessere Lösung.
Nachtrag:
Habe gerade bemerkt das im msg String auch die aktuelle Spannung enthalten ist.
Somit würde mein Vorschlag so nicht funktionieren, da jede Spannungsänderung als neue Meldung durchrutschen würde.
Eine Möglichkeit wäre, die aktuelle Spannung aus dem Meldungstext zu entfernen.
Habe meinen Code oben jetzt korrigiert.
Ich suche in der Variable msg jetzt das Wort „unter“ und verwende den String ab diesem Wort, um gleiche Meldungen zu filtern.
Funktioniert erst mal. -
Ich hab mal eine Frage, ich habe meine Geräte nun alle mit dem Script verknüpft, was mache ich denn bei solchen Kandidaten ?
Da gibt es nur Batterie %
-
@d3ltoroxp Genauso anlegen wie alle anderen auch, erkennt das Skript selber was das ist. Siehe auch Anleitung .2.
-
@pittini Vielen Dank, ich hatte auf Git die Anleitung durchgelesen aber ich finde diesen Punkt nicht, ich muss Blind sein ? Was gebe ich denn da an ?
BatteryMinLimit_30
EDIT :: Ich habs gefunden, gleich 2 Satz.
Diese neue Funktion DeadCheck kann ich auch nutzen für z.b. Fensterkontakte, um zu schauen ob sie noch eine Verbindung haben oder erreichbar sind, genau so wie Geräte die gar keine Batterie haben.
-
@Pittini Da es ja bekanntermaßen Probleme mit dem DeadCheck gibt, weil sich States oft nur selten melden, wäre ein DeadCheck mit Zeitangabe sinnvoll?
Also quasi DeadCheck_24 für 24h oder DeadCheck_72 für 72h....... -
@schmakus Isses Wert drüber nachzudenken. Da ich grad aber keine Zeit hab, bitt Issue auf Git, damits nicht vergessen wird, ob ich je dazukomme is ne andere Frage.
-
@Pittini
Wollte gerade die 1.8.5 von deinem Skript mal testen (zur zeit läuft die 1.8.1) Er schmeiß mir aber beim starten die fehler ins Logjavascript.0 2022-01-15 13:17:03.876 error at processImmediate (internal/timers.js:466:21) javascript.0 2022-01-15 13:17:03.876 error at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1986:38) javascript.0 2022-01-15 13:17:03.876 error at Object.<anonymous> (script.js.common.System.Batt_185:126:13) javascript.0 2022-01-15 13:17:03.876 error at main (script.js.common.System.Batt_185:266:5) javascript.0 2022-01-15 13:17:03.876 error at MakeTable (script.js.common.System.Batt_185:610:75) javascript.0 2022-01-15 13:17:03.876 error Error in callback: TypeError: Cannot read property 'toFixed' of undefined javascript.0 2022-01-15 13:17:03.868 info script.js.common.System.Batt_185: registered 0 subscriptions and 0 schedules
Hast du eine Idee was ich falsch mache, habe bis jetzt nur den DP fürs Skript auf userdata.0 geändert
-
@frank579 Zeig mal Einstellungen und kontrollier obs irgendwo nen leeren Datenpunkt gibt.
-
@pittini
Super der leere Datenpunkt wars, hatte noch eine Leiche im Alias drin, wurde beim alten Skript als Dead erkannt.
Vielen Dank -
@d3ltoroxp said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
Diese neue Funktion DeadCheck kann ich auch nutzen für z.b. Fensterkontakte, um zu schauen ob sie noch eine Verbindung haben oder erreichbar sind, genau so wie Geräte die gar keine Batterie haben.
Kann ich den DeadCheck denn für Geräte ohne Batteriemeldung verwenden {scheint mir nicht so), oder muss ich dann einen Dummy DP erstellen der für den Batteriewert verwendet werden kann?
Ich würde den DeadCheck gerne für weitere Geräte verwenden, wäre nur gut wenn es ausreichen würde diese Geräte nur dem DeadCheck zuzuweisen. Oder habe ich da was falsch eingestellt? -
@dog-rgb said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
@d3ltoroxp said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
Diese neue Funktion DeadCheck kann ich auch nutzen für z.b. Fensterkontakte, um zu schauen ob sie noch eine Verbindung haben oder erreichbar sind, genau so wie Geräte die gar keine Batterie haben.
Kann ich den DeadCheck denn für Geräte ohne Batteriemeldung verwenden {scheint mir nicht so), oder muss ich dann einen Dummy DP erstellen der für den Batteriewert verwendet werden kann?
Ich würde den DeadCheck gerne für weitere Geräte verwenden, wäre nur gut wenn es ausreichen würde diese Geräte nur dem DeadCheck zuzuweisen. Oder habe ich da was falsch eingestellt?Der DeadCheck arbeitet autark von der Batteriespannung. Du kannst demnach auch nur den DeadCheck verwenden.
-
@schmakus said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
@dog-rgb said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
@d3ltoroxp said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
Diese neue Funktion DeadCheck kann ich auch nutzen für z.b. Fensterkontakte, um zu schauen ob sie noch eine Verbindung haben oder erreichbar sind, genau so wie Geräte die gar keine Batterie haben.
Kann ich den DeadCheck denn für Geräte ohne Batteriemeldung verwenden {scheint mir nicht so), oder muss ich dann einen Dummy DP erstellen der für den Batteriewert verwendet werden kann?
Ich würde den DeadCheck gerne für weitere Geräte verwenden, wäre nur gut wenn es ausreichen würde diese Geräte nur dem DeadCheck zuzuweisen. Oder habe ich da was falsch eingestellt?Der DeadCheck arbeitet autark von der Batteriespannung. Du kannst demnach auch nur den DeadCheck verwenden.
Ich habe den Eindruck das dies nicht der Fall ist. Wenn ich einen DP nur im DeadCheck habe, dann taucht der weder in der Liste noch im Logging auf (wenn ich es einschalte).
-
@dog-rgb said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
@schmakus said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
@dog-rgb said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
@d3ltoroxp said in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:
Diese neue Funktion DeadCheck kann ich auch nutzen für z.b. Fensterkontakte, um zu schauen ob sie noch eine Verbindung haben oder erreichbar sind, genau so wie Geräte die gar keine Batterie haben.
Kann ich den DeadCheck denn für Geräte ohne Batteriemeldung verwenden {scheint mir nicht so), oder muss ich dann einen Dummy DP erstellen der für den Batteriewert verwendet werden kann?
Ich würde den DeadCheck gerne für weitere Geräte verwenden, wäre nur gut wenn es ausreichen würde diese Geräte nur dem DeadCheck zuzuweisen. Oder habe ich da was falsch eingestellt?Der DeadCheck arbeitet autark von der Batteriespannung. Du kannst demnach auch nur den DeadCheck verwenden.
Ich habe den Eindruck das dies nicht der Fall ist. Wenn ich einen DP nur im DeadCheck habe, dann taucht der weder in der Liste noch im Logging auf (wenn ich es einschalte).
Du könntest tatsächlich recht haben:
21.06.21 (1.8.1) Change: Die bisherige automatische DeadCheckfunktion auf dem Batteriespannungdatenpunkt wurde entfernt aufgrund von einigen, insbesonders HM, Geräten welche kaum oder nicht aktualisieren. Wird ein DeadCheck gewünscht, so muß die Funktion "DeadCheck" explizit auf den gwünschten Datenpunkt gelegt werden. Dies muß innerhalb des gleichen Channels wie der Batteriedatenpunkt geschehen. https://github.com/Pittini/iobroker-Batterienauswertung/issues/18
-
Ich hab gerade das Skript aktualisiert, hat das einen Grund, dass die Einstellungen zum Ausschalten für die Tabellenspalten doppelt vorhanden sind?
/Tabellen Einstellungen const TblOkBgColor = "#4caf50"; //Hintergrundfarbe für Batteriestatus Ok const TblInfoBgColor = "#ffc107"; //Hintergrundfarbe für Batteriestatus Info, also die leerste Batterie welche noch nicht das Limit unterschreitet const TblWarnBgColor = "#f44336"; //Hintergrundfarbe für Batteriestatus Warnung, also jene Batterie welche unter das Limit kam. const TblDeadBgColor = "grey"; //Hintergrundfarbe für Batterie/Geräte Status tot. const HeadBgColor = "dimgrey"; //Hintergrundfarbe des Tabellenkopfes const FontColor = "black"; //Textfarbe für Tabelleninhalt const HeadFontColor = "white"; //Textfarbe für Tabellenkopf const TblShowLfdCol = true; //Tabellenspalte mit laufender Nummer anzeigen? const TblShowDeviceIDCol = true; //Tabellenspalte mit Geräte ID anzeigen? const TblShowDeviceNameCol = true; //Tabellenspalte mit Gerätenamen anzeigen? const TblShowRoomCol = true; //Tabellenspalte mit Raum anzeigen? const TblShowUmaxCol = true; //Tabellenspalte mit Batterie Nennspannung anzeigen? const TblShowUistCol = true; //Tabellenspalte mit aktueller Batteriespannung anzeigen? const TblShowUlimitCol = true; //Tabellenspalte mit unterer Batterielimit Spannung anzeigen? const TblShowProzbatCol = true; //Tabellenspalte mit Batteriestand in Prozent anzeigen? const TblShowProzliveCol = true; //Tabellenspalte mit Restlebensdauer unter Berücksichtigung der Limitspannung in Prozent anzeigen? Beispiel: Batterie hat 3V Nennspannung, Limit ist bei 2V, aktueller Batteriestand ist 2.5V, dann wäre die Restlebensdauer 50% const TblShowStatusCol = true; //Tabellenspalte mit Status ausgeben? const TblShowHasDeadCheck = true; //Tabellenspalte mit DeadCheckstatus ausgeben? //Spalten der JSON Tabellen bei Bedarf ausschalten const TblJSNShowLfdCol = true; //Tabellenspalte mit laufender Nummer anzeigen? const TblJSNShowDeviceIDCol = true; //Tabellenspalte mit Geräte ID anzeigen? const TblJSNShowDeviceNameCol = true; //Tabellenspalte mit Gerätenamen anzeigen? const TblJSNShowRoomCol = true; //Tabellenspalte mit Raum anzeigen? const TblJSNShowUmaxCol = true; //Tabellenspalte mit Batterie Nennspannung anzeigen? const TblJSNShowUistCol = true; //Tabellenspalte mit aktueller Batteriespannung anzeigen? const TblJSNShowUlimitCol = true; //Tabellenspalte mit unterer Batterielimit Spannung anzeigen? const TblJSNShowProzbatCol = true; //Tabellenspalte mit Batteriestand in Prozent anzeigen? const TblJSNShowProzliveCol = true; //Tabellenspalte mit Restlebensdauer unter Berücksichtigung der Limitspannung in Prozent anzeigen? Beispiel: Batterie hat 3V Nennspannung, Limit ist bei 2V, aktueller Batteriestand ist 2.5V, dann wäre die Restlebensdauer 50% const TblJSNShowStatusCol = true; //Tabellenspalte mit Status ausgeben? const TblJSNShowHasDeadCheck = true; //Tabellenspalte mit DeadCheckstatus ausgeben?
-
@dominik-f Ja hat es, das eine is für die HTML Tabelle, das andere für die JSON Tabelle.
-
Achso, hatte bei beiden nur Tabelle gelesen
-
DeadCheck kann ich indem Fall auch einfach auf den DP available legen ? Wenn der nicht mehr aktualisiert wird, wird das Device dann unter Dead angezeigt ?