Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. Telegram Button Script

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Telegram Button Script

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
41 Posts 15 Posters 23.7k Views 21 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • dslraserD Offline
    dslraserD Offline
    dslraser
    Forum Testing Most Active
    wrote on last edited by
    #14

    @Paulchen67:

    OK.

    Hab mir das Script mal näher angesehen.

    Bis auf eine Zeile (Zeile 5) und in Teilen Zeile 3 und 4, ist mir alles klar und ich weiß

    wie ich es umschreiben muss.

    Zeile 5

    if (befehl.search(/(?=.*(\bBATTERIE\b|\bVOLL\b|\bLEER\b|\bVOLT\b)).+/ig) != -1)

    Ich vermute das da ein Zusammenhang besteht mit Zeile 4.

    Was in Zeile 3 und 4 passiert ist mir auch nicht ganz klar und ob ich da was für mich

    umschreiben muss.

    var benutzer = stateval.substring(1,stateval.indexOf("]"));

    var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);

    Wenn ich das Script umgeschrieben habe rufe ich es über Text to Command auf indem

    ich einen Button (z.B. Status) damit belege, oder?

    Gruß

    Paulchen

    Edit:

    Hab es jetzt mal für mich umgeschrieben bis auf besagte Zeile 5.

    Läuft aber so noch nicht.

    id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
        var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
        var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
        var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
    
         if (befehl.search(/(?=.*(\bBATTERIE\b|\bVOLL\b|\bLEER\b|\bVOLT\b)).+/ig) != -1) {
            sendTo('telegram', {
                user: benutzer,
                text: 'Für welchen Raum möchtest du den Status abfragen?',
                reply_markup: {
                    inline_keyboard: [
    //                    [{ text: 'alle Räume', callback_data: '%Status'}],
                        [{ text: 'Wohnzimmer', callback_data: '%StatusWohnzimmer'}],
                        [{ text: 'Flur', callback_data: '%StatusFlur'}],
                        [{ text: 'Keller', callback_data: '%StatusKeller'}], 
                        [{ text: 'Terrasse', callback_data: '%StatusTerrasse'}],
                        [{ text: 'Garten', callback_data: '%StatusGarten'}],
                    ]
                 }
            });
        }    
        
    // Auswahl alle Räume oder einzeln.Alle Räume ist für Telegramm zu lang = Fehler im log
    /*    else if (befehl === "%Status") {
                sendTo('telegram', {
                user: benutzer,
                text: "Alle Räume Status angefragt",
                answerCallbackQuery: {
                text:
                        '\nXXX ' + getState().val + 
                        '\nXXX ' + getState().val +
                        '\nXXX ' + getState().val +
                        '\nXXX ' + getState().val + 
                        '\nXXX ' + getState().val +
                        '\nXXX ' + getState().val +
                        '\nXXX ' + getState().val            
                ,
                showAlert: true
                }
            });
        }*/ 
        else if (befehl === "%StatusWohnzimmer") {
                sendTo('telegram', {
                user: benutzer,
                text: "Wohnzimmer Status angefragt",
                answerCallbackQuery: {
                text: 
                        'Schranklicht ' + getState("hm-rpc.0.GEQ0209223.1.STATE").val + 
                        ' %\nWohnzimmerlicht ' + getState("hm-rpc.0.NEQ0257178.1.LEVEL").val +
                        ' %\nEsszimmerlicht ' + getState("hm-rpc.0.JEQ0202637.1.LEVEL").val +
                        '\nSteckdose Laptop ' + getState("hm-rpc.0.MEQ1435110.1.STATE").val +
                        '\nSteckdose Tablet ' + getState("hm-rpc.0.GEQ0209632.1.STATE").val +
                        '\nTerrassentür ' + getState("hm-rpc.0.MEQ0179152.1.STATE").val
                ,
                showAlert: true
                }
            });
        } 
        else if (befehl === "%StatusFlur") {
                sendTo('telegram', {
                user: benutzer,
                text: "Flur Status angefragt",
                answerCallbackQuery: {
                text: 
                        'Repeater ' + getState("hm-rpc.0.HEQ0102360.2.STATE").val + 
                        '\nAndriod laden ' + getState("hm-rpc.0.HEQ0102360.1.STATE").val +
                        '\nFlurlicht ' + getState("hm-rpc.0.JEQ0097197.1.STATE").val +
                        '\nNachtlicht ' + getState("hm-rpc.0.OEQ0174232.1.STATE").val +
                        '\nHaustürCam ' + getState("hm-rpc.0.HEQ0175625.1.STATE").val
                ,
                showAlert: true
                }
            });
        }
        else if (befehl === "%Status Keller") {
                sendTo('telegram', {
                user: benutzer,
                text: "Keller Status angefragt",
                answerCallbackQuery: {
                text: 
                        'Kellerfenster Links ' + getState("hm-rpc.0.LEQ1175462.1.STATE").val + 
                        '\nKellerfenster Rechts ' + getState("hm-rpc.0.LEQ1175621.1.STATE").val +
                        '\nLuftentfeuchter ' + getState("hm-rpc.0.GEQ0209623.1.STATE").val +
                        '\nSteckdose KellerCam ' + getState("hm-rpc.0.HEQ0102493.2.STATE").val +
                        '\nRPi ioBroker ' + getState("hm-rpc.0.MEQ1565039.1.STATE").val +
                        '\nRPi Nextcloud ' + getState("hm-rpc.0.MEQ1561418.1.STATE").val
                ,
                showAlert: true
                }
            });
        }
        else if (befehl === "%StatusTerrasse") {
                sendTo('telegram', {
                user: benutzer,
                text: "Terrasse Status angefragt",
                answerCallbackQuery: {
                text: 
                        'Markisse ' + getState("hm-rpc.0.NEQ1320295.1.LEVEL").val + 
                        ' %\nÜberdachung ' + getState("hm-rpc.0.MEQ1008372.1.STATE").val +
                        '\nFrei ' + getState("hm-rpc.0.MEQ1008372.2.STATE").val +
                        '\nTerrassenbeleuchtung ' + getState("hm-rpc.0.GEQ0209667.1.STATE").val
                ,
                showAlert: true
                }
            });
        }
        else if (befehl === "%StatusGarten") {
                sendTo('telegram', {
                user: benutzer,
                text: "Garten Status angefragt",
                answerCallbackQuery: {
                text: 
                        'Gartenlicht ' + getState().val +
                        ' %\nGartenhaus ' + getState("hm-rpc.0.LEQ0771728.1.STATE").val + 
                        '\nGartenhauslicht ' + getState("hm-rpc.0.OEQ0818221.1.STATE").val + 
                        '\nBW-Melder ' + getState("hm-rpc.0.LEQ1278626.1.MOTION").val +
                        '\nLichtwert ' + getState("hm-rpc.0.LEQ1278626.1.BRIGHTNESS").val + 'Lux '
                ,
                showAlert: true
                }
            });
        }
    ```` `  
    

    In Zeile 5 stehen lediglich "Schlagworte" für Telegram, womit Du die Funktion in Telegram aufrufen kannst. Die kannst Du nach Deinen wünschen anpassen. Also für meine Batterieabfrage nutze ich halt die Begriffe voll/leer/ oder volt (einer würde auch reichen).

    Für Temperaturabfragen habe ich sowas wie warm oder kalt (halt möglichst kurz, damit ich in Telegramm nicht erst soviel eintippen muss)

    Text to Command brauchst Du hier gar nicht. Das macht genau diese Zeile 5.

    Also einfach die oder das Schlagwort bei Telegram eintippen und das Script ruft die Button auf.

    PS: irgendwie fehlt bei Dir aber auch ganz am Anfang das on… (bei id)

    PPS: wenn Du das von mir verlinkte Script 1:1 übernimmst und bei Dir einfügst und startest und dann in Deinem Telegram Bot die Begriffe wie voll/leer/volt usw. eintippst und absendest sollten schon mal alle Button da sein (die Du ja verändern kannst im Script). Abfragen kannst Du dann natürlich mit den angezeigten Buttons noch nichts, dafür musst Du Deine Geräte im Script hinterlegen/umschreiben.

    1 Reply Last reply
    0
    • Paulchen67P Offline
      Paulchen67P Offline
      Paulchen67
      wrote on last edited by
      #15

      So, funktioniert ohne Probleme.

      Danke, für deine Unterstützung.

      Jetzt würde mich noch interessieren, ob man das Aufklappen der

      Tastatur unterdrücken kann wenn ich durch das Schlüsselwort das

      Script aufrufe.
      1441_ca3d8e81-d35a-43f3-b2c8-2da2e7045e52.jpeg

      Gruß

      Paulchen

      ioBroker mit Ubuntu auf Intel NUC
      piVCCU auf Raspberry Pi 3

      1 Reply Last reply
      0
      • dslraserD Offline
        dslraserD Offline
        dslraser
        Forum Testing Most Active
        wrote on last edited by
        #16

        das mit der Tastatur weiß ich leider nicht…

        1 Reply Last reply
        0
        • R Offline
          R Offline
          robsdobs
          wrote on last edited by
          #17

          Es ist möglich eine gesendete Message zu editieren und damit beispielsweise die Tastatur zu entfernen. (es gibt ein zeitliches Limit)

          Dafür benötigst du die message ID der Meldung. Im Github gibt es einen Pull request der zwei neue Datenpunkte hinzufügt, welche die chat ID und message ID der zuletzt gesendeten Meldung enthält.

          Bis dahin kannst du auch die message ID der letzten empfangenen Meldung nehmen und eins dazu addieren. Solange du nicht mehrere Nutzer hast funktioniert das.

          Scripte: http://forum.iobroker.net/viewtopic.php?f=23&t=2799&p=119565#p119565,

          1 Reply Last reply
          0
          • B Offline
            B Offline
            bishop
            wrote on last edited by
            #18

            Ist es auch möglich den button im telegram zu bekommen ohne etwas eingeben zu müssen am anfang?

            Also direkt bei öffnen des bot channels.

            4663_screenshot_20180226-170734.png

            1 Reply Last reply
            0
            • J Offline
              J Offline
              jan.beres
              wrote on last edited by
              #19

              Hallo,

              Ich brauche mal wieder eure Hilfe da ich leider noch gar keinen Plan von Scripten habe.

              Ich möchte gerne im Telegramm Unterpunkte haben, sodass ich zb. Erst auf LED drücken muss und dann die Farben auswählen kann.

              Bis jetzt sieht es so aus:

              sendTo('telegram.0', {

              text: 'Bitte wähle ein Button',

              reply_markup: {

              keyboard: [

              ['Wohnwand An', 'Wohnwand Aus'],

              ['Arbeitszimmerlicht An', 'Arbeitszimmerlicht Aus'],

              ['LED An', 'LED Aus'],

              ['LED Blau'],

              ['LED Rot'],

              ['LED Grün'],

              ['LED Gelb'],

              ['LED Weiß'],

              ],

              resize_keyboard: true,

              one_time_keyboard: true

              }

              });

              Vielen Dank im Vorraus

              Jan

              1 Reply Last reply
              0
              • P Offline
                P Offline
                Pascal51882
                wrote on last edited by
                #20

                Das geht doch relativ einfach.

                Einfach ein Unter Script erstellen in dem du dann die Farben ändern kannst.

                Dann kannst du das Script z.B Farben nennen und auf Farben einen Trigger setzen.

                Es macht wahrscheinlich sinn die Farbwahl neben An/Aus zu platzieren.

                1 Reply Last reply
                0
                • B Offline
                  B Offline
                  Bielefelder81
                  wrote on last edited by
                  #21

                  @bishop:

                  Ist es auch möglich den button im telegram zu bekommen ohne etwas eingeben zu müssen am anfang?

                  Also direkt bei öffnen des bot channels.

                  Screenshot_20180226-170734.png `
                  Das würde mich auch interessieren :D

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    bishop
                    wrote on last edited by
                    #22

                    Versuch mal

                    one_time_keyboard: false

                    Gruß

                    1 Reply Last reply
                    0
                    • E Offline
                      E Offline
                      excalibur270
                      wrote on last edited by
                      #23

                      Hi. Gibt es eine Möglichkeit die Antworten nur an den Empfänger zu senden der die anfrage gestellt hat? Jetzt ist es so:Sohn stellt Anfrage und auch ich bekomme die Antwort.

                      1 Reply Last reply
                      0
                      • R Offline
                        R Offline
                        Rocket85
                        wrote on last edited by
                        #24

                        Könnte jemand so nett sein und das Original Script wieder einstellen? Der LINK funktioniert leider nicht mehr!

                        Vielen DANK!

                        1 Reply Last reply
                        0
                        • R Offline
                          R Offline
                          robson
                          wrote on last edited by robson
                          #25

                          Hallo zusammen,

                          ich brauche eure Hilfe.
                          Ich versuche ein einfaches Inline Keyboard-Skript zum Laufen zu bringen (welches keinen Sinn macht und für mich zum Testen gedacht ist).
                          Sobald sich der Status meines Fensterkontaktes ändert (von true auf false), soll Telegram mir dies mit dem Inline-Keyboard und den Tasten 1, 2, 3, 4 anzeigen. Sobald ich dann eine Taste drücke, soll Telegram mir anzeigen "Du hast Taste x gedrückt".

                          Das funktioniert leider nicht :( Was mache ich falsch?

                          var TFK = 'hm-rpc.0.OEQ0392670.1.STATE'; //ID Tür-Fensterkontakt
                          
                          on({id: TFK, val: false, ack: true}, function (obj) {
                              var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
                              var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
                              var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
                          
                              sendTo('telegram', {
                                  chatId: '12345',
                                  text: 'Tippe auf eine Zahl:',
                                  reply_markup: {
                                      inline_keyboard: [
                                          [{ text: '1', callback_data: '%1'}],
                                          [{ text: '2', callback_data: '%2'}],
                                          [{ text: '3', callback_data: '%3'}], 
                                          [{ text: '4', callback_data: '%4'}],
                                      ]
                                   }
                              });
                          
                              if (befehl === "%1") {
                                  sendTo('telegram', {
                                      chatId: '12345',
                                      text: "Taste 1 gedrückt",
                                  });
                              }
                              if (befehl === "%2") {
                                  sendTo('telegram', {
                                      chatId: '12345',
                                      text: "Taste 2 gedrückt",
                                  });
                              }
                              if (befehl === "%3") {
                                  sendTo('telegram', {
                                      chatId: '12345',
                                      text: "Taste 3 gedrückt",
                                  });
                              }
                              if (befehl === "%4") {
                                  sendTo('telegram', {
                                      chatId: '12345',
                                      text: "Taste 4 gedrückt",
                                  });
                              }
                          });
                          

                          @dslraser
                          Könntest du dein Script bitte noch mal posten? Der Thread, den du oben verlinkt hast, exisistert anscheinend nicht mehr. Danke.

                          dslraserD 4 Replies Last reply
                          0
                          • R robson

                            Hallo zusammen,

                            ich brauche eure Hilfe.
                            Ich versuche ein einfaches Inline Keyboard-Skript zum Laufen zu bringen (welches keinen Sinn macht und für mich zum Testen gedacht ist).
                            Sobald sich der Status meines Fensterkontaktes ändert (von true auf false), soll Telegram mir dies mit dem Inline-Keyboard und den Tasten 1, 2, 3, 4 anzeigen. Sobald ich dann eine Taste drücke, soll Telegram mir anzeigen "Du hast Taste x gedrückt".

                            Das funktioniert leider nicht :( Was mache ich falsch?

                            var TFK = 'hm-rpc.0.OEQ0392670.1.STATE'; //ID Tür-Fensterkontakt
                            
                            on({id: TFK, val: false, ack: true}, function (obj) {
                                var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
                                var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
                                var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
                            
                                sendTo('telegram', {
                                    chatId: '12345',
                                    text: 'Tippe auf eine Zahl:',
                                    reply_markup: {
                                        inline_keyboard: [
                                            [{ text: '1', callback_data: '%1'}],
                                            [{ text: '2', callback_data: '%2'}],
                                            [{ text: '3', callback_data: '%3'}], 
                                            [{ text: '4', callback_data: '%4'}],
                                        ]
                                     }
                                });
                            
                                if (befehl === "%1") {
                                    sendTo('telegram', {
                                        chatId: '12345',
                                        text: "Taste 1 gedrückt",
                                    });
                                }
                                if (befehl === "%2") {
                                    sendTo('telegram', {
                                        chatId: '12345',
                                        text: "Taste 2 gedrückt",
                                    });
                                }
                                if (befehl === "%3") {
                                    sendTo('telegram', {
                                        chatId: '12345',
                                        text: "Taste 3 gedrückt",
                                    });
                                }
                                if (befehl === "%4") {
                                    sendTo('telegram', {
                                        chatId: '12345',
                                        text: "Taste 4 gedrückt",
                                    });
                                }
                            });
                            

                            @dslraser
                            Könntest du dein Script bitte noch mal posten? Der Thread, den du oben verlinkt hast, exisistert anscheinend nicht mehr. Danke.

                            dslraserD Offline
                            dslraserD Offline
                            dslraser
                            Forum Testing Most Active
                            wrote on last edited by
                            #26

                            @robson
                            kann ich später machen, bin unterwegs.

                            1 Reply Last reply
                            1
                            • R robson

                              Hallo zusammen,

                              ich brauche eure Hilfe.
                              Ich versuche ein einfaches Inline Keyboard-Skript zum Laufen zu bringen (welches keinen Sinn macht und für mich zum Testen gedacht ist).
                              Sobald sich der Status meines Fensterkontaktes ändert (von true auf false), soll Telegram mir dies mit dem Inline-Keyboard und den Tasten 1, 2, 3, 4 anzeigen. Sobald ich dann eine Taste drücke, soll Telegram mir anzeigen "Du hast Taste x gedrückt".

                              Das funktioniert leider nicht :( Was mache ich falsch?

                              var TFK = 'hm-rpc.0.OEQ0392670.1.STATE'; //ID Tür-Fensterkontakt
                              
                              on({id: TFK, val: false, ack: true}, function (obj) {
                                  var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
                                  var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
                                  var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
                              
                                  sendTo('telegram', {
                                      chatId: '12345',
                                      text: 'Tippe auf eine Zahl:',
                                      reply_markup: {
                                          inline_keyboard: [
                                              [{ text: '1', callback_data: '%1'}],
                                              [{ text: '2', callback_data: '%2'}],
                                              [{ text: '3', callback_data: '%3'}], 
                                              [{ text: '4', callback_data: '%4'}],
                                          ]
                                       }
                                  });
                              
                                  if (befehl === "%1") {
                                      sendTo('telegram', {
                                          chatId: '12345',
                                          text: "Taste 1 gedrückt",
                                      });
                                  }
                                  if (befehl === "%2") {
                                      sendTo('telegram', {
                                          chatId: '12345',
                                          text: "Taste 2 gedrückt",
                                      });
                                  }
                                  if (befehl === "%3") {
                                      sendTo('telegram', {
                                          chatId: '12345',
                                          text: "Taste 3 gedrückt",
                                      });
                                  }
                                  if (befehl === "%4") {
                                      sendTo('telegram', {
                                          chatId: '12345',
                                          text: "Taste 4 gedrückt",
                                      });
                                  }
                              });
                              

                              @dslraser
                              Könntest du dein Script bitte noch mal posten? Der Thread, den du oben verlinkt hast, exisistert anscheinend nicht mehr. Danke.

                              dslraserD Offline
                              dslraserD Offline
                              dslraser
                              Forum Testing Most Active
                              wrote on last edited by dslraser
                              #27

                              @robson

                              ich habe zwei verschiedene Scripte, mit diesem hier lässt sich die Temperatur abfragen (geht natürlich auch für Batterien usw., wenn man es anpast)
                              Schlagworte habe ich hier z.B. warm oder kalt oder temperatur (ich glaube klein und grosBuchstaben waren egal. Also einfach eins dieser Wörter bei Telegram eintragen und absenden. (Geräte mit den xxx durch eigene ersetzen)
                              Und noch was, dieses Script ist nicht von mir.

                              on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
                                  var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
                                  var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
                                  var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
                              
                                   if (befehl.search(/(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b)).+/ig) != -1) {
                                      sendTo('telegram', {
                                          user: benutzer,
                                          text: 'Für welchen Raum möchtest du die Temperatur abfragen?',
                                          reply_markup: {
                                              inline_keyboard: [
                                                  [{ text: 'alle Räume', callback_data: '%Tempalle'}],
                                                  [{ text: 'Flur', callback_data: '%TempFlur'}],
                                                  [{ text: 'Wohnzimmer', callback_data: '%TempWohnzimmer'}],
                                                  [{ text: 'Badezimmer', callback_data: '%TempBadezimmer'}], 
                                                  [{ text: 'Gästezimmer', callback_data: '%TempGaestezimmer'}],
                                                  [{ text: 'Schlafzimmer', callback_data: '%TempSchlafzimmer'}],
                                                  [{ text: 'Aussen', callback_data: '%TempAussen'}],
                                              ]
                                           }
                                      });
                                  }    
                                  
                              // Auswahl alle Räume oder einzeln.
                                  else if (befehl === "%Tempalle") {
                                          sendTo('telegram', {
                                          user: benutzer,
                                          text: "Temperatur alle Räume angefragt",
                                          answerCallbackQuery: {
                                          text: 'Flur ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + 
                                          '°C\nWonzimmer ' + getState("hm-rpc.xxx.1.ACTUAL_TEMPERATURE").val + 
                                          '°C\nBadezimmer ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + 
                                          '°C\nGästezimmer ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + 
                                          '°C\nSchlafzimmer ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val +
                                          '°C\nAussen ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + '°C',
                                          showAlert: true
                                          }
                                      });
                                  } 
                                  else if (befehl === "%TempFlur") {
                                          sendTo('telegram', {
                                          user: benutzer,
                                          text: "Flurtemperatur angefragt",
                                          answerCallbackQuery: {
                                          text: 'Flur ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + '°C',
                                          showAlert: true
                                          }
                                      });
                                  } 
                                  else if (befehl === "%TempSchlafzimmer") {
                                          sendTo('telegram', {
                                          user: benutzer,
                                          text: "Schlafzimmertemperatur angefragt",
                                          answerCallbackQuery: {
                                          text: 'Schlafzimmer ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + '°C',
                                          showAlert: true
                                          }
                                      });
                                  }
                                  else if (befehl === "%TempGaestezimmer") {
                                          sendTo('telegram', {
                                          user: benutzer,
                                          text: "Gästezimmertemperatur angefragt",
                                          answerCallbackQuery: {
                                          text: 'Gästezimmer ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + '°C',
                                          showAlert: true
                                          }
                                      });
                                  }
                                  else if (befehl === "%TempWohnzimmer") {
                                          sendTo('telegram', {
                                          user: benutzer,
                                          text: "Wohnzimmertemperatur angefragt",
                                          answerCallbackQuery: {
                                          text: 'Wohnzimmer ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + '°C',
                                          showAlert: true
                                          }
                                      });
                                  }
                                  else if (befehl === "%TempBadezimmer") {
                                          sendTo('telegram', {
                                          user: benutzer,
                                          text: "Badezimmertemperatur angefragt",
                                          answerCallbackQuery: {
                                          text: 'Badezimmer ' + getState("hm-rpc.0.xxx.1.ACTUAL_TEMPERATURE").val + '°C',
                                          showAlert: true
                                          }
                                      });
                                  
                               }
                                  else if (befehl === "%TempAussen") {
                                          sendTo('telegram', {
                                          user: benutzer,
                                          text: "Aussentemperatur angefragt",
                                          answerCallbackQuery: {
                                          text: 'Aussen ' + getState("hm-rpc.0.xxx.ACTUAL_TEMPERATURE").val + '°C',
                                          showAlert: true
                                          }
                                      });
                                  }
                              });
                              
                              

                              sieht dann am PC so aus (Handy ist so ähnlich

                              Bildschirmfoto 2019-02-22 um 12.53.04.png

                              und beim Klick auf alle Räume sieht es dann so aus

                              Bildschirmfoto 2019-02-22 um 12.53.15.png

                              1 Reply Last reply
                              1
                              • R robson

                                Hallo zusammen,

                                ich brauche eure Hilfe.
                                Ich versuche ein einfaches Inline Keyboard-Skript zum Laufen zu bringen (welches keinen Sinn macht und für mich zum Testen gedacht ist).
                                Sobald sich der Status meines Fensterkontaktes ändert (von true auf false), soll Telegram mir dies mit dem Inline-Keyboard und den Tasten 1, 2, 3, 4 anzeigen. Sobald ich dann eine Taste drücke, soll Telegram mir anzeigen "Du hast Taste x gedrückt".

                                Das funktioniert leider nicht :( Was mache ich falsch?

                                var TFK = 'hm-rpc.0.OEQ0392670.1.STATE'; //ID Tür-Fensterkontakt
                                
                                on({id: TFK, val: false, ack: true}, function (obj) {
                                    var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
                                    var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
                                    var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
                                
                                    sendTo('telegram', {
                                        chatId: '12345',
                                        text: 'Tippe auf eine Zahl:',
                                        reply_markup: {
                                            inline_keyboard: [
                                                [{ text: '1', callback_data: '%1'}],
                                                [{ text: '2', callback_data: '%2'}],
                                                [{ text: '3', callback_data: '%3'}], 
                                                [{ text: '4', callback_data: '%4'}],
                                            ]
                                         }
                                    });
                                
                                    if (befehl === "%1") {
                                        sendTo('telegram', {
                                            chatId: '12345',
                                            text: "Taste 1 gedrückt",
                                        });
                                    }
                                    if (befehl === "%2") {
                                        sendTo('telegram', {
                                            chatId: '12345',
                                            text: "Taste 2 gedrückt",
                                        });
                                    }
                                    if (befehl === "%3") {
                                        sendTo('telegram', {
                                            chatId: '12345',
                                            text: "Taste 3 gedrückt",
                                        });
                                    }
                                    if (befehl === "%4") {
                                        sendTo('telegram', {
                                            chatId: '12345',
                                            text: "Taste 4 gedrückt",
                                        });
                                    }
                                });
                                

                                @dslraser
                                Könntest du dein Script bitte noch mal posten? Der Thread, den du oben verlinkt hast, exisistert anscheinend nicht mehr. Danke.

                                dslraserD Offline
                                dslraserD Offline
                                dslraser
                                Forum Testing Most Active
                                wrote on last edited by
                                #28

                                @robson
                                Dann hier noch das zweite Script, bei diesem Script das Wort menü an Telegram senden. Dieses Skript kannst Du beliebig mit Räumen und Geräten erweitern und auch Geräte damit schalten. Das ist oben im Skript und ich denke selbsterklärend. (in dem Skript sind nur Beispiele für drei Räume und einige Geräte)
                                Und noch was, dieses Script ist nicht von mir.

                                var Devices = [
                                    { Name: 'Kaminlampe',        Ort: "Wohnzimmer",     an: true, aus: false, Objekt: "hm-rpc.0.xxx.3.STATE",                       Beschreibung: "Steckdose an der die Kaminlampe im Wohnzimmer angeschlossen ist"},
                                    { Name: 'Fensterlampe',      Ort: "Wohnzimmer",     an: true, aus: false, Objekt: "hue.0.Philips_hue.Fensterlampe.on",          Beschreibung: "Fensterlampe Wohnzimmer"},
                                    { Name: 'Tischlampe',        Ort: "Wohnzimmer",     an: true, aus: false, Objekt: "hm-rpc.0.xxx.3.STATE",                       Beschreibung: "Steckdose an der die Tischlampe im Wohnzimmer angeschlossen ist"},
                                    { Name: 'Schranklampe',      Ort: "Wohnzimmer",     an: true, aus: false, Objekt: "hm-rpc.0.xxx.3.STATE",                       Beschreibung: "Steckdose an der die Schranklampe im Wohnzimmer angeschlossen ist"},
                                    { Name: 'Deckenlampe',       Ort: "Wohnzimmer",     an: true, aus: false, Objekt: "hue.0.Philips_hue.Deckenlampe.on",           Beschreibung: "Deckenlampe Wohnzimmer"},
                                    { Name: 'Licht komplett',    Ort: "Wohnzimmer",     an: true, aus: false, Objekt: "hue.0.Philips_hue.Wohnzimmer.on",            Beschreibung: "Licht Wohnzimmer komplett"},
                                    { Name: 'Fernseher',         Ort: "Wohnzimmer",     an: 2,    aus: 0,     Objekt: "harmony.0.Wohnzimmer.activities.Fernsehen",  Beschreibung: "Fernseher Wohnzimmer über Harmony"},
                                    { Name: 'Flurlicht',         Ort: "Flur",           an: true, aus: false, Objekt: "hue.0.Philips_hue.Flur-Kellertreppe.on",     Beschreibung: "Flur Treppenlicht"},
                                    { Name: 'Schlafzimmerlicht', Ort: "Schlafzimmer",   an: true, aus: false, Objekt: "hue.0.HueBridge.Schlafzimmer.on",            Beschreibung: "Schlafzimmer Licht"},
                                ];
                                
                                function DistinctKeyValues(Array, Key) {
                                    var unique = {};
                                    var distinct = [];
                                
                                    for( var i in Array ){
                                        if (!Array[i].selection) { continue; }
                                        if( typeof(unique[Array[i][Key]]) == "undefined"){
                                            distinct.push(Array[i][Key]);
                                        }
                                        unique[Array[i][Key]] = 0;
                                    }
                                return distinct;
                                }
                                
                                function ArrayDeselectKeyValues(Array, Key, Value) {
                                    for( var i in Array ) {
                                        if (Array[i][Key] != Value) {
                                            Array[i].selection = false;
                                        }
                                    }    
                                return Array;
                                }
                                
                                function Array2ID(Array, Key, Value) {
                                    for( var i in Array ) {
                                        if (Array[i][Key] == Value) {
                                            break;
                                        }
                                    }
                                return i;
                                }
                                
                                function Key2Keyboard(Array, Key) {
                                    Distinct = [], OuterArray = []; 
                                    Distinct = DistinctKeyValues(Array, Key);
                                
                                    for( var i in Distinct ){
                                        InnerArray = [];
                                        item = {};
                                        item.text          = Distinct[i];
                                        item.callback_data = "___" + Key + ","+ Distinct[i];
                                        InnerArray.push(item);
                                        OuterArray.push(InnerArray);
                                    }
                                return OuterArray;    
                                }
                                
                                function SwitchKeyboard(Array, Key, Value) {
                                    Distinct = [], OuterArray = []; 
                                    Distinct = ['an', 'aus'];
                                
                                    for( var i in Distinct ){
                                        InnerArray = [];
                                        item = {};
                                        item.text          = Distinct[i];
                                        item.callback_data = "___" + Key + ","+ Distinct[i];
                                        InnerArray.push(item);
                                        OuterArray.push(InnerArray);
                                    }
                                return OuterArray;    
                                }
                                
                                function MenuFrageKey(Frage, Key, Array) {
                                    MenuFrage(Frage, Array, Key2Keyboard(Array, Key));
                                }
                                
                                function MenuFrageDevice(ID, Array) {
                                    Objekt = Array[ID].Objekt;
                                    Status=getState(Objekt).val;
                                    if (Status === Array[ID].an) {
                                        MenuFrage("Status von " + Array[ID].Name + ": eingeschaltet.\nWas wollen Sie tun?",Array, SwitchKeyboard(Array, '*'+Array[ID].Name, Array[ID].Name));
                                    } 
                                    else {
                                        MenuFrage("Status von " + Array[ID].Name + ": ausgeschaltet.\nWas wollen Sie tun?",Array, SwitchKeyboard(Array, '*'+Array[ID].Name, Array[ID].Name));
                                    }
                                }
                                
                                function MenuFrage(Frage, Array, KeyboardArray) {
                                    sendTo('telegram.0', {
                                        chatId: getState("telegram.0.communicate.requestChatId").val,
                                        text:   Frage,
                                        reply_markup: {
                                            inline_keyboard: KeyboardArray,
                                            resize_keyboard:   false, 
                                            one_time_keyboard: true
                                        }
                                    });
                                return;    
                                }
                                
                                function MenuAntwortDeselect(Array, Key, Value) {
                                    MenuAntwort(Array, Key, Value);
                                    ArrayDeselectKeyValues(Array, Key, Value);
                                }
                                
                                function MenuAntwort(Array, Key, Value) {
                                    sendTo('telegram.0', {
                                        chatId: getState("telegram.0.communicate.requestChatId").val,
                                        text: Key + ': ' + Value,
                                        editMessageText: {
                                            options: {
                                                chat_id: getState("telegram.0.communicate.requestChatId").val,
                                                message_id: getState("telegram.0.communicate.requestMessageId").val,
                                            }
                                        }
                                    });
                                return Array;
                                }
                                
                                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);
                                
                                    // Menü beginnen
                                    if (command.toUpperCase() ==="MENÜ") {
                                        //Reset previous selections
                                        for( var i in Devices ){
                                            Devices[i].selection=true;
                                        }
                                        MenuFrageKey('Wo willst du etwas tun?', 'Ort', Devices);
                                    }
                                    // Antwort verarbeiten
                                    else if (command.startsWith("___")) {
                                            command = command.slice(3,command.length); 
                                        var KeyVal = command.split(",");
                                        var Key   = KeyVal[0];
                                        var Value = KeyVal[1];
                                
                                        if (Key == 'Ort') {
                                            MenuAntwortDeselect(Devices, Key, Value);
                                            MenuFrageKey('Welches Gerät willst du steuern', 'Name', Devices);
                                        }
                                        else if (Key == 'Name') {
                                            MenuAntwortDeselect(Devices, Key, Value);
                                            ID=Array2ID(Devices, Key, Value);
                                            MenuFrageDevice(ID, Devices);
                                        }
                                        else if (Key.startsWith("*")) {
                                            Key=Key.slice(1,Key.length);
                                            ID=Array2ID(Devices, 'Name', Key);
                                            setState(Devices[ID].Objekt, Devices[ID][Value]);
                                            MenuAntwort(Devices, Devices[ID].Name, Value);
                                        }
                                        else {
                                            console.log("Else: ___" + command);
                                        }
                                    }
                                    else {
                                            console.log("Else: " + command);
                                    }
                                 });
                                 
                                

                                Sieht dann so aus

                                Bildschirmfoto 2019-02-22 um 13.04.33.png

                                Bildschirmfoto 2019-02-22 um 13.04.44.png

                                Bildschirmfoto 2019-02-22 um 13.04.54.png

                                1 Reply Last reply
                                1
                                • R robson

                                  Hallo zusammen,

                                  ich brauche eure Hilfe.
                                  Ich versuche ein einfaches Inline Keyboard-Skript zum Laufen zu bringen (welches keinen Sinn macht und für mich zum Testen gedacht ist).
                                  Sobald sich der Status meines Fensterkontaktes ändert (von true auf false), soll Telegram mir dies mit dem Inline-Keyboard und den Tasten 1, 2, 3, 4 anzeigen. Sobald ich dann eine Taste drücke, soll Telegram mir anzeigen "Du hast Taste x gedrückt".

                                  Das funktioniert leider nicht :( Was mache ich falsch?

                                  var TFK = 'hm-rpc.0.OEQ0392670.1.STATE'; //ID Tür-Fensterkontakt
                                  
                                  on({id: TFK, val: false, ack: true}, function (obj) {
                                      var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
                                      var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
                                      var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
                                  
                                      sendTo('telegram', {
                                          chatId: '12345',
                                          text: 'Tippe auf eine Zahl:',
                                          reply_markup: {
                                              inline_keyboard: [
                                                  [{ text: '1', callback_data: '%1'}],
                                                  [{ text: '2', callback_data: '%2'}],
                                                  [{ text: '3', callback_data: '%3'}], 
                                                  [{ text: '4', callback_data: '%4'}],
                                              ]
                                           }
                                      });
                                  
                                      if (befehl === "%1") {
                                          sendTo('telegram', {
                                              chatId: '12345',
                                              text: "Taste 1 gedrückt",
                                          });
                                      }
                                      if (befehl === "%2") {
                                          sendTo('telegram', {
                                              chatId: '12345',
                                              text: "Taste 2 gedrückt",
                                          });
                                      }
                                      if (befehl === "%3") {
                                          sendTo('telegram', {
                                              chatId: '12345',
                                              text: "Taste 3 gedrückt",
                                          });
                                      }
                                      if (befehl === "%4") {
                                          sendTo('telegram', {
                                              chatId: '12345',
                                              text: "Taste 4 gedrückt",
                                          });
                                      }
                                  });
                                  

                                  @dslraser
                                  Könntest du dein Script bitte noch mal posten? Der Thread, den du oben verlinkt hast, exisistert anscheinend nicht mehr. Danke.

                                  dslraserD Offline
                                  dslraserD Offline
                                  dslraser
                                  Forum Testing Most Active
                                  wrote on last edited by
                                  #29

                                  @robson

                                  und hier noch angepasst an Batterien, sieht dann so aus

                                  Bildschirmfoto 2019-02-22 um 13.12.32.png

                                  Bildschirmfoto 2019-02-22 um 13.12.48.png

                                  1 Reply Last reply
                                  1
                                  • R Offline
                                    R Offline
                                    robson
                                    wrote on last edited by robson
                                    #30

                                    @dslraser
                                    Vielen Dank für deine ausführlichen Posts!
                                    Ich hoffe, dass das Wetter bald wieder schlechter wird, damit ich mich an das Thema weiter ransetzen kann :grin:

                                    1 Reply Last reply
                                    0
                                    • R Offline
                                      R Offline
                                      robson
                                      wrote on last edited by robson
                                      #31

                                      @dslraser
                                      Hast du eine Ahnung, warum ich bei answerCallbackQuery immer den Telegram-User eingeben muss, damit ich eine Telegram-Ausgabe erhalte? Die ChatId funktioniert hier komischerweise nicht (ansonsten immer zuverlässig).

                                      Es geht also nur

                                          else if (befehl === "%TempAlle") {
                                                  sendTo('telegram', {
                                                  user: benutzer,
                                                  text: "Temperatur alle Räume angefragt",
                                                  answerCallbackQuery: {
                                       ....
                                      });
                                      

                                      Anstatt

                                          else if (befehl === "%TempAlle") {
                                                  sendTo('telegram', {
                                                  chatId: 12345,
                                                  text: "Temperatur alle Räume angefragt",
                                                  answerCallbackQuery: {
                                      ....
                                      });
                                      
                                      dslraserD 1 Reply Last reply
                                      0
                                      • R robson

                                        @dslraser
                                        Hast du eine Ahnung, warum ich bei answerCallbackQuery immer den Telegram-User eingeben muss, damit ich eine Telegram-Ausgabe erhalte? Die ChatId funktioniert hier komischerweise nicht (ansonsten immer zuverlässig).

                                        Es geht also nur

                                            else if (befehl === "%TempAlle") {
                                                    sendTo('telegram', {
                                                    user: benutzer,
                                                    text: "Temperatur alle Räume angefragt",
                                                    answerCallbackQuery: {
                                         ....
                                        });
                                        

                                        Anstatt

                                            else if (befehl === "%TempAlle") {
                                                    sendTo('telegram', {
                                                    chatId: 12345,
                                                    text: "Temperatur alle Räume angefragt",
                                                    answerCallbackQuery: {
                                        ....
                                        });
                                        
                                        dslraserD Offline
                                        dslraserD Offline
                                        dslraser
                                        Forum Testing Most Active
                                        wrote on last edited by
                                        #32

                                        @robson
                                        Ich gebe gar keinen Benutzer an, ich bin aber auch alleiniger Benutzer.

                                        1 Reply Last reply
                                        0
                                        • hollywootH Offline
                                          hollywootH Offline
                                          hollywoot
                                          wrote on last edited by
                                          #33

                                          Moin!
                                          Erstmal vielen Dank für sämtliche Codeschnipsel - das hat schon gewaltig geholfen.

                                          Aber nun meine Frage:
                                          Gibt es die Möglichkeit die Buttons nach Betätigung verschwinden zu lassen?

                                          dslraserD 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          509

                                          Online

                                          32.5k

                                          Users

                                          81.7k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe