Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Telegram Inline Keyboard einzeilig

    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

    [gelöst] Telegram Inline Keyboard einzeilig

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

      Hallo,

      wie schaffe ich es, dass die Ausgabe mit nur einem Eintrag pro Zeile erfolgt? Aktuell sieht es so aus:
      ea31bf7d-0efd-4796-ba46-59c7693c1fdc-image.png

      Das Test-Script dazu ist folgendes:

      var Rollos = [
          {text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"},
          {text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}
      ];
      
                  sendTo('telegram', {
      					user: "Andy",
      					text: "Welchen Rollladen willst Du steuern?",
      					reply_markup: {
                              inline_keyboard: [Rollos],
                              resize_keyboard:   false, 
                              one_time_keyboard: true
      					}
      				});   
      

      resize_keyboard: true brachte keinen Erfolg.

      Vielen Dank
      Andy

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

        @Gwenselah

          reply_markup: {
             keyboard: [
                 ['Line 1, Button 1'],
                 ['Line 2, Button 2']
             ],
             resize_keyboard:   true,
             one_time_keyboard: true
           }
        
        G 1 Reply Last reply Reply Quote 0
        • G
          Gwenselah @ticaki last edited by

          @ticaki
          Vielen Dank für Deine Rückmeldung.
          Ich möchte gerne inline_keyboard verwenden, um mit dem Rückgabewert weiter arbeiten zu können.

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

            @Gwenselah
            Ist mir schon klar. Hätte vielleicht mehr auf die Arrayklammern hinweisen sollen. 🙂

            var Rollos = [
              [{text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"}],
              [{text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}]
            ];
            
            sendTo('telegram', {
              user: "Andy",
              text: "Welchen Rollladen willst Du steuern?",
              reply_markup: {
                inline_keyboard: Rollos,
                resize_keyboard:   false, 
                one_time_keyboard: true
              }
            });
            
            G L 2 Replies Last reply Reply Quote 0
            • G
              Gwenselah @ticaki last edited by

              @ticaki
              ja, die Klammern machen den Unterschied. Danke dafür.
              Ist dies dann ein mehrdimensionales Array oder heißt das anders?

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

                @Gwenselah sagte in Telegram Inline Keyboard einzeilig:

                @ticaki
                ja, die Klammern machen den Unterschied. Danke dafür.
                Ist dies dann ein mehrdimensionales Array oder heißt das anders?

                Ja, das war es aber auch schon vorher. Du hattest um Rollos ein [] und damit ein mehrdimensonales Array jedoch nur mit einer Zeile.

                1 Reply Last reply Reply Quote 0
                • G
                  Gwenselah last edited by

                  👍👍 👍

                  1 Reply Last reply Reply Quote 0
                  • G
                    Gwenselah last edited by

                    hab doch noch eine ergänzende Frage. Wie greife ich auf das Array zu oder schleife über die Elemente?

                    Folgendes habe ich probiert:

                    log(Rollos[0].text + " - " + Rollos[0].Objekt);
                    
                      for (var i=0;i<Rollos.length; i++) {
                        log(Rollos[i]["text"] + " - " + Rollos[i]["Objekt"]);
                      }
                    
                    T 1 Reply Last reply Reply Quote 0
                    • T
                      ticaki Developer @Gwenselah last edited by ticaki

                      @Gwenselah
                      Das müsste eigentlich mit:

                      for (var i=0;i<Rollos.length; i++) {
                          log(Rollos[i][0].text + " - " + Rollos[i][0].Objekt);
                      }
                      

                      gehen. Hab aber gerade nen Knoten im Kopf. 🙂

                      Edit: kannst du mir den Callback code zeigen, bräuchte ich gerade als Beispiel für mein Projekt. Danke

                      G 1 Reply Last reply Reply Quote 0
                      • L
                        LJSven last edited by

                        Hier scheinen ein paar Telegram Profis zu sein - ich möchte gern via Telegram Button eine Alexa Routine starten - kann mir dafür jemand ein Script schreiben?

                        Beispiel:
                        Auf dem Button soll stehen "Benjamin Blümchen" und Routine XYZ123345 soll gestartet werden.

                        Wenn ich das über text2command mache, wird immer nur der erste Eintrag abgespielt.

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

                          @ticaki sagte in Telegram Inline Keyboard einzeilig:

                          @Gwenselah
                          Ist mir schon klar. Hätte vielleicht mehr auf die Arrayklammern hinweisen sollen. 🙂

                          var Rollos = [
                            [{text: "Wohnzimmer Rolladen Links", Objekt: 'shelly.0.SHSW-25#ABCDEF#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Links"}],
                            [{text: "Wohnzimmer Rolladen Rechts", Objekt: 'shelly.0.SHSW-25#CDEFGH#1.Shutter.Position',callback_data: "%Wohnzimmer Rolladen Rechts"}]
                          ];
                          
                          sendTo('telegram', {
                            user: "Andy",
                            text: "Welchen Rollladen willst Du steuern?",
                            reply_markup: {
                              inline_keyboard: Rollos,
                              resize_keyboard:   false, 
                              one_time_keyboard: true
                            }
                          });
                          

                          Was macht das "OBJEKT"? ich möchte gern eine Routine triggern, aber bekomme es nicht ans laufen.

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

                            @ticaki
                            Ja so klappt es. Vielen Dank.
                            Hier ist mein Script. Ich habe eine mehrstufige Auswahl und muss daher mit Erkennungszeichen (%, §) arbeiten.
                            @LJSven Ich nutze Alexa Routinen nur als Sprachtrigger, die Logik bilde ich mit Javascript ab. Der Trigger setzt einen Datenpunkt auf True und darauf reagiert ein Script.
                            Zu der anderen Frage: Mit Objekt definiere ich den Datenpunkt, über den dann meinen Shelly auslöst.

                            var Rollladen = [
                                [{text: "Wohnzimmer Rollladen Links", Objekt: 'shelly.0.SHSW-25#00CDCF#1.Shutter.Position',callback_data: "%Wohnzimmer Rollladen Links"}],
                                [{text: "Wohnzimmer Rollladen Rechts", Objekt: 'shelly.0.SHSW-25#00465F#1.Shutter.Position',callback_data: "%Wohnzimmer Rollladen Rechts"}]
                            ];
                            
                            sendTo('telegram', {
                              user: "Andy",
                              text: "Welchen Rollladen willst Du steuern?",
                              reply_markup: {
                                inline_keyboard: Rollladen,
                                resize_keyboard:   false, 
                                one_time_keyboard: true
                            
                              }
                            
                            });
                            
                            on({id: "telegram.0.communicate.request", ack: false, change: 'any'}, function (obj) {
                                command = obj.state.val.substring(obj.state.val.indexOf(']')+1);
                                console.log("Received: " + command);
                            	var benutzer = obj.state.val.substring(1, obj.state.val.indexOf("]"));
                                //console.log ("Benutzer:" + benutzer)
                                // Menü beginnen
                                var cmd = command.toUpperCase();
                                var TelegramText="";				
                            				
                                if (command.substring(0,1) === "%") {                        
                                    //log("Rollläden gefunden");
                            
                                    var RollladenSwitch=[
                                        {text: "zu", callback_data: "§" + command + "$zu"},
                                        {text: "25%", callback_data: "§" + command + "$25"},
                                        {text: "50%", callback_data: "§" + command + "$50"},
                                        {text: "75%", callback_data: "§" + command + "$75"},
                                        {text: "auf", callback_data: "§" + command + "$auf"}
                                    ];
                                    sendTo('telegram', {
                                        user: benutzer,
                                        text: "Du hast >" + command.substring(1) + "< gewählt. \n Welche Position soll der Rollladen einnehmen?",
                                        reply_markup: {
                                            inline_keyboard: [RollladenSwitch],
                                            resize_keyboard:   false, 
                                            one_time_keyboard: true
                            
                                        }
                                    });   
                                } else if (command.substring(0,1) === "§") {         
                                    log ("Rollladen Switch: " + command);  
                                    //$ finden
                                    var Divider = command.indexOf("$");
                                    var Rollo = command.substring(2,Divider);
                                    var RolloState = command.substring(Divider+1);
                                    if (RolloState =="auf") {RolloState = "100"};
                                    if (RolloState =="zu") {RolloState = "0"};
                                    //log(Divider);
                                    //log(">"+Rollo+"<");
                                    //log(RolloState);
                            
                                    //find Objekt Attribut
                                    
                                    for (var i=0;i<Rollladen.length; i++) {
                                        if (Rollladen[i][0].text == Rollo)  {                                
                                            setState(Rollladen[i][0].Objekt,parseInt(RolloState));
                                            log(">" + Rollo + "< auf Position " + RolloState + " gesetzt.");
                                        }      
                                    };		
                                };
                            });
                            

                            P.S. nicht wundern, ich hab das aus einem großen Kontext zusammen kopiert, daher ist der erste SendTo Aufruf so statisch reinkopiert.

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

                              Danke, eine Frage:

                                      var RollladenSwitch=[
                                          {text: "zu", callback_data: "§" + command + "$zu"},
                                          {text: "25%", callback_data: "§" + command + "$25"},
                                          {text: "50%", callback_data: "§" + command + "$50"},
                                          {text: "75%", callback_data: "§" + command + "$75"},
                                          {text: "auf", callback_data: "§" + command + "$auf"}
                                      ];
                              

                              würde nicht auch:

                              var RollladenSwitch=[
                                          {text: "zu", callback_data: '{"cmd":0,"device":command,"state":0}'},
                                          {text: "25%", callback_data: '{"cmd":0,"device":command,"state":25}'},
                              ...
                                      ];
                              

                              gehen und das auswerten einfacher macht? Bin noch am planen. 🙂
                              EDIT: Das hier geht zwar, aber da gibt es ein Zeichenlimit für callback_data:

                              var kb = [
                                          [{text:"b1", callback_data:'{scriptname:"'+s+'",answer:"111"}'}],
                                          [{text:"b2", callback_data:'{scriptname:"'+s+'",answer:"222"}'}]
                                          ];
                              

                              Du solltest davon aber unabhängig noch folgendes nach einem Druck auf das Telegram Keyboard zurück senden:

                                      sendTo('telegram', {
                                         user: user,
                                         answerCallbackQuery: {
                                             text: "Pressed!", // oder Rollladen geht zu, geht auf oder Rollo 1 ausgewählt
                                             showAlert: false // Optional parameter
                                         }
                                     })
                              
                              1 Reply Last reply Reply Quote 0
                              • G
                                Gwenselah last edited by

                                Danke für den finalen SendTo Befehl. Das macht die Sache rund.
                                Meine Callbackauswertung ist nicht elegant, läuft aber im Kontext einer größeren. Und da gerade alles funktioniert, mag ich da nicht ran.

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                540
                                Online

                                31.8k
                                Users

                                80.0k
                                Topics

                                1.3m
                                Posts

                                communication javascript
                                3
                                14
                                705
                                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