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. [gelöst] Telegram Reihenfolge Ausgabe falsch

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    175

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

[gelöst] Telegram Reihenfolge Ausgabe falsch

Geplant Angeheftet Gesperrt Verschoben JavaScript
10 Beiträge 2 Kommentatoren 773 Aufrufe 2 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.
  • D Offline
    D Offline
    drapo
    schrieb am zuletzt editiert von drapo
    #1

    Hallo zusammen

    Ich gebe mir mittels dem folgenden Skript und dem Radar-Trap Adapter neue Radar Meldungen über Telegram aus. Dabei erhalte ich die GPS Daten als Karte und ich möchte natürlich direkt unter der Karte auch den Ort und die Strasse haben. Leider bekomme ich es häufig wie auf dem Bild völlig nach Zufall. So ist es nicht lesbar. Wie kann ich das verbessern dass das alles in der richtigen Reihenfolge erscheint?

    
    function sendImage() {
    
        var Liste, telegram, i, obj, koordinaten, lon, lat, Stadt, Strasse;
    
    
    Liste = getState('radar-trap.0.mi7-x6GA0Bg75EzychceA.direction-0.speedTraps').val;
    telegram = '';
    var i_end = Liste.length;
    var i_inc = 1;
    if (1 > i_end) {
      i_inc = -i_inc;
    }
    for (i = 1; i_inc >= 0 ? i <= i_end : i >= i_end; i += i_inc) { 
      obj = Liste[(i - 1)];
      koordinaten = getAttr(obj, 'geometry.coordinates');
      lon = parseFloat((koordinaten[0]));
      lat = parseFloat((koordinaten[1]));
      Stadt = getAttr(obj, 'properties.city');
      Strasse = getAttr(obj, 'properties.street');
      telegram = [Strasse,'\n',Stadt].join('');
      setTimeout(3000);             
            sendTo('telegram.0', {
    
                text: telegram
    
            });
        setTimeout(3000); 
            sendTo('telegram.0', {
    
                latitude: lat,
                longitude: lon,
    
            });
        }
     };
    
    on("javascript.0.Test", function (obj) {
    
            sendTo('telegram.0', {text: 'Achtung neuer Radar!''});
            setTimeout(sendImage, 2000);
    
        
     });
    
    

    und so sieht es dann in Telegram aus. Vor allem wenn es viele Meldungen sind total unbrauchbar.

    b090ef77-54a6-46af-a227-55d8a2a57bf8-grafik.png

    haus-automatisierungH 1 Antwort Letzte Antwort
    0
    • D drapo

      Hallo zusammen

      Ich gebe mir mittels dem folgenden Skript und dem Radar-Trap Adapter neue Radar Meldungen über Telegram aus. Dabei erhalte ich die GPS Daten als Karte und ich möchte natürlich direkt unter der Karte auch den Ort und die Strasse haben. Leider bekomme ich es häufig wie auf dem Bild völlig nach Zufall. So ist es nicht lesbar. Wie kann ich das verbessern dass das alles in der richtigen Reihenfolge erscheint?

      
      function sendImage() {
      
          var Liste, telegram, i, obj, koordinaten, lon, lat, Stadt, Strasse;
      
      
      Liste = getState('radar-trap.0.mi7-x6GA0Bg75EzychceA.direction-0.speedTraps').val;
      telegram = '';
      var i_end = Liste.length;
      var i_inc = 1;
      if (1 > i_end) {
        i_inc = -i_inc;
      }
      for (i = 1; i_inc >= 0 ? i <= i_end : i >= i_end; i += i_inc) { 
        obj = Liste[(i - 1)];
        koordinaten = getAttr(obj, 'geometry.coordinates');
        lon = parseFloat((koordinaten[0]));
        lat = parseFloat((koordinaten[1]));
        Stadt = getAttr(obj, 'properties.city');
        Strasse = getAttr(obj, 'properties.street');
        telegram = [Strasse,'\n',Stadt].join('');
        setTimeout(3000);             
              sendTo('telegram.0', {
      
                  text: telegram
      
              });
          setTimeout(3000); 
              sendTo('telegram.0', {
      
                  latitude: lat,
                  longitude: lon,
      
              });
          }
       };
      
      on("javascript.0.Test", function (obj) {
      
              sendTo('telegram.0', {text: 'Achtung neuer Radar!''});
              setTimeout(sendImage, 2000);
      
          
       });
      
      

      und so sieht es dann in Telegram aus. Vor allem wenn es viele Meldungen sind total unbrauchbar.

      b090ef77-54a6-46af-a227-55d8a2a57bf8-grafik.png

      haus-automatisierungH Online
      haus-automatisierungH Online
      haus-automatisierung
      Developer Most Active
      schrieb am zuletzt editiert von haus-automatisierung
      #2

      @drapo setTimeout funktioniert so nicht. Damit kannst Du keine Ausführung auf die Art verzögern.

      Du kannst wait nutzen. Das liefert ein Promise zurück, wodurch Du mit await die Ausführung pausieren kannst:

      https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#wait

      Dafür muss deine Funktion aber als asynchron definiert werden. Ist nix ioBroker spezifisches. Javascript Promises anschauen.

      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
      📚 Meine inoffizielle ioBroker Dokumentation

      D 1 Antwort Letzte Antwort
      0
      • haus-automatisierungH haus-automatisierung

        @drapo setTimeout funktioniert so nicht. Damit kannst Du keine Ausführung auf die Art verzögern.

        Du kannst wait nutzen. Das liefert ein Promise zurück, wodurch Du mit await die Ausführung pausieren kannst:

        https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#wait

        Dafür muss deine Funktion aber als asynchron definiert werden. Ist nix ioBroker spezifisches. Javascript Promises anschauen.

        D Offline
        D Offline
        drapo
        schrieb am zuletzt editiert von
        #3

        @haus-automatisierung und wie kann ich mein problem lösen? am liebsten wäre mir natürlich wenn die Strasse und der Ort direkt in der GPS Nachricht verbaut ist. Wenn das nicht geht lebe ich natürlich auch mit 2 Nachrichten resp. 1x GPS und 1x Strasse und Ort. Nur in der richtigen Reihenfolge muss es kommen.

        Wie löse ich so etwas?

        haus-automatisierungH 1 Antwort Letzte Antwort
        0
        • D drapo

          @haus-automatisierung und wie kann ich mein problem lösen? am liebsten wäre mir natürlich wenn die Strasse und der Ort direkt in der GPS Nachricht verbaut ist. Wenn das nicht geht lebe ich natürlich auch mit 2 Nachrichten resp. 1x GPS und 1x Strasse und Ort. Nur in der richtigen Reihenfolge muss es kommen.

          Wie löse ich so etwas?

          haus-automatisierungH Online
          haus-automatisierungH Online
          haus-automatisierung
          Developer Most Active
          schrieb am zuletzt editiert von haus-automatisierung
          #4

          @drapo Erstmal solltest Du deinen Code richtig einrücken und alles überflüssige entfernen. Sieht ja schrecklich aus :)

          So z.B. (nur im Browser programmiert, also keine Garantie auf Vollständigkeit):

          async function sendImage() {
              const speedTraps = getState('radar-trap.0.mi7-x6GA0Bg75EzychceA.direction-0.speedTraps').val;
          
              for (const speedTrap of speedTraps) {
                  await sendToAsync('telegram.0', {
                      text: `${speedTrap.properties.city}\n${speedTrap.properties.street}`
                  });
          
                  await wait(1000);
          
                  const coordinates = speedTrap.geometry.coordinates;
          
                  await sendToAsync('telegram.0', {
                      latitude: parseFloat(coordinates[1]),
                      longitude: parseFloat(coordinates[0]),
                  });
              }
          }
          
          on('javascript.0.Test', async (obj) => {
              await sendToAsync('telegram.0', { text: 'Achtung neuer Radar!' });
              setTimeout(sendImage, 2000);
          });
          
          

          🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
          🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
          📚 Meine inoffizielle ioBroker Dokumentation

          D 2 Antworten Letzte Antwort
          0
          • haus-automatisierungH haus-automatisierung

            @drapo Erstmal solltest Du deinen Code richtig einrücken und alles überflüssige entfernen. Sieht ja schrecklich aus :)

            So z.B. (nur im Browser programmiert, also keine Garantie auf Vollständigkeit):

            async function sendImage() {
                const speedTraps = getState('radar-trap.0.mi7-x6GA0Bg75EzychceA.direction-0.speedTraps').val;
            
                for (const speedTrap of speedTraps) {
                    await sendToAsync('telegram.0', {
                        text: `${speedTrap.properties.city}\n${speedTrap.properties.street}`
                    });
            
                    await wait(1000);
            
                    const coordinates = speedTrap.geometry.coordinates;
            
                    await sendToAsync('telegram.0', {
                        latitude: parseFloat(coordinates[1]),
                        longitude: parseFloat(coordinates[0]),
                    });
                }
            }
            
            on('javascript.0.Test', async (obj) => {
                await sendToAsync('telegram.0', { text: 'Achtung neuer Radar!' });
                setTimeout(sendImage, 2000);
            });
            
            
            D Offline
            D Offline
            drapo
            schrieb am zuletzt editiert von
            #5

            @haus-automatisierung wenn man weiss wie es geht scheint es am Ende immer sehr einfach. Muss ehrlich sagen denke das hätte ich alleine nicht geschafft. Danke Dir vielmals. Ausserdem bin ich doch recht stolz dass mir DER Matthias Kleine geholfen hat :-)

            1 Antwort Letzte Antwort
            1
            • haus-automatisierungH haus-automatisierung

              @drapo Erstmal solltest Du deinen Code richtig einrücken und alles überflüssige entfernen. Sieht ja schrecklich aus :)

              So z.B. (nur im Browser programmiert, also keine Garantie auf Vollständigkeit):

              async function sendImage() {
                  const speedTraps = getState('radar-trap.0.mi7-x6GA0Bg75EzychceA.direction-0.speedTraps').val;
              
                  for (const speedTrap of speedTraps) {
                      await sendToAsync('telegram.0', {
                          text: `${speedTrap.properties.city}\n${speedTrap.properties.street}`
                      });
              
                      await wait(1000);
              
                      const coordinates = speedTrap.geometry.coordinates;
              
                      await sendToAsync('telegram.0', {
                          latitude: parseFloat(coordinates[1]),
                          longitude: parseFloat(coordinates[0]),
                      });
                  }
              }
              
              on('javascript.0.Test', async (obj) => {
                  await sendToAsync('telegram.0', { text: 'Achtung neuer Radar!' });
                  setTimeout(sendImage, 2000);
              });
              
              
              D Offline
              D Offline
              drapo
              schrieb am zuletzt editiert von drapo
              #6

              @haus-automatisierung das skript läuft soweit und macht das was es soll. Ich habe allerdings eine Herausforderung bei der ich Dich nochmals um Hilfe bitten möchte.

              Es kann nun sein, dass ich Informationen zu bestehenden Blitzern erneut kriege. Da ich einen Blitzer aber nur einmal als neu angezeigt haben möchte, müsste man die json mit den inhalten vergleichen. Am besten nur city und street vergleichen da die anderen inhalte nicht relevant sind. Wenn ein Eintrag neu dazu gekommen ist, soll die Info kommen. Wenn jedoch alles gleich ist, dann keine neue Info.

              Könntest Du mir nochmals behilflich sein? Dank Dir

              haus-automatisierungH 1 Antwort Letzte Antwort
              0
              • D drapo

                @haus-automatisierung das skript läuft soweit und macht das was es soll. Ich habe allerdings eine Herausforderung bei der ich Dich nochmals um Hilfe bitten möchte.

                Es kann nun sein, dass ich Informationen zu bestehenden Blitzern erneut kriege. Da ich einen Blitzer aber nur einmal als neu angezeigt haben möchte, müsste man die json mit den inhalten vergleichen. Am besten nur city und street vergleichen da die anderen inhalte nicht relevant sind. Wenn ein Eintrag neu dazu gekommen ist, soll die Info kommen. Wenn jedoch alles gleich ist, dann keine neue Info.

                Könntest Du mir nochmals behilflich sein? Dank Dir

                haus-automatisierungH Online
                haus-automatisierungH Online
                haus-automatisierung
                Developer Most Active
                schrieb am zuletzt editiert von
                #7

                @drapo sagte in [gelöst] Telegram Reihenfolge Ausgabe falsch:

                Könntest Du mir nochmals behilflich sein? Dank Dir

                Ich hoffe Du bist Teilnehmer im ioBroker-Master-Kurs wenn Du mir hier schon Programmieraufträge verteilst :)

                So z.B. Offene Themen:

                • Cache knownSpeedTraps irgendwann zurücksetzen (Schedule?)
                • Cache geht bei Neustart des Scripts oder des Adapters verloren (halb so wild?)
                const knownSpeedTraps = [];
                
                async function sendImage() {
                    const speedTraps = getState('radar-trap.0.mi7-x6GA0Bg75EzychceA.direction-0.speedTraps').val;
                
                    for (const speedTrap of speedTraps) {
                        const city = speedTrap.properties.city;
                        const street = speedTrap.properties.street;
                
                        const cacheKey = `${city}-${street}`;
                        if (!knownSpeedTraps.includes(cacheKey)) {
                            knownSpeedTraps.push(cacheKey);
                
                            await sendToAsync('telegram.0', {
                                text: `${city}\n${street}`
                            });
                
                            await wait(1000);
                
                            const coordinates = speedTrap.geometry.coordinates;
                
                            await sendToAsync('telegram.0', {
                                latitude: parseFloat(coordinates[1]),
                                longitude: parseFloat(coordinates[0]),
                            });
                        }
                    }
                }
                
                on('javascript.0.Test', async (obj) => {
                    await sendToAsync('telegram.0', { text: 'Achtung neuer Radar!' });
                    setTimeout(sendImage, 2000);
                });
                

                🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                📚 Meine inoffizielle ioBroker Dokumentation

                D 2 Antworten Letzte Antwort
                1
                • haus-automatisierungH haus-automatisierung

                  @drapo sagte in [gelöst] Telegram Reihenfolge Ausgabe falsch:

                  Könntest Du mir nochmals behilflich sein? Dank Dir

                  Ich hoffe Du bist Teilnehmer im ioBroker-Master-Kurs wenn Du mir hier schon Programmieraufträge verteilst :)

                  So z.B. Offene Themen:

                  • Cache knownSpeedTraps irgendwann zurücksetzen (Schedule?)
                  • Cache geht bei Neustart des Scripts oder des Adapters verloren (halb so wild?)
                  const knownSpeedTraps = [];
                  
                  async function sendImage() {
                      const speedTraps = getState('radar-trap.0.mi7-x6GA0Bg75EzychceA.direction-0.speedTraps').val;
                  
                      for (const speedTrap of speedTraps) {
                          const city = speedTrap.properties.city;
                          const street = speedTrap.properties.street;
                  
                          const cacheKey = `${city}-${street}`;
                          if (!knownSpeedTraps.includes(cacheKey)) {
                              knownSpeedTraps.push(cacheKey);
                  
                              await sendToAsync('telegram.0', {
                                  text: `${city}\n${street}`
                              });
                  
                              await wait(1000);
                  
                              const coordinates = speedTrap.geometry.coordinates;
                  
                              await sendToAsync('telegram.0', {
                                  latitude: parseFloat(coordinates[1]),
                                  longitude: parseFloat(coordinates[0]),
                              });
                          }
                      }
                  }
                  
                  on('javascript.0.Test', async (obj) => {
                      await sendToAsync('telegram.0', { text: 'Achtung neuer Radar!' });
                      setTimeout(sendImage, 2000);
                  });
                  
                  D Offline
                  D Offline
                  drapo
                  schrieb am zuletzt editiert von
                  #8

                  @haus-automatisierung wenn Du mir versichern kannst dass du solch komplexe themen wie cache ebenfalls in deinem master kurs abhandelst hast du sofort einen neuen kunden gewonnen :-)

                  Vielen Dank für die erneute Unterstützung. Hätte ich wieder nicht hingekriegt. Um den Cache zu löschen denke ich dass ich das Skript 1x pro Woche per scheduler neu starte. ich denke das ist für mich das einfachste da ich keine ahnung habe ich ich das sonst lösen soll

                  1 Antwort Letzte Antwort
                  0
                  • haus-automatisierungH haus-automatisierung

                    @drapo sagte in [gelöst] Telegram Reihenfolge Ausgabe falsch:

                    Könntest Du mir nochmals behilflich sein? Dank Dir

                    Ich hoffe Du bist Teilnehmer im ioBroker-Master-Kurs wenn Du mir hier schon Programmieraufträge verteilst :)

                    So z.B. Offene Themen:

                    • Cache knownSpeedTraps irgendwann zurücksetzen (Schedule?)
                    • Cache geht bei Neustart des Scripts oder des Adapters verloren (halb so wild?)
                    const knownSpeedTraps = [];
                    
                    async function sendImage() {
                        const speedTraps = getState('radar-trap.0.mi7-x6GA0Bg75EzychceA.direction-0.speedTraps').val;
                    
                        for (const speedTrap of speedTraps) {
                            const city = speedTrap.properties.city;
                            const street = speedTrap.properties.street;
                    
                            const cacheKey = `${city}-${street}`;
                            if (!knownSpeedTraps.includes(cacheKey)) {
                                knownSpeedTraps.push(cacheKey);
                    
                                await sendToAsync('telegram.0', {
                                    text: `${city}\n${street}`
                                });
                    
                                await wait(1000);
                    
                                const coordinates = speedTrap.geometry.coordinates;
                    
                                await sendToAsync('telegram.0', {
                                    latitude: parseFloat(coordinates[1]),
                                    longitude: parseFloat(coordinates[0]),
                                });
                            }
                        }
                    }
                    
                    on('javascript.0.Test', async (obj) => {
                        await sendToAsync('telegram.0', { text: 'Achtung neuer Radar!' });
                        setTimeout(sendImage, 2000);
                    });
                    
                    D Offline
                    D Offline
                    drapo
                    schrieb am zuletzt editiert von
                    #9

                    @haus-automatisierung hab mir dein script nochmals studiert. Würde denn die Definition von knownSpeedTraps als var anstatt const das Problem des Cache zurücksetzen nicht automatisch lösen?

                    haus-automatisierungH 1 Antwort Letzte Antwort
                    0
                    • D drapo

                      @haus-automatisierung hab mir dein script nochmals studiert. Würde denn die Definition von knownSpeedTraps als var anstatt const das Problem des Cache zurücksetzen nicht automatisch lösen?

                      haus-automatisierungH Online
                      haus-automatisierungH Online
                      haus-automatisierung
                      Developer Most Active
                      schrieb am zuletzt editiert von
                      #10

                      @drapo nein. Das ändert nur den scope (in diesem fall auch nicht). Var einfach nie benutzten (nur let und const).

                      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                      📚 Meine inoffizielle ioBroker Dokumentation

                      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

                      558

                      Online

                      32.5k

                      Benutzer

                      81.7k

                      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