Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Tankerkönig und 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

    Tankerkönig und Telegram

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

      ich mache das so (nur die Abfrage EINE Preises an EINER Tankstelle)

      var idPreis = "tankerkoenig.0.stations.0.e10.short";
      
      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(/(?=.*(\Benzin\b|\bTanken\b)).+/ig) != -1) {
      
              var preis = "Der aktuelle Benzinpreis (e10) an der Araltankstelle XXXXXXXXXX beträgt:\n\n" + getState(idPreis).val.replace(/
      /g , "\n")+"9";
      
              sendTo('telegram', {
                  user: benutzer,
                  text: preis
                  });
           }        
      });       
      
      

      Dann erhälst du, wenn du deinen Bot mit "Benzin" oder "Tanken" anschreibst die Info zum aktuellen Benzinpreis.

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

        Vielen Dank schon mal..werd ich heute abend gleich mal ausprobieren! 🙂

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

          So, nun hab ich das Script mal ausprobiert und das klappt auch bei mir ganz prima..von daher schon mal vielen Dank!

          Nun wollte ich das Ganze für 4 Tankstellen erweitern und habe einfach mal alles vervierfacht. Natürlich ist mir klar, dass das sehr unelegant ist, aber die Verfeinerung über Array und Schleife soll dann erfolgen, wenn ich mich etwas mehr an die Programmierung gewöhnt habe :oops:

          Also sieht mein (unelegantes) Script derzeit so aus:

          var idPreis1 = "tankerkoenig.0.stations.0.e5.short";
          var idName1 = "tankerkoenig.0.stations.0.name";
          var idPreis2 = "tankerkoenig.0.stations.1.e5.short";
          var idName2 = "tankerkoenig.0.stations.1.name";
          var idPreis3 = "tankerkoenig.0.stations.2.e5.short";
          var idName3 = "tankerkoenig.0.stations.2.name";
          var idPreis4 = "tankerkoenig.0.stations.3.e5.short";
          var idName4 = "tankerkoenig.0.stations.3.name";
          
          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(/(?=.*(\Benzin\b|\bTanken\b)).+/ig) != -1) {
          
                  var preis1 = "Der aktuelle Preis für SUPER bei " + getState(idName1).val + " beträgt:\n\n" + getState(idPreis1).val.replace(/
          /g , "\n")+"9";
                  var preis2 = "Der aktuelle Preis für SUPER bei " + getState(idName2).val + " beträgt:\n\n" + getState(idPreis2).val.replace(/
          /g , "\n")+"9";
                  var preis3 = "Der aktuelle Preis für SUPER bei " + getState(idName3).val + " beträgt:\n\n" + getState(idPreis3).val.replace(/
          /g , "\n")+"9";
                  var preis4 = "Der aktuelle Preis für SUPER bei " + getState(idName4).val + " beträgt:\n\n" + getState(idPreis4).val.replace(/
          /g , "\n")+"9";
                  var preis=preis1+preis2+preis3+preis4; 
          
                  sendTo('telegram', {
                      user: benutzer,
                      text: preis
                      });
               }        
          });      
          

          Wobei mir jetzt nicht klar ist, was der Fehler ist…durch Probieren hab ich zwar herausgefunden, dass der schon oben in der Deklaration muss, aber nicht so recht, warum...wenn ich nur mit IdPreis1 und IdName1 arbeite, funktioniert es...nur sobald zusätzliche Datenpunkte dazukommen, ist das Ganze ungültig...

          1 Reply Last reply Reply Quote 0
          • T
            tempestas last edited by

            Sehe da erstmal keinen Fehler.

            Was mir auffällt: ich kann den (oder einen, denn ich weiß nicht, welchen Fehler du hast?) reproduzieren, wenn eine id leer ist. Ich nutze z.B. nur die Tankstelle ums Eck, wenn also auf einen Preis einer leeren ID verwiesen wird, bekomme ich diesen Fehler:

            At Object. (script.js.common.test:19:125)
            javascript.1	2018-02-28 08:21:38.779	error	Error in callback: TypeError: getState(...).val.replace is not a function
            

            Ist das auch dein Fehler? Wenn ja, prüfe mal, ob die verlinkten IDs auch wirklich Daten liefern

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

              Das kann ich ausschliessen, da in meiner Visualisierung alle 4 Tankstellen mit korrekten Werten angezeigt werden…

              Kann es sein, dass die Benennung der Variablen in dieser Form nicht zulässig ist? Das wundert mich zwar, weil die Deklaration gemäß JavaScript gültig ist, aber eventuell gibt es da ja Regularien für den Iobroker?

              Achso, noch eine Frage zur Fehlermeldung: Wo wird die eigentlich angezeigt? Ich erkenne Fehler momentan nur daran, dass Iobroker meine Anfrage mit Ja beantwortet und das war's...sorry, bin noch Anfänger und finde mich noch nicht ganz zurecht wo was angezeigt wird...im Log habe ich zumindest nix gefunden...

              1 Reply Last reply Reply Quote 0
              • T
                tempestas last edited by

                Poste doch bitte mal die Fehlermeldung aus dem Log, dann muss man nicht raten und kann zielgerichtet helfen.

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

                  Genau das ist mein Problem…im Log wurde kein Fehler angezeigt...ich werde heute abend mal alle Anzeigemodi durchschauen...

                  1 Reply Last reply Reply Quote 0
                  • T
                    tempestas last edited by

                    was heißt denn, das ganze ist "ungültig"? Wenn etwas ungültig ist, muss ja ein Fehler da sien

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

                      Sodele, ich hab gestern mal was ganz verwegenes gemacht und die JavaScript-Instanz einmal neu starten lassen..und siehe da, auf einmal funktionierte sogar das Script.

                      Trotz allem, was ich mit ungültig meinte: Weder im Systemlog noch im Log des Scripts (auch im Debug-Modus) wurde ein Fehler ausgegeben. Von daher sollte das Script ja richtig sein. Wenn ich dann aber bei Telegram nachgefragt habe, kam als Antwort nur "ja"…einmal sogar "nein".

                      Aber auf jeden Fall vielen Dank für die Hilfe und Geduld !!!! (als Anfänger kommt man sich manchmal sooo unendlich dumm vor)

                      1 Reply Last reply Reply Quote 0
                      • A
                        Ace-k last edited by

                        Moin,

                        finde das Script cool. :!:

                        Ich habe das ganze "Diesel" und "Super" genannt.

                        wenn ich nun allerdings Diesel schreibe, kommt

                        Ich verstehe "diesel" nicht

                        aber Zeigt danach dennoch die Tankstellen an.

                        –---

                        Muss mich korrigieren.

                        kommen doch keine Werte mehr.

                        nur "Ich verstehe "diesel" nicht"

                        ! var idPreis1 = "tankerkoenig.0.stations.0.diesel.short";
                        ! var idName1 = "tankerkoenig.0.stations.0.name";
                        ! var idPreis2 = "tankerkoenig.0.stations.1.diesel.short";
                        ! var idName2 = "tankerkoenig.0.stations.1.name";
                        ! var idPreis3 = "tankerkoenig.0.stations.2.diesel.short";
                        ! var idName3 = "tankerkoenig.0.stations.2.name";
                        ! var idPreis4 = "tankerkoenig.0.stations.3.diesel.short";
                        ! var idName4 = "tankerkoenig.0.stations.3.name";
                        ! var idPreis5 = "tankerkoenig.0.stations.4.diesel.short";
                        ! var idName5 = "tankerkoenig.0.stations.4.name";
                        ! var idPreis6 = "tankerkoenig.0.stations.5.diesel.short";
                        ! var idName6 = "tankerkoenig.0.stations.5.name";
                        ! var idPreis7 = "tankerkoenig.0.stations.6.diesel.short";
                        ! var idName7 = "tankerkoenig.0.stations.6.name";
                        ! var idPreis8 = "tankerkoenig.0.stations.7.diesel.short";
                        ! var idName8 = "tankerkoenig.0.stations.7.name";
                        ! 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(/(?=.*(\Diesel\b|\bTanken\b)).+/ig) != -1) {
                        ! var preis1 = "Bei " + getState(idName1).val + " : " + getState(idPreis1).val.replace(/
                        /g , "\n")+"9\n";
                        ! var preis2 = "Bei " + getState(idName2).val + " : " + getState(idPreis2).val.replace(/
                        /g , "\n")+"9\n";
                        ! var preis3 = "Bei " + getState(idName3).val + " : " + getState(idPreis3).val.replace(/
                        /g , "\n")+"9\n";
                        ! var preis4 = "Bei " + getState(idName4).val + " : " + getState(idPreis4).val.replace(/
                        /g , "\n")+"9\n";
                        ! var preis5 = "Bei " + getState(idName5).val + " : " + getState(idPreis5).val.replace(/
                        /g , "\n")+"9\n";
                        ! var preis6 = "Bei " + getState(idName6).val + " : " + getState(idPreis6).val.replace(/
                        /g , "\n")+"9\n";
                        ! var preis7 = "Bei " + getState(idName7).val + " : " + getState(idPreis7).val.replace(/
                        /g , "\n")+"9\n";
                        ! var preis8 = "Bei " + getState(idName8).val + " : " + getState(idPreis8).val.replace(/
                        /g , "\n")+"9\n";
                        ! var preis=preis1+preis2+preis3+preis4+preis5+preis6+preis7+preis8;
                        ! sendTo('telegram', {
                        ! user: benutzer,
                        ! text: preis
                        ! });
                        ! }
                        ! });

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

                          Ich kenne mich regex nicht aus, aber fehlt da nicht ein „b“ vor Diesel im Suchausdruck?

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

                            Jau, das sollte es sein. Im Beispiel steht /Benzin, da suche er das Wort „enzin“. 😄

                            1 Reply Last reply Reply Quote 0
                            • A
                              Ace-k last edited by

                              vielen dank.

                              das brachte jetzt allerdings nur den erfolg das wieder die Daten kommen.

                              leider sagt er immernoch "Diesel" nicht verstanden :roll:

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

                                Hy. Bin newbie und find es total toll. Wo trage ich denn genau sowas ein? Das ist für mich als newbie nicht nach zu vollziehen.

                                Vielen Dank und Sorry wegen der Frage.

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

                                  Kann keiner helfen?

                                  1 Reply Last reply Reply Quote 0
                                  • F
                                    Fitti last edited by

                                    @michael_klatt:

                                    Kann keiner helfen? `
                                    Doch bestimmt, aber es sind sehr wenig Infos, die Du uns gibst.

                                    Was möchtest Du denn genau erreichen?

                                    Was hast Du schon probiert?

                                    An welcher Stelle genau kommst Du nicht klar?

                                    Du weißt nicht, wie man ein Skript irgendwo einträgt und zum Laufen bekommt?

                                    Läuft denn Tankerkönig schon bei Dir, oder ist der gesamte Ansatz unbekannt?

                                    So long,

                                    Fitti

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

                                      Hy,

                                      Tankerkönig ist installiert.

                                      Api eingetragen und die Tankstellen auch.

                                      Möchte nun gerne wissen, wie ich mit Telegram und dem Java Eintrag zurecht komme. Liebe Grüsse und vielen dank

                                      Auch gerne per Mail erreichbar.

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

                                        Hi Forum,

                                        Tankerkönig ist in der Instanz tankerkoenig.0 vorhanden!

                                        Wenn ich Tanken oder Benzin sende, kann ich sehen unter telegram.0.communicate.request das der Request ankommt

                                        Leider erhalte ich jedoch keine Antwort obwohl Cheapest

                                        var idPreis1 = "tankerkoenig.0.stations.cheapest.e5.short";
                                        var idName1 = "tankerkoenig.0.stations.cheapest.e5.name";
                                        var idPreis2 = "tankerkoenig.0.stations.cheapest.e10.short";
                                        var idName2 = "tankerkoenig.0.stations.cheapest.e10.name";
                                        var idPreis3 = "tankerkoenig.0.stations.cheapest.diesel.short";
                                        var idName3 = "tankerkoenig.0.stations.cheapest.diesel.name";
                                        

                                        gefüllt ist… anbei mal das komplette Skript welches ich verwende...

                                        ! var idPreis1 = "tankerkoenig.0.stations.cheapest.e5.short";
                                        ! var idName1 = "tankerkoenig.0.stations.cheapest.e5.name";
                                        ! var idPreis2 = "tankerkoenig.0.stations.cheapest.e10.short";
                                        ! var idName2 = "tankerkoenig.0.stations.cheapest.e10.name";
                                        ! var idPreis3 = "tankerkoenig.0.stations.cheapest.diesel.short";
                                        ! var idName3 = "tankerkoenig.0.stations.cheapest.diesel.name";
                                        ! 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(/(?=.*(\Benzin\b|\bTanken\b)).+/ig) != -1) {
                                        ! var preis1 = "E5 ist am günstigsten bei " + getState(idName1).val + " für " + getState(idPreis1).val.replace('
                                        ',"\n")+"9\n\n";
                                        ! var preis2 = "E10 ist am günstigsten bei " + getState(idName2).val + " für " + getState(idPreis2).val.replace(/
                                        /g , "\n")+"9\n\n";
                                        ! var preis3 = "Diesel ist am günstigsten bei " + getState(idName3).val + " für " + getState(idPreis3).val.replace(/
                                        /g , "\n")+"9\n\n";
                                        ! var preis=preis1+preis2+preis3;
                                        ! sendTo('telegram', {
                                        ! user: benutzer,
                                        ! text: preis
                                        ! });
                                        ! }
                                        ! });

                                        Grüsse Schweiz

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

                                          Danke Forum für eure mithilfe zur Lösung meines Problems!

                                          Eine Neuinstallation des Telegram Adapter brachte mich dann schlussendlich zum erfolg!!!

                                          Grüsse Schweiz

                                          1 Reply Last reply Reply Quote 0
                                          • W
                                            W0RSCHD last edited by W0RSCHD

                                            Ich hab das jetzt mal angepasst auf meine Bedürfnisse, ich muss dazu sagen ich habe keine Ahnung von Javascript.
                                            Dementsprechend läuft das irgendwie auch nicht, wäre klasse wenn jemand mal drüber schauen könnte und mir sagen was ich falsch gemacht habe?

                                            [EDIT] Fehler gefunden und auch hier korrigiert. Folgendes Skript läuft so wie gepostet und spuckt dann von 4 verschiedenen Tankstellen die Preise aus per Telegram 🙂

                                            var idPreis1 = "tankerkoenig.0.stations.0.diesel.short";
                                            var idName1 = "tankerkoenig.0.stations.0.name";
                                            var idPreis2 = "tankerkoenig.0.stations.1.diesel.short";
                                            var idName2 = "tankerkoenig.0.stations.1.name";
                                            var idPreis3 = "tankerkoenig.0.stations.2.diesel.short";
                                            var idName3 = "tankerkoenig.0.stations.2.name";
                                            var idPreis4 = "tankerkoenig.0.stations.3.diesel.short";
                                            var idName4 = "tankerkoenig.0.stations.3.name";
                                            
                                            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(/(?=.*(b\Benzin\b|\bSpritpreise\b)).+/ig) != -1) {
                                            var preis1 = "Der aktuelle Preis für Diesel bei " + getState(idName1).val + " beträgt: " + getState(idPreis1).val.replace(/ /g , "\n")+"9€\n\n";
                                            var preis2 = "Der aktuelle Preis für Diesel bei " + getState(idName2).val + " beträgt: " + getState(idPreis2).val.replace(/ /g , "\n")+"9€\n\n";
                                            var preis3 = "Der aktuelle Preis für Diesel bei " + getState(idName3).val + " beträgt: " + getState(idPreis3).val.replace(/ /g , "\n")+"9€\n\n";
                                            var preis4 = "Der aktuelle Preis für Diesel bei " + getState(idName4).val + " beträgt: " + getState(idPreis4).val.replace(/ /g , "\n")+"9€\n\n";
                                            var preis=preis1+preis2+preis3+preis4; 
                                            sendTo('telegram', {
                                            user: benutzer,
                                            text: preis
                                            });
                                            }        
                                            });        
                                            
                                            D 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            637
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            16
                                            35
                                            4767
                                            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