Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Pushover + Command = Telegram

    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

    Pushover + Command = Telegram

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

      Ja, hatte ich weiter oben schon, aber hier noch einmal die überarbeiteten Beispiele:

      Ist jeweils ein Skript im Skriptordner "Telegram"

      Kellerdaten

      ! ````
      // #####################################################
      // Kellerdaten anzeigen
      ! on("telegram.0.communicate.request", function (obj) {
      if (obj.newState.val == "[Henrik]kellerdaten" || obj.newState.val == "[Henrik]/kellerdaten") {

         var kellerfrid = "hm-rpc.0.LEQ108xxxx.1.HUMIDITY"/*Temperatur Feuchtesensor Keller Mitte.HUMIDITY*/;  // Kellerfeuchte relativ
         var kellerfaid = "javascript.0.Keller.Feuchtegehalt"/*Keller.Feuchtegehalt*/;   // Kellerfeuchte absolut
         var aussenfrid = "javascript.0.Aussen.rel_Feuchte"/*Aussen.rel_Feuchte*/;
         var aussenfaid = "javascript.0.Aussen.Feuchtegehalt"/*Aussen.Feuchtegehalt*/;   // Außenfeuchte absolut
         var kellerfenstwaid = "hm-rpc.0.MEQ028xxxx3.1.STATE"/*Fenstersensor Keller Waschraum.STATE*/; // Kellerfenster Waschraum
         var kellerfenstsiid = "hm-rpc.0.MEQ028xxxx6.1.STATE"/*Fenstersensor Keller Sicherungsraum.STATE*/; // Kellerfenster Sicherungsraum
         var lueftenid = "javascript.0.Lueften.Lueften"/*Lueften.Lueften*/;
      

      ! var kellerfr = getState(kellerfrid).val;
      var kellerfa = getState(kellerfaid).val;
      var aussenfr = getState(aussenfrid).val;
      var aussenfa = getState(aussenfaid).val;
      var lueften = getState(lueftenid).val;
      var kellerfenstwa = getState(kellerfenstwaid).val;
      var kellerfenstsi = getState(kellerfenstsiid).val;

         sendTo('telegram', '#Kellerfeuchte ' + kellerfr + ' % / ' + kellerfa + ' g/kg' +
      
                           '\n' + '#Außenfeuchte ' + aussenfr + ' % / ' + aussenfa + ' g/kg' +        //   Zeilenumbruch: \n 
                           '\n' + '#Lüftenmöglich ' + lueften + 
                           '\n' + '#Fensteroffen ' + kellerfenstwa + ' / ' + kellerfenstsi +
                           '\n' + 
                           '\n' + 'Kellerfenster ' +
                           '\n' + '- schließen? /kellerfensterschliessen' +                           // Neuer BEfehl wird angezeigt! Skript Kellerfensterschließen erforderlich!
                           '\n' + '- öffnen? /kellerfensteroeffnen' +
                           '\n' + 
                           '\n' + 'Was noch?' +
                           '\n' + '/verbrauchsdaten' +
                           '\n' + '/torfoto'); 
         setState("telegram.0.communicate.request","leer");
      

      }
      });

      ! ````

      Verbrauchsdaten

      ! ````
      ! // #####################################################
      // Verbrauchsdaten
      ! on("telegram.0.communicate.request", function (obj) {
      if (obj.newState.val == "[Henrik]verbrauchsdaten" || obj.newState.val == "[Henrik]/verbrauchsdaten") {

         var stromhausid = "hm-rpc.0.MEQ03xxxx.1.POWER";
         var stromhaus = getState(stromhausid).val;
      
         var strommessid = "hm-rpc.0.MEQ02xxxx.2.POWER"/*Strommessstecker Waschmaschine:2.POWER*/;
         var strommess = getState(strommessid).val;
      
         var gashausid = "hm-rpc.0.MEQ038xxxx.1.GAS_POWER";
         var gashaus = getState(gashausid).val;
      
         sendTo('telegram', 'Stromverbrauch Haus: ' + stromhaus + ' Watt' +
                     '\n' + 'Strommessstecker: ' + strommess + ' Watt' +
                     '\n' +
                     '\n' + 'Gasverbrauch: ' + gashaus + ' m3' +
                     '\n' + 
                     '\n' + 'Was noch?' +
                     '\n' + '/torfoto' +
                     '\n' + '/kellerdaten');
      
         setState("telegram.0.communicate.request","leer");
      

      }
      });

      
       ****Webcamfoto****
      
      >! ````
      // ###################################################
      // Webcamfoto schicken
      >! on("telegram.0.communicate.request", function (obj) {
         if  (obj.newState.val == "[Henrik]torfoto" || obj.newState.val == "[Henrik]/torfoto") {      
             getfoto(); 
             setState("telegram.0.communicate.request","leer");
         }
      });
      >! function getfoto() {
              exec ("wget --user=xxxx --password=xxxxx -N -P /home/henrik/iobroker/cache http://192.168.1.xxx/dms?nowprofileid=1.jpg");
              sendphoto();                                    // Rufe Funktion sendphoto auf
      
              sendTo('telegram', 'Was noch?' +
                         '\n' + '/verbrauchsdaten' +
                         '\n' + '/kellerdaten');
              setState("telegram.0.communicate.request","leer");
      
      }
      >! function sendphoto() {                      // Warteschleife, 2 Sekunden, damit das Bild erzeugt wird
          setTimeout(waittime, 3000);    
      }
      >! function waittime() {                       // Nach der Warteschleife, sende das Bild per Telegram
          sendTo('telegram', "/home/henrik/iobroker/cache/dms?nowprofileid=1.jpg");  
      }
      

      Im Prinzip ist es für Telegram wichtig, mit einem on Skript auf Telegram auf einem bestimmten Befehl zu lauschen und diesen dann nach der Abfrage zurückzusetzen:

      on("telegram.0.communicate.request", function (obj) {
         if  (obj.newState.val == "[Henrik]torfoto" || obj.newState.val == "[Henrik]/torfoto") {      // Hier wird gelauscht auf den Befehl "torfoto" oder "/torfoto"
             getfoto(); 															  // nun eine Funktion ausführen
             setState("telegram.0.communicate.request","leer");						  // Telegrambefehl zurücksetzen
         }
      });
      

      In Telegram über den Botfather kann man Befehle definieren, so dass man auf der Tastatur nur auf das / klicken muss um die vorher gespeicherten Befehle auflisten zu lassen.

      In meinen Telegramantworten liste ich mit "Was noch? /verbrauchsdaten /foto /etc" noch direkt die weiteren (sinnvollen) Möglichkeiten auf. Diese Befehle kann ich dann nacheinander antippen und abfragen.

      Siehe Foto

      1145_bildschirmfoto_vom_2016-05-05_21-54-08.png

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

        Hallo,

        tolles Werkzeug, danke für die ausführliche Darstellung. Es braucht zwar einige Zeit zum Einstellen / Skripten, aber dann klappt das wunderbar. Nutze diese "Dialoge" für die Lichtsteuerung. Vor allem in Verbindung mit dem Scenes-Adapter sehr mächtig.

        Danke!

        Pix

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

          Sehr fein 🙂 Das sind wirklich schöne Beispiele.

          Anbei noch ein RegEx für die Abfrage:

          on({id:"telegram.1.communicate.request",change:'any'}, function (obj) {
              if  (obj.newState.val.match(/([.+])(\/|)klima/i)) {
          

          Einmal habe ich im on() change:'any' genutzt, damit man das gleiche Kommando zweimal schicken kann.

          Und das RegEx reagiert auf jeden Usernamen, dem Stichwort mit und ohne "/" und Groß-/Kleinschreibung wird ignoriert.

          Nach dem Stichwort (hier: "Klima") kann der weitere Text dahinter im Skript auch noch ausgewertet werden.

          1 Reply Last reply Reply Quote 0
          • R
            RS_Tobi last edited by

            Hallo,

            jetzt muss ich mich mal kurz hier "reinhängen" ich habe laut SuFu nichts passenderes gefunden.

            Falls ich TOTAL OFFTOPIC bin, bitte verschieben oder ich mach einen neuen Thread auf.

            Ich würde gerne über Telegram/text 2 command ein Schaltsignal in TASTEND durchführen,

            Leider schaffe ich es nur entweder eine 1 oder ein 0 Wert zu schalten.

            Habt ihr einen Denkanstoß für mich?

            Danke

            Tobi

            1 Reply Last reply Reply Quote 0
            • S
              Solear last edited by

              Meinst du einen Taster simulieren?

              Direkt nach dem "true" setzen mit demselben Befehl wieder auf "false" oder "null" oder was auch immer setzen.

              1 Reply Last reply Reply Quote 0
              • R
                RS_Tobi last edited by

                Hallo,

                ja einen Taster simulieren.

                wenn ich jetzt im Text 2 Command unter Parameter (Wert zu schreiben) eine 1 eingebe, dann

                sendet er mir beim Befehl eine 1, aber wie kann ich diesen wert wieder automatisch nach ca 1 oder 1 sek. wieder

                auf 0 setzen lassen?

                Danke

                EDIT:

                Habe mir deinen Beitrag jetzt 5 mal durchgelsen, ich denke ich denke ich weiß jetzt was du meinst.

                tobi

                1 Reply Last reply Reply Quote 0
                • S
                  Solear last edited by

                  Ob es so klappt, keine Ahnung, so würde ich jedenfalls herangehen, wenn nur etwas kurz umgeschaltet werden soll.

                  Für Telegram:

                  on("telegram.0.communicate.request", function (obj) {
                     if  (obj.newState.val == "[xxx]text" || obj.newState.val == "[xxx]/text") {      
                             sendTo('telegram.0', "Text erhalten!");  
                         setState("telegram.0.communicate.request","leer");
                  
                         setState("Gerät",true);  
                         setTimeout(waittime, 1000); 	// 1 Sekunde Pause, dann weiter
                         setState("Gerät",false);  
                  
                     }
                  });
                  
                  

                  Die letzten 3 set Befehle.

                  Ob der setTimeout Befehl sein muss weiß ich nicht, wenn es nur "on(…)", also maschinenerkennbar sein soll kann man es vermutlich weglassen.

                  edit:

                  Ach so, mit text2command.

                  Ja ne keine Ahnung. Das Skript holt sich das direkt hier aus Telegram.

                  1 Reply Last reply Reply Quote 0
                  • R
                    RS_Tobi last edited by

                    HI!

                    ich finde es gerade TOLL!! :lol:

                    Du erklärst mir was, ich verstehe was anderes und trotzdem funktioniert es!

                    Ich habe im Text -> Command Adapter eine Regel erstellt und die selbe nochmal

                    kopiert. Bei der ersten setzte ich Wert "1" und mache den Haken für ANHALTEN raus.

                    Beim der zweiten Regel setzte ich Wert "0" und lasse den Haken drin für ANHALTEN.

                    Wenn ich die beiden Regeln in Reihe habe dann setzt er mir (zumindest laut LOG Datei)

                    erst eine "1" und dann eine "0"

                    aber wo muss ich den skript eingeben den du mir gesendet hast?

                    grüße Tobi

                    1 Reply Last reply Reply Quote 0
                    • S
                      Solear last edited by

                      @RS_Tobi:

                      HI!

                      ich finde es gerade TOLL!! :lol: `

                      :lol: :lol:

                      Hauptsache es hat geklappt! Die (also unsere) Lösung(en) sind nicht schön, aber selten 8-)

                      Mit den Skripten,

                      da installierst du dir den Javascript Adapter. Nach einem Neustart siehst du einen neuen Reiter: Skripte.

                      Dort kannst du verschiedene Skripte (also Miniprogramme) anlegen.

                      Ziemlich kompliziert für Anfänger, aber hier kann man im Skriptunterforum einige Beispiele abkupfern oder nachfragen.

                      Ich habe damit meine Telegramanworten so programmiert, dass ich mittels einfachen Druck wunderbare Abfragen und Befehle absetzen kann.

                      Das sieht so aus:

                      http://forum.iobroker.de/viewtopic.php? … =20#p25263

                      Ist letztlich leichter als mit text2command, denn letztlich schreibt man doch keine ganzen Sätze wenn es nur auf "Licht an" ankommt. Das wird erst interessant wenn es etwas gibt, dass permanent im Raum akustisch mithört und die Befehle herausfiltert (wie was Amazon mit Alexa anbietet, nur lokal).

                      1 Reply Last reply Reply Quote 0
                      • M
                        mayer last edited by

                        Soo, gibt wieder Neues von der Telegram-Front (geht echt nicht mehr ohne):

                        Ich hab mir grad ein neues Spielzeug angeschafft, eine Pebble Time. Die war mir bis jetzt immer zu teuer. Aber für 105 Euros kann 'Mann' sich dieses Teil schon mal gönnen.

                        Ich lasse mir jetzt alle Nachrichten von Telegram an die Pebble schicken. So weit nix ausergewöhnliches.

                        Aber: Auf die Benachrichtigungen kann man auch gleich antworten. Entweder mit vordefinierten Phrasen oder auch per Sprache. Zusammen mit dem Telegram Adapter eine feine Sache.

                        Jetzt bin ich noch dabei, IFTTT mit dem Telegram Adapter zum laufen zu bringen. Für IFTTT gibt es auch einige Pebble Apps.

                        Wäre natürlch leichter mit einem IFTTT Adapter für ioBroker.

                        Gruss, mayer

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

                          @mayer:

                          Soo, gibt wieder Neues von der Telegram-Front (geht echt nicht mehr ohne):

                          Ich hab mir grad ein neues Spielzeug angeschafft, eine Pebble Time. Die war mir bis jetzt immer zu teuer. Aber für 105 Euros kann 'Mann' sich dieses Teil schon mal gönnen.

                          Ich lasse mir jetzt alle Nachrichten von Telegram an die Pebble schicken. So weit nix ausergewöhnliches.

                          Aber: Auf die Benachrichtigungen kann man auch gleich antworten. Entweder mit vordefinierten Phrasen oder auch per Sprache. Zusammen mit dem Telegram Adapter eine feine Sache.

                          Jetzt bin ich noch dabei, IFTTT mit dem Telegram Adapter zum laufen zu bringen. Für IFTTT gibt es auch einige Pebble Apps.

                          Wäre natürlch leichter mit einem IFTTT Adapter für ioBroker.

                          Gruss, mayer `
                          Verstehe ich was falsch? IFTTT ist doch "If then then that"? Wofür ist dann javascript adapter?

                          1 Reply Last reply Reply Quote 0
                          • M
                            mayer last edited by

                            > Verstehe ich was falsch? IFTTT ist doch "If then then that"? Wofür ist dann javascript adapter?

                            Eigentlich "If This Then That". 😄

                            Hier geht es um eine Platform, welche außerhalb meines abgeschlossenen Netzwerkes liegt und über die ich Events auslösen kann über den Maker Channel und es gibt Apps für die Pebble, die wiederum diese Events auf IFTTT auslösen können. Sogar mit Sprachsteuerung.

                            Der Maker Channel kommuniziert dann über einen API Aufruf + sendMessage mit dem Telegram Bot. Somit die perfekte Fernsteuerung für ioBroker.

                            1 Reply Last reply Reply Quote 0
                            • M
                              mayer last edited by

                              Keine Ahnung ob das jemand interessiert, aber ich erzähl mal weiter:

                              Die 'Konversation' mit dem Telegram Adapter von der Pebble aus funktioniert jetzt.

                              Als erstes musste ich dafür sorgen, dass sich Telegram auf der Pebble meldet. Als Start der Unterhaltung.

                              Das geht gut über IFTT und dem Maker Channel. Mit einem Event, ausgelöst auf der Pebble, z.B. 'Start Telegram', schicke ich an

                              meine Telegram ChatID eine Nachricht, welche dann auch auf der Pebble erscheint. Auf diese Nachricht kann ich dann von der

                              Pebble aus mit vorgefertigten Befehlen antworten. Wenn ich den Befehl z.B. 'Status' an den Telegram Adapter schicke, bekomme

                              ich die Informationen zum Hausstatus auf meine Pebble geschickt. Auf diese Message kann ich dann wieder antworten und so

                              weiter und so fort.

                              Gruss, mayer

                              1 Reply Last reply Reply Quote 0
                              • D
                                dtp last edited by

                                Hi,

                                tolle Sache mit Telegram und text2command.

                                996_telegram_iobroker_bot.png

                                Aber ich hätte da noch eine Frage.

                                Ich nutze Telegram auf meiner CCU2, um mir in Abhängigkeit von einer definierten Priorität unterschiedliche Push-Nachrichten zusenden zu lassen. Dafür habe ich drei verschiedene Bots ("HomeMatic Info", "HomeMatic Warnung" und "HomeMatic Alarm") eingerichtet und in der Gruppe "HomeMatic" zusammengefasst.

                                996_hm_telegram.png

                                Nun möchte ich gerne auch den ioBroker-Bot in diese Gruppe einbinden, was natürlich kein großes Problem ist. Um aber auch die Push-Nachrichten von ioBroker in der Gruppe angezeigt zu bekommen, muss ich die chat_id der Gruppe beim Senden mit angeben. Der Telegram-Adapter bietet hierfür aber bisher keine Option.

                                Kann man die chat_id in die Einstellungen des Telegram-Adapters mit aufnehmen oder gibt es da noch eine andere Lösung?

                                Gruß,

                                Thorsten

                                PS.: Falls jemand das ioBroker-Logo für seinen Bot nutzen möchte. Ich hab's mal angefügt. Die Hintergrundfarbe habe ich mit Gimp auf transparent gesetzt.

                                1 Reply Last reply Reply Quote 0
                                • blauholsten
                                  blauholsten Developer last edited by

                                  @dtp:

                                  PS.: Falls jemand das ioBroker-Logo für seinen Bot nutzen möchte. Ich hab's mal angefügt. Die Hintergrundfarbe habe ich mit Gimp auf transparent gesetzt. `

                                  Ich hoffe da bekommst du keinerlei Ärger mit den Urheber 😄 :lol:

                                  Spaß bei Seite, wo kann man das Profilbild ändern? Ich finde den Punkt in Telegram nicht.

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    dtp last edited by

                                    Einfach in den BotFather gehen und dort /setuserpic eingeben. Danach fragt Dich der BotFather, für welchen Bot Du das User-Bild ändern möchtest. Den gewünschten Bot anklicken und dann das Bild (Auflösung 512 x 512 Pixel) hochladen. Fertig.

                                    Gruß,

                                    Thorsten

                                    1 Reply Last reply Reply Quote 0
                                    • D
                                      dtp last edited by

                                      @blauholsten:

                                      Ich hoffe da bekommst du keinerlei Ärger mit den Urheber 😄 :lol: `

                                      Vielleicht mag Bluefox es ja auch für die ioBroker.vis App verwenden. 😉

                                      1 Reply Last reply Reply Quote 0
                                      • D
                                        dtp last edited by

                                        Hab gestern Abend noch mal ein wenig mit dem text2command-Adapter herum gespielt. Ist schon ein schönes Tool, auch wenn ich noch ein paar Dinge vermisse, wie z.B. das Anfordern von Bildern oder Soundfiles oder das Steuern mehrerer Aktoren ohne die Notwendigkeit des Szene-Adapters. Das lässt sich zwar - wie weiter vorne gezeigt - auch über den JS-Adapter mit entsprechenden Javaskripten lösen, aber schöner fände ich es, wenn es gleich im text2command-Adapter integriert wäre.

                                        Gruß,

                                        Thorsten

                                        PS.: Ich war überrascht, wie schnell Telegram eine Antwort auf einen Request schickt. Das geht ja binnen einer Zehntelsekunde. Ich nutze Telegram ja schon länger als Push-Dienst auf meiner CCU und für den https://www.doorpi.org/forum/. Zudem gab es auch im http://homematic-forum.de/forum/viewtopic.php?f=31&t=29611 schon sehr intensive Bemühungen und Erfolge hinsichtlich der Steuerung der CCU per Telegram. Aber hier über den ioBroker macht es besonders viel Spaß, da es wirklich einfach einzurichten ist.

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

                                          @dtp:

                                          auch wenn ich noch ein paar Dinge vermisse, wie z.B. das Anfordern von Bildern `
                                          Gibt es doch:

                                          ! var source_url = getState('javascript.0.Xeoma.Kamera.01.Snapshot').val, // URL Kamerabild dest_path = '/Users/pix/Documents/iobroker/iobroker-data/webcam/'; ! var request = require('request'); var fs = require('fs'); ! // Bild an telegram schicken (immer Dienst 3) function sendImage (pfad) { setTimeout(function() { sendTo('telegram.1', pfad); log('Webcam Bild per telegram verschickt'); }, 2 * 1000); } ! // Bild speichern function saveImage() { request.get({url: source_url, encoding: 'binary'}, function (err, response, body) { fs.writeFile(dest_path + 'image1.jpg', body, 'binary', function(err) { ! if (err) { log('Fehler beim Bild speichern: ' + err, 'warn'); } else { log('Webcam Bild gespeichert'); sendImage(dest_path + 'image1.jpg'); } }); }); } ! // bei Skriptstart ausführen saveImage(); !

                                          Gruß

                                          Pix

                                          1 Reply Last reply Reply Quote 0
                                          • D
                                            dtp last edited by

                                            Schon klar, pix, aber nicht direkt aus dem text2command-Adapter heraus, oder?

                                            In dem Adapter würde ich übrigens auch noch gerne eine Option zum Starten von Programmen per "dom.GetObject("…").ProgramExecute()" sehen.

                                            Gruß,

                                            Thorsten

                                            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

                                            939
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            23
                                            137
                                            30226
                                            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