Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Zigbee Überwachung letzer empfangener Wert

    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

    Zigbee Überwachung letzer empfangener Wert

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

      Hallo,
      ich suche eine script vorlage JS oder Blockly egal, welche meine Zigbee Geräte Überwacht.
      Ich will einen Wert angeben z.b letzte 12 Stunden keinen Wert geändert = meldung Telegram ..
      Würde dies anhand der Batterie / Signal /wert ausmachen.

      Hat hier jemand schon mal was gemacht worauf ich aufbauen könnte ? Danke

      1 Reply Last reply Reply Quote 0
      • Zandrial
        Zandrial last edited by Zandrial

        Du kannst auch ein Javascript schreiben:

        (getState("DEINOBJECT.state).lc

        lc ist last changed also zuletzt geändert... einfach mit aktueller Zeit vergleichen, wenn Differenz größer als X -> Telegram

        C 1 Reply Last reply Reply Quote 0
        • C
          ChrisXY @Zandrial last edited by

          @Zandrial said in Zigbee Überwachung letzer empfangener Wert:

          Du kannst auch ein Javascript schreiben:

          (getState("DEINOBJECT.state).lc

          lc ist last changed also zuletzt geändert... einfach mit aktueller Zeit vergleichen, wenn Differenz größer als X -> Telegram

          Okay Danke aber in Javascript bin ich leider nicht so fitt.
          Würde das auch per Blockly klappen?

          Asgothian 1 Reply Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @ChrisXY last edited by

            @ChrisXY
            Prinzipiell ja, aber du musst dann eine Liste aller zu überwachenden Geräte manuell im Blockly eintragen.

            in JS kannst du das ganze über einen Selektor lösen. Ist einfacher / besser wartbar.

            1 Reply Last reply Reply Quote 0
            • Zandrial
              Zandrial last edited by Zandrial

              @ChrisXY ich hab noch was gefunden im forum:

              https://forum.iobroker.net/topic/25854/zigbee-geräte-überwachen

              EDIT:
              Da ich anscheinend zu viel Zeit habe und ich das auch gebrauchen konnte:

              var zigbees = 0; //zigbees sind unsere zigbee sensoren
              var OFFLINE = []; //das array enthält unsere geräte die offline sind
              
              
              $('channel[id=^zigbee.0.*]').each(function(id, i) { //der selector holt erstmal alles was unter zigbee.0. steht
                  if(id.endsWith("link_quality")){ //wenn es link_quality kanal ist haben wir nen sensor
                      ++zigbees; //sensoren hochzählen
                      if(Math.round((new Date() - new Date(getState(id).ts)) / 1000 / 60) > 60){ //wenn über ne minute nicht gemeldet ist er offline
                          var offLineOBJ = getObject(id.split(".").slice(0,-1).join(".")).common.name; //wir splitten den string um unser object zu erhalten
                          OFFLINE.push(offLineOBJ); //Objektname ins OFFLINE-Array schieben
                      }
                  }
              });
              
              log("Es sind " + OFFLINE.length + " von " + zigbees + " Geräte Offline:"); //Ausgabe
              OFFLINE.forEach(element => log("-" +element)); //Geräte aus Offline-Array ausgeben
              

              Ausgabe ist dann so:
              18:55:26.531 info javascript.0 (1319) script.js.ZigbeeTest: Es sind 2 von 3 Geräte Offline:
              18:55:26.531 info javascript.0 (1319) script.js.ZigbeeTest: -Vibrationssensor Briefkasten
              18:55:26.531 info javascript.0 (1319) script.js.ZigbeeTest: -Fenstersensor Bad

              1 Reply Last reply Reply Quote 0
              • C
                ChrisXY last edited by ChrisXY

                Super das geht 🙂 Danke
                Das aus dem Post geht bei mir leider nicht .. steht anzahl Geräte 0 ..
                Deins klappt. Wie bekomm ich das den gespeichert in einem Wert?
                Im Log gibt er es aus.

                Edit: Hab bei dem Script aus dem anderen Post nur ein . hinzugefügt dann geht es auch...
                aus const zigbee = $('zigbee.0*.link_quality');
                habe ich:
                const zigbee = $('zigbee.0.*.link_quality');
                gemacht

                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();
                
                
                1 Reply Last reply Reply Quote 0
                • T
                  toki1973 last edited by

                  Tolle Sache! Und wie bekomme ich das Ergebnis von Java in Telegram?

                  1 Reply Last reply Reply Quote 0
                  • chucky666
                    chucky666 last edited by

                    gibt es sowas für den Deconz Adapter auch ?

                    1 Reply Last reply Reply Quote 0
                    • C
                      charakterkopf last edited by charakterkopf

                      Hi,
                      hatte so ein Skript vor einiger Zeit schon gepostet. Telegram meldung müsste ja einfach sein:

                      // setState("telegram.0.communicate.response", "Info: Gerät nicht erreicht");

                      mal auskomentieren.

                      Vielleicht Hilfts - Gruß Martin

                      @charakterkopf said in [Aufruf] Welche guten JavaScripts setzt ihr ein?:

                      Die Idee ist super. Es fehlt wirklich eine Script Bibliothek.

                      Hier ein Script um Datenpunkte von z.B. Funksensoren auf Lebendigkeit zu testen. Meine Zigbee Sensoren schmierten früher immer gerne ab und ich habe es nie erkannt.

                      //Das Script überprüft regelmässig die Datenpunkte auf Aktualisierung
                      
                      //Angabe des Datenpunkts= Datenpunkt der Überwacht werden soll
                      //StateBezeichnung= Unter pfad_javascript.StateBezeichung wird ein State angelegt; True = Daten sind aktuell / False = Daten veraltet
                      //Zeit in Sekunden = Zeit die vergangen sein darf seit der letzen Aktualisierung des Datenpunkts  (0 = default Zeit wird genommen).
                      
                      schedule("*/3 * * * *" , function () {                                  
                      
                          // Angabe des Datenpunkts;StateBezeichnung;Zeit in Sekunden
                          var ueberwachung = ['fritzdect.0.Comet_119610277592.temp;Heizung;400', 
                                              'mqtt.0.zigbee2mqtt.Kuehlschrank;Temp_Kuehlschrank;7000',
                                              'mqtt.0.zigbee2mqtt.gefrierfach;Temp_Gefrierschrank;7000',
                                              'mqtt.0.zigbee2mqtt.TemperaturBad;Bad_Feuchtigkeit;7000',
                                              'mqtt.0.zigbee2mqtt.Fenster_1;Fenster_1;7000',
                                              'mqtt.0.zigbee2mqtt.Fenster_2;Fenster_2;7000',
                                              'mqtt.0.zigbee2mqtt.Fenster_3;Fenster_3;7000',
                                              'mqtt.0.zigbee2mqtt.Fenster_4;Fenster_4;7000',
                                              'mqtt.0.zigbee2mqtt.Fenster_5;Fenster_5;7000',
                                              'mqtt.0.zigbee2mqtt.Fenster_6;Fenster_6;7000',
                                              'mqtt.0.zigbee2mqtt.Fenster_7;Fenster_7;7000',
                                              'mqtt.0.zigbee2mqtt.Fenster_8;Fenster_8;7000'];
                      
                      
                          var default_zeit = 240;
                          var pfad_javascript ='javascript.0.watchdog.';   // Beispiel: 'javascript.0.watchdog.'  !Punkt nicht vergessen am Ende!
                      
                      
                          //------------------------------------------------------------------
                          //Ab hier nichts mehr Ändern
                          //------------------------------------------------------------------
                          var zeit= Math.floor(Date.now() / 1000);
                          var differenz, lchange;
                          var daten, tchange;
                      
                          ueberwachung.forEach(function(item, index, array) 
                          {
                              // Array Splitten
                                 daten = item.split(";");
                      
                              //Datenpunkt erstellen wenn nicht vorhanden
                                  createState(pfad_javascript + daten[1], { read: true, write: false, name: "Watchdog " + daten[1], type: "boolean", role: " ", def: "false"});
                      
                              //Differenz Zeit default oder manuell?
                                  differenz = parseInt(daten[2]);
                                  if (differenz == 0) differenz=default_zeit;
                      
                              //Zeitstempel abfragen in Sekunden
                                  tchange=parseInt(getState(daten[0]).ts / 1000);
                                  
                              //Vergleichen der Zeitstempel
                                      if ((zeit-tchange)>differenz)
                                      {
                                          setState(pfad_javascript + daten[1], false);
                                          //console.log(daten[1] + "  ist älter als " + differenz + " Sekunden");
                                    //Telegramm
                                         // setState("telegram.0.communicate.response", "Info: Gerät nicht erreicht");
                                        // setState("telegram.0.communicate.response", daten[1]);
                                      }
                                      else
                                      {
                                          setState(pfad_javascript + daten[1], true);
                                          //console.log(daten[1] + "  ist jünger als " + differenz + " Sekunden");
                                      } 
                       
                          });  
                      });
                      
                      
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      718
                      Online

                      31.7k
                      Users

                      79.8k
                      Topics

                      1.3m
                      Posts

                      blockly javascript
                      6
                      9
                      1249
                      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