Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Watchdog für Alter der Datenpunkte

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    409

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

Watchdog für Alter der Datenpunkte

Scheduled Pinned Locked Moved Blockly
blocklymonitoring
30 Posts 4 Posters 2.9k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • paul53P paul53

    @sts85 sagte: Leider gibt er jetzt immer dieselbe Nachricht im Intervall aus.

    Wirklich? Zu jeder ID (und somit zu jedem Namen) gehört ein eigenes Intervall, an dessen Callback-Funktion die zugehörige Nachricht übergeben wird.

    sts85S Offline
    sts85S Offline
    sts85
    wrote on last edited by
    #14

    @paul53
    In der Message außerhalb des Intervalls klappt es. Sobald diese innerhalb ist, bleibt sie gleich (letztverwendete Nachricht, so wie ich das sehe).
    Hab es bisher noch nicht hinbekommen. Da macht es auch keinen Unterschied, die msg in eine Liste zu schreiben und anhand des Index auszuwählen. In dem Intervall bleibt die Nachricht gleich.

    paul53P 1 Reply Last reply
    0
    • sts85S sts85

      @paul53
      In der Message außerhalb des Intervalls klappt es. Sobald diese innerhalb ist, bleibt sie gleich (letztverwendete Nachricht, so wie ich das sehe).
      Hab es bisher noch nicht hinbekommen. Da macht es auch keinen Unterschied, die msg in eine Liste zu schreiben und anhand des Index auszuwählen. In dem Intervall bleibt die Nachricht gleich.

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #15

      @sts85 sagte: In dem Intervall bleibt die Nachricht gleich.

      Poste bitte den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
      Vermutung: Es gibt zwei Variablen Intervall?

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      sts85S 1 Reply Last reply
      0
      • paul53P paul53

        @sts85 sagte: In dem Intervall bleibt die Nachricht gleich.

        Poste bitte den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
        Vermutung: Es gibt zwei Variablen Intervall?

        sts85S Offline
        sts85S Offline
        sts85
        wrote on last edited by sts85
        #16

        @paul53 said in Watchdog für Alter der Datenpunkte:

        @sts85 sagte: In dem Intervall bleibt die Nachricht gleich.

        Poste bitte den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
        Vermutung: Es gibt zwei Variablen Intervall?

        Du hattest Recht, es gab zwei Variablen Intervall. Ich habe die Variable gelöscht. Die Intervall-Bausteine ebenfalls gelöscht und neu eingefügt. Danach die "richtige" Intervall-Variable gewählt. Nun habe ich das:

        var ids, id, intervalle, idx, Intervall, msg;
        
        function listsRepeat(value, n) {
          var array = [];
          for (var i = 0; i < n; i++) {
            array[i] = value;
          }
          return array;
        }
        
        // Beschreibe diese Funktion …
        async function getName(id) {
            return getObject(id).common.name;
        }
        
        
        ids = Array.prototype.slice.apply($("state[id=*](functions=watchdog)"));
        intervalle = listsRepeat(null, ids.length);
        schedule("*/2 * * * * *", async function () {
          for (var id_index in ids) {
            id = ids[id_index];
            idx = ids.indexOf(id) + 1;
            Intervall = intervalle[(idx - 1)];
            if (parseFloat((new Date().getTime())) - getState(id).ts <= 900000) {
              (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
            } else if (!Intervall) {
              msg = 'Sensorwert zu alt: ' + String(await getName(id));
              console.log(msg);
              Intervall = setInterval(async function () {
                console.log(msg);
              }, 6000);
            }
            intervalle[(idx - 1)] = Intervall;
          }
        });
        

        Das Ergebnis ist aber dasselbe?!

        Edit: Die timings sind nur für debugging-Zwecke

        paul53P 1 Reply Last reply
        0
        • sts85S sts85

          @paul53 said in Watchdog für Alter der Datenpunkte:

          @sts85 sagte: In dem Intervall bleibt die Nachricht gleich.

          Poste bitte den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
          Vermutung: Es gibt zwei Variablen Intervall?

          Du hattest Recht, es gab zwei Variablen Intervall. Ich habe die Variable gelöscht. Die Intervall-Bausteine ebenfalls gelöscht und neu eingefügt. Danach die "richtige" Intervall-Variable gewählt. Nun habe ich das:

          var ids, id, intervalle, idx, Intervall, msg;
          
          function listsRepeat(value, n) {
            var array = [];
            for (var i = 0; i < n; i++) {
              array[i] = value;
            }
            return array;
          }
          
          // Beschreibe diese Funktion …
          async function getName(id) {
              return getObject(id).common.name;
          }
          
          
          ids = Array.prototype.slice.apply($("state[id=*](functions=watchdog)"));
          intervalle = listsRepeat(null, ids.length);
          schedule("*/2 * * * * *", async function () {
            for (var id_index in ids) {
              id = ids[id_index];
              idx = ids.indexOf(id) + 1;
              Intervall = intervalle[(idx - 1)];
              if (parseFloat((new Date().getTime())) - getState(id).ts <= 900000) {
                (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
              } else if (!Intervall) {
                msg = 'Sensorwert zu alt: ' + String(await getName(id));
                console.log(msg);
                Intervall = setInterval(async function () {
                  console.log(msg);
                }, 6000);
              }
              intervalle[(idx - 1)] = Intervall;
            }
          });
          

          Das Ergebnis ist aber dasselbe?!

          Edit: Die timings sind nur für debugging-Zwecke

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by paul53
          #17

          @sts85 sagte: Das Ergebnis ist aber dasselbe?!

          Gerade getestet: Du hast recht. Erklären kann ich mir das Verhalten aber nicht.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          T 1 Reply Last reply
          0
          • paul53P paul53

            @sts85 sagte: Das Ergebnis ist aber dasselbe?!

            Gerade getestet: Du hast recht. Erklären kann ich mir das Verhalten aber nicht.

            T Do not disturb
            T Do not disturb
            ticaki
            wrote on last edited by ticaki
            #18

            @paul53
            msg muss als 3. Parameter an die interne Intervall Funktion übergeben werden. Das geht doch auch bei seinterval?

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            paul53P 1 Reply Last reply
            0
            • T ticaki

              @paul53
              msg muss als 3. Parameter an die interne Intervall Funktion übergeben werden. Das geht doch auch bei seinterval?

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #19

              @ticaki sagte: msg muss als 3. Parameter an die interne Intervall Funktion übergeben werden.

              Gerade getestet: Funktioniert auch nicht.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              T 1 Reply Last reply
              0
              • paul53P paul53

                @ticaki sagte: msg muss als 3. Parameter an die interne Intervall Funktion übergeben werden.

                Gerade getestet: Funktioniert auch nicht.

                T Do not disturb
                T Do not disturb
                ticaki
                wrote on last edited by
                #20

                @paul53

                Hast auch

                function(msg)
                

                Geändert?

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                paul53P 1 Reply Last reply
                0
                • T ticaki

                  @paul53

                  Hast auch

                  function(msg)
                  

                  Geändert?

                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by paul53
                  #21

                  @ticaki sagte: function(msg)

                  Damit funktioniert es. Ist aber keine Option für Blockly?

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  T sts85S 2 Replies Last reply
                  0
                  • paul53P paul53

                    @ticaki sagte: function(msg)

                    Damit funktioniert es. Ist aber keine Option für Blockly?

                    T Do not disturb
                    T Do not disturb
                    ticaki
                    wrote on last edited by
                    #22

                    @paul53
                    Statt der Intervall reference die Nachricht im Array speichern mit nur einem Intervall der das Array überprüft und die Nachricht verschickt?

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    sts85S 1 Reply Last reply
                    0
                    • paul53P paul53

                      @ticaki sagte: function(msg)

                      Damit funktioniert es. Ist aber keine Option für Blockly?

                      sts85S Offline
                      sts85S Offline
                      sts85
                      wrote on last edited by
                      #23

                      @paul53 @ticaki

                      Danke euch.
                      So schnell kommt man an die Grenzen von Blockly - ich dachte nur, ich hab was grundlegend nicht verstanden.
                      Zur Not muss ich das direkt in Javascript umsetzen, nur bin ich mit der Programmiersprache nicht vertraut, auch wenn grundlegende Programmierkenntnisse vorhanden sind.

                      1 Reply Last reply
                      0
                      • T ticaki

                        @paul53
                        Statt der Intervall reference die Nachricht im Array speichern mit nur einem Intervall der das Array überprüft und die Nachricht verschickt?

                        sts85S Offline
                        sts85S Offline
                        sts85
                        wrote on last edited by sts85
                        #24

                        @ticaki said in Watchdog für Alter der Datenpunkte:

                        @paul53
                        Statt der Intervall reference die Nachricht im Array speichern mit nur einem Intervall der das Array überprüft und die Nachricht verschickt?

                        Den Ansatz hatte ich auch eben, hab es aber in Blockly noch nicht so schnell umgesetzt bekommen.
                        Dann kommen alle betroffenen Meldungen immer gemeinsam, das wäre aber vollkommen OK.

                        sts85S 1 Reply Last reply
                        0
                        • sts85S sts85

                          @ticaki said in Watchdog für Alter der Datenpunkte:

                          @paul53
                          Statt der Intervall reference die Nachricht im Array speichern mit nur einem Intervall der das Array überprüft und die Nachricht verschickt?

                          Den Ansatz hatte ich auch eben, hab es aber in Blockly noch nicht so schnell umgesetzt bekommen.
                          Dann kommen alle betroffenen Meldungen immer gemeinsam, das wäre aber vollkommen OK.

                          sts85S Offline
                          sts85S Offline
                          sts85
                          wrote on last edited by sts85
                          #25

                          Ob es elegant ist, sei dahingestellt, aber so geht es:

                          d389ad63-dcbe-4be5-bb50-4f5fc0794db6-image.png

                          var ids, id, intervalle, messages, idx, Intervall, msg, i, idm, message_there;
                          
                          function listsRepeat(value, n) {
                            var array = [];
                            for (var i = 0; i < n; i++) {
                              array[i] = value;
                            }
                            return array;
                          }
                          
                          // Beschreibe diese Funktion …
                          async function getName(id) {
                              return getObject(id).common.name;
                          }
                          
                          
                          ids = Array.prototype.slice.apply($("state[id=*](functions=watchdog)"));
                          intervalle = listsRepeat(null, ids.length);
                          messages = listsRepeat(null, ids.length);
                          schedule("*/2 * * * * *", async function () {
                            for (var id_index in ids) {
                              id = ids[id_index];
                              idx = ids.indexOf(id) + 1;
                              Intervall = intervalle[(idx - 1)];
                              messages[(idx - 1)] = 'Sensorwert zu alt: ' + String(await getName(id));
                              msg = messages[(idx - 1)];
                              if (parseFloat((new Date().getTime())) - getState(id).ts <= 900000) {
                                (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
                                messages[(idx - 1)] = null;
                              } else if (!Intervall) {
                                console.log(msg);
                                Intervall = setInterval(async function () {
                                  for (var i_index in ids) {
                                    i = ids[i_index];
                                    idm = ids.indexOf(i) + 1;
                                    message_there = intervalle[(idm - 1)];
                                    if (message_there != null) {
                                      console.log(('Sensorwert zu alt: ' + String(await getName(i))));
                                    }
                                  }
                                }, 6000);
                              }
                              intervalle[(idx - 1)] = Intervall;
                            }
                          });
                          

                          Danke euch nochmals!

                          Edit: Kleiner Denkfehler, jetzt werden natürlich nich mehrere Intervalle ausgelöst...

                          T 1 Reply Last reply
                          0
                          • sts85S sts85

                            Ob es elegant ist, sei dahingestellt, aber so geht es:

                            d389ad63-dcbe-4be5-bb50-4f5fc0794db6-image.png

                            var ids, id, intervalle, messages, idx, Intervall, msg, i, idm, message_there;
                            
                            function listsRepeat(value, n) {
                              var array = [];
                              for (var i = 0; i < n; i++) {
                                array[i] = value;
                              }
                              return array;
                            }
                            
                            // Beschreibe diese Funktion …
                            async function getName(id) {
                                return getObject(id).common.name;
                            }
                            
                            
                            ids = Array.prototype.slice.apply($("state[id=*](functions=watchdog)"));
                            intervalle = listsRepeat(null, ids.length);
                            messages = listsRepeat(null, ids.length);
                            schedule("*/2 * * * * *", async function () {
                              for (var id_index in ids) {
                                id = ids[id_index];
                                idx = ids.indexOf(id) + 1;
                                Intervall = intervalle[(idx - 1)];
                                messages[(idx - 1)] = 'Sensorwert zu alt: ' + String(await getName(id));
                                msg = messages[(idx - 1)];
                                if (parseFloat((new Date().getTime())) - getState(id).ts <= 900000) {
                                  (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
                                  messages[(idx - 1)] = null;
                                } else if (!Intervall) {
                                  console.log(msg);
                                  Intervall = setInterval(async function () {
                                    for (var i_index in ids) {
                                      i = ids[i_index];
                                      idm = ids.indexOf(i) + 1;
                                      message_there = intervalle[(idm - 1)];
                                      if (message_there != null) {
                                        console.log(('Sensorwert zu alt: ' + String(await getName(i))));
                                      }
                                    }
                                  }, 6000);
                                }
                                intervalle[(idx - 1)] = Intervall;
                              }
                            });
                            

                            Danke euch nochmals!

                            Edit: Kleiner Denkfehler, jetzt werden natürlich nich mehrere Intervalle ausgelöst...

                            T Do not disturb
                            T Do not disturb
                            ticaki
                            wrote on last edited by
                            #26

                            @sts85

                            Dein jetziges Script verschickt sensorenanzahl^2 Meldungen im Höchstfall alle 6 Sekunden. Oder?

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            sts85S 1 Reply Last reply
                            0
                            • T ticaki

                              @sts85

                              Dein jetziges Script verschickt sensorenanzahl^2 Meldungen im Höchstfall alle 6 Sekunden. Oder?

                              sts85S Offline
                              sts85S Offline
                              sts85
                              wrote on last edited by
                              #27

                              @ticaki

                              Haha, siehe edit. Hab ich auch gerade gemerkt. Ich darf hier natürlich nur einen Intervall nutzen.

                              T paul53P 2 Replies Last reply
                              0
                              • sts85S sts85

                                @ticaki

                                Haha, siehe edit. Hab ich auch gerade gemerkt. Ich darf hier natürlich nur einen Intervall nutzen.

                                T Do not disturb
                                T Do not disturb
                                ticaki
                                wrote on last edited by ticaki
                                #28

                                @sts85
                                Als Nächstes dann draus eine Nachricht bilden die du dir bei Änderungen per Telegramm selbst zu schickst. :)

                                Z.B
                                ⚠️ Warmwassershelly hat sich seit 01:00:00 nicht mehr aktualisiert

                                (Hier fieses grinse smiley einsetzten)

                                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                Spenden

                                1 Reply Last reply
                                0
                                • sts85S sts85

                                  @ticaki

                                  Haha, siehe edit. Hab ich auch gerade gemerkt. Ich darf hier natürlich nur einen Intervall nutzen.

                                  paul53P Offline
                                  paul53P Offline
                                  paul53
                                  wrote on last edited by paul53
                                  #29

                                  @sts85 sagte: Ich darf hier natürlich nur einen Intervall nutzen.

                                  Ja, etwa so:

                                  Blockly_temp.JPG

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  sts85S 1 Reply Last reply
                                  0
                                  • paul53P paul53

                                    @sts85 sagte: Ich darf hier natürlich nur einen Intervall nutzen.

                                    Ja, etwa so:

                                    Blockly_temp.JPG

                                    sts85S Offline
                                    sts85S Offline
                                    sts85
                                    wrote on last edited by
                                    #30

                                    @paul53 said in Watchdog für Alter der Datenpunkte:

                                    @sts85 sagte: Ich darf hier natürlich nur einen Intervall nutzen.

                                    Ja, etwa so:

                                    Blockly_temp.JPG

                                    Perfekt, super, läuft 1A.

                                    Hatte eben auch schon was gebastelt, aber dies ist hier noch ein wenig eleganter. Nur deine Zähl-Schleife habe ich durch eine "für jeden Wert" Schleife ersetzt.

                                    b5806609-9133-4f58-b2b4-6efbeb8e91fb-image.png

                                    Einiges gelernt...
                                    Nochmals vielen Dank euch allen! 🥳🎉

                                    1 Reply Last reply
                                    0
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    626

                                    Online

                                    32.7k

                                    Users

                                    82.5k

                                    Topics

                                    1.3m

                                    Posts
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                    ioBroker Community 2014-2025
                                    logo
                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Home
                                    • Recent
                                    • Tags
                                    • Unread 0
                                    • Categories
                                    • Unreplied
                                    • Popular
                                    • GitHub
                                    • Docu
                                    • Hilfe