Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Erstellung eines Keyboard Arrays für Telegram

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.8k

Erstellung eines Keyboard Arrays für Telegram

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
6 Beiträge 4 Kommentatoren 397 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Offline
    L Offline
    lutzg
    schrieb am zuletzt editiert von
    #1

    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.D liv-in-skyL T 3 Antworten Letzte Antwort
    0
    • L lutzg

      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.D Online
      David G.D Online
      David G.
      schrieb am zuletzt editiert von
      #2

      @lutzg

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

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

      Zeigt eure Lovelace-Visualisierung klick
      (Auch ideal um sich Anregungen zu holen)

      Meine Tabellen für eure Visualisierung klick

      L 1 Antwort Letzte Antwort
      0
      • David G.D David G.

        @lutzg

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

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

        L Offline
        L Offline
        lutzg
        schrieb am zuletzt editiert von
        #3

        @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 Antwort Letzte Antwort
        1
        • L lutzg

          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

          liv-in-skyL Offline
          liv-in-skyL Offline
          liv-in-sky
          schrieb am zuletzt editiert von
          #4

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

          nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

          1 Antwort Letzte Antwort
          0
          • L lutzg

            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

            T Nicht stören
            T Nicht stören
            ticaki
            schrieb am zuletzt editiert von ticaki
            #5

            @lutzg

            Mit JSON.parse kannst du aus einem richtig formatierten String ein array machen, da das 100% nicht richtig formatiert ist im ersten durchlauf :D 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.

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            L 1 Antwort Letzte Antwort
            0
            • T 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 :D 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 Offline
              L Offline
              lutzg
              schrieb am zuletzt editiert von
              #6

              @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. :hugging_face:

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

              1 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              679

              Online

              32.4k

              Benutzer

              81.5k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe