Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Script] Telegram eingaben

    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

    [Script] Telegram eingaben

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      Nahasapee @ignis-draco last edited by

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

        @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 Reply Last reply Reply Quote 0
        • I
          ignis-draco last edited by

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

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

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

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

                  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 Reply Last reply Reply Quote 1
                  • J
                    jwerlsdf @Nahasapee last edited by

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

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

                        @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 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        824
                        Online

                        31.8k
                        Users

                        79.9k
                        Topics

                        1.3m
                        Posts

                        3
                        11
                        854
                        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