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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Script] Telegram eingaben

NEWS

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

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

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

[Script] Telegram eingaben

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

    Hi,

    Ich bin gerade dabei ein Script zu schreiben und bräuchte mal einen Schups in die richtige Richtung.

    Vorweg:
    Ich verwende bei mir sehr viel den Telegramm Adapter.
    Aktuell haben ich folgende Funktionen Implementiert.

    • Wetter Infos ( keyword: "wetter")
    • Sprit preise (keyword: "tanken")
    • Schichtplan eintragen (keyword: "arbeit" = Main Menü, "SECEDULE;" = Anfang der Callbacks vom Inline Keyboad)
    • Heizung (keyword: "Heizung" = Main Menü, "HEAT" = Anfang der Callbacks vom Inline Keyboad )

    Jetzt möchte ich gerne noch eine Möglichkeit haben meine Einkaufsliste (Bring Adapter) zu steuern.

    Ich stelle mir das so vor das man zu erst den Befehl "Einkaufsliste" an den Bot schickt der daraufhin die
    aktuelle List zurückschickt und als inline Keyboad fragt nach "Eintrag hinzufügen" oder "Eintrag löschen".

    Bis hier hin ist das alles kein Problem (bzw. läuft auch schon)
    Aber jetzt müsste der Benutzer die Möglichkeit haben frei Text einzugeben.
    Ich sehe dazu vier Möglichkeiten

    1. Ich überprüfe ob die Eingabe zu einem keyword passt und wenn nicht dann schreibe ich es auf die Liste.
    2. Der Benutzer muss ein identifier Symbol als Präfix oder Suffix angeben. z.b. "!Kartoffeln" "!Zitronen"
    3. Durch den callback vom "Eintrag hinzufügen" Knopf wird ein Timer gestartet und ab dann kann man 10 Minuten (oder so)
      Einträge hinzufügen. Dafür müsste ich dann die Subscribe von den anderen Scripten (Heizung, Tanken usw.) temporär ausschalten.
    4. Einen Zweiten Bot aufbauen der nur für die Einkaufsliste ist.

    Am liebsten wäre es mir wenn es eine Möglichkeit gäbe das ein Präfix automatisch hinzugefügt wird. Leider habe ich in den Doku von dem Telegramm Adapter nichts passendes gefunden.
    Aktuell sollte die Variante 1 geht jedoch weiß ich noch nicht was ich mit dem Bot noch so anstelle und damit würde ich mir alle Freitext eingaben verbauen. Zu dem müsste ich die Liste mit Keyword immer gut Pflegen sonst stehen ihrgend wann Keywords auf der Einkaufsliste.
    Ein Kombination von 1 und dem Timer aus 3 wäre aktuell die Sinnvollste Lösung.
    Seht ihr aktuell noch eine andere Möglichkeit ?

    Gruß
    Arne

    Proxmox [DMAF5] = LXC [Debian 12]
    ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

    N 1 Antwort Letzte Antwort
    0
    • I ignis-draco

      Hi,

      Ich bin gerade dabei ein Script zu schreiben und bräuchte mal einen Schups in die richtige Richtung.

      Vorweg:
      Ich verwende bei mir sehr viel den Telegramm Adapter.
      Aktuell haben ich folgende Funktionen Implementiert.

      • Wetter Infos ( keyword: "wetter")
      • Sprit preise (keyword: "tanken")
      • Schichtplan eintragen (keyword: "arbeit" = Main Menü, "SECEDULE;" = Anfang der Callbacks vom Inline Keyboad)
      • Heizung (keyword: "Heizung" = Main Menü, "HEAT" = Anfang der Callbacks vom Inline Keyboad )

      Jetzt möchte ich gerne noch eine Möglichkeit haben meine Einkaufsliste (Bring Adapter) zu steuern.

      Ich stelle mir das so vor das man zu erst den Befehl "Einkaufsliste" an den Bot schickt der daraufhin die
      aktuelle List zurückschickt und als inline Keyboad fragt nach "Eintrag hinzufügen" oder "Eintrag löschen".

      Bis hier hin ist das alles kein Problem (bzw. läuft auch schon)
      Aber jetzt müsste der Benutzer die Möglichkeit haben frei Text einzugeben.
      Ich sehe dazu vier Möglichkeiten

      1. Ich überprüfe ob die Eingabe zu einem keyword passt und wenn nicht dann schreibe ich es auf die Liste.
      2. Der Benutzer muss ein identifier Symbol als Präfix oder Suffix angeben. z.b. "!Kartoffeln" "!Zitronen"
      3. Durch den callback vom "Eintrag hinzufügen" Knopf wird ein Timer gestartet und ab dann kann man 10 Minuten (oder so)
        Einträge hinzufügen. Dafür müsste ich dann die Subscribe von den anderen Scripten (Heizung, Tanken usw.) temporär ausschalten.
      4. Einen Zweiten Bot aufbauen der nur für die Einkaufsliste ist.

      Am liebsten wäre es mir wenn es eine Möglichkeit gäbe das ein Präfix automatisch hinzugefügt wird. Leider habe ich in den Doku von dem Telegramm Adapter nichts passendes gefunden.
      Aktuell sollte die Variante 1 geht jedoch weiß ich noch nicht was ich mit dem Bot noch so anstelle und damit würde ich mir alle Freitext eingaben verbauen. Zu dem müsste ich die Liste mit Keyword immer gut Pflegen sonst stehen ihrgend wann Keywords auf der Einkaufsliste.
      Ein Kombination von 1 und dem Timer aus 3 wäre aktuell die Sinnvollste Lösung.
      Seht ihr aktuell noch eine andere Möglichkeit ?

      Gruß
      Arne

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

      @ignis-draco hi, nette Idee mit der Einkaufsliste, man könnte mein Telegram-Menu zur Eingabe verwenden
      man müsste sich bloß :

      • eine Variable (state) vom Typ string anlegen.
      • eine neue Aufzählung erstellen z.b. Einkaufsliste in diese Liste fügt man die neue Variable ein
      • anschließen registriert man das Menü auf die Liste und man hat ne Eingabe in telegram
      • müsste dein Script sich einfach auf die neue Variable bei Änderungen registrieren (on)
      • und dann mit den neuen Werten arbeiten.
        hier kurzes Beispiel Video :
        StringInput(1).avi

      das menü findest du hier : https://github.com/Nahasapeemapetilon/MyTelegramMenu
      allerdings muss ich dazu sagen, dass momentan noch keine string eingabe von der version von github unterstützt wird nur number , ich hatte mir die Erweiterung nur temporär eingebaut, falls du das verwenden möchte würde ich es noch mal testen und dann hochladen
      Viele Grüße

      N J 2 Antworten Letzte Antwort
      0
      • N Nahasapee

        @ignis-draco hi, nette Idee mit der Einkaufsliste, man könnte mein Telegram-Menu zur Eingabe verwenden
        man müsste sich bloß :

        • eine Variable (state) vom Typ string anlegen.
        • eine neue Aufzählung erstellen z.b. Einkaufsliste in diese Liste fügt man die neue Variable ein
        • anschließen registriert man das Menü auf die Liste und man hat ne Eingabe in telegram
        • müsste dein Script sich einfach auf die neue Variable bei Änderungen registrieren (on)
        • und dann mit den neuen Werten arbeiten.
          hier kurzes Beispiel Video :
          StringInput(1).avi

        das menü findest du hier : https://github.com/Nahasapeemapetilon/MyTelegramMenu
        allerdings muss ich dazu sagen, dass momentan noch keine string eingabe von der version von github unterstützt wird nur number , ich hatte mir die Erweiterung nur temporär eingebaut, falls du das verwenden möchte würde ich es noch mal testen und dann hochladen
        Viele Grüße

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

        @nahasapee sorry die quali vom video ist unterirdisch hier noch mal bisschen bessere Auflösung :
        https://1drv.ms/v/s!ApNXnkLEcciklX3Hx_KOOUqnl-Cl?e=PEeYM1

        1 Antwort Letzte Antwort
        0
        • I Offline
          I Offline
          ignis-draco
          schrieb am zuletzt editiert von
          #4

          @Nahasapee vielen dank für die mühe die du dir gemacht hast.
          Wenn ich das richtig sehe läuft das bei dir über einer Art state machine die je nach dem aktiven State die Eingabe auswerte.
          So in der Art hatte ich mit meinem Bot auch angefangen leider wurde das bei mir sehr schnell sehr unübersichtlich.
          Des wegen habe ich das Umgebaut so das ich aktuell 6 Skripte habe die alle den Telegramm Adapter Subscriben.
          Bis jetzt konnte ich alles Stateless bauen so das ich zu jederzeit jede Anweisung Ausführen konnte. Z.B.
          Wären ich dabei war den Schichtplan einzutragen konnte ich nach dem Wette Fragen und danach einfach beim Schichtplan weiter zu machen. Mittels einer Präfix Notation ist das einfach. Leider wird das bei der Einkaufsliste nur klappen wenn
          man z.b. immer "Kaufe" davor schreibe.
          Ich werde das jetzt erstmal so bauen und schauen wohin sich das entwickelt.

          Proxmox [DMAF5] = LXC [Debian 12]
          ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

          N 1 Antwort Letzte Antwort
          0
          • I ignis-draco

            @Nahasapee vielen dank für die mühe die du dir gemacht hast.
            Wenn ich das richtig sehe läuft das bei dir über einer Art state machine die je nach dem aktiven State die Eingabe auswerte.
            So in der Art hatte ich mit meinem Bot auch angefangen leider wurde das bei mir sehr schnell sehr unübersichtlich.
            Des wegen habe ich das Umgebaut so das ich aktuell 6 Skripte habe die alle den Telegramm Adapter Subscriben.
            Bis jetzt konnte ich alles Stateless bauen so das ich zu jederzeit jede Anweisung Ausführen konnte. Z.B.
            Wären ich dabei war den Schichtplan einzutragen konnte ich nach dem Wette Fragen und danach einfach beim Schichtplan weiter zu machen. Mittels einer Präfix Notation ist das einfach. Leider wird das bei der Einkaufsliste nur klappen wenn
            man z.b. immer "Kaufe" davor schreibe.
            Ich werde das jetzt erstmal so bauen und schauen wohin sich das entwickelt.

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

            na meine idee für dich wäre ja gewesen du nutzt nur das menü als eingabe, könntest du ja ne separate telegram instanz und bot dazu verwenden und deine 6 scripte reagieren auf die 6 states wo die eingabe desn menüs hingeht

            du nutzt quasi nen separaten bot der das menü für die eingabe nimmt. dort hättest du dann z.b. menü (einkaufen, schichtplan ,....)

            vg

            1 Antwort Letzte Antwort
            0
            • N Nahasapee

              @ignis-draco hi, nette Idee mit der Einkaufsliste, man könnte mein Telegram-Menu zur Eingabe verwenden
              man müsste sich bloß :

              • eine Variable (state) vom Typ string anlegen.
              • eine neue Aufzählung erstellen z.b. Einkaufsliste in diese Liste fügt man die neue Variable ein
              • anschließen registriert man das Menü auf die Liste und man hat ne Eingabe in telegram
              • müsste dein Script sich einfach auf die neue Variable bei Änderungen registrieren (on)
              • und dann mit den neuen Werten arbeiten.
                hier kurzes Beispiel Video :
                StringInput(1).avi

              das menü findest du hier : https://github.com/Nahasapeemapetilon/MyTelegramMenu
              allerdings muss ich dazu sagen, dass momentan noch keine string eingabe von der version von github unterstützt wird nur number , ich hatte mir die Erweiterung nur temporär eingebaut, falls du das verwenden möchte würde ich es noch mal testen und dann hochladen
              Viele Grüße

              J Offline
              J Offline
              jwerlsdf
              schrieb am zuletzt editiert von
              #6

              @nahasapee
              ich habe mal versucht deine Anweisungen umzusetzten. Das Video war sehr gut gemacht. Wähle ich aber in Telegram nun List1 aus, funktioniert es nicht. Würdest du bitte mir da noch einmal weiterhelfen?

              N 1 Antwort Letzte Antwort
              0
              • J jwerlsdf

                @nahasapee
                ich habe mal versucht deine Anweisungen umzusetzten. Das Video war sehr gut gemacht. Wähle ich aber in Telegram nun List1 aus, funktioniert es nicht. Würdest du bitte mir da noch einmal weiterhelfen?

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

                @jwerlsdf was funktioniert genau nicht?

                ich hatte jetzt noch nichts weiter am TelegramMenü geändert, weil ich dachte du brauchst es nicht.
                Die aktuelle Version auf Git unterstütz noch keine States vom Typ String.
                Wenn du das nutzen willst würde ich es die nächsten Tage einbauen.(ich hatte es mir nur temporär zum Testen eingebaut)

                Viele Grüße

                N 1 Antwort Letzte Antwort
                1
                • N Nahasapee

                  @jwerlsdf was funktioniert genau nicht?

                  ich hatte jetzt noch nichts weiter am TelegramMenü geändert, weil ich dachte du brauchst es nicht.
                  Die aktuelle Version auf Git unterstütz noch keine States vom Typ String.
                  Wenn du das nutzen willst würde ich es die nächsten Tage einbauen.(ich hatte es mir nur temporär zum Testen eingebaut)

                  Viele Grüße

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

                  Ich hab die Version vom Menü auf 0.0.17 geupdatet, diese sollte States die vom typ String sind supporten. Falls was nicht gehen sollte bitte ich um feedback ich hatte es nur rudimentär getestet.
                  Viele Grüße

                  J 1 Antwort Letzte Antwort
                  1
                  • N Nahasapee

                    Ich hab die Version vom Menü auf 0.0.17 geupdatet, diese sollte States die vom typ String sind supporten. Falls was nicht gehen sollte bitte ich um feedback ich hatte es nur rudimentär getestet.
                    Viele Grüße

                    J Offline
                    J Offline
                    jwerlsdf
                    schrieb am zuletzt editiert von
                    #9

                    @nahasapee
                    vielen Dank! Es hat geklappt. Ich hätte noch folgende Fragen:

                    1. Gibt es eine Möglichkeit, dass durch eine weitere Eingabe, die alten Werte nicht gelöscht werden? Beispiel: Ich schreibe Milch; 10 Min später fällt mir ein, dass ich noch Wasser brauche. Schreibe ich das, geht ja im Moment die vorherhigen Eingaben verloren.
                    2. Gibt es eine Möglichkeit bei dem Menü, das ganze etwas abzukürzen? Im Moment öffne ich das Menü mit "/Einkaufsliste" --> (1) Einkaufsliste --> (1) Liste1 --> (1) Einkaufsliste und hier kann ich erst schreiben. Ich würde gerne das Menü öffnen und dann direkt schreiben bzw. ggf. noch ein Punkt öffnen z.B. "schreibe Einkaufsliste"
                      Mein Skript:
                    const MyTelegramMenu = require('mytelegrammenu');                         
                    const options = {'enumList': ['einkaufsliste'],                                  
                                     'locale':'de', 'showRootItemsCommand':'/Einkaufsliste'};
                    const telegramMenu = new MyTelegramMenu(this,options);
                    
                    N 2 Antworten Letzte Antwort
                    0
                    • J jwerlsdf

                      @nahasapee
                      vielen Dank! Es hat geklappt. Ich hätte noch folgende Fragen:

                      1. Gibt es eine Möglichkeit, dass durch eine weitere Eingabe, die alten Werte nicht gelöscht werden? Beispiel: Ich schreibe Milch; 10 Min später fällt mir ein, dass ich noch Wasser brauche. Schreibe ich das, geht ja im Moment die vorherhigen Eingaben verloren.
                      2. Gibt es eine Möglichkeit bei dem Menü, das ganze etwas abzukürzen? Im Moment öffne ich das Menü mit "/Einkaufsliste" --> (1) Einkaufsliste --> (1) Liste1 --> (1) Einkaufsliste und hier kann ich erst schreiben. Ich würde gerne das Menü öffnen und dann direkt schreiben bzw. ggf. noch ein Punkt öffnen z.B. "schreibe Einkaufsliste"
                        Mein Skript:
                      const MyTelegramMenu = require('mytelegrammenu');                         
                      const options = {'enumList': ['einkaufsliste'],                                  
                                       'locale':'de', 'showRootItemsCommand':'/Einkaufsliste'};
                      const telegramMenu = new MyTelegramMenu(this,options);
                      
                      N Offline
                      N Offline
                      Nahasapee
                      schrieb am zuletzt editiert von
                      #10

                      @jwerlsdf du könntest in deinem anderen Script einfach bei Änderungen deine Liste füllen :
                      so in etwa :

                      //....
                      let myShoppingList = [];
                      
                          on({id: 'javascript.0.TestEinkaufsliste' ,
                              change: 'any'}, (pMeldung) => {
                              if(pMeldung.state.val)
                                  myShoppingList.push(pMeldung.state.val);
                      
                               console.log(["Einkaufsliste :",myShoppingList]);   
                          });
                      //.....
                      

                      und mit der MyShoppingList kannst du dann machen was immer du machen willst
                      oder du legst dir gleich noch nen State dafür an anstatt ne lokale Variable und füllst diese
                      Eine gute Idee wäre wahrscheinlich auch in dem Menü ein zusätzlichen Eintrag zu machen um deine Einkaufsliste zu leeren oder einzelne Elemente zu löschen

                      1 Antwort Letzte Antwort
                      0
                      • J jwerlsdf

                        @nahasapee
                        vielen Dank! Es hat geklappt. Ich hätte noch folgende Fragen:

                        1. Gibt es eine Möglichkeit, dass durch eine weitere Eingabe, die alten Werte nicht gelöscht werden? Beispiel: Ich schreibe Milch; 10 Min später fällt mir ein, dass ich noch Wasser brauche. Schreibe ich das, geht ja im Moment die vorherhigen Eingaben verloren.
                        2. Gibt es eine Möglichkeit bei dem Menü, das ganze etwas abzukürzen? Im Moment öffne ich das Menü mit "/Einkaufsliste" --> (1) Einkaufsliste --> (1) Liste1 --> (1) Einkaufsliste und hier kann ich erst schreiben. Ich würde gerne das Menü öffnen und dann direkt schreiben bzw. ggf. noch ein Punkt öffnen z.B. "schreibe Einkaufsliste"
                          Mein Skript:
                        const MyTelegramMenu = require('mytelegrammenu');                         
                        const options = {'enumList': ['einkaufsliste'],                                  
                                         'locale':'de', 'showRootItemsCommand':'/Einkaufsliste'};
                        const telegramMenu = new MyTelegramMenu(this,options);
                        
                        N Offline
                        N Offline
                        Nahasapee
                        schrieb am zuletzt editiert von
                        #11

                        @jwerlsdf ich hab es mal selber zum testen nachgebaut
                        so sieht es bei mir aus:
                        folgende States hinzugefügt :

                        EinksaufsListe2.JPG

                        Die Auflistung liste sah bei mir so aus :

                        Einkaufsliste1.JPG

                        und dann noch kleines TestScript dazu:

                        
                        let myShoppingList = [];
                        
                            on({id: 'javascript.0.TestEinkaufsliste' ,
                                change: 'any'}, (pMeldung) => {
                                if(pMeldung.state.val)
                                    myShoppingList.push(pMeldung.state.val);
                        
                                 console.log(["Einkaufsliste :",myShoppingList]);   
                            });
                        
                        
                                on({id: 'javascript.0.TestEinkaufsListeRemoveAll',
                                change: 'any'}, (pMeldung) => {
                                    if(myShoppingList.length > 0)
                                        myShoppingList = [];
                                 console.log(["Einkaufsliste :",myShoppingList]);   
                            });
                        
                        
                                on({id: 'javascript.0.TestEinkausListeRemoveItem'/*Eintrag löschen*/ ,
                                change: 'any'}, (pMeldung) => {
                                    console.log([pMeldung.state.val,myShoppingList.length]);
                                if(pMeldung.state.val>=0 && pMeldung.state.val <= myShoppingList.length)
                                   myShoppingList = myShoppingList.splice(pMeldung.state.val,1);
                        
                                 console.log(["Einkaufsliste :",myShoppingList]);   
                            });
                        

                        geht zwar, ich find es aber bisschen "bucklig" ;) vielleicht sollte man nen speziellen Modi "Einkaufsliste" in das TelegramMenü einbauen,
                        da könnte man mit der Report-Funktion auch die Einkaufsliste vernünftig anzeigen lassen.

                        und zu Punkt 2. das ist die Struktur vom IOBroker und das Menü generiert sich komplett daraus
                        Viele Grüße

                        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

                        650

                        Online

                        32.4k

                        Benutzer

                        81.4k

                        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