Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Erstellung eines Keyboard Arrays für Telegram

    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

    Erstellung eines Keyboard Arrays für Telegram

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

      Hallo Zusammen,

      ich scheitere gerade an einem wahrscheinlich simplen JavaScript Problem.
      Ich möchte aus einer Reihe Datenpunkten eine Buttonliste an Telegram senden. Erwartet wird vom Telegram Adapter ein Array. In dem Script erstelle ich einen String welchen ich jedoch nicht mehr in ein Array umwandeln kann. Ein Array.from liefert nicht das erwartete Ergebnis. Entferne ich die Kommentierung in Zeile 12, bekomme ich die Nachricht wie erwartet. Kann ich in der Schleife gleich ein Array erstellen?

          let message = "auswählen";
      
          let keyboard = "[";
          $('state[id=0_userdata.0.Telegram.Menue.*.1]').each(function (id) {
              //log("Wert: "+id.split(".")[4]);
              keyboard = keyboard+"['"+id.split(".")[4]+"'],";
          });
          keyboard = keyboard+"];";
      
          log("Buttons aus DPs: "+keyboard);
          // =>      [["Button1"],["Button2"],["Button3"],];
          //keyboard=[["Button1"],["Button2"],["Button3"],];
      
          sendTo('telegram.0', {user: 'User', text: message, parse_mode: 'HTML', reply_markup: {
      	keyboard: keyboard,
      	resize_keyboard: true, one_time_keyboard: true}
      });
      

      Im Voraus vielen Dank für eure Hilfe.

      Lutz

      David G. liv-in-sky T 3 Replies Last reply Reply Quote 0
      • David G.
        David G. @lutzg last edited by

        @lutzg

        Evtl, wäre der Adapter was für dich

        https://github.com/MiRo1310/ioBroker.telegram-menu/blob/main/docs/de/README.md

        L 1 Reply Last reply Reply Quote 0
        • L
          lutzg @David G. last edited by

          @david-g
          Danke für die schnelle Antwort. Ich nutze das Script als Backanleitung für Brot. In den Datenpunkten ist eine Zeit und die Zutaten und Arbeiten für jeden Schritt hinterlegt. Nach Ablauf der Zeit bis zum nächsten Schritt bekommt man eine Nachricht was weiter zu tun ist. Um Ordnung zu halten werden bei einer neuen Nachricht die gesendeten und empfangenen alten Nachrichten gelöscht. Dies lässt sich mit vorhandenen Adaptern / Scripten kaum abbilden. Das läuft auch schon recht gut, jedoch ist die Anleitung noch in einem Array im Script selbst hinterlegt.

          Lutz

          1 Reply Last reply Reply Quote 1
          • liv-in-sky
            liv-in-sky @lutzg last edited by

            @lutzg
            vielleicht hilft das - ist zwar ein inline keyboard, aber du kannst es auch als keyboard senden

            dieses script erzeugt folgende übersicht

            Screenshot_20250102_204304_Telegram.jpg

            valueArray=['fritzdect.0.DECT_119590311304.tsoll','zigbee2mqtt.0.0x540f57fffef3faff.current_heating_setpoint','fritzdect.0.DECT_119610737080.tsoll','fritzdect.0.DECT_119590404152.tsoll',]
            roomArray=["Küche","Flur","Bad","Room"]
            let telegramInstanz="3"
            let testArr=[]
            let testArrInner=[]
            let ArrSend=[];
            
            testArr.push({
                                 "text":"RAUM ",
                                 "callback_data": 'HeizungTelegramtest'},
                            {
                                 "text":"🌡 TEMP",
                                 "callback_data": 'HeizungTelegramtest'}); 
                                 //log(testArr) 
            ArrSend.push(testArr)   ;                 
            
            testArr=[];
            
            for (let i =0;i<valueArray.length;i++){
                                                       testArr.push({
                                                             "text":String(roomArray[i]),
                                                             "callback_data": 'HeizungTelegramtest'+i},
                                                             {
                                                             "text":String(getState(valueArray[i]).val),
                                                             "callback_data": 'HeizungTelegramtest'+i},);                                                 
                                                             
                               ArrSend.push(testArr)     ;testArr=[]            } 
                //  log(JSON.stringify(ArrSend))            
            
            
            //log(JSON.stringify(ArrSend)) 
            
            
             
             
             sendTo('telegram.'+telegramInstanz, {
                                     text: "Heizungszustände", //"\u{26f8} ALARM  von Eislaufhalle \u{26f8}" ,
                                     parse_mode:"Markdown",
                                     reply_markup: {
                                                   inline_keyboard: ArrSend, 
                                                   resize_keyboard:      false,
                                                   one_time_keyboard:    true,
                                                   disable_notification: false,
                                                   remove_Keyboard:      true  
                                                   }} 
               
                                   );
            

            1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer @lutzg last edited by ticaki

              @lutzg

              Mit JSON.parse kannst du aus einem richtig formatierten String ein array machen, da das 100% nicht richtig formatiert ist im ersten durchlauf 😄 sollte der Code so aussehen.

              const a = '["button1", "Button2"]#' // den Fehler sieht man wohl
              try {
                  const arr = JSON.parse(a);
              } catch {
                   log('ich habs gesagt :)')
              }
              

              Wenn das JSON.parse schief geht, zieht es sonst die ganze Javascriptinstanz mit in den Tod.

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

                @ticaki sagte in Erstellung eines Keyboard Arrays für Telegram:

                const a = '["button1", "Button2"]#' // den Fehler sieht man wohl try { const arr = JSON.parse(a); } catch { log('ich habs gesagt :)') }

                Perfekt! Danke das hatte mir gefehlt. 🤗

                @liv-in-sky danke schön 😊 die ticaki Lösung ist übersichtlicher

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

                Support us

                ioBroker
                Community Adapters
                Donate

                928
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                javascript
                4
                6
                282
                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