Batterie Status der ZigBee Geräte abfragen und per WhatsApp zuschicken lassen

Lesedauer: 3 Minuten

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.

ZigBee Batterie Status in WhatsApp
Wie hat Dir der Beitrag gefallen?
Bewertung: 5/5 - abgegebene Bewertungen: 1

12 Gedanken zu „Batterie Status der ZigBee Geräte abfragen und per WhatsApp zuschicken lassen

  1. Manfred Antworten

    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

    • Stephan Autor des BeitragsAntworten

      Hallo,
      da müsste ich wissen, wie das Skript verwendet wird.

      Bitte den Code dazu einstellen.

      Gruß,
      Stephan

      • Manfred Antworten

        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

  2. Markus Antworten

    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’});

  3. Andy Antworten

    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

  4. Raik Antworten

    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

    • Stephan Autor des BeitragsAntworten

      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.

      • Raik Antworten

        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

        • Stephan Autor des BeitragsAntworten

          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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert