Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Telegram inline Keyboard zur Lampensteuerung

    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

    Telegram inline Keyboard zur Lampensteuerung

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      elektron60 last edited by 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 1 Reply Last reply Reply Quote 0
      • N
        Nahasapee @elektron60 last edited by

        @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 Reply Last reply Reply Quote 0
        • E
          elektron60 @Nahasapee last edited by

          @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 Reply Last reply Reply Quote 0
          • N
            Nahasapee @elektron60 last edited by

            @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 Reply Last reply Reply Quote 0
            • E
              elektron60 @Nahasapee last edited by

              @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 Reply Last reply Reply Quote 0
              • E
                elektron60 @elektron60 last edited by 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 1 Reply Last reply Reply Quote 1
                • E
                  elektron60 @elektron60 last edited by

                  @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 Reply Last reply Reply Quote 0
                  • D
                    Donald @elektron60 last edited by

                    @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 Reply Last reply Reply Quote 0
                    • E
                      elektron60 @Donald last edited by

                      @Donald

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

                      Grüße
                      Ralf

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      970
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      javascript
                      3
                      9
                      1404
                      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