Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Telegram Nachrichten doppelt

    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

    Telegram Nachrichten doppelt

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

      Hallo zusammen!

      Ich nutze den Telegram-Adapter um zum einen Zustände wie Temperaturen, etc. abzufragen, das klappt super. Zum anderen läuft auch ein Skript, welches reagiert sobald die Haustür geöffnet wird (Aqara Tür-Fenster-Kontakt über Zigbee-Adapter - CC2531 Stick am Pi) und noch ein Fenster (ebenfalls Aqara TFK) offen ist. Als Reaktion habe ich im Skript die Ausgabe einer Nachricht über den Telegram-Adapter erstellt.

      Jetzt mein Problem, ich bekomme die Push-Nachrichten in Telegram immer doppelt im selben Moment. Trotz nachträglich eingebautem time out, kommen die Nachrichten weiterhin doppelt an.

      Skript mit blockly erstellt:

      /* -- do not edit following lines - START --
      {
        "expert": true,
        "engineType": "Blockly",
        "debug": false,
        "verbose": false
      }
      -- do not edit previous lines - END --*/
      var timeout;
      
      
      on({id: 'zigbee.0.00158d00025811ae.opened', change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
        if (getState("zigbee.0.00158d0002580ef4.opened").val == true || getState("zigbee.0.00158d00025811cc.opened").val == true || getState("zigbee.0.00158d0002e6b5d2.opened").val == true) {
          sendTo("telegram", "send", {
              text: (['ACHTUNG!','\n','Fenster oben offen!'].join(''))
          });
        }
        timeout = setTimeout(function () {
        }, 60000);
      });
      

      Ihr habt doch sicher eine Idee woran es liegt, bzw. wie ich es abstellen kann?

      Lieben Dank vorab!

      thewhobox paul53 T 3 Replies Last reply Reply Quote 0
      • thewhobox
        thewhobox @kluge86 last edited by thewhobox

        @kluge86 Dein Timeout ist eine leere Funktion und bringt rein gar nichts...
        Das löschen vom Timeout geht wesentlich leichter.

        var timeout;
        
        on({id: 'zigbee.0.00158d00025811ae.opened', change: "ne"}, function (obj) {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          log("Neuer Wert: " + value);
          clearTimeout(timeout);
        
          timeout = setTimeout(() => {
            if (getState("zigbee.0.00158d0002580ef4.opened").val == true || getState("zigbee.0.00158d00025811cc.opened").val == true || getState("zigbee.0.00158d0002e6b5d2.opened").val == true) {
              sendTo("telegram", "send", {
                text: 'ACHTUNG!\nFenster oben offen!'
              });
            }
          }, 6000);
        });
        

        Kann es vll sein, dass der State "opened" kurz auf true gestellt wird und sofort wieder auf false?
        Ich hab mal ein debug eingebaut, der den Wert ausgibt.

        1 Reply Last reply Reply Quote 0
        • K
          kluge86 last edited by

          Ich probiere es nachher aus. Mal gucken was im log zu sehen ist.

          Die Time-Out-Funktion war so gedacht, dass innerhalb z.B. einer Minute nicht das Öffnen und Schließen der Tür das Skript triggert. Also quasi als Block für Leerlaufzeit. Habe ich dabei einen Denkfehler?

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

            @kluge86 sagte:

            als Block für Leerlaufzeit. Habe ich dabei einen Denkfehler?

            Dann muss auch die Variable timeout abgefragt werden

            falls nicht timeout
            

            und nach Ablauf der Zeit in der Timer-Callback-Funktion zurück gesetzt werden

            setze timeout auf null
            

            Etwa so
            Blockly_temp.JPG

            Übrigens: Da die Haustür selbst nicht abgefragt wird, wird sowohl beim Öffnen als auch beim Schließen der Haustür gesendet.

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

              @kluge86 :
              So sollte es auch ohne doppeltes Senden funktionieren:

              on({id: 'zigbee.0.00158d00025811ae.opened', change: "ne", val: true}, function () {
                if (getState("zigbee.0.00158d0002580ef4.opened").val || getState("zigbee.0.00158d00025811cc.opened").val || getState("zigbee.0.00158d0002e6b5d2.opened").val) {
                  sendTo("telegram", "send", {
                      text: 'ACHTUNG!\nFenster oben offen!'
                  });
                }
              });
              
              K 2 Replies Last reply Reply Quote 0
              • K
                kluge86 @paul53 last edited by

                @paul53 Danke!

                Ich probiere eure Vorschläge gerne nachher aus 🙂

                @paul53 said in Telegram Nachrichten doppelt:

                Übrigens: Da die Haustür selbst nicht abgefragt wird, wird sowohl beim Öffnen als auch beim Schließen der Haustür gesendet.

                Mein Problem ist nicht, dass beim zeitversetzen Schließen eine erneute Nachricht käme, diese kommt aktuell erst wenn der Zustand sich nach größer einer Minute wieder verändert. Die doppelte Nachricht kommt sofort, es kommt quasi zwei mal die gleiche im selben Moment.

                1 Reply Last reply Reply Quote 0
                • T
                  tempestas @kluge86 last edited by

                  @kluge86

                  Ich meine, das hätte was mit ack = true zu tun.
                  Das Thema gibt es hier schonmal, da wurde das imho als Lösung genannt.

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

                    @paul53 said in Telegram Nachrichten doppelt:

                    @kluge86 :
                    So sollte es auch ohne doppeltes Senden funktionieren:

                    on({id: 'zigbee.0.00158d00025811ae.opened', change: "ne", val: true}, function () {
                      if (getState("zigbee.0.00158d0002580ef4.opened").val || getState("zigbee.0.00158d00025811cc.opened").val || getState("zigbee.0.00158d0002e6b5d2.opened").val) {
                        sendTo("telegram", "send", {
                            text: 'ACHTUNG!\nFenster oben offen!'
                        });
                      }
                    });
                    

                    Funktioniert super, vielen Dank!

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

                      @kluge86 sagte:

                      Funktioniert

                      Dann markiere bitte das Thema in der Überschrift als [gelöst].

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      868
                      Online

                      31.9k
                      Users

                      80.1k
                      Topics

                      1.3m
                      Posts

                      blockly
                      4
                      9
                      1099
                      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