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.
    • I
      ignis-draco @4-Real last edited by ignis-draco

      @4-Real said in Tankerkönig und Telegram:

      Wie kann ich jetzt ändern, das der Preis im Telegram als Dick / Fett angezeigt wird?

      Das geht entweder mittel HTML :

      output += "<b>Aktuelle Spritpreise:</b>\n\n"
      

      oder mit der Markdown Syntax

      **this is in bold**  and __so is this__
      

      wichtig ist das du beim sendTo den "parse_mode" passend einstellst. API.

      Übrigens du kannst mittels Schleifen und Arrays das ganze Skript deutlich kürzer fassen. Hier mal als Beispiel mein Script.
      Dort wird nicht nur einfach jeder Eintrag genommen der im tankerkoenig Adapter steht sonder auch noch nach dem Preis sortiert.

      on({ id: 'telegram.0.communicate.request', change: 'any' }, function (obj) {
          var stateval = getState('telegram.0.communicate.request').val;
          if (stateval.match(/tanken/i)) {
              var user_to_send = stateval.substring(1, stateval.indexOf("]"));
              var command = stateval.substring(stateval.indexOf("]") + 1, stateval.length).toLowerCase();
              var output = "";
              var list = new Array();
              for (var i = 0; i < 10; i++) {
                  if (getState("tankerkoenig.0.stations." + i + ".status").val == "open") {
                      list.push(new Array(getState("tankerkoenig.0.stations." + i + ".name").val,
                          getState("tankerkoenig.0.stations." + i + ".e5.short").val));
                  }
              }
              list = list.sort(function (a, b) {
                  return a[1] - b[1];
              });
              if (list.length == 0) {
                  output += "Alle Tankstellen in der Liste sind aktuell geschlossen";
              } else {
                  output += "<b>Aktuelle Spritpreise:</b>\n\n"
                  list.forEach(function (item) {
                      output += item[0] + " : " + item[1] + "€\n";
                  });
              }
              sendTo('telegram', {
                  user: user_to_send,
                  text: output,
                  parse_mode: "HTML"
              });
          }
      });
      
      

      Gruß
      Arne

      Stephan Schleich Kay Poslovsky 2 Replies Last reply Reply Quote 0
      • E
        ErazorVIP last edited by

        Hallo,
        ich bekomme jetzt leider nachdem letzten Update immer folgenden Fehler:


        javascript.0 2019-10-09 02:47:25.967 error at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
        javascript.0 2019-10-09 02:47:25.967 error at Manager.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
        javascript.0 2019-10-09 02:47:25.967 error at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:228:12)
        javascript.0 2019-10-09 02:47:25.966 error at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:270:10)
        javascript.0 2019-10-09 02:47:25.966 error at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
        javascript.0 2019-10-09 02:47:25.966 error at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:52:30)
        javascript.0 2019-10-09 02:47:25.966 error at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3706:37)
        javascript.0 2019-10-09 02:47:25.966 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:364:25)
        javascript.0 2019-10-09 02:47:25.965 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:973:38)
        javascript.0 2019-10-09 02:47:25.965 error at Object.<anonymous> (script.js.common.telegram.Tankstellenpreise:57:115)
        javascript.0 2019-10-09 02:47:25.965 error Error in callback: TypeError: getState(...).val.replace is not a function

        var preis2 = "Der aktuelle Preis für Diesel bei " + getState(idName2).val + " beträgt: " + getState(idPreis2).val.replace(/ /g , "\n")+"9€\n\n";
        
        
        

        Kann es sein das es mit den replace nicht mehr funktiniert?

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

          Hallo,
          hat jemand schon eine Lösung zu dem Problem mit dem Replace gefunden? Wenn nein, hat jemand eine alternative Lösung die Spritpreise an Telegram zu schicken?
          Vielen Dank schon einmal für eine Antwort!

          1 Reply Last reply Reply Quote 0
          • Stephan Schleich
            Stephan Schleich @ignis-draco last edited by

            @ignis-draco Wie kann ich in deinem Script Diesel mit aufnehmen? (Diesel/Benzin)

            1 Reply Last reply Reply Quote 0
            • Kay Poslovsky
              Kay Poslovsky @ignis-draco last edited by

              @ignis-draco ich habe dein Skript schon lange am laufen und finde es echt super. danke schon mal dafür. Kannst du mir sagen wie ich eine zweite Tankerkönig Instanz (tankerkoenig.1.stations.)hinzufügen kann?
              Meine JS Kenntnisse reichen bei weitem noch nicht dafür aus. habe auch schon einiges probiert da ich das meiste durch probieren lerne, aber ich komme nicht drauf. Danke im Voraus
              Gruß Kay

              1 Reply Last reply Reply Quote 0
              • I
                ignis-draco last edited by

                @Stephan Schleich

                Sorry hatte gar nicht mit bekommen das du geschrieben hast. Zum unterschreiben müsste man das eigentlich doppelt machen. Ich schau mal wie man das gut hin bekommt.

                @Kay Poslovsky
                Hast du zwei Instanzen weil du mehr als 10 Tankstellen hast ? Wenn ja dann müsstest du die Zeile 8-13 Kopieren und dann unter der Zeile 13 einfügen. In dieser For schleife änderst du einfach tankerkoenig.0.stations. in tankerkoenig.1.stations.
                Das ganze sollte dann so aussehen.

                on({ id: 'telegram.0.communicate.request', change: 'any' }, function (obj) {
                    var stateval = getState('telegram.0.communicate.request').val;
                    if (stateval.match(/tanken/i)) {
                        var user_to_send = stateval.substring(1, stateval.indexOf("]"));
                        var command = stateval.substring(stateval.indexOf("]") + 1, stateval.length).toLowerCase();
                        var output = "";
                        var list = new Array();
                        for (var i = 0; i < 10; i++) {
                            if (getState("tankerkoenig.0.stations." + i + ".status").val == "open") {
                                list.push(new Array(getState("tankerkoenig.0.stations." + i + ".name").val,
                                    getState("tankerkoenig.0.stations." + i + ".e5.short").val));
                            }
                        }
                
                        for (var i = 0; i < 10; i++) {
                            if (getState("tankerkoenig.1.stations." + i + ".status").val == "open") {
                                list.push(new Array(getState("tankerkoenig.1.stations." + i + ".name").val,
                                    getState("tankerkoenig.1.stations." + i + ".e5.short").val));
                            }
                        }
                
                        list = list.sort(function (a, b) {
                            return a[1] - b[1];
                        });
                        if (list.length == 0) {
                            output += "Alle Tankstellen in der Liste sind aktuell geschlossen";
                        } else {
                            output += "<b>Aktuelle Spritpreise:</b>\n\n"
                            list.forEach(function (item) {
                                output += item[0] + " : " + item[1] + "€\n";
                            });
                        }
                        sendTo('telegram', {
                            user: user_to_send,
                            text: output,
                            parse_mode: "HTML"
                        });
                    }
                

                P.S. man könnte auch noch die beiden For zusammen fassen aber ich denke das du so eher den Quellcode verstehen wirst.

                1 Reply Last reply Reply Quote 1
                • Kay Poslovsky
                  Kay Poslovsky last edited by

                  @ignis-draco said in Tankerkönig und Telegram:

                     for (var i = 0; i < 10; i++) {                                                                                                                                                                                        if (getState("tankerkoenig.0.stations." + i + ".status").val == "open") {                                                                                                                                                                                            list.push(new Array(getState("tankerkoenig.0.stations." + i + ".name").val,                                                                                                                                                                                                getState("tankerkoenig.0.stations." + i + ".e5.short").val));                                                                                                                                                                                        }                                                                                                                                                                                    }
                  

                  vielen dank, ähnlich habe ich es auch probiert, vermutlich aber vor dem {. jetzt hat es funktioniert vielen dank für deine Hilfe.

                  1 Reply Last reply Reply Quote 0
                  • I
                    ignis-draco last edited by ignis-draco

                    @stephan-schleich

                    Habe das script mal etwas angepasst man kann jetzt über das Array "adapter" mehrere Instanzen angeben und über "fuelType" welche Sprit arten ausgegeben werden. Wichtig ist das man die Typen so benennt wie sie im Objektbaum heißen.

                    on({ id: 'telegram.0.communicate.request', change: 'any' }, function (obj) {
                        var stateval = getState('telegram.0.communicate.request').val;
                        if (stateval.match(/tanken/i)) {
                            var user_to_send = stateval.substring(1, stateval.indexOf("]"));
                            var command = stateval.substring(stateval.indexOf("]") + 1, stateval.length).toLowerCase();
                    
                            var output = "";
                            var adapter = ["tankerkoenig.0.stations"]   // add other Instances the ".stations" is necessary
                            var fuelType = ["diesel", "e10", "e5"]   // remove unnecessary types
                            var result = new Array();
                    
                            for(var fuels = 0; fuels < fuelType.length; fuels++){
                                result.push(new Array());
                            }
                    
                            for (var adap = 0; adap < adapter.length; adap++){
                                for (var i = 0; i < 10; i++) {
                                    if(existsState(adapter[adap] + "." +  i + ".status") === true){
                                        if (getState( adapter[adap] + "." +  i + ".status").val == "open") {
                                            for(var fuels = 0; fuels < fuelType.length; fuels++){
                                                result[fuels].push(new Array(getState(adapter[adap] + "." + i + ".name").val,
                                                            getState(adapter[adap] + "." +  i + "." + fuelType[fuels] +".short").val));
                                            }
                                        }
                                    }
                    
                                }
                            }
                    
                            for (var i = 0 ; i < result.length; i++){
                                result[i] = result[i].sort(function (a, b) {
                                    return a[1] - b[1];
                                });
                            }
                    
                    
                            if (result[0].length == 0) {
                                output += "Alle Tankstellen in der Liste sind aktuell geschlossen";
                            } else {
                                output += "<b>Aktuelle Spritpreise:</b>\n\n"
                    
                                for(var i = 0; i < result.length; i++){
                                    output += "  <b>"+ fuelType[i] +"</b>\n"
                                    
                                    result[i].forEach(function (item) {
                                        output += "  "+item[0] + " : " + item[1] + "€\n";
                                        });
                                    output+="\n\n"
                                    
                                }
                            }
                            sendTo('telegram', {
                                user: user_to_send,
                                text: output,
                                parse_mode: "HTML"
                            });
                        }
                    });
                    
                    Stephan Schleich 1 Reply Last reply Reply Quote 1
                    • Stephan Schleich
                      Stephan Schleich @ignis-draco last edited by Stephan Schleich

                      @ignis-draco ich bekomm leider folgenden fehler
                      8d7c5def-e6da-4772-8d1f-e277a053b95a-image.png

                      Edit: Klammer zu fehlt am schluss

                      1 Reply Last reply Reply Quote 0
                      • I
                        ignis-draco last edited by

                        Hi ja das ist mir beim Kopierern wohl die klammer verlorenen gegangen. Habe das oben angepasst.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        532
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

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