NEWS
Javascript batterie Status per mail
-
Wer kann weiterhelfen,
der Wunsch ist eigentlich ganz einfach formuliert,
Überwache alle geräte die eine Batterie haben auf den Batterie Status und bei unter 20% sende eine Email. Die basis ist folgendes Script hier aus dem Forum:
OriginalcreateState('zählenLowbat.möglicheLOWBAT', 0, {type: 'number'}); // wenn benötigt: Anzahl der vorhandenen LOWBAT createState('zählenLowbat.anzahlLOWBAT', 0, {type: 'number'}); // wenn benötigt: Anzahl der tatsächlichen LOWBAT createState('zählenLowbat.textLOWBAT', " ", {type: 'string'}); // Anzeige der LOWBAT //const hmLOWBAT = $('hm-rpc.*.0.LOWBAT'); const mipercent = $('mihome.*.percent'); const loggen = false; // = false, wenn kein Logging gewünscht var arrLOWBAT; function lowbat(id) { var obj = getObject(id); arrLOWBAT.push(obj.common.name); // Zu Array hinzufügen if(loggen) log("Gerät: " + obj.common.name); } function lowbat(id) { var name = getObject(id).common.name; if(name.IndexOf(':0.LOWBAT') != -1) name = name.substring(0, name.indexOf('.0.LOWBAT')); arrLOWBAT.push(name); // Zu Array hinzufügen if(loggen) log("Gerät: " + name); } function countLowbat() { // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0 var moeglicheLOWBAT = 0; arrLOWBAT = []; /* hmLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT if(getState(id).val) lowbat(id); ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status });*/ mipercent.each(function (id, i) { // Schleife für jedes gefundenen Element *.percent if(getState(id).val < 80) lowbat(id); ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status }); // Schleifen sind durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben if(loggen) log("Text: " + arrLOWBAT.join(', ')); if(loggen) log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " + arrLOWBAT.length); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState("zählenLowbat.textLOWBAT", arrLOWBAT.join(',')); // Schreibt die Namen der Geräte mit LOWBAT Meldung setState("zählenLowbat.anzahlLOWBAT", arrLOWBAT.length); // Schreibt die Anzahl der LOWBAT-Meldungen setState("zählenLowbat.möglicheLOWBAT", moeglicheLOWBAT); // Schreibt die Anzahl der vorhandene Geräte } countLowbat{}; // Skriptstart schedule("*/60 * * * *", countLowbat);
Jetzt wollte ich es so anpassen sieht jemand den Fehler ?
hier die erweiterung um Email, und immer kommt eine Fehlermeldung!
Und wie füge ich in die mail Object + Raum mit ein ?createState('zählenLowbat.möglicheLOWBAT', 0, {type: 'number'}); // wenn benötigt: Anzahl der vorhandenen LOWBAT createState('zählenLowbat.anzahlLOWBAT', 0, {type: 'number'}); // wenn benötigt: Anzahl der tatsächlichen LOWBAT createState('zählenLowbat.textLOWBAT', " ", {type: 'string'}); // Anzeige der LOWBAT //const hmLOWBAT = $('hm-rpc.*.0.LOWBAT'); const mipercent = $('mihome.*.percent'); const loggen = false; // = false, wenn kein Logging gewünscht var arrLOWBAT; function lowbat(id) { var obj = getObject(id); arrLOWBAT.push(obj.common.name); // Zu Array hinzufügen if(loggen) log("Gerät: " + obj.common.name); } function lowbat(id) { var name = getObject(id).common.name; if(name.IndexOf(':0.LOWBAT') != -1) name = name.substring(0, name.indexOf('.0.LOWBAT')); arrLOWBAT.push(name); // Zu Array hinzufügen if(loggen) log("Gerät: " + name); } function countLowbat() { // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0 var moeglicheLOWBAT = 0; arrLOWBAT = []; /* hmLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT if(getState(id).val) lowbat(id); ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status });*/ mipercent.each(function (id, i) { // Schleife für jedes gefundenen Element *.percent if(getState(id).val < 80) lowbat(id); ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status }); // Schleifen sind durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben if(loggen) log("Text: " + arrLOWBAT.join(', ')); if(loggen) log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " + arrLOWBAT.length); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState("zählenLowbat.textLOWBAT", arrLOWBAT.join(',')); // Schreibt die Namen der Geräte mit LOWBAT Meldung setState("zählenLowbat.anzahlLOWBAT", arrLOWBAT.length); // Schreibt die Anzahl der LOWBAT-Meldungen setState("zählenLowbat.möglicheLOWBAT", moeglicheLOWBAT); // Schreibt die Anzahl der vorhandene Geräte if(arrLOWBAT.length > 0){ sendTo("email", { from: "xxxx@xxxx", to: "xxx@xxxx", subject: "Batterie Status", text: "Guten Morgen Carmen, \n übersicht batterie stand " + arrLOWBAT.length } )}; } countLowbat{}; // Skriptstart schedule("*/60 * * * *", countLowbat);