Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Zigbee Überwachung letzer empfangener Wert

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

Zigbee Überwachung letzer empfangener Wert

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptblockly
9 Beiträge 6 Kommentatoren 1.5k Aufrufe 13 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • C Offline
    C Offline
    ChrisXY
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • ZandrialZ Offline
      ZandrialZ Offline
      Zandrial
      schrieb am zuletzt editiert von Zandrial
      #2

      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 Antwort Letzte Antwort
      0
      • ZandrialZ 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 Offline
        C Offline
        ChrisXY
        schrieb am zuletzt editiert von
        #3

        @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?

        AsgothianA 1 Antwort Letzte Antwort
        0
        • C ChrisXY

          @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?

          AsgothianA Offline
          AsgothianA Offline
          Asgothian
          Developer
          schrieb am zuletzt editiert von
          #4

          @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.

          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

          1 Antwort Letzte Antwort
          0
          • ZandrialZ Offline
            ZandrialZ Offline
            Zandrial
            schrieb am zuletzt editiert von Zandrial
            #5

            @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 Antwort Letzte Antwort
            0
            • C Offline
              C Offline
              ChrisXY
              schrieb am zuletzt editiert von ChrisXY
              #6

              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 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                toki1973
                schrieb am zuletzt editiert von
                #7

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

                NUC, PROXMOX, Grafana, Influx, Unify

                1 Antwort Letzte Antwort
                0
                • chucky666C Online
                  chucky666C Online
                  chucky666
                  schrieb am zuletzt editiert von
                  #8

                  gibt es sowas für den Deconz Adapter auch ?

                  1 Antwort Letzte Antwort
                  0
                  • C Offline
                    C Offline
                    charakterkopf
                    schrieb am zuletzt editiert von charakterkopf
                    #9

                    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 Antwort Letzte Antwort
                    0
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    776

                    Online

                    32.5k

                    Benutzer

                    81.7k

                    Themen

                    1.3m

                    Beiträge
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                    ioBroker Community 2014-2025
                    logo
                    • Anmelden

                    • Du hast noch kein Konto? Registrieren

                    • Anmelden oder registrieren, um zu suchen
                    • Erster Beitrag
                      Letzter Beitrag
                    0
                    • Home
                    • Aktuell
                    • Tags
                    • Ungelesen 0
                    • Kategorien
                    • Unreplied
                    • Beliebt
                    • GitHub
                    • Docu
                    • Hilfe