Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Watchdog für Alter der Datenpunkte

    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

    Watchdog für Alter der Datenpunkte

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      ticaki Developer @paul53 last edited by

      @paul53

      Hast auch

      function(msg)
      

      Geändert?

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @ticaki last edited by paul53

        @ticaki sagte: function(msg)

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

        T sts85 2 Replies Last reply Reply Quote 0
        • T
          ticaki Developer @paul53 last edited by

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

          sts85 1 Reply Last reply Reply Quote 0
          • sts85
            sts85 @paul53 last edited by

            @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 Reply Quote 0
            • sts85
              sts85 @ticaki last edited by 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.

              sts85 1 Reply Last reply Reply Quote 0
              • sts85
                sts85 @sts85 last edited by 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 1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @sts85 last edited by

                  @sts85

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

                  sts85 1 Reply Last reply Reply Quote 0
                  • sts85
                    sts85 @ticaki last edited by

                    @ticaki

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

                    T paul53 2 Replies Last reply Reply Quote 0
                    • T
                      ticaki Developer @sts85 last edited by ticaki

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

                      1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @sts85 last edited by paul53

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

                        Ja, etwa so:

                        Blockly_temp.JPG

                        sts85 1 Reply Last reply Reply Quote 0
                        • sts85
                          sts85 @paul53 last edited by

                          @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 Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          687
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          blockly monitoring
                          4
                          30
                          1385
                          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