Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Tankerkönig und Telegram

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    275

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Tankerkönig und Telegram

Scheduled Pinned Locked Moved JavaScript
35 Posts 16 Posters 6.1k Views 8 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • 4 4-Real

    Hallo Jungs, will auch gerne Ab und An mal den preis von den Tanken abfragen. Will gerne das der Preis bei mir in Dicker bzw Fetter Schrift erscheint, aber auch nur der Preis. Mein Script sieht momentan 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";
    
    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(/(?=.*(\Benzinpreise\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(/<br>/g,"\n")+"€\n\n";
            var preis2 = "Der aktuelle Preis für SUPER bei " + getState(idName2).val + " beträgt:\n\n" + getState(idPreis2).val.replace(/<br>/g,"\n")+"€\n\n";
            var preis3 = "Der aktuelle Preis für SUPER bei " + getState(idName3).val + " beträgt:\n\n" + getState(idPreis3).val.replace(/<br>/g,"\n")+"€";
            var preis=preis1+preis2+preis3; 
         
            
            sendTo('telegram', {
                user: benutzer,
                text: preis
                });
         }        
    });      
    

    Wie kann ich jetzt ändern, das der Preis im Telegram als Dick / Fett angezeigt wird?
    Bin leider in Java überhaupt nicht Fit und daher frage ich mal hier nach..

    Danke schonmals!

    I Offline
    I Offline
    ignis-draco
    wrote on last edited by ignis-draco
    #26

    @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

    Proxmox [DMAF5] = LXC [Debian 12]
    ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

    Stephan SchleichS Kay PoslovskyK 2 Replies Last reply
    0
    • E Offline
      E Offline
      ErazorVIP
      wrote on last edited by
      #27

      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
      0
      • J Offline
        J Offline
        jwerlsdf
        wrote on last edited by
        #28

        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
        0
        • I 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 SchleichS Offline
          Stephan SchleichS Offline
          Stephan Schleich
          wrote on last edited by
          #29

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

          1 Reply Last reply
          0
          • I 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

            Kay PoslovskyK Offline
            Kay PoslovskyK Offline
            Kay Poslovsky
            wrote on last edited by
            #30

            @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
            0
            • I Offline
              I Offline
              ignis-draco
              wrote on last edited by
              #31

              @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.

              Proxmox [DMAF5] = LXC [Debian 12]
              ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

              1 Reply Last reply
              1
              • Kay PoslovskyK Offline
                Kay PoslovskyK Offline
                Kay Poslovsky
                wrote on last edited by
                #32

                @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
                0
                • I Offline
                  I Offline
                  ignis-draco
                  wrote on last edited by ignis-draco
                  #33

                  @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"
                          });
                      }
                  });
                  

                  Proxmox [DMAF5] = LXC [Debian 12]
                  ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

                  Stephan SchleichS 1 Reply Last reply
                  1
                  • I 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 SchleichS Offline
                    Stephan SchleichS Offline
                    Stephan Schleich
                    wrote on last edited by Stephan Schleich
                    #34

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

                    Edit: Klammer zu fehlt am schluss

                    1 Reply Last reply
                    0
                    • I Offline
                      I Offline
                      ignis-draco
                      wrote on last edited by
                      #35

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

                      Proxmox [DMAF5] = LXC [Debian 12]
                      ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      400

                      Online

                      32.7k

                      Users

                      82.5k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Home
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe