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. Telegram inline Keyboard zur Lampensteuerung

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.9k

Telegram inline Keyboard zur Lampensteuerung

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
9 Beiträge 3 Kommentatoren 1.6k Aufrufe 4 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.
  • E Offline
    E Offline
    elektron60
    schrieb am zuletzt editiert von elektron60
    #1

    Hallo zusammen!

    Weil ich mit meinem Vorhaben nicht weiter komme versuche ich es erstmalig bei euch.
    Ich möchte ein inline Keyboard in mein Telegram-Skript integrieren um eine Lampe auch richtig steuern zu können. Dabei soll das Keyboard nur einmal erscheinen und nach jedem Tastendruck aktualisiert werden. Mit 'zurück' soll die Funktion verlassen werden.

    Ich komme nicht dahinter wie das korrekt definiert wird. Die Telegram-API ist riesig!
    Auch fehlt mir noch ein Weg den gesetzten Trigger zu stoppen.
    Das suchen des Pfades zum gegebenen Namen dauert auch viel zu lange.
    Hier würde ich gerne drei Teilbäume durchsuchen damit es schneller geht.

    Bin gespannt wie ihr das macht!

    Im Anhang ist die JS-Funktion und die verwendeten Globalen Funktion.

    Grüße
    Ralf
    inlinetest.txt
    Globale_Funktionen.txt

    N 1 Antwort Letzte Antwort
    0
    • E elektron60

      Hallo zusammen!

      Weil ich mit meinem Vorhaben nicht weiter komme versuche ich es erstmalig bei euch.
      Ich möchte ein inline Keyboard in mein Telegram-Skript integrieren um eine Lampe auch richtig steuern zu können. Dabei soll das Keyboard nur einmal erscheinen und nach jedem Tastendruck aktualisiert werden. Mit 'zurück' soll die Funktion verlassen werden.

      Ich komme nicht dahinter wie das korrekt definiert wird. Die Telegram-API ist riesig!
      Auch fehlt mir noch ein Weg den gesetzten Trigger zu stoppen.
      Das suchen des Pfades zum gegebenen Namen dauert auch viel zu lange.
      Hier würde ich gerne drei Teilbäume durchsuchen damit es schneller geht.

      Bin gespannt wie ihr das macht!

      Im Anhang ist die JS-Funktion und die verwendeten Globalen Funktion.

      Grüße
      Ralf
      inlinetest.txt
      Globale_Funktionen.txt

      N Offline
      N Offline
      Nahasapee
      schrieb am zuletzt editiert von
      #2

      @elektron60 hi da möchte ich auf mein script verweisen :)

      https://github.com/Nahasapeemapetilon/MyTelegramMenu

      bzw. der entsprechende Forumeintrag dazu

      https://forum.iobroker.net/topic/19838/telegram-menü-dynamisch-aus-aufzählung-generieren/47

      viele grüße

      E 1 Antwort Letzte Antwort
      0
      • N Nahasapee

        @elektron60 hi da möchte ich auf mein script verweisen :)

        https://github.com/Nahasapeemapetilon/MyTelegramMenu

        bzw. der entsprechende Forumeintrag dazu

        https://forum.iobroker.net/topic/19838/telegram-menü-dynamisch-aus-aufzählung-generieren/47

        viele grüße

        E Offline
        E Offline
        elektron60
        schrieb am zuletzt editiert von
        #3

        @Nahasapee

        Danke für deine Antwort. Auch eine Interessante Lösung.
        Für meine Idee brauche ich noch eine Lösung um eine Taste eines Inline-Keyboards zu aktualisieren.
        Ich möchte den Farbwert verstellen und diesen auf der Taste sehen.
        Habe den momentanen Stand mal angehängt.

        Grüße
        Ralf

        inlinetest

        N 1 Antwort Letzte Antwort
        0
        • E elektron60

          @Nahasapee

          Danke für deine Antwort. Auch eine Interessante Lösung.
          Für meine Idee brauche ich noch eine Lösung um eine Taste eines Inline-Keyboards zu aktualisieren.
          Ich möchte den Farbwert verstellen und diesen auf der Taste sehen.
          Habe den momentanen Stand mal angehängt.

          Grüße
          Ralf

          inlinetest

          N Offline
          N Offline
          Nahasapee
          schrieb am zuletzt editiert von
          #4

          @elektron60 sorry das mit dem inline-keyboard hab ich glatt überlesen, könntest du mal ne kleine gif machen, wie deine lösung zur zeit arbeit?
          würde mich mal interessieren.

          E 1 Antwort Letzte Antwort
          0
          • N Nahasapee

            @elektron60 sorry das mit dem inline-keyboard hab ich glatt überlesen, könntest du mal ne kleine gif machen, wie deine lösung zur zeit arbeit?
            würde mich mal interessieren.

            E Offline
            E Offline
            elektron60
            schrieb am zuletzt editiert von
            #5

            @Nahasapee
            Ich habe an so eine Tastatur gedacht.
            Man kann die Werte sehen und verstellen.
            Im Prinzip funktioniert das schon.
            Was mir noch fehlt ist die Aktualisierung der linken Knöpfe. Da soll halt der aktuelle Wert stehen. Bin mir ziemlich sicher das sowas machbar ist. Aber wie?

            Screenshot_20200828-191523.jpg

            E 1 Antwort Letzte Antwort
            0
            • E elektron60

              @Nahasapee
              Ich habe an so eine Tastatur gedacht.
              Man kann die Werte sehen und verstellen.
              Im Prinzip funktioniert das schon.
              Was mir noch fehlt ist die Aktualisierung der linken Knöpfe. Da soll halt der aktuelle Wert stehen. Bin mir ziemlich sicher das sowas machbar ist. Aber wie?

              Screenshot_20200828-191523.jpg

              E Offline
              E Offline
              elektron60
              schrieb am zuletzt editiert von elektron60
              #6

              @elektron60

              Diese Version hat richtige Funktion. Ist im Skript aber nicht elegant gelöst.
              Ich habe zum erstellen und aktualisieren des inline-Keyboards zwei Definitionen.
              Eigentlich wollte ich nur einzelne Tasten aktualisieren mit:

              InlineKeyboardButton mit text und callback_data

              Das habe ich nicht gebacken bekommen.

              inlinetest

              20200829_190523.gif

              E 1 Antwort Letzte Antwort
              1
              • E elektron60

                @elektron60

                Diese Version hat richtige Funktion. Ist im Skript aber nicht elegant gelöst.
                Ich habe zum erstellen und aktualisieren des inline-Keyboards zwei Definitionen.
                Eigentlich wollte ich nur einzelne Tasten aktualisieren mit:

                InlineKeyboardButton mit text und callback_data

                Das habe ich nicht gebacken bekommen.

                inlinetest

                20200829_190523.gif

                E Offline
                E Offline
                elektron60
                schrieb am zuletzt editiert von
                #7

                @elektron60

                Hallo zusammen!

                Hier ist mein kompletter Blockly-Export incl. der Java-Script-Schnipsel.
                Wer es Testen möchte muss das natürlich Anpassen.
                Es werden zwei globale Funktionen gebraucht. Siehe oben.
                Ich verwende meistens einfache Keyboards.
                Nur die Lampensteuerung geht per inline Keyboard.
                Enthalten ist eine Funktion zum Steuern diverser Lampen-Typen.
                Als da wären bri, ct, hue, sat und transitiontime.
                Ein dynamisches inline Keybord ist hier noch nicht drin.
                Weiß einer wie das geht?
                Für mich ist die Funktionalität erstmal ausreichend.

                Telegram-Menu(Blockly)

                D 1 Antwort Letzte Antwort
                0
                • E elektron60

                  @elektron60

                  Hallo zusammen!

                  Hier ist mein kompletter Blockly-Export incl. der Java-Script-Schnipsel.
                  Wer es Testen möchte muss das natürlich Anpassen.
                  Es werden zwei globale Funktionen gebraucht. Siehe oben.
                  Ich verwende meistens einfache Keyboards.
                  Nur die Lampensteuerung geht per inline Keyboard.
                  Enthalten ist eine Funktion zum Steuern diverser Lampen-Typen.
                  Als da wären bri, ct, hue, sat und transitiontime.
                  Ein dynamisches inline Keybord ist hier noch nicht drin.
                  Weiß einer wie das geht?
                  Für mich ist die Funktionalität erstmal ausreichend.

                  Telegram-Menu(Blockly)

                  D Offline
                  D Offline
                  Donald
                  schrieb am zuletzt editiert von
                  #8

                  @elektron60
                  Wenn ich das so sehe/teste fällt mir wieder ein, warum ich bei mir damals am ende für das InlineKeyboard kein sendto( 'telegram.0',..) verwendet habe.
                  Irgendwie will der immer geänderte Werte haben.

                  Ich habe das InlineUpdate dann so gelöst das ich selbst die API-URL Aufrufe:

                  var botToken="1234567890:ganz_geheim";
                  var website="https://api.telegram.org/bot" + botToken;
                  
                  var obj =JSON.parse(KeyboardArray);
                  var replymarkup = {
                      inline_keyboard:  obj,
                      resize_keyboard:   true,
                      one_time_keyboard: false
                  }
                  var url = website + "/editMessageText?chat_id=" + chatId +"&message_id=" + messageId +
                      "&text=" + encodeURIComponent(messageText) + "&reply_markup=" + encodeURIComponent(JSON.stringify(replymarkup));
                  request(url);
                  
                  

                  Und da das InlineKeyboard als eine gesamte Nachricht zählt kann meines Erachtens auch nur die gesamte Nachricht (samt Keyboard) ausgetauscht werden, und nicht nur das Label einzelner Buttons. Das Element "callback_data" ist ja nur WAS dem Bot gesendet werden soll beim Klick (wenns vom angezeigtem Labeltext abweichend sein soll).

                  Dazu sende ich erst normal eine Nachricht, damit die letzte vom Bot kommt.
                  Anschließend wird der eigentliche Inhalt geschickt und dieser dann aller 10 Sekunden aktualisiert.
                  Dazu gibt es noch ein Objekt in Userdata, welches "true" enthält, solange das Keyboard aktualisiert werden soll.
                  Wenn irgendein Button geklickt wird, wird auch "true" neu gesetzt, und nach zwei Minuten ohne Aktivität wird das Aktualisieren abgebrochen (oder wenn man abbricht).
                  Allerdings ist dabei deine eigentliche Anfrage auch nicht erfüllt - das Keyboard selbst ist bei mir fix, nur der Text wird aktualisiert.

                  Aber sonst überall werden die Menüs (bzw. Schaltflächen) bei mir nicht im JS-Code versteckt, sondern bastle diese im Blockly per Liste zusammen. Dies sollte prinzipiell auch für die InlineKB funktionieren. Liste erstellen mit "Listen" und "IDs vom Selector"? Habe ich aber auch noch nicht probiert.

                  Hier der Teil meines Menüs zum Licht (RGBled ist im InlineKB)
                  telegram_menu_inlineKB.txt

                  E 1 Antwort Letzte Antwort
                  0
                  • D Donald

                    @elektron60
                    Wenn ich das so sehe/teste fällt mir wieder ein, warum ich bei mir damals am ende für das InlineKeyboard kein sendto( 'telegram.0',..) verwendet habe.
                    Irgendwie will der immer geänderte Werte haben.

                    Ich habe das InlineUpdate dann so gelöst das ich selbst die API-URL Aufrufe:

                    var botToken="1234567890:ganz_geheim";
                    var website="https://api.telegram.org/bot" + botToken;
                    
                    var obj =JSON.parse(KeyboardArray);
                    var replymarkup = {
                        inline_keyboard:  obj,
                        resize_keyboard:   true,
                        one_time_keyboard: false
                    }
                    var url = website + "/editMessageText?chat_id=" + chatId +"&message_id=" + messageId +
                        "&text=" + encodeURIComponent(messageText) + "&reply_markup=" + encodeURIComponent(JSON.stringify(replymarkup));
                    request(url);
                    
                    

                    Und da das InlineKeyboard als eine gesamte Nachricht zählt kann meines Erachtens auch nur die gesamte Nachricht (samt Keyboard) ausgetauscht werden, und nicht nur das Label einzelner Buttons. Das Element "callback_data" ist ja nur WAS dem Bot gesendet werden soll beim Klick (wenns vom angezeigtem Labeltext abweichend sein soll).

                    Dazu sende ich erst normal eine Nachricht, damit die letzte vom Bot kommt.
                    Anschließend wird der eigentliche Inhalt geschickt und dieser dann aller 10 Sekunden aktualisiert.
                    Dazu gibt es noch ein Objekt in Userdata, welches "true" enthält, solange das Keyboard aktualisiert werden soll.
                    Wenn irgendein Button geklickt wird, wird auch "true" neu gesetzt, und nach zwei Minuten ohne Aktivität wird das Aktualisieren abgebrochen (oder wenn man abbricht).
                    Allerdings ist dabei deine eigentliche Anfrage auch nicht erfüllt - das Keyboard selbst ist bei mir fix, nur der Text wird aktualisiert.

                    Aber sonst überall werden die Menüs (bzw. Schaltflächen) bei mir nicht im JS-Code versteckt, sondern bastle diese im Blockly per Liste zusammen. Dies sollte prinzipiell auch für die InlineKB funktionieren. Liste erstellen mit "Listen" und "IDs vom Selector"? Habe ich aber auch noch nicht probiert.

                    Hier der Teil meines Menüs zum Licht (RGBled ist im InlineKB)
                    telegram_menu_inlineKB.txt

                    E Offline
                    E Offline
                    elektron60
                    schrieb am zuletzt editiert von
                    #9

                    @Donald

                    Danke für deine Beschreibung. Mal sehen was da noch rausköchelt.

                    Grüße
                    Ralf

                    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

                    837

                    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