Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [gelöst] telegram -> text2command mit Parameter

    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

    [gelöst] telegram -> text2command mit Parameter

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      joerg66 last edited by

      Hallo,

      nach erfolgloser Suche (mein Englisch ist sehr schlecht :-)) muß ich leider hier fragen.

      Und zwar möcht ich per Telegram einen Text senden: "wohnzimmerfenster 20"

      und möchte damit die Jalousie auf 20% fahren.

      Mit "Schalte irgendwas an oder aus" und einem festen Parameter komme ich klar.

      Wie "Schalte an oder aus mit Function" funktioniert ist mir ein Rätsel, weil ich gar keine Funktion auswählen kann -Wenn denn mit Funktion ein Script gemeint ist :oops:

      Ich möchte "wohnzimmerfenster 20" senden, wobei die 20 variabel sein soll und ich so die Behanghöhe einstellen kann. Geht das irgendwie?

      Gruß Jörg

      1 Reply Last reply Reply Quote 0
      • lobomau
        lobomau last edited by

        Das Thema gibt es hier im Forum.

        So kann es machen. Sichere das Script ab:

        sendTo('telegram.0', {
            text:   'Licht',
            reply_markup: {
                keyboard: [
                    ['Küche AN', 'Küche AUS'],
                    ['Haustür AN', 'Haustür AUS', 'TV AN', 'TV AUS' ]
                ],
                resize_keyboard:   true,
                one_time_keyboard: true
            }
        });
        

        Wenn du jetzt "Licht" an deinen telegram bot sendest bekommst du ein Menü zurück. Man könnte auch Licht 20%, Licht 40% usw. nehmen. Mit Zahl zum Eingeben wüsste ich jetzt nicht wie es geht.

        In text2command musst dann einstellen was z.B. bei "Küche AN" passieren soll.

        Man kann auch ohne text2command einiges realisieren:

        viewtopic.php?f=20&t=7477&start=20&hili … m+keyboard

        1 Reply Last reply Reply Quote 0
        • J
          joerg66 last edited by

          Vielen Dank!

          Aber das Menü habe ich 1x bekommen, als ich das Script gespeichert habe. Sende ich "Licht", kommt die Antwort "Licht verstehe ich nicht".

          1 Reply Last reply Reply Quote 0
          • J
            joerg66 last edited by

            Ich habe es jetzt so hinbekommen, wie ich mir das vorgestellt hatte:

            on ({id: "telegram.0.communicate.request",  change:  "any"}, Jalousie);
                function Jalousie(){
                    var Ausgabe = getState("telegram.0.communicate.request").val;
                    Ausgabe = Ausgabe.split(" ");
                    var Fenster = Ausgabe[0].substring(4);
                    var Prozent = Ausgabe[1];
                    if(Fenster == "wzf") //Wohnzimmerfenster
                    {
                        setState("hm-rpc.0.NEQ00xxxxx.1.LEVEL"/*Jalousie Wohnzimmerfenster.LEVEL*/, Prozent);
                    }
                    else if(Fenster == "wzt") //Wohnzimmerterasse
                    {
                        setState("hm-rpc.0.NEQ00xxxxx.1.LEVEL"/*Jalousie Terrassentuer.LEVEL*/, Prozent);
                    }
            }
            

            Sende ich z.B. "wzt 50" (ohne Anführungszeichen), wird die Jalousie der Terassentür auf 50% gefahren.

            Das klappt also einwandfrei.

            Was mich jetzt noch nervt ist die Antwort die ich bekomme: Ich verstehe "wzt 50" nicht

            wie bekomme ich das weg? Diese Frage habe ich im Forum gefunden, aber keine Antwort darauf

            1 Reply Last reply Reply Quote 0
            • ruhr70
              ruhr70 last edited by

              @joerg66:

              Ich habe es jetzt so hinbekommen, wie ich mir das vorgestellt hatte:

              on ({id: "telegram.0.communicate.request",  change:  "any"}, Jalousie);
                  function Jalousie(){
                      var Ausgabe = getState("telegram.0.communicate.request").val;
                      Ausgabe = Ausgabe.split(" ");
                      var Fenster = Ausgabe[0].substring(4);
                      var Prozent = Ausgabe[1];
                      if(Fenster == "wzf") //Wohnzimmerfenster
                      {
                          setState("hm-rpc.0.NEQ00xxxxx.1.LEVEL"/*Jalousie Wohnzimmerfenster.LEVEL*/, Prozent);
                      }
                      else if(Fenster == "wzt") //Wohnzimmerterasse
                      {
                          setState("hm-rpc.0.NEQ00xxxxx.1.LEVEL"/*Jalousie Terrassentuer.LEVEL*/, Prozent);
                      }
              }
              

              Sende ich z.B. "wzt 50" (ohne Anführungszeichen), wird die Jalousie der Terassentür auf 50% gefahren.

              Das klappt also einwandfrei.

              Was mich jetzt noch nervt ist die Antwort die ich bekomme: Ich verstehe "wzt 50" nicht

              wie bekomme ich das weg? Diese Frage habe ich im Forum gefunden, aber keine Antwort darauf `

              Ich habe dafür ein Pseudokommando in text2command erstellt.

              Sende Text an oder so mit einer beliebigen id und ohne Antwort.

              Suche ich nachher mal raus.

              Richtig wäre aber den JS Prozessor zu nutzen und alles, was da nicht verarbeitet wird an text2command zu schicken.

              Ist in der Adapterbeschreibung beschrieben (GitHub).

              Ich stelle das bei mir auch noch um.

              Gesendet von iPad mit Tapatalk

              1 Reply Last reply Reply Quote 0
              • ruhr70
                ruhr70 last edited by

                do… nun vom Rechner.

                Der richtige Weg wäre: https://github.com/ioBroker/ioBroker.te … javascript

                Als Workaround eine Regel erstellen:

                Regel: "Fragen über irgendetwas"

                Trigger Worte: "wzt 50"

                Parameter: irgendeinen DP

                Antwort: leer lassen

                [EDIT] gerade gesehen. Dein Skript übergibt direkt flexible Werte.

                Dann mal unter Parameter: wzt/wzf

                versuchen.

                Wenn das nicht hilft, dann wird wahrscheinlich nur der Weg über den JS-Prozessor zum Ziel führen.

                1 Reply Last reply Reply Quote 0
                • J
                  joerg66 last edited by

                  Ich habe jetzt probiert und rumgestochert, aber kapiert habe ich nichts.

                  Habe folgendes Script erstellt:

                  createState("textProcessor", '', function () {
                  
                      on({id: "javascript.0.textProcessor", ack: true, change: 'any'}, function (obj) {
                  
                           var task = JSON.parse(obj.state.val);
                  
                           if (task.command === 'jalousie') {
                              setState("hm-rpc.0.NEQ005xxxx.1.LEVEL"/*Jalousie Wohnzimmerfenster.LEVEL*/, 100);
                  
                           } 
                      });
                  });
                  

                  Wenn ich das starte, gibt es unter javascript.0 den Eintrag "textProcessor". Das scheint ja schon mal so sein zu müssen. Und nun?

                  Sende ich von Telegram "jalousie" passiert nichts, weil das Müll ist was ich da mache. Was in der Anleitung mit ID-Erstellen gemeint ist kapiere ich dankmeines miesen Englisch nicht.

                  Könnte mir wer einigermassen Mundgerecht erklären was ich zu tun habe?

                  1 Reply Last reply Reply Quote 0
                  • ruhr70
                    ruhr70 last edited by

                    @joerg66:

                    Wenn ich das starte, gibt es unter javascript.0 den Eintrag "textProcessor". Das scheint ja schon mal so sein zu müssen. Und nun?

                    Sende ich von Telegram "jalousie" passiert nichts, weil das Müll ist was ich da mache. Was in der Anleitung mit ID-Erstellen gemeint ist kapiere ich dankmeines miesen Englisch nicht.

                    Könnte mir wer einigermassen Mundgerecht erklären was ich zu tun habe? `

                    Ich habe gerade auch versucht es umzustellen.

                    Du musst den Datenpunktnamen, den Du verwendetest (hier im Beispiel "javascript.0.textProcessor")in den Einstellunegn vom text2command Adapter eintragen, damit der Adapter diesen verwendet.

                    Bei mir hörte es an dieser Stelle auf, da bei mir unter Instanzen "Einstellungen" beim Adapter ausgegraut sind.

                    Ich habe ein Issue beim Adapter aufgemacht.

                    So, wie Du das Beispielskript verwendest, bräuchtest Du text2command aber gar nicht.

                    TextProcessing ist dafür gedacht, das DU Anfragen von Deiner verknüpften Telegram Instanz zuerst durch ein Skript bearbeiten lässt und alles, was das Skript nicht bearbeiten konnte, wird dann von text2command bearbeitet.

                    Dafür ist die Zeile:

                    setState("javascript.0.textProcessor", '', true);
                    

                    Das schickt man im else Zweig, wenn Dein Skript nichts passendes gefunden hat.

                    Wenn Du text2command gar nchit verwenden willst, lösche es einfach und Dein Skript ein paar Post höher bekommt nicht mehr die Rückmeldung "Ich verstehe "wzt 50" nicht".

                    1 Reply Last reply Reply Quote 0
                    • J
                      joerg66 last edited by

                      Darum. Bei mir sind die "Einstellungen" des Adapter's auch grau.

                      Ich versuche es dann heute Abend mal ohne text2command

                      1 Reply Last reply Reply Quote 0
                      • lobomau
                        lobomau last edited by

                        @ruhr70:

                        Wenn Du text2command gar nchit verwenden willst, lösche es einfach und Dein Skript ein paar Post höher bekommt nicht mehr die Rückmeldung "Ich verstehe "wzt 50" nicht". `
                        Sollte doch auch reichen, wenn man einfach beim telegram Adapter unter "text2Command-Instanz", "keins" auswählt.

                        Ich habe zwei telegram Instanzen, bei der einen ist "keins" ausgewählt, da gibt es dann keine Antwort.

                        1 Reply Last reply Reply Quote 0
                        • P
                          pix last edited by

                          Hallo,

                          wenn ich mich nicht irre, kann man auch den Datenpunkt text2command.0.response dafür überwachen.

                          Dann werden so Ausgaben von text2command an den Datenpunkt textProcessor geleitet.

                          on("text2command.0.response"/*Answer on requested question*/, "javascript.0.textProcessor");
                          
                          

                          261_bildschirmfoto_2018-04-11_um_10.32.50.jpg

                          Gruß,

                          Pix

                          1 Reply Last reply Reply Quote 0
                          • ruhr70
                            ruhr70 last edited by

                            Danke Pix!

                            Ich hatte Settings aus der Beschreibung als Einstellungen unter der Adapter Instanz interpretiert.

                            Das Fenster, welches Du gepostet hast, findet sich aber unter dem Zahnrad auf der Regelseite vom Adapter.

                            1 Reply Last reply Reply Quote 0
                            • J
                              joerg66 last edited by

                              Dann habe ich den text2command jetzt deaktiviert. Finde es übersichtlicher, wenn die Eingaben nicht an zweierlei Stellen bearbeitet werden.

                              Außerdem brauche ich dann den textProzessor nicht …. oder denke ich da falsch?

                              So habe ich das jetzt am Laufen, das heißt nicht ganz so. Es läuft ohne die Parameterübergabe an die Funktion Jalousie(). In der Funktion würde ich mir gerne die ersten 4 Zeilen sparen und das Array Ausgabe[] übergeben, bekomme aber bei "function Jalousie(String Zeichen[]){" einen Fehler. Warum das denn nun?

                              on ({id: "telegram.0.communicate.request",  change:  "any"}, Befehl);
                                  function Befehl(){
                                      var Ausgabe = getState("telegram.0.communicate.request").val;
                                      Ausgabe = Ausgabe.split(" ");
                                      Ausgabe[0] = Ausgabe[0].substring(4);
                                      switch (Ausgabe[0]) {
                                          case "wzf":  Jalousie(Ausgabe);
                                                   break;
                                          case "wzt":  Jalousie(Ausgabe);
                                                   break;
                              
                                          default: sendTo("telegram", "send", { text: (String('Die Anweisung ist unbekannt'))
                                                      });
                                      }
                                  }
                              
                                  function Jalousie(String Zeichen[]){
                                      var Ausgabe = getState("telegram.0.communicate.request").val;
                                      Ausgabe = Ausgabe.split(" ");
                                      var Fenster = Ausgabe[0].substring(4);
                                      var Prozent = Ausgabe[1];
                                      if(Fenster == "wzf") //Wohnzimmerfenster
                                      {
                                          setState("hm-rpc.0.NEQ0057186.1.LEVEL"/*Jalousie Wohnzimmerfenster.LEVEL*/, Prozent);
                                      }
                                      else if(Fenster == "wzt") //Wohnzimmerterasse
                                      {
                                          setState("hm-rpc.0.NEQ0050764.1.LEVEL"/*Jalousie Terrassentuer.LEVEL*/, Prozent);
                                      }
                                      else
                                          setState("javascript.0.textProcessor", '', true);
                              }
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • ruhr70
                                ruhr70 last edited by

                                @joerg66:

                                Dann habe ich den text2command jetzt deaktiviert. Finde es übersichtlicher, wenn die Eingaben nicht an zweierlei Stellen bearbeitet werden.

                                Außerdem brauche ich dann den textProzessor nicht …. oder denke ich da falsch?

                                So habe ich das jetzt am Laufen, das heißt nicht ganz so. Es läuft ohne die Parameterübergabe an die Funktion Jalousie(). In der Funktion würde ich mir gerne die ersten 4 Zeilen sparen und das Array Ausgabe[] übergeben, bekomme aber bei "function Jalousie(String Zeichen[]){" einen Fehler. Warum das denn nun? `

                                Versuche mal bitte:

                                on ({id: "telegram.0.communicate.request",  change:  "any"}, Befehl);
                                    function Befehl(){
                                        var ausgabe = getState("telegram.0.communicate.request").val;
                                        var ausgabeArr = ausgabe.split(" ");
                                
                                        switch (ausgabe[0]) {
                                            case "wzf":  Jalousie(ausgabeArr);
                                                     break;
                                            case "wzt":  Jalousie(ausgabeArr);
                                                     break;
                                
                                            default: sendTo("telegram", "send", { text: (String('Die Anweisung ist unbekannt'))
                                                        });
                                        }
                                    }
                                
                                    function Jalousie(ausgabeArr){
                                        var Fenster = ausgabeArr[0];
                                        var Prozent = parseInt(ausgabeArr[1]);
                                        if(Fenster == "wzf") //Wohnzimmerfenster
                                        {
                                            setState("hm-rpc.0.NEQ0057186.1.LEVEL"/*Jalousie Wohnzimmerfenster.LEVEL*/, Prozent);
                                        }
                                        else if(Fenster == "wzt") //Wohnzimmerterasse
                                        {
                                            setState("hm-rpc.0.NEQ0050764.1.LEVEL"/*Jalousie Terrassentuer.LEVEL*/, Prozent;
                                        }
                                        else
                                            setState("javascript.0.textProcessor", '', true);
                                }
                                

                                Ein paar Fehler könnte man noch abfangen.

                                • keine Zahl eingegeben

                                • ungültiger Wertebereich

                                • ungültige Anzahl von Kommandos

                                1 Reply Last reply Reply Quote 0
                                • J
                                  joerg66 last edited by

                                  Vielen Dank, ich war nur fest der Meinung, in der Funktion muss der Typ angegeben werden, ist doch in Java eigentlich so. :x

                                  Na egal. Die Zeile: Ausgabe[0] = Ausgabe[0].substring(4);

                                  ist nötig, weil am Anfang, also vor dem wzt/wzf "[J.]" steht und das schneide ich weg.

                                  Eingefügt habe ich noch: var Prozent = Integer.parseInt(Ausgabe[1]);

                                  weil ich eine Warnung bekommen habe,das die Zahl als String in der nächsten Version einen Fehler geben wird.

                                  Die Fehlerabfragen kommen noch, aber für Leute die ähnliches machen wollen, ist der code so übersichtlicher.

                                  Das funktionierende Ergebnis ist unten eingestellt und kann beliebig erweitert werden:

                                  on ({id: "telegram.0.communicate.request",  change:  "any"}, Befehl);
                                      function Befehl(){
                                          var Ausgabe = getState("telegram.0.communicate.request").val;
                                          Ausgabe = Ausgabe.split(" ");
                                          Ausgabe[0] = Ausgabe[0].substring(4);
                                          switch (Ausgabe[0]) {
                                              case "wzf":  Jalousie(Ausgabe);
                                                       break;
                                              case "wzt":  Jalousie(Ausgabe);
                                                       break;
                                  
                                              default: sendTo("telegram", "send", { text: (String('Die Anweisung ist unbekannt'))
                                                          });
                                          }
                                      }
                                  
                                      function Jalousie(Ausgabe){
                                          var Fenster = Ausgabe[0];
                                          var Prozent = Integer.parseInt(Ausgabe[1]);
                                          if(Fenster == "wzf") //Wohnzimmerfenster
                                          {
                                              setState("hm-rpc.0.NEQ0057xxx.1.LEVEL"/*Jalousie Wohnzimmerfenster.LEVEL*/, Prozent);
                                          }
                                          else if(Fenster == "wzt") //Wohnzimmerterasse
                                          {
                                              setState("hm-rpc.0.NEQ0050xxx.1.LEVEL"/*Jalousie Terrassentuer.LEVEL*/, Prozent);
                                          }
                                          else
                                              setState("javascript.0.textProcessor", '', true);
                                  }
                                  
                                  

                                  Vielen Dank an alle, die mir geholfen haben !!!

                                  1 Reply Last reply Reply Quote 0
                                  • lobomau
                                    lobomau last edited by

                                    @joerg66:

                                    Vielen Dank, ich war nur fest der Meinung, in der Funktion muss der Typ angegeben werden, ist doch in Java eigentlich so. :x

                                    Na egal. Die Zeile: Ausgabe[0] = Ausgabe[0].substring(4);

                                    ist nötig, weil am Anfang, also vor dem wzt/wzf "[J.]" steht und das schneide ich weg.

                                    Eingefügt habe ich noch: var Prozent = Integer.parseInt(Ausgabe[1]);

                                    weil ich eine Warnung bekommen habe,das die Zahl als String in der nächsten Version einen Fehler geben wird.

                                    Die Fehlerabfragen kommen noch, aber für Leute die ähnliches machen wollen, ist der code so übersichtlicher.

                                    Das funktionierende Ergebnis ist unten eingestellt und kann beliebig erweitert werden:

                                    on ({id: "telegram.0.communicate.request",  change:  "any"}, Befehl);
                                        function Befehl(){
                                            var Ausgabe = getState("telegram.0.communicate.request").val;
                                            Ausgabe = Ausgabe.split(" ");
                                            Ausgabe[0] = Ausgabe[0].substring(4);
                                            switch (Ausgabe[0]) {
                                                case "wzf":  Jalousie(Ausgabe);
                                                         break;
                                                case "wzt":  Jalousie(Ausgabe);
                                                         break;
                                                         
                                                default: sendTo("telegram", "send", { text: (String('Die Anweisung ist unbekannt'))
                                                            });
                                            }
                                        }
                                    
                                        function Jalousie(Ausgabe){
                                            var Fenster = Ausgabe[0];
                                            var Prozent = Integer.parseInt(Ausgabe[1]);
                                            if(Fenster == "wzf") //Wohnzimmerfenster
                                            {
                                                setState("hm-rpc.0.NEQ0057xxx.1.LEVEL"/*Jalousie Wohnzimmerfenster.LEVEL*/, Prozent);
                                            }
                                            else if(Fenster == "wzt") //Wohnzimmerterasse
                                            {
                                                setState("hm-rpc.0.NEQ0050xxx.1.LEVEL"/*Jalousie Terrassentuer.LEVEL*/, Prozent);
                                            }
                                            else
                                                setState("javascript.0.textProcessor", '', true);
                                    }
                                    
                                    

                                    Vielen Dank an alle, die mir geholfen haben !!! `
                                    Was muss ich noch anpassen, damit das Script bei mir funktioniert? Ich habe es so übernommen und lediglich die beiden homematic-Geräte angepasst und zwei Rollläden von mir genommen.

                                    Hab gesendet "wzf" oder "wzt", als Antwort kommt dann immer Anweisung ist unbekannt

                                    1 Reply Last reply Reply Quote 0
                                    • J
                                      joerg66 last edited by

                                      Zunächst sendest Du nur den halben Befehl.

                                      Du mußt die Behanghöhe mit angeben, also "wzt 50". (Steht im Post weiter oben)

                                      Dann fährt der Rolladen auf 50%.

                                      Welch Meldung GENAU kommt denn, die "default" der Switch-case oder evtl. die von text2command?

                                      text2command ist bei mir deaktiviert und im Telegram-Adapter abgewählt.

                                      1 Reply Last reply Reply Quote 0
                                      • B
                                        Berzi last edited by

                                        Ich muss den alten Thread noch einmal herauskramen.
                                        Ich habe mir ein Script nach dieser Manier hier geschrieben, um selbst variable Zahlen in Zustände per Telegram zu schreiben.

                                        Wie hier schon bechrieben, meckert nun immer mein text2command, dass es den Befehl nicht versteht. (danach funktioniert die Verarbeitung wunderbar über mein Script)

                                        Ich möchte text2command ungern deaktivieren, da ich alles Andere darüber umfangreich eingerichtet habe.

                                        Kann ich das irgendwie unterbinden, dass text2command mir auf diesen einen Fall reagiert?
                                        Ich konnte ein paar Ansätze in diesem Thread herauslesen, bin jedoch nicht schlau genug zur eigenen Umsetzung geworden.

                                        Dankeschön! (auch für das Script hier!)

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate
                                        FAQ Cloud / IOT
                                        HowTo: Node.js-Update
                                        HowTo: Backup/Restore
                                        Downloads
                                        BLOG

                                        896
                                        Online

                                        31.9k
                                        Users

                                        80.1k
                                        Topics

                                        1.3m
                                        Posts

                                        5
                                        18
                                        4760
                                        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