Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

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

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    235

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

Tankerkönig und Telegram

Geplant Angeheftet Gesperrt Verschoben JavaScript
35 Beiträge 16 Kommentatoren 5.9k Aufrufe 8 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    michael_klatt
    schrieb am zuletzt editiert von
    #19

    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 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      Schweiz
      schrieb am zuletzt editiert von
      #20

      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 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        Schweiz
        schrieb am zuletzt editiert von
        #21

        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 Antwort Letzte Antwort
        0
        • W Offline
          W Offline
          W0RSCHD
          schrieb am zuletzt editiert von W0RSCHD
          #22

          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 Antwort Letzte Antwort
          0
          • W 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 Offline
            D Offline
            dulles
            schrieb am zuletzt editiert von dulles
            #23

            @W0RSCHD
            Hey,

            muss noch einmal nachfragen, was zu machen ist. Ich bin mir nicht sicher, ob ich alles richtig gemacht habe.
            Im Text2Command habe ich die Regel "Fragen über irgendwas" ausgewählt und das Script oben ausgewählt.
            Wenn ich jetzt Telegram abfrage, bekomme ich nichts. Es wird auch keine Fehler angezeigt.

            Was mache ich nun falsch

            dulles

            1 Antwort Letzte Antwort
            0
            • D Online
              D Online
              darkiop
              Most Active
              schrieb am zuletzt editiert von
              #24

              Habe es bei mir ebenfalls eingebunden und um die günstigste Tankstelle erweitert (läuft insgesamt zweimal, je für Benzin und Diesel):

              // https://forum.iobroker.net/topic/10974/tankerkönig-und-telegram/23
              
              var idPreis0 = "tankerkoenig.0.stations.0.diesel.short";
              var idName0 = "tankerkoenig.0.stations.0.name";
              var idPreis1 = "tankerkoenig.0.stations.1.diesel.short";
              var idName1 = "tankerkoenig.0.stations.1.name";
              var idPreis2 = "tankerkoenig.0.stations.2.diesel.short";
              var idName2 = "tankerkoenig.0.stations.2.name";
              var idPreis3 = "tankerkoenig.0.stations.3.diesel.short";
              var idName3 = "tankerkoenig.0.stations.3.name";
              var idPreis4 = "tankerkoenig.0.stations.4.diesel.short";
              var idName4 = "tankerkoenig.0.stations.4.name";
              var idPreisCheapest = "tankerkoenig.0.stations.cheapest.diesel.short";
              var idNameCheapest = "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(/(?=.*(\Diesel\b)).+/ig) != -1) {
                  var station0 = "Diesel in " + getState(idName0).val + " kostet: " + getState(idPreis0).val.replace(/ /g , "\n")+"9€\n\n";
                  var station1 = "Diesel bei der " + getState(idName1).val + " kostet: " + getState(idPreis1).val.replace(/ /g , "\n")+"9€\n\n";
                  var station2 = "Diesel bei der " + getState(idName2).val + " kostet: " + getState(idPreis2).val.replace(/ /g , "\n")+"9€\n\n";
                  var station3 = "Diesel bei der " + getState(idName3).val + " kostet: " + getState(idPreis3).val.replace(/ /g , "\n")+"9€\n\n";
                  var station4 = "Diesel in " + getState(idName4).val + " kostet: " + getState(idPreis4).val.replace(/ /g , "\n")+"9€\n\n";
                  
                  var cheapest = "Die günstigste ist "+ getState(idNameCheapest).val + " für " + getState(idPreis4).val.replace(/ /g , "\n")+"9€\n\n";
                  
                  var stationen=station0+station1+station2+station3+station4+cheapest;
                
                  sendTo('telegram', {
                    user: benutzer,
                    text: stationen
                  });
                } // endif
              });
              

              Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

              1 Antwort Letzte Antwort
              0
              • 4 Offline
                4 Offline
                4-Real
                schrieb am zuletzt editiert von 4-Real
                #25

                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 1 Antwort Letzte Antwort
                0
                • 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
                  schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
                  0
                  • E Offline
                    E Offline
                    ErazorVIP
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • J Offline
                      J Offline
                      jwerlsdf
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #29

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

                        1 Antwort Letzte Antwort
                        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
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • I Offline
                            I Offline
                            ignis-draco
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            1
                            • Kay PoslovskyK Offline
                              Kay PoslovskyK Offline
                              Kay Poslovsky
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • I Offline
                                I Offline
                                ignis-draco
                                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                                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
                                  schrieb am zuletzt editiert von Stephan Schleich
                                  #34

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

                                  Edit: Klammer zu fehlt am schluss

                                  1 Antwort Letzte Antwort
                                  0
                                  • I Offline
                                    I Offline
                                    ignis-draco
                                    schrieb am zuletzt editiert von
                                    #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 Antwort Letzte Antwort
                                    0
                                    Antworten
                                    • In einem neuen Thema antworten
                                    Anmelden zum Antworten
                                    • Älteste zuerst
                                    • Neuste zuerst
                                    • Meiste Stimmen


                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    739

                                    Online

                                    32.5k

                                    Benutzer

                                    81.9k

                                    Themen

                                    1.3m

                                    Beiträge
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                    ioBroker Community 2014-2025
                                    logo
                                    • Anmelden

                                    • Du hast noch kein Konto? Registrieren

                                    • Anmelden oder registrieren, um zu suchen
                                    • Erster Beitrag
                                      Letzter Beitrag
                                    0
                                    • Home
                                    • Aktuell
                                    • Tags
                                    • Ungelesen 0
                                    • Kategorien
                                    • Unreplied
                                    • Beliebt
                                    • GitHub
                                    • Docu
                                    • Hilfe