Dieses Skript dient der Abfrage des Batteriestandes Deiner ZigBee Geräte. Es läuft in Standardeinstellung nachts um 1 Uhr und stellt alle wesentlichen Informationen wie Gerätename, Raum und Batteriestand (in Volt und Prozent) bereit und schickt sie Dir per WhatsApp zu.
Vorbereitung
Damit dieses Skript zuverlässig funktioniert, benötigst Du mein Skript für den WhatsAppBot. Nebenbei erwähnt kannst Du das Skript auch verwenden, um die Mitteilungen per E-Mail zu versenden. Dazu sind ein paar Anpassungen notwendig.
Skript
Zuerst erstellst du ein neues Javascript im Bereich common.
/* * @copyright 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln> * * @author 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln> * * Dieses Skript dient zur freien Verwendung in ioBroker zur Status-Abfrage der ZigBee Geräte. * Jegliche Verantwortung liegt beim Benutzer. Das Skript wurde unter Berücksichtigung der bestmöglichen Nutzung * und Performance entwickelt. * Der Entwickler versichert, das keine böswilligen Systemeingriffe im originalen Skript vorhanden sind. * * Sollte das Skript wider Erwarten nicht korrekt funktionieren, so hast Du jederzeit die Möglichkeit, Dich auf * https://www.kreyenborg.koeln * für Unterstützung zu melden. Jedes Skript besitzt seine eigene Kommentarseite, auf der, * nach zeitlicher Möglichkeit des Autors, Hilfe angeboten wird. Ein Anrecht hierauf besteht nicht! * * Ansprüche gegenüber Dritten bestehen nicht. * * Skript Name: ZigBee Batterie Status * Skript Version: 1.2 * Erstell-Datum: 15. Oktober 2021 * */ // Datenpunkt der ZigBee Geräte (Standard: zigbee.0) var zigbee_dp = "zigbee.0"; // Datenpunkte der ZigBee (!!! Bitte nicht ändern !!!) const zigbeeDpsBattery = $('state[id=' + zigbee_dp + '.*.battery]'); function zigbeeBatterieStatus() { // Anzahl gefundene ZigBee Geräte var gefundene_geraete = new Array(); // Namen der ZigBee Geräte var geraete_namen = new Array(); // Batteriestand der ZigBee Geräte var batterie_stand = new Array(); // Batteriestand in Volt der ZigBee Geräte var batterie_volt = new Array(); // Räume der ZigBee Geräte - falls angegeben var raeume = new Array(); // Batterie Status des ZigBee Gerät var status = new Array(); log("ZigBee Batterie Status: Batterie Status wird abgefragt!"); zigbeeDpsBattery.each(function (id) { let tmp_id = id.split("."); var tmp_id_g = tmp_id[0] + "." + tmp_id[1] + "." + tmp_id[2]; gefundene_geraete.push(tmp_id_g); // Speichere Namen ab var name = getObject(tmp_id_g).common.name; if (name != "") { geraete_namen.push(name); } else { geraete_namen.push(""); } // Hole Batteriestand var tmp_batterie_stand = getState(tmp_id_g + ".battery").val; if (tmp_batterie_stand != null) { batterie_stand.push(tmp_batterie_stand + "%"); // Status der Batterie if (tmp_batterie_stand > 75) { status.push("voll"); } if (tmp_batterie_stand <= 50) { status.push("ok"); } if (tmp_batterie_stand <= 25) { status.push("fast leer"); } if (tmp_batterie_stand < 25) { status.push("kritisch"); } } else { batterie_stand.push("-%"); status.push("keine Information"); } // Hole Batterie % var tmp_batterie_volt = getState(tmp_id_g + ".voltage").val; if (tmp_batterie_volt != null) { batterie_volt.push(tmp_batterie_volt + "V"); } else { batterie_volt.push("-V"); } // Hole Raum var tmp_raum = getObject(tmp_id_g, 'rooms').enumNames[0]; if (tmp_raum != undefined) { if (tmp_raum.de != undefined) { raeume.push(tmp_raum.de); } else { raeume.push(tmp_raum); } } else { raeume.push("kein Raum"); } }); // Generiere String var text = '*ZigBee Batteriestatus von ' + gefundene_geraete.length; if (gefundene_geraete.length > 1) { text += ' Geräten*<br><br>'; } else { text += ' Gerät*<br><br>'; } for (let i = 0; i < gefundene_geraete.length; i++) { text += "*" + geraete_namen[i] + ":* " + status[i] + "<br>Raum: " + raeume[i] + " | Batterie: " + batterie_stand[i] + " | Volt: " + batterie_volt[i] + "<br><br>"; } log("ZigBee Batterie Status: Batterie Status abgefragt!"); // Sende Nachricht WhatsAppBot(0, text); //log(text); } zigbeeBatterieStatus(); // Nachts um 1 Uhr den Batteriestand abfragen schedule('0 1 * * *', zigbeeBatterieStatus);
Skript anpassen
In Zeile 117 musst du den Namen des WhatsAppBot Skriptes anpassen, wenn dieses von Dir anders benannt wurde, als in der Anleitung angegeben. Außerdem wird der jeweilige Empfänger benötigt – aber dies ist ja schon in der Anleitung zum WhatsAppBot erwähnt 😉
Solltest Du das Skript verwenden wollen, um die Nachrichten per E-Mail zu erhalten, so musst Du in Zeile 117 das “WhatsAppBot” gegen “sendTo” austauschen und ggf. den Text etwas anpassen, da dieser für die Verwendung in WhatsApp formatiert ist (* für Fettschrift).
Status Mitteilung per WhatsApp empfangen
Die Statusmitteilung erscheint wie folgt auf Deinem Mobiltelefon.
Guten Morgen aus Overath, 😉
habe Gestern dein Script gefunden und gleich mal ausprobiert, leider habe ich den Fehler bekommen :
WhatsAppBot: Fehler: Nachricht an +49152540xxxx konnte nicht verschickt werden! Error: null
kannst du mir einen Tip geben wie ich diesen Fehler beheben kann ??
Grüße Manfred
Hallo,
da müsste ich wissen, wie das Skript verwendet wird.
Bitte den Code dazu einstellen.
Gruß,
Stephan
sorry, aber ich sage jetzt mal einfach so wie von dir angegeben. habe den Bot Freigeschaltet ( Test klappte auch) und dan dein Script Kopiert und gestartet. das war es auch schon, ansonsten hatte ich nichts gelesen was ich noch hätte machen sollen.
Sorry nochmal wenn das etwas plump ist, bin jetzt 63, von Beruf Stukkateur und habe von der ganzen Materie keine Ahnung. Bastel aber gerne und habe mein ganzes Haus auf KNX ausgelegt was auch gut klappt, aber diese kleinen und Preiswerten Aqara Sensoren finde ich schon klasse.
Grüße Manfred
Cooles script, Danke
Ich nutzte Telegram.
Wer es auch so haben will muss folgendes ersetzten:
WhatsAppBot(0, text);
sendTo(‘telegram.0’, {text: text, chatId: ‘TELEGRAM-ID’, parse_mode: ‘Markdown’});
Guter Einwand! Danke!
Ich bekomme bei dem Script folgende Fehlermeldung:
10:54:31.553 error javascript.0 (1088) script.js.common.Zigbee_Batteriestatus compile failed:
at script.js.common.Zigbee_Batteriestatus:117
Leider habe ich keine Ahnung, wo ich hier einen Fehler gemacht habe.
Hast Du eine Idee?
Gruß Andy
Hallo Andy,
wie in der Anleitung steht, benötigst Du vorher noch das WhatsApp Skript (https://www.kreyenborg.koeln/whatsapp-nachrichten-mit-iobroker-versenden/).
Wenn Du dies nicht brauchst, kannst Du die Zeile mit // auskommentieren.
Gruß,
Stephan
Vielen Dank für das bereitstellen dieser Arbeit.
Leider gibt bei mir der Script eine Warnmeldung aus.
javascript.0 (328406) at zigbeeBatterieStatus (script.js.common.System.Zigbee.ZigBee_Batterie_Status:49:22)
javascript.0 (328406) at script.js.common.System.Zigbee.ZigBee_Batterie_Status:119:1
javascript.0 (328406) at script.js.common.System.Zigbee.ZigBee_Batterie_Status:123:3
javascript.0 (328406) at script.js.common.System.Zigbee.ZigBee_Batterie_Status:85:33
Des weiteren werden in der gesendeten Nachricht zwar alle Geräte als Zahl erfasst aber nur der Status von 8 Geräten gesendet.
Gibt es dazu eventuell eine Lösung?
MfG Raik
Hi Raik,
kannst Du mir vielleicht einen Screenshot von der WhatsApp Nachricht schicken?
Wenn Du neue Geräte eingebunden hast, kann es eine Weile dauern, bis sie ihren ersten Batteriestand liefern. Hier kann es zu Überschneidungen kommen.
Danke für deine schnelle Antwort.
Unter https://ibb.co/FDYpSbH habe ich den Screenshot der WhatsApp-Nachricht hinterlegt.
Kommt diese Warnmeldung auch wenn Geräte nicht zu reichen sind? Dann wäre mir klar, da ich einige falsch positioniert habe und sie nicht zu erreichen sind.
Aber an sich sind alle Geräte schon lange in Betrieb.
Einen schönen Abend noch
Also, die Fehlermeldung sagt ja nur aus, das kein Batteriestand gefunden wurde. Dieser wird bei den Geräten manchmal nicht übertragen oder es braucht eine “Ewigkeit”, bis dieser verfügbar ist.
Wenn die Geräte natürlich nicht senden, kann es sein, dass eben kein Batterie-Status vorhanden ist.
Gut zu wissen. Danke für die Antwort