Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. ZigBee-Geräte überwachen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    SOLVED ZigBee-Geräte überwachen

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      sebastian0010 last edited by

      Hallo liebes Forum,

      ich habe eine Frage: auf welche ich derzeit noch keine Antwort gefunden habe.
      Ich würde sehr gerne alle meine Zigbeegeräte am Zigbeeadapter (via CC2531-Stick) überwachen.
      Ich meine damit, dass ich gerne benachrichtigt werden würde, wenn eines der Geräte über einen längeren Zeitraum nicht erreichbar war.
      Hat dafür jemand eine Lösung?

      Vielen herzlichen Dank im Voraus,
      Liebe Grüße
      Sebastian

      Asgothian 1 Reply Last reply Reply Quote 0
      • S
        sebastian0010 last edited by sebastian0010

        Für alle Interessierten:

        Ich konnte mein Problem nun mit folgenden Skriptadaptierungen lösen:

        createState('zigbeestatus.Anzahl_Geräte', 0, {type: 'number'});
        createState('zigbeestatus.offline', 0, {type: 'number'});
        createState('zigbeestatus.Gerät', " ", {type: 'string'});
        
        const zigbee = $('zigbee.0*.link_quality');
        const loggen = true;
        
        var arrOFFLINE;
        
        function offline(id){
            var obj = getObject(id);
            arrOFFLINE.push(obj.common.name);
            if(loggen) log("Gerät: " + obj.common.name);
        }
        
        function countOffline() {
           var moeglicheOFFLINE = 0;
           arrOFFLINE =[];
           zigbee.each(function (id, i){
            
            if(Math.round((new Date() - new Date(getState(id).ts)) / 1000 / 60) > 60) offline(id);
            ++moeglicheOFFLINE;
           });
           
           if(loggen) log("Text: "+arrOFFLINE.join(', '));
           if(loggen) log("Anzahl Geräte: " + moeglicheOFFLINE + " // davon offline: " + arrOFFLINE.length);
           
           setState("zigbeestatus.Gerät",     arrOFFLINE.join(',<br>'));
           setState("zigbeestatus.offline",   arrOFFLINE.length);
           setState("zigbeestatus.Anzahl_Geräte", moeglicheOFFLINE);
        
        }
        
        countOffline();
        

        Es werden nun die Geräte gezählt, bei denen der link_quality-Timestamp älter ist als 60 Minuten.

        LG Sebastian

        1 Reply Last reply Reply Quote 3
        • Asgothian
          Asgothian Developer @sebastian0010 last edited by Asgothian

          @sebastian0010
          Es gibt dafür zwei einfache Möglichkeiten:

          • alle Objekte die „Router“ funktionalität haben besitzen einen datenpunkt „alive“ oder ähnlich (bin nicht zu Hause, kann nicht schauen)
          • bei allen anderen Objekten kannst du den Zeitstempel der link-quality überwachen. Diese wird immer dann aktualisiert wenn mit dem Gerät kommuniziert wird,

          A.

          1 Reply Last reply Reply Quote 0
          • S
            sebastian0010 last edited by

            Vielen Dank für die rasche Antwort!
            Das mit den Routern funktioniert schon perfekt!
            Kannst du mir auch sagen, wo ich den Zeitstempel bei den andren Geräten bei lik-quality abrufen kann? Habe den Expertenmodus in den Objekten aktiv, kann diesbezüglich aber keine Infos anzeigen.

            Liebe Grüße
            Sebastian

            1 Reply Last reply Reply Quote 0
            • S
              sebastian0010 last edited by

              Bzw. hat jemand von euch schon ein Skript, dass alle Datenpunkte link_quality unter Objekte ausliest und nach beliebiger Zeit alarmiert, wenn ein Datenpunkt nicht mehr geändert wurde?

              LG
              Sebastian

              1 Reply Last reply Reply Quote 0
              • Mic
                Mic Developer last edited by

                Hi Sebastian,
                beschäftigte dich mit JavaScript 🙂
                Geht ganz einfach.

                Hier ein Beispiel, brauchst nur deinen Datenpunkt in der ersten Zeile eintragen:

                const STATE_PATH = 'zigbee.0.xxxxxxxx.link_quality';
                
                
                const DIFFERENCE_MIN = 60; // Mindest-Zeit in Minuten, die das Gerät nicht mehr erreichbar war.
                
                
                let stateDt = new Date(getState(STATE_PATH).ts);    // Zeitstempel in Datums-Objekt umgewandelt
                log ('Letzte Änderung Datum/Uhrzeit:' + stateDt); // Log-Ausgabe
                log ('Letzte Änderung war vor ' + Math.round((new Date() - stateDt) / 1000 / 60) + ' Minuten.')
                
                
                if ( dateAddMinutes(stateDt, DIFFERENCE_MIN) < new Date() ) {
                    log ('Letzte Änderung war vor länger als ' + DIFFERENCE_MIN + ' Minuten.')
                    // Hier kannst du reagieren, da letzte Änderung länger als gewünschte Anzahl Minuten her war.
                } else {
                    log ('Letzte Änderung war vor weniger als ' + DIFFERENCE_MIN + ' Minuten.')
                }
                
                
                
                
                /**
                 * Add certain number of minutes to a given date/time.
                 * @param {object}    dateInp      Date created with "new Date()". If you want the current date, use "new Date()"
                 * @param {number}    minutesInp   Number of minutes to be added to the given date.
                 * @return {object}   New date with the minutes added
                 */
                function dateAddMinutes(dateInp, minutesInp) {
                    return new Date(dateInp.getTime() + (minutesInp * 60000));
                }
                
                
                
                1 Reply Last reply Reply Quote 0
                • S
                  sebastian0010 last edited by

                  Vielen Dank euch beiden für die Infos!
                  Das mit dem Skript funktioniert schon wunderbar. Bei Javascript bin ich leider noch blutiger Anfänger.
                  Werde versuchen mir übers Wochenende ein Skript zu basteln, womit ich alle Zigbeegeräte automatisiert auslese und mir eine Info pushen lasse, falls - und wenn ja, welches - ein Gerät längere Zeit nicht reagiert hat. Mal schauen ob das klappt. 😊

                  Schönes Wochenende und Liebe Grüße!

                  1 Reply Last reply Reply Quote 0
                  • S
                    sebastian0010 last edited by

                    Liebe Leute,

                    habe jetzt folgendes Skript anhand eines Batterieskriptes, welches ich vor längerer Zeit online gefunden habe versucht zu adaptieren, um den Timestamp auszulesen.
                    Es soll die Anzahl an Geräten die offline sind (Deshalb 3600000 als ms für 60min), sowie der Name der entsprechenden Geräte angezeigt werden - alle Zigbeegeräte durchgehen.
                    Prinzipiell werden mir hier zwar Geräte ausgespuckt, aber die Definition mit 3600000 passt anscheinend leider noch nicht genau.
                    Hat hier jemand Lösungsvorschläge?

                    createState('zigbeestatus.Anzahl_Geräte', 0, {type: 'number'});
                    createState('zigbeestatus.offline', 0, {type: 'number'});
                    createState('zigbeestatus.Gerät', " ", {type: 'string'});
                    
                    const zigbee = $('zigbee.0*.link_quality');
                    const loggen = true;
                    
                    var arrOFFLINE;
                    
                    function offline(id){
                        var obj = getObject(id);
                        arrOFFLINE.push(obj.common.name);
                        if(loggen) log("Gerät: " + obj.common.name);
                    }
                    
                    function countOffline() {
                       var moeglicheOFFLINE = 0;
                       arrOFFLINE =[];
                       zigbee.each(function (id, i){
                        if(getState(id).ts > 3600000) offline(id);
                        ++moeglicheOFFLINE;
                       });
                       
                       if(loggen) log("Text: "+arrOFFLINE.join(', '));
                       if(loggen) log("Anzahl Geräte: " + moeglicheOFFLINE + " // davon offline: " + arrOFFLINE.length);
                       
                       setState("zigbeestatus.Gerät",     arrOFFLINE.join(',<br>'));
                       setState("zigbeestatus.offline",   arrOFFLINE.length);
                       setState("zigbeestatus.Anzahl_Geräte", moeglicheOFFLINE);
                    
                    }
                    
                    countOffline();
                    

                    Vielen Dank euch gleich im Voraus,
                    Liebe Grüße
                    Sebastian

                    1 Reply Last reply Reply Quote 0
                    • S
                      sebastian0010 last edited by

                      Habe heute noch mit

                      var time = getState('zigbee.0.xxxxxxxxxxx.link_quality').ts;
                      

                      den Wert von ts geloggt, wobei dann Werte um 1600000000000 (also etwa 50 Jahre) angezeigt werden. Lt. Manual sollte es doch in ms ausgegeben werden (seit jetzt nehme ich mal an)? Mit dem tatsächlichen Datumswert stimmt der angegebene Wert in ms jedoch leider gar nicht ein.
                      Kann mir hier jemand helfen?

                      Dank gleich mal,
                      Liebe Grüße
                      Sebastian

                      1 Reply Last reply Reply Quote 0
                      • S
                        sebastian0010 last edited by sebastian0010

                        Für alle Interessierten:

                        Ich konnte mein Problem nun mit folgenden Skriptadaptierungen lösen:

                        createState('zigbeestatus.Anzahl_Geräte', 0, {type: 'number'});
                        createState('zigbeestatus.offline', 0, {type: 'number'});
                        createState('zigbeestatus.Gerät', " ", {type: 'string'});
                        
                        const zigbee = $('zigbee.0*.link_quality');
                        const loggen = true;
                        
                        var arrOFFLINE;
                        
                        function offline(id){
                            var obj = getObject(id);
                            arrOFFLINE.push(obj.common.name);
                            if(loggen) log("Gerät: " + obj.common.name);
                        }
                        
                        function countOffline() {
                           var moeglicheOFFLINE = 0;
                           arrOFFLINE =[];
                           zigbee.each(function (id, i){
                            
                            if(Math.round((new Date() - new Date(getState(id).ts)) / 1000 / 60) > 60) offline(id);
                            ++moeglicheOFFLINE;
                           });
                           
                           if(loggen) log("Text: "+arrOFFLINE.join(', '));
                           if(loggen) log("Anzahl Geräte: " + moeglicheOFFLINE + " // davon offline: " + arrOFFLINE.length);
                           
                           setState("zigbeestatus.Gerät",     arrOFFLINE.join(',<br>'));
                           setState("zigbeestatus.offline",   arrOFFLINE.length);
                           setState("zigbeestatus.Anzahl_Geräte", moeglicheOFFLINE);
                        
                        }
                        
                        countOffline();
                        

                        Es werden nun die Geräte gezählt, bei denen der link_quality-Timestamp älter ist als 60 Minuten.

                        LG Sebastian

                        1 Reply Last reply Reply Quote 3
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        699
                        Online

                        31.7k
                        Users

                        79.9k
                        Topics

                        1.3m
                        Posts

                        zigbee adapter cc2531 zigbee cc2531
                        3
                        9
                        1441
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo