Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JavaScript restart, Telegram Output wird überflutet

    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

    SOLVED JavaScript restart, Telegram Output wird überflutet

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

      Hallo
      ich hab mir über Telegram ein recht einfaches Menü aufgebaut um gewisse Sachen ohne Probleme von der Ferne zu steuern.
      Allerdings bei jedem neustart von ioBroker, JavaScript Instanz oder beim Anlegen eines neuen globalen Skripts (wird die JavaScript Instanz restartet), werden alle Skripts gestoppt und neu gestartet und dadurch erhalte ich sinnlos viele Nachricht mit 'Bitte wähle einen Button:'. Könnte ich das irgendwie umgehen?

      sendTo('telegram.0', {
              user: 'Christian',
              text: 'Bitte wähle einen Button',
              reply_markup: {
                  keyboard: [
                     ['Hauptmenü'],
                     ['Bewässerung-Info'],
                     ['Brunnenpumpe-On', 'Brunnenpumpe-Off'],
                     ['Vorgarten', 'Garten', 'Oben'],
                  ],
                  resize_keyboard: true,
                  one_time_keyboard: true
              }
          });
      
      1 Reply Last reply Reply Quote 0
      • H
        homecineplexx last edited by

        @Dutchman said in JavaScript restart, Telegram Output wird überflutet:

        obj.state.val

        DANKE
        der Ansatz mit dem Trigger war gut, hat mir aber nicht so super gefallen, vor allem nachdem du erwähnt hast, dass es bei Telegram eh schon quasi einen Trigger gibt.
        Habs nun so gelöst:

        on({id: "telegram.0.communicate.requestRaw", change: "ne"}, function (obj) {
            var value = JSON.parse(obj.state.val);
            
            if (value.text === 'Bewässerung') {
                sendTo('telegram.0', {
                user: 'Christian',
                text: 'Bitte wähle einen Button',
                reply_markup: {
                    keyboard: [
                       ['Hauptmenü'],
                       ['Bewässerung-Info'],
                       ['Brunnenpumpe-On', 'Brunnenpumpe-Off'],
                       ['Vorgarten', 'Garten', 'Oben'],
                    ],
                    resize_keyboard: true,
                    one_time_keyboard: true
                }
            });    
            }
        });
        
        Dutchman 1 Reply Last reply Reply Quote 1
        • Dutchman
          Dutchman Developer Most Active Administrators last edited by

          das problem hier ist, wie leider durch vielen so übernommen, das du deine action mit einem script start ausloest das ist grundlegend "not best practise" !

          Dadurch das du keinen trigger hast, startet der Inhalt des scriptes bei jedem script start.
          Also baue es bitte um zu einem trigger, also ein object erstellen und dieses Sender wen du die Nachricht schicken möchtest.

          Brauchst du ein Beispiel ?

          1 Reply Last reply Reply Quote 0
          • H
            homecineplexx last edited by

            @Dutchman said in JavaScript restart, Telegram Output wird überflutet:

            Also baue es bitte um zu einem trigger,

            Danke vorerst mal für die Hilfe.
            Wenn du ein gutes hast, wäre ich natürlich nicht abgeneigt, denn ich bin mit sicherheit nicht der einzige der danach fragen wird.
            BITTESCHÖN

            Dutchman 1 Reply Last reply Reply Quote 0
            • Dutchman
              Dutchman Developer Most Active Administrators @homecineplexx last edited by

              @homecineplexx said in JavaScript restart, Telegram Output wird überflutet:

              @Dutchman said in JavaScript restart, Telegram Output wird überflutet:

              Also baue es bitte um zu einem trigger,

              Danke vorerst mal für die Hilfe.
              Wenn du ein gutes hast, wäre ich natürlich nicht abgeneigt, denn ich bin mit sicherheit nicht der einzige der danach fragen wird.
              BITTESCHÖN

              gutes weis ich nicht aber lass es uns probieren ok !

              also dein code senden eine message wen das script gestartet wird :

              sendTo('telegram.0', {
                      user: 'Christian',
                      text: 'Bitte wähle einen Button',
                      reply_markup: {
                          keyboard: [
                             ['Hauptmenü'],
                             ['Bewässerung-Info'],
                             ['Brunnenpumpe-On', 'Brunnenpumpe-Off'],
                             ['Vorgarten', 'Garten', 'Oben'],
                          ],
                          resize_keyboard: true,
                          one_time_keyboard: true
                      }
                  });
              

              jetzt erstellen wir uns ein object (ich mache es hier im script, geht auch Manuel !

              createState("mein_trigger", function () {
              });
              

              jetzt mochten ich einen event auslösen wen dieser state sich ändert :

                on({id: "javascript.0.mein_trigger"/*mein_trigger*/, change: "ne"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                });
              

              so und jetzt mal der code wo ich den trigger kombinieren mit deinem code um die Nachricht zu schicken.
              Ich :

              • erstelle erst den state
              • warte dan auf ein event (Änderung des states)
              • schicke die Nachricht
              createState("mein_trigger", function () {
              });
              
              on({id: "javascript.0.mein_trigger"/*mein_trigger*/, change: "ne"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  sendTo('telegram.0', {
                      user: 'Christian',
                      text: 'Bitte wähle einen Button',
                      reply_markup: {
                          keyboard: [
                             ['Hauptmenü'],
                             ['Bewässerung-Info'],
                             ['Brunnenpumpe-On', 'Brunnenpumpe-Off'],
                             ['Vorgarten', 'Garten', 'Oben'],
                          ],
                          resize_keyboard: true,
                          one_time_keyboard: true
                      }
                  });
              });
              

              so hoffe das hilft dem Verständnis, ab jetzt kann das script nämlich immer an bleiben und nur wen der state sich ändert wird der Inhalt ausgeufert. Ein restart, script start usw wird es nicht mehr auslosen !

              Tip : ich sehe das dies ein telegram menu ist, du kannst auch den state "request" von telegram umerwachten, da kommt nämlich die nachreicht rein die du zum bot schickst, und diese dan auswerten

              Negalein 1 Reply Last reply Reply Quote 0
              • H
                homecineplexx last edited by

                @Dutchman said in JavaScript restart, Telegram Output wird überflutet:

                obj.state.val

                DANKE
                der Ansatz mit dem Trigger war gut, hat mir aber nicht so super gefallen, vor allem nachdem du erwähnt hast, dass es bei Telegram eh schon quasi einen Trigger gibt.
                Habs nun so gelöst:

                on({id: "telegram.0.communicate.requestRaw", change: "ne"}, function (obj) {
                    var value = JSON.parse(obj.state.val);
                    
                    if (value.text === 'Bewässerung') {
                        sendTo('telegram.0', {
                        user: 'Christian',
                        text: 'Bitte wähle einen Button',
                        reply_markup: {
                            keyboard: [
                               ['Hauptmenü'],
                               ['Bewässerung-Info'],
                               ['Brunnenpumpe-On', 'Brunnenpumpe-Off'],
                               ['Vorgarten', 'Garten', 'Oben'],
                            ],
                            resize_keyboard: true,
                            one_time_keyboard: true
                        }
                    });    
                    }
                });
                
                Dutchman 1 Reply Last reply Reply Quote 1
                • Dutchman
                  Dutchman Developer Most Active Administrators @homecineplexx last edited by

                  @homecineplexx

                  darf ich dir feedback geben ?

                  Sehr gut !!!! Du hast mein "Allgemeines" Beispiel und tips darin direkt umgesetzt auf deine persönliche situation.
                  Chapeau, schnell verstanden und gemacht.... alles jetzt nach wünsch ?

                  1 Reply Last reply Reply Quote 0
                  • H
                    homecineplexx last edited by

                    natürlich darfst du und danke...ich arbeite ja auch schon etwas länger damit. nur oft fehlt einem einfach die idee, was es eventuell wo geben könnte.

                    also bitte.....Verbesserungen sind jederzeit gern willkommen

                    Dutchman 1 Reply Last reply Reply Quote 0
                    • Dutchman
                      Dutchman Developer Most Active Administrators @homecineplexx last edited by

                      @homecineplexx said in JavaScript restart, Telegram Output wird überflutet:

                      also bitte.....Verbesserungen sind jederzeit gern willkommen

                      Gibt nix zu verbessern hast alles richtig gemacht 🙂

                      1 Reply Last reply Reply Quote 0
                      • H
                        homecineplexx last edited by

                        hatte gerade wieder ein problem...obwohl ichs jetzt so gemacht habe, kommen die "bitte button wählen" dennoch doppelt. hab ich dann das jeweilige skript gestoppt und gestartet hat es gepaßt.
                        irgendwie kommts mir so vor wie wenn die skripte dann teilweise dennoch doppelt laufen

                        1 Reply Last reply Reply Quote 0
                        • Negalein
                          Negalein Global Moderator @Dutchman last edited by

                          @Dutchman said in JavaScript restart, Telegram Output wird überflutet:

                          gutes weis ich nicht aber lass es uns probieren ok !

                          Hallo Dutchman!

                          Sehe ich das richtig, dass dieser Code eigentlich in jedes Script sollte, das eine ausführbare Funktion hat?

                          createState("mein_trigger", function () {
                          });
                           
                          on({id: "javascript.0.mein_trigger"/*mein_trigger*/, change: "ne"}, function (obj) {
                              var value = obj.state.val;
                              var oldValue = obj.oldState.val;
                          

                          und dies gehört dann bei jedem Script angepasst?

                          createState("mein_trigger", function () {
                          });
                          

                          mein_trigger nenn ich dann zB Pelletsofen

                          Für jedes Script also ein eigenes Objekt erstellen?

                          Dutchman 1 Reply Last reply Reply Quote 0
                          • Dutchman
                            Dutchman Developer Most Active Administrators @Negalein last edited by Dutchman

                            @Negalein said in JavaScript restart, Telegram Output wird überflutet:

                            Sehe ich das richtig, dass dieser Code eigentlich in jedes Script sollte, das eine ausführbare Funktion hat?

                            ja, also damit erstellt man sich einen state (wie gesagt geht auch Manuel) und löst das script aus wen sich der state ändert 😉

                            das hier nicht vergessen zu ändern 🙂 :

                            id: "javascript.0.mein_trigger"/*mein_trigger*/
                            

                            @Negalein said in JavaScript restart, Telegram Output wird überflutet:

                            Für jedes Script also ein eigenes Objekt erstellen?

                            jup, Vorteil du kannst es von alles aus auslösen (script, Alexa, yahka, was du möchtest)

                            1 Reply Last reply Reply Quote 1
                            • F
                              Freaknet last edited by

                              Hey,
                              hab das selbe Problem, das mich Telegram mit Meldungen überflutet 😞

                              Bin dadurch auf diesen Tread gestoßen und hab versucht meine Scripte damit anzupassen, leider ohne Erfolgt.

                              Ich habe die Scripte wie folgt angepasst (Beispiel):

                              createState("Hue Lampen", function () {
                              });

                              on({id: "javascript.0.Hue Lampen", change: "ne"}, function (obj) {
                              var value = obj.state.val;
                              var oldValue = obj.oldState.val;
                              sendTo('telegram.0', {
                              text: 'Bitte Hue Lampe wählen',
                              reply_markup: {
                              keyboard: [
                              ['Hue Küche An', 'Hue Küche Aus'],
                              ['Hue Esszimmer An', 'Hue Esszimmer Aus'],
                              ['Hue Wohnzimmer An', 'Hue Wohnzimmer Aus'],
                              ['Hue Haustür An', 'Hue Haustür Aus'],
                              ['Hue Erker An', 'Hue Erker Aus'],
                              ['Stehlampe An', 'Stehlampe Aus'],
                              ['Übersicht', ''],
                              ],
                              resize_keyboard: true,
                              one_time_keyboard: false
                              }
                              });
                              });

                              Leider wird nur einmal Hue Lampen vom Telegram akzeptiert und komme ins Menü, danach komme ich nicht mehr in das Sub-Menü, sobald ich auf Übersicht wieder gewechselt bin.

                              Kann es sein, dass ich in text2command etwas anderes einstellen muss damit der State von Hue Lampe bei jedem drücken auf den Button wechselt?
                              Hab aktuell als Objekt-ID den erzeugten State von Hue Lampe mit "Schreibe Text in Zustand" ausgewählt. Vorher hatte ich das Javascript von der Lampe drin mit "Schalte irgendwas ein oder aus".

                              Vielleicht kann mir jemand sagen was ich noch ändern muss ausser dem Script.
                              Danke schonmal im Voraus

                              Grüße
                              Freaknet

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              547
                              Online

                              31.8k
                              Users

                              80.0k
                              Topics

                              1.3m
                              Posts

                              javascript
                              4
                              12
                              1308
                              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