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. #Stauerkennung #DieAutobahn

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

#Stauerkennung #DieAutobahn

Geplant Angeheftet Gesperrt Verschoben JavaScript
54 Beiträge 9 Kommentatoren 1.1k Aufrufe 11 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.
  • bahnuhrB bahnuhr

    @Hotze sagte in #Stauerkennung #DieAutobahn:

    In meinem Script

    Wo ist das Script ?

    Oder sehe ich es nur nicht. ;-)

    AsgothianA Offline
    AsgothianA Offline
    Asgothian
    Developer
    schrieb am zuletzt editiert von
    #21

    @bahnuhr sagte in #Stauerkennung #DieAutobahn:

    Wo ist das Script ?

    Oder sehe ich es nur nicht. ;-)

    Erster Post, hinter dem Spoiler Button

    ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
    "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

    bahnuhrB 1 Antwort Letzte Antwort
    1
    • R Rushmed

      @peterfido @hotze

      Vielen Dank für die Ergänzugen.
      Das mit Alexa war nur ein Besispiel. Der Datenpunkt und die Kommentare im Script sollen keinen Alexa Bezug haben. Ein selbst wählbarer DP der als Wert die Staumeldungen für meinen definierten Bereich enthält reich völlig. Damit kann ich dann umgehen und würde auch die Telegram Integration im JS Adapter erledigen.

      Ich weiß nicht welche infos in den DP sollen. Seit Testbeginn hatte ich wohl noch keine Störung auf der gewählten AB im gewählten Bereich.
      Logmeldungen erscheinen schonmal:

      
      javascript.0
      2025-12-18 21:00:00.174	info	script.js.aaa_Staumelder: Keine Warnungen im definierten Bereich auf A4
      
      javascript.0
      2025-12-18 21:00:00.174	info	script.js.aaa_Staumelder: Warnung: A4 | Görlitz - Görlitz | Koordinate: 51.19872170096459, 14.960901000619456 | HitsArea: false
      
      javascript.0
      2025-12-18 21:00:00.174	info	script.js.aaa_Staumelder: Warnung: A4 | Kodersdorf - Ludwigsdorf | Koordinate: 51.19872170096459, 14.960901000619456 | HitsArea: false
      
      javascript.0
      2025-12-18 21:00:00.173	info	script.js.aaa_Staumelder: Warnung: A4 | Königshainer Berge - Königshainer Berge | Koordinate: 51.203233847771706, 14.759957057504197 | HitsArea: false
      
      javascript.0
      2025-12-18 21:00:00.173	info	script.js.aaa_Staumelder: Warnung: A4 | Nieder Seifersdorf - Königshainer Berge | Koordinate: 51.2032281716645, 14.760124784338583 | HitsArea: false
      
      javascript.0
      2025-12-18 21:00:00.172	info	script.js.aaa_Staumelder: Warnung: A4 | Willrodaer Forst - Erfurt-Vieselbach | Koordinate: 50.925375315043865, 11.136412592086435 | HitsArea: false
      
      javascript.0
      2025-12-18 21:00:00.170	info	script.js.aaa_Staumelder: Warnung: A4 | Bad Hersfeld - Friedewald | Koordinate: 50.85349478866353, 9.722682387354707 | HitsArea: false
      
      javascript.0
      2025-12-18 21:00:00.028	info	script.js.aaa_Staumelder: Hole Daten von:
      

      Sieht plausiebel aus.

      Sind die Logdaten alle die verfügbar sind? Interessant wäre die Verzögerung durch das jeweilige Ereignis und evtl. dass man die Richtung differenzieren kann. Hierfür wäre ein Zweiter DP oder generell die Ausgbe als JSON vorstellbar.

      H Offline
      H Offline
      Hotze
      schrieb am zuletzt editiert von Hotze
      #22

      @Rushmed sagte in #Stauerkennung #DieAutobahn:

      Interessant wäre die Verzögerung durch das jeweilige Ereignis

      Die wird nicht immer geliefert.
      Wenn angegeben steht das im JSON unter dem Punkt "delayTimeValue".
      Klick mal hier! Das ist ein JSON der A1


      @bahnuhr sagte in #Stauerkennung #DieAutobahn:

      Oder sehe ich es nur nicht. ;-)

      Habe ich im Spoiler, die Version mit Alexa und Datenpunkt ist in Post #8 "versteckt".
      Unten an diesem Post ist noch eine Version im Spoiler.


      @Rushmed sagte in #Stauerkennung #DieAutobahn:

      Der Datenpunkt und die Kommentare im Script sollen keinen Alexa Bezug haben.

      Wenn jemand Alexa nutzt muss sie etwas zum vorlesen haben (plainText), da kam der Datenpunkt her.
      Das ist aber gleich dem Text den man als Nachricht bekommen würde.
      Ein Beispieltext ist in Post #8.

      Ich habe noch einen Version unten der neue Datenpunkt sollte etwa so aussehen:

      [
       {
         "road": "A45",
         "title": "A45 | Lüdenscheid - Lüdenscheid",
         "description": "Im Stillstand\nDurchschnittsgeschwindigkeit: 3 km/h",
         "start": "2025-12-16T10:27:00Z",
         "type": "STATIONARY_TRAFFIC",
         "coordinate": {
           "lat": 51.219,
           "long": 7.629
         }
       },
       {
         "road": "A45",
         "title": "A45 | Schwerte-Ergste - Dortmund-Süd",
         "description": "Langsamer Verkehr\nReisezeitverlust: 2 Minuten\nDurchschnittsgeschwindigkeit: 40 km/h",
         "start": "2025-12-16T09:45:00Z",
         "type": "SLOW_TRAFFIC",
         "coordinate": {
           "lat": 51.45,
           "long": 7.52
         }
       },
       {
         "road": "A45",
         "title": "Baustelle",
         "description": "Im Stillstand\nReisezeitverlust: 1 Minute\nDurchschnittsgeschwindigkeit: 16 km/h",
         "start": "2025-12-16T09:45:00Z",
         "type": "STATIONARY_TRAFFIC",
         "coordinate": {
           "lat": 51.31,
           "long": 7.68
         }
       }
      ]
      
      


      Hier noch eine Version, mit einem weiterem Datenpunkt als JSON und kleiner einleitenden Erklärung:

      // Dieses Skript überwacht Verkehrswarnungen auf der A45 über die Autobahn-API.
      // Es filtert Meldungen nach einem definierten Koordinatenbereich.
      // Gefundene Warnungen können per Telegram gesendet werden (schaltbar über telegramEnabled).
      // Zusätzlich können zwei Datenpunkte angelegt werden:
      //   1) Klartext für Alexa (verkehrsstoerungDP)
      //   2) JSON für Auswertungen (verkehrsstoerungJSONDP)
      // Beide Datenpunkte sind unabhängig schaltbar.
      // Das Skript läuft automatisch alle 15 Minuten und kann über den Alexa-Datenpunkt manuell gestartet werden.
      // Ziel: Frühwarnsystem für Staus und Baustellen, flexibel nutzbar für Benachrichtigung und Smart-Home-Routinen.
      
      // =========================
      // Konfiguration
      // =========================
      
      const roadId = "A45";
      
      // Bereichsdefinition
      const coordsArea = {
         minLat: 50.6181514,
         maxLat: 51.3742993,
         minLon: 7.2582769,
         maxLon: 8.3822071
      };
      
      // Schalter
      const telegramEnabled        = 1;   // 1 = Telegram senden, 0 = keine Nachrichten
      const alexaEnabled           = 1;   // 1 = Alexa-Trigger aktiv
      const verkehrsstoerungDP     = 1;   // 1 = Klartext-Datenpunkt aktiv
      const verkehrsstoerungJSONDP = 1;   // 1 = JSON-Datenpunkt aktiv
      
      // Telegram-Konfiguration
      const telegramInstance = "telegram.0";
      const telegramChatId   = 123456789;
      
      // Datenpunkte
      const idDatenpunkt     = "0_userdata.0.AlexaRoutineVerkehr";
      const idDatenpunktJSON = "0_userdata.0.AlexaRoutineVerkehr_JSON";
      
      // Datenpunkte anlegen
      if (verkehrsstoerungDP === 1) {
         createState(idDatenpunkt, "", false, {
             name: 'Verkehrsmeldung',
             desc: 'Alexa Morgenroutine',
             type: 'string',
             role: 'value'
         });
      }
      
      if (verkehrsstoerungJSONDP === 1) {
         createState(idDatenpunktJSON, "[]", false, {
             name: 'Verkehrsmeldung JSON',
             desc: 'JSON für Auswertung',
             type: 'string',
             role: 'json'
         });
      }
      
      // API-URL
      const url = `https://verkehr.autobahn.de/o/autobahn/${roadId}/services/warning`;
      
      // =========================
      // Hilfsfunktionen
      // =========================
      
      function isInArea(lat, lon, area) {
         return (
             lat >= area.minLat &&
             lat <= area.maxLat &&
             lon >= area.minLon &&
             lon <= area.maxLon
         );
      }
      
      function warningHitsArea(warning, area) {
         if (warning.coordinate && typeof warning.coordinate.lat === "number" && typeof warning.coordinate.long === "number") {
             if (isInArea(warning.coordinate.lat, warning.coordinate.long, area)) {
                 return true;
             }
         }
         if (warning.geometry && Array.isArray(warning.geometry.coordinates)) {
             for (const coord of warning.geometry.coordinates) {
                 if (Array.isArray(coord) && coord.length >= 2) {
                     const lon = coord[0];
                     const lat = coord[1];
                     if (isInArea(lat, lon, area)) return true;
                 }
             }
         }
         return false;
      }
      
      function buildDescriptionText(descriptionField) {
         if (Array.isArray(descriptionField)) {
             return descriptionField
                 .filter(d => d && String(d).trim() !== "")
                 .join("\n");
         }
         return String(descriptionField || "").trim();
      }
      
      // =========================
      // Hauptlogik
      // =========================
      
      async function checkTraffic() {
         try {
             console.log("Hole Daten von:", url);
      
             const axios = require("axios");
             const response = await axios.get(url);
             const data = response.data;
      
             const warnings = data.warnings || data.warning;
      
             if (!warnings || !Array.isArray(warnings) || warnings.length === 0) {
                 console.log(`Keine Warnungen auf ${roadId}`);
      
                 if (verkehrsstoerungDP === 1)
                     setState(idDatenpunkt, "Keine Warnungen auf " + roadId);
      
                 if (verkehrsstoerungJSONDP === 1)
                     setState(idDatenpunktJSON, "[]");
      
                 return;
             }
      
             const relevant = warnings.filter(w => warningHitsArea(w, coordsArea));
      
             if (relevant.length === 0) {
                 console.log(`Keine Warnungen im definierten Bereich auf ${roadId}`);
      
                 if (verkehrsstoerungDP === 1)
                     setState(idDatenpunkt, "Keine Warnungen im Bereich auf " + roadId);
      
                 if (verkehrsstoerungJSONDP === 1)
                     setState(idDatenpunktJSON, "[]");
      
                 return;
             }
      
             console.log(`${relevant.length} Warnung(en) im Bereich gefunden.`);
      
             let summary = "";
             let jsonArray = [];
      
             for (const warning of relevant) {
                 const descText = buildDescriptionText(warning.description);
      
                 const msg = `⚠️ Störung auf ${roadId}:\n${warning.title}\n${descText}`;
                 summary += msg + "\n\n";
      
                 jsonArray.push({
                     road: roadId,
                     title: warning.title,
                     description: descText,
                     start: warning.startTimestamp || null,
                     type: warning.abnormalTrafficType || null,
                     coordinate: warning.coordinate || null
                 });
      
                 if (telegramEnabled === 1) {
                     sendTo(telegramInstance, "send", {
                         chatId: telegramChatId,
                         text: msg
                     });
                 }
             }
      
             if (verkehrsstoerungDP === 1)
                 setState(idDatenpunkt, summary.trim());
      
             if (verkehrsstoerungJSONDP === 1)
                 setState(idDatenpunktJSON, JSON.stringify(jsonArray, null, 2));
      
         } catch (err) {
             console.error("Fehler beim Abruf:", err.message);
      
             if (telegramEnabled === 1) {
                 sendTo(telegramInstance, "send", {
                     chatId: telegramChatId,
                     text: `❌ Fehler beim Abruf der Verkehrsdaten: ${err.message}`
                 });
             }
      
             if (verkehrsstoerungDP === 1)
                 setState(idDatenpunkt, "Fehler beim Abruf der Verkehrsdaten");
      
             if (verkehrsstoerungJSONDP === 1)
                 setState(idDatenpunktJSON, "[]");
         }
      }
      
      // =========================
      // Trigger
      // =========================
      
      // alle 15 Minuten prüfen
      schedule("*/15 * * * *", checkTraffic);
      
      // Alexa-Trigger nur wenn beide Schalter aktiv sind
      if (alexaEnabled === 1 && verkehrsstoerungDP === 1) {
         on({id: idDatenpunkt, change:'any'}, function () {
             console.log("Alexa Verkehrsroutine aufgerufen");
             checkTraffic();
         });
      }
      
      

      Ich kann versuchen das als Link in die Nachricht einzubauen. Dann kann man auf einen Link drücken und landet in der GoogleMaps-App an der richtigen stelle.
      Was meint Ihr?

      1 Antwort Letzte Antwort
      0
      • AsgothianA Asgothian

        @bahnuhr sagte in #Stauerkennung #DieAutobahn:

        Wo ist das Script ?

        Oder sehe ich es nur nicht. ;-)

        Erster Post, hinter dem Spoiler Button

        bahnuhrB Online
        bahnuhrB Online
        bahnuhr
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #23

        @Asgothian sagte in #Stauerkennung #DieAutobahn:

        Erster Post, hinter dem Spoiler Button

        Ja, jetzt seh ichs auch.(doch blind gewesen)
        Danke.


        Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
        Danke.
        gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
        ScreenToGif :https://www.screentogif.com/downloads.html

        1 Antwort Letzte Antwort
        0
        • H Offline
          H Offline
          Hotze
          schrieb am zuletzt editiert von Hotze
          #24

          Ach! ich mach einfach!
          Nur Testen kann ich im Moment nicht!

          Also hoffe ich einfach mal das Beste:

          Ich glaube hier liest Alexa den Link mit, was ich nicht hören wollen würde, wenn ich eine hätte!
          Ich lasse das dennnoch stehen, für den fall das es jemandem gefällt!

          // Dieses Skript überwacht Verkehrswarnungen auf der A45 über die Autobahn-API.
          // Es filtert Meldungen nach einem definierten Koordinatenbereich (z. B. Aßlar bis Lüdenscheid).
          // Gefundene Warnungen können per Telegram gesendet werden (schaltbar über telegramEnabled).
          // Zusätzlich können zwei Datenpunkte angelegt werden:
          //   1) Klartext für Alexa (verkehrsstoerungDP)
          //   2) JSON für Auswertungen (verkehrsstoerungJSONDP)
          // Beide Datenpunkte sind unabhängig schaltbar.
          // Optional kann ein Google-Maps-Link erzeugt und per Telegram gesendet werden.
          // Das Skript läuft automatisch alle 15 Minuten und kann über den Alexa-Datenpunkt manuell gestartet werden.
          // Ziel: Frühwarnsystem für Staus und Baustellen, flexibel nutzbar für Benachrichtigung und Smart-Home-Routinen.
          
          // =========================
          // Konfiguration
          // =========================
          
          const roadId = "A45";
          
          // Bereichsdefinition
          const coordsArea = {
             minLat: 50.6181514,
             maxLat: 51.3742993,
             minLon: 7.2582769,
             maxLon: 8.3822071
          };
          
          // Schalter
          const telegramEnabled        = 1;   // 1 = Telegram senden
          const alexaEnabled           = 1;   // 1 = Alexa-Trigger aktiv
          const verkehrsstoerungDP     = 1;   // 1 = Klartext-Datenpunkt aktiv
          const verkehrsstoerungJSONDP = 1;   // 1 = JSON-Datenpunkt aktiv
          const sendMapLink            = 1;   // 1 = Google-Maps-Link mitsenden
          
          // Telegram-Konfiguration
          const telegramInstance = "telegram.0";
          const telegramChatId   = 123456789;
          
          // Datenpunkte
          const idDatenpunkt     = "0_userdata.0.AlexaRoutineVerkehr";
          const idDatenpunktJSON = "0_userdata.0.AlexaRoutineVerkehr_JSON";
          
          // Datenpunkte anlegen
          if (verkehrsstoerungDP === 1) {
             createState(idDatenpunkt, "", false, {
                 name: 'Verkehrsmeldung',
                 desc: 'Alexa Morgenroutine',
                 type: 'string',
                 role: 'value'
             });
          }
          
          if (verkehrsstoerungJSONDP === 1) {
             createState(idDatenpunktJSON, "[]", false, {
                 name: 'Verkehrsmeldung JSON',
                 desc: 'JSON für Auswertung',
                 type: 'string',
                 role: 'json'
             });
          }
          
          // API-URL
          const url = `https://verkehr.autobahn.de/o/autobahn/${roadId}/services/warning`;
          
          // =========================
          // Hilfsfunktionen
          // =========================
          
          function isInArea(lat, lon, area) {
             return (
                 lat >= area.minLat &&
                 lat <= area.maxLat &&
                 lon >= area.minLon &&
                 lon <= area.maxLon
             );
          }
          
          function warningHitsArea(warning, area) {
             if (warning.coordinate && typeof warning.coordinate.lat === "number" && typeof warning.coordinate.long === "number") {
                 if (isInArea(warning.coordinate.lat, warning.coordinate.long, area)) {
                     return true;
                 }
             }
          
             if (warning.geometry && Array.isArray(warning.geometry.coordinates)) {
                 for (const coord of warning.geometry.coordinates) {
                     if (Array.isArray(coord) && coord.length >= 2) {
                         const lon = coord[0];
                         const lat = coord[1];
                         if (isInArea(lat, lon, area)) return true;
                     }
                 }
             }
          
             return false;
          }
          
          function buildDescriptionText(descriptionField) {
             if (Array.isArray(descriptionField)) {
                 return descriptionField
                     .filter(d => d && String(d).trim() !== "")
                     .join("\n");
             }
             return String(descriptionField || "").trim();
          }
          
          // =========================
          // Hauptlogik
          // =========================
          
          async function checkTraffic() {
             try {
                 console.log("Hole Daten von:", url);
          
                 const axios = require("axios");
                 const response = await axios.get(url);
                 const data = response.data;
          
                 const warnings = data.warnings || data.warning;
          
                 if (!warnings || !Array.isArray(warnings) || warnings.length === 0) {
                     console.log(`Keine Warnungen auf ${roadId}`);
          
                     if (verkehrsstoerungDP === 1)
                         setState(idDatenpunkt, "Keine Warnungen auf " + roadId);
          
                     if (verkehrsstoerungJSONDP === 1)
                         setState(idDatenpunktJSON, "[]");
          
                     return;
                 }
          
                 const relevant = warnings.filter(w => warningHitsArea(w, coordsArea));
          
                 if (relevant.length === 0) {
                     console.log(`Keine Warnungen im definierten Bereich auf ${roadId}`);
          
                     if (verkehrsstoerungDP === 1)
                         setState(idDatenpunkt, "Keine Warnungen im Bereich auf " + roadId);
          
                     if (verkehrsstoerungJSONDP === 1)
                         setState(idDatenpunktJSON, "[]");
          
                     return;
                 }
          
                 console.log(`${relevant.length} Warnung(en) im Bereich gefunden.`);
          
                 let summary = "";
                 let jsonArray = [];
          
                 for (const warning of relevant) {
                     const descText = buildDescriptionText(warning.description);
          
                     // Koordinaten extrahieren (volle Genauigkeit!)
                     let lat = null;
                     let lon = null;
          
                     if (warning.coordinate) {
                         lat = warning.coordinate.lat;
                         lon = warning.coordinate.long;
                     }
          
                     if (!lat && warning.point) {
                         const parts = warning.point.split(",");
                         if (parts.length === 2) {
                             lat = parts[0];
                             lon = parts[1];
                         }
                     }
          
                     // Maps-Link erzeugen
                     let mapLink = "";
                     if (sendMapLink === 1 && lat && lon) {
                         mapLink = `https://www.google.com/maps/@${lat},${lon},13.13z`;
                     }
          
                     // Nachricht für Telegram
                     let msg = `⚠️ Störung auf ${roadId}:\n${warning.title}\n${descText}`;
                     if (mapLink) msg += `\n\n📍 Position:\n${mapLink}`;
          
                     summary += msg + "\n\n";
          
                     // JSON-Objekt
                     jsonArray.push({
                         road: roadId,
                         title: warning.title,
                         description: descText,
                         start: warning.startTimestamp || null,
                         type: warning.abnormalTrafficType || null,
                         coordinate: { lat: lat, lon: lon },
                         mapLink: mapLink || null
                     });
          
                     // Telegram senden
                     if (telegramEnabled === 1) {
                         sendTo(telegramInstance, "send", {
                             chatId: telegramChatId,
                             text: msg
                         });
                     }
                 }
          
                 if (verkehrsstoerungDP === 1)
                     setState(idDatenpunkt, summary.trim());
          
                 if (verkehrsstoerungJSONDP === 1)
                     setState(idDatenpunktJSON, JSON.stringify(jsonArray, null, 2));
          
             } catch (err) {
                 console.error("Fehler beim Abruf:", err.message);
          
                 if (telegramEnabled === 1) {
                     sendTo(telegramInstance, "send", {
                         chatId: telegramChatId,
                         text: `❌ Fehler beim Abruf der Verkehrsdaten: ${err.message}`
                     });
                 }
          
                 if (verkehrsstoerungDP === 1)
                     setState(idDatenpunkt, "Fehler beim Abruf der Verkehrsdaten");
          
                 if (verkehrsstoerungJSONDP === 1)
                     setState(idDatenpunktJSON, "[]");
             }
          }
          
          // =========================
          // Trigger
          // =========================
          
          // alle 15 Minuten prüfen
          schedule("*/15 * * * *", checkTraffic);
          
          // Alexa-Trigger nur wenn beide Schalter aktiv sind
          if (alexaEnabled === 1 && verkehrsstoerungDP === 1) {
             on({id: idDatenpunkt, change:'any'}, function () {
                 console.log("Alexa Verkehrsroutine aufgerufen");
                 checkTraffic();
             });
          }
          
          

          Hier sollte das nicht mehr passieren:

          // Dieses Skript überwacht Verkehrswarnungen auf der A45 über die Autobahn-API.
          // Es filtert Meldungen nach einem definierten Koordinatenbereich (z. B. Aßlar bis Lüdenscheid).
          // Gefundene Warnungen können per Telegram gesendet werden (telegramEnabled).
          // Zusätzlich können zwei Datenpunkte angelegt werden:
          //   1) Klartext für Alexa (verkehrsstoerungDP) – OHNE Maps-Link
          //   2) JSON für Auswertungen (verkehrsstoerungJSONDP) – MIT Maps-Link
          // Beide Datenpunkte sind unabhängig schaltbar.
          // Optional kann ein Google-Maps-Link erzeugt und per Telegram gesendet werden.
          // Das Skript läuft automatisch alle 15 Minuten und kann über den Alexa-Datenpunkt manuell gestartet werden.
          
          // =========================
          // Konfiguration
          // =========================
          
          const roadId = "A45";
          
          // Bereichsdefinition
          const coordsArea = {
             minLat: 50.6181514,
             maxLat: 51.3742993,
             minLon: 7.2582769,
             maxLon: 8.3822071
          };
          
          // Schalter
          const telegramEnabled        = 1;   // 1 = Telegram senden
          const alexaEnabled           = 1;   // 1 = Alexa-Trigger aktiv
          const verkehrsstoerungDP     = 1;   // 1 = Klartext-Datenpunkt aktiv
          const verkehrsstoerungJSONDP = 1;   // 1 = JSON-Datenpunkt aktiv
          const sendMapLink            = 1;   // 1 = Google-Maps-Link mitsenden
          
          // Telegram-Konfiguration
          const telegramInstance = "telegram.0";
          const telegramChatId   = 123456789;
          
          // Datenpunkte
          const idDatenpunkt     = "0_userdata.0.AlexaRoutineVerkehr";
          const idDatenpunktJSON = "0_userdata.0.AlexaRoutineVerkehr_JSON";
          
          // Datenpunkte anlegen
          if (verkehrsstoerungDP === 1) {
             createState(idDatenpunkt, "", false, {
                 name: 'Verkehrsmeldung',
                 desc: 'Alexa Morgenroutine',
                 type: 'string',
                 role: 'value'
             });
          }
          
          if (verkehrsstoerungJSONDP === 1) {
             createState(idDatenpunktJSON, "[]", false, {
                 name: 'Verkehrsmeldung JSON',
                 desc: 'JSON für Auswertung',
                 type: 'string',
                 role: 'json'
             });
          }
          
          // API-URL
          const url = `https://verkehr.autobahn.de/o/autobahn/${roadId}/services/warning`;
          
          // =========================
          // Hilfsfunktionen
          // =========================
          
          function isInArea(lat, lon, area) {
             return (
                 lat >= area.minLat &&
                 lat <= area.maxLat &&
                 lon >= area.minLon &&
                 lon <= area.maxLon
             );
          }
          
          function warningHitsArea(warning, area) {
             if (warning.coordinate && typeof warning.coordinate.lat === "number" && typeof warning.coordinate.long === "number") {
                 if (isInArea(warning.coordinate.lat, warning.coordinate.long, area)) {
                     return true;
                 }
             }
          
             if (warning.geometry && Array.isArray(warning.geometry.coordinates)) {
                 for (const coord of warning.geometry.coordinates) {
                     if (Array.isArray(coord) && coord.length >= 2) {
                         const lon = coord[0];
                         const lat = coord[1];
                         if (isInArea(lat, lon, area)) return true;
                     }
                 }
             }
          
             return false;
          }
          
          function buildDescriptionText(descriptionField) {
             if (Array.isArray(descriptionField)) {
                 return descriptionField
                     .filter(d => d && String(d).trim() !== "")
                     .join("\n");
             }
             return String(descriptionField || "").trim();
          }
          
          // =========================
          // Hauptlogik
          // =========================
          
          async function checkTraffic() {
             try {
                 console.log("Hole Daten von:", url);
          
                 const axios = require("axios");
                 const response = await axios.get(url);
                 const data = response.data;
          
                 const warnings = data.warnings || data.warning;
          
                 if (!warnings || !Array.isArray(warnings) || warnings.length === 0) {
                     console.log(`Keine Warnungen auf ${roadId}`);
          
                     if (verkehrsstoerungDP === 1)
                         setState(idDatenpunkt, "Keine Warnungen auf " + roadId);
          
                     if (verkehrsstoerungJSONDP === 1)
                         setState(idDatenpunktJSON, "[]");
          
                     return;
                 }
          
                 const relevant = warnings.filter(w => warningHitsArea(w, coordsArea));
          
                 if (relevant.length === 0) {
                     console.log(`Keine Warnungen im definierten Bereich auf ${roadId}`);
          
                     if (verkehrsstoerungDP === 1)
                         setState(idDatenpunkt, "Keine Warnungen im Bereich auf " + roadId);
          
                     if (verkehrsstoerungJSONDP === 1)
                         setState(idDatenpunktJSON, "[]");
          
                     return;
                 }
          
                 console.log(`${relevant.length} Warnung(en) im Bereich gefunden.`);
          
                 let summaryAlexa = "";
                 let jsonArray = [];
          
                 for (const warning of relevant) {
                     const descText = buildDescriptionText(warning.description);
          
                     // Koordinaten extrahieren (volle Genauigkeit!)
                     let lat = null;
                     let lon = null;
          
                     if (warning.coordinate) {
                         lat = warning.coordinate.lat;
                         lon = warning.coordinate.long;
                     }
          
                     if (!lat && warning.point) {
                         const parts = warning.point.split(",");
                         if (parts.length === 2) {
                             lat = parts[0];
                             lon = parts[1];
                         }
                     }
          
                     // Maps-Link erzeugen
                     let mapLink = "";
                     if (sendMapLink === 1 && lat && lon) {
                         mapLink = `https://www.google.com/maps/@${lat},${lon},13.13z`;
                     }
          
                     // Nachricht für Telegram (MIT Link)
                     let msgTelegram = `⚠️ Störung auf ${roadId}:\n${warning.title}\n${descText}`;
                     if (mapLink) msgTelegram += `\n\n📍 Position:\n${mapLink}`;
          
                     // Nachricht für Alexa (OHNE Link)
                     let msgAlexa = `⚠️ Störung auf ${roadId}:\n${warning.title}\n${descText}`;
          
                     summaryAlexa += msgAlexa + "\n\n";
          
                     // JSON-Objekt
                     jsonArray.push({
                         road: roadId,
                         title: warning.title,
                         description: descText,
                         start: warning.startTimestamp || null,
                         type: warning.abnormalTrafficType || null,
                         coordinate: { lat: lat, lon: lon },
                         mapLink: mapLink || null
                     });
          
                     // Telegram senden
                     if (telegramEnabled === 1) {
                         sendTo(telegramInstance, "send", {
                             chatId: telegramChatId,
                             text: msgTelegram
                         });
                     }
                 }
          
                 if (verkehrsstoerungDP === 1)
                     setState(idDatenpunkt, summaryAlexa.trim());
          
                 if (verkehrsstoerungJSONDP === 1)
                     setState(idDatenpunktJSON, JSON.stringify(jsonArray, null, 2));
          
             } catch (err) {
                 console.error("Fehler beim Abruf:", err.message);
          
                 if (telegramEnabled === 1) {
                     sendTo(telegramInstance, "send", {
                         chatId: telegramChatId,
                         text: `❌ Fehler beim Abruf der Verkehrsdaten: ${err.message}`
                     });
                 }
          
                 if (verkehrsstoerungDP === 1)
                     setState(idDatenpunkt, "Fehler beim Abruf der Verkehrsdaten");
          
                 if (verkehrsstoerungJSONDP === 1)
                     setState(idDatenpunktJSON, "[]");
             }
          }
          
          // =========================
          // Trigger
          // =========================
          
          // alle 15 Minuten prüfen
          schedule("*/15 * * * *", checkTraffic);
          
          // Alexa-Trigger nur wenn beide Schalter aktiv sind
          if (alexaEnabled === 1 && verkehrsstoerungDP === 1) {
             on({id: idDatenpunkt, change:'any'}, function () {
                 console.log("Alexa Verkehrsroutine aufgerufen");
                 checkTraffic();
             });
          }
          
          

          Falls ich die Version mit dem Vorgelesenen Link raus nehmen soll einfach bescheid geben!

          1 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            peterfido
            schrieb am zuletzt editiert von peterfido
            #25

            Ich habe mir mal ein paar Gedanken gemacht. Das Skript an sich ist so für einen speziellen Fall nützlich.
            Für flexible Nutzung könnte man das Skript per Telegram fernsteuern.
            Z.B. man übergibt per Telegram die Startposition, die Zielposition, welche Autobahn es sein soll. Wie man an die location lat und lon kommt, weiß ich nicht. Evtl. weiß @haus-automatisierung da mehr.

            Dann sind die Autobahnen keine genau senkrechte oder waagerechte Linie, so müssten dann wohl die die Koordinaten bei z.B. der A2 nord- und südseitig vom Skript festgelegt werden, bei der A7 dann entsprechend ost- und westseitig.

            Dann sendet man per Telegram, wo man eigentlich den Standort sendet, zb. einmal Berlin und einmal Hannover. Das Skript nimmt, sobald man die Autobahn 2 sendet, die Ost- und Westkoordinate aus den Telegram-Nachrichten, Nord- und Südkoordinate aus internen Werten.

            Dann würde ich den Refresh nicht rund um die Uhr laufen lassen. Vielleicht vom Absenden der Autobahn für so- und soviel Stunden; oder bis man per Telegram ein Stopp sendet.

            Für die Morgenroutine kann man fixe Werte hinterlegen, oder, falls man eine Tour geplant hat, alles vorbereiten. Damit dürfte die Zielgruppe wachsen.

            @haus-automatisierung
            Die Location soll laut Google einfach abfragbar sein, die Datenpunkte gibt es bei mir aber nicht:
            74936409-e38c-45a6-bdf6-a2915d3283f5-image.png

            Edit: Als JSON wäre die Lokation Vorteilhafter, so braucht man nur einen Datenpunkt zu belauschen.

            Gruß

            Peterfido


            Proxmox auf Intel NUC12WSHi5
            ioBroker: Debian (VM)
            CCU: Debmatic (VM)
            Influx: Debian (VM)
            Grafana: Debian (VM)
            eBus: Debian (VM)
            Zigbee: Debian (VM) mit zigbee2mqtt

            haus-automatisierungH 1 Antwort Letzte Antwort
            0
            • H Offline
              H Offline
              Hotze
              schrieb am zuletzt editiert von Hotze
              #26

              Wenn ich Meinem Bot einen Standort sende wird das im Adapter nicht ausgewertet!
              Dafür war das Script aber auch nicht gedacht.
              Ich Starte es Morgends ab 4:30 Uhr dann mache ich es um 6:30 Uhr aus. Nachmittags ist es zwischen 14:00 und 16:00 aktiv. Damit sind meine Fahrtzeiten abgedeckt.
              für weitere Strecken als zur Arbeit nehme ich dann auch wieder das Navi (Smartphone).

              So ein Script würde ich aber dann auch anders angehen:
              Wenn man die eigene Position an IOBroker senden kann, errechnet man zwischen den letzten zehn Positionen die ungefähre richtung. Dann würde ich in einem Dreieck, in Fahrtrichtung, mit einem Grad (°) vorraus suchen lassen ob irgendwo eine Störung ist.

              Dazu müsste man dann aber alle (!) Autobahnen abfragen, damit man alle meldungen hat.
              Falls das dann gut funktioniert und sich rumspricht, wird die API ganz schnell zu gemacht weil zu viele anfragen gestellt werden!


              Über etwas ähnliches denke ich aber tatsächlich gerade nach!
              Wir haben auf weiten strecken immer mal das problem zu wissen wie weit das nächste Klo entfernt ist!

              Als trigger könnte man jede Nachricht an den Bot auswerten die mit "A" beginnt gefolgt von einer Zahl ohne leerzeichen.
              https://verkehr.autobahn.de/o/autobahn/A1/services/parking_lorry

              Gibt dann mal eben 143 Parkplätze und unter "lorryParkingFeatureIcons" steht dann ob Toiletten vorhanden sind!
              Das ist aber ein anderes Projekt das ich erst ernsthafter angehe wenn ich öfter als drei mal pro Jahr brauche ;-)

              H 1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                peterfido
                schrieb am zuletzt editiert von
                #27

                Neue Erkenntnisse meinerseits: Wenn man die Rohdaten der Telegram-Anfrage ablegen lässt (Kann man in der Instanz aktivieren), ist da die location drin. Nachteilig ist, dass der Trigger bei allen Nachrichten feuert.

                Gruß

                Peterfido


                Proxmox auf Intel NUC12WSHi5
                ioBroker: Debian (VM)
                CCU: Debmatic (VM)
                Influx: Debian (VM)
                Grafana: Debian (VM)
                eBus: Debian (VM)
                Zigbee: Debian (VM) mit zigbee2mqtt

                1 Antwort Letzte Antwort
                0
                • P peterfido

                  Ich habe mir mal ein paar Gedanken gemacht. Das Skript an sich ist so für einen speziellen Fall nützlich.
                  Für flexible Nutzung könnte man das Skript per Telegram fernsteuern.
                  Z.B. man übergibt per Telegram die Startposition, die Zielposition, welche Autobahn es sein soll. Wie man an die location lat und lon kommt, weiß ich nicht. Evtl. weiß @haus-automatisierung da mehr.

                  Dann sind die Autobahnen keine genau senkrechte oder waagerechte Linie, so müssten dann wohl die die Koordinaten bei z.B. der A2 nord- und südseitig vom Skript festgelegt werden, bei der A7 dann entsprechend ost- und westseitig.

                  Dann sendet man per Telegram, wo man eigentlich den Standort sendet, zb. einmal Berlin und einmal Hannover. Das Skript nimmt, sobald man die Autobahn 2 sendet, die Ost- und Westkoordinate aus den Telegram-Nachrichten, Nord- und Südkoordinate aus internen Werten.

                  Dann würde ich den Refresh nicht rund um die Uhr laufen lassen. Vielleicht vom Absenden der Autobahn für so- und soviel Stunden; oder bis man per Telegram ein Stopp sendet.

                  Für die Morgenroutine kann man fixe Werte hinterlegen, oder, falls man eine Tour geplant hat, alles vorbereiten. Damit dürfte die Zielgruppe wachsen.

                  @haus-automatisierung
                  Die Location soll laut Google einfach abfragbar sein, die Datenpunkte gibt es bei mir aber nicht:
                  74936409-e38c-45a6-bdf6-a2915d3283f5-image.png

                  Edit: Als JSON wäre die Lokation Vorteilhafter, so braucht man nur einen Datenpunkt zu belauschen.

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

                  @peterfido sagte in #Stauerkennung #DieAutobahn:

                  Die Location soll laut Google einfach abfragbar sein, die Datenpunkte gibt es bei mir aber nicht:

                  Da hat Google Gemini wohl ordentlich halluziniert. @peterfido hat ja schon die Antwort geliefert.

                  🧑‍🎓 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
                  • H Hotze

                    Wenn ich Meinem Bot einen Standort sende wird das im Adapter nicht ausgewertet!
                    Dafür war das Script aber auch nicht gedacht.
                    Ich Starte es Morgends ab 4:30 Uhr dann mache ich es um 6:30 Uhr aus. Nachmittags ist es zwischen 14:00 und 16:00 aktiv. Damit sind meine Fahrtzeiten abgedeckt.
                    für weitere Strecken als zur Arbeit nehme ich dann auch wieder das Navi (Smartphone).

                    So ein Script würde ich aber dann auch anders angehen:
                    Wenn man die eigene Position an IOBroker senden kann, errechnet man zwischen den letzten zehn Positionen die ungefähre richtung. Dann würde ich in einem Dreieck, in Fahrtrichtung, mit einem Grad (°) vorraus suchen lassen ob irgendwo eine Störung ist.

                    Dazu müsste man dann aber alle (!) Autobahnen abfragen, damit man alle meldungen hat.
                    Falls das dann gut funktioniert und sich rumspricht, wird die API ganz schnell zu gemacht weil zu viele anfragen gestellt werden!


                    Über etwas ähnliches denke ich aber tatsächlich gerade nach!
                    Wir haben auf weiten strecken immer mal das problem zu wissen wie weit das nächste Klo entfernt ist!

                    Als trigger könnte man jede Nachricht an den Bot auswerten die mit "A" beginnt gefolgt von einer Zahl ohne leerzeichen.
                    https://verkehr.autobahn.de/o/autobahn/A1/services/parking_lorry

                    Gibt dann mal eben 143 Parkplätze und unter "lorryParkingFeatureIcons" steht dann ob Toiletten vorhanden sind!
                    Das ist aber ein anderes Projekt das ich erst ernsthafter angehe wenn ich öfter als drei mal pro Jahr brauche ;-)

                    H Offline
                    H Offline
                    hans_999
                    schrieb am zuletzt editiert von
                    #29

                    @Hotze sagte in #Stauerkennung #DieAutobahn:

                    Wir haben auf weiten strecken immer mal das problem zu wissen wie weit das nächste Klo entfernt ist!

                    Als trigger könnte man jede Nachricht an den Bot auswerten die mit "A" beginnt gefolgt von einer Zahl ohne leerzeichen.
                    https://verkehr.autobahn.de/o/autobahn/A1/services/parking_lorry

                    Gibt dann mal eben 143 Parkplätze und unter "lorryParkingFeatureIcons" steht dann ob Toiletten vorhanden sind!

                    Aufgrund dieses Hinweises habe ich mir die API einmal genauer angesehen.

                    Man kann sogar nach Ladestationen suchen.
                    Allerdings sind da die Daten nicht besonders gut.
                    Entlang der A6 wird eine Ladestation beim AK Weinsberg gefunden, die sich in der Nähe eines Rastplatzes befindet

                      {
                          "identifier": "RUxFQ1RSSUNfQ0hBUkdJTkdfU1RBVElPTl9fOTk3",
                          "icon": "charging_plug",
                          "isBlocked": "false",
                          "future": false,
                          "extent": "9.261854,49.168127,9.261854,49.168127",
                          "point": "9.261854,49.168127",
                          "display_type": "ELECTRIC_CHARGING_STATION",
                          "subtitle": "Normalladeeinrichtung",
                          "title": "A6 | AK Weinsberg | Käppelesäcker 10",
                          "coordinate": {
                            "lat": "49.168127",
                            "long": "9.261854"
                          },
                          "description": [
                            "A6 | AK Weinsberg | Käppelesäcker 10",
                            "74235 Erlenbach",
                            "",
                            "Ladepunkt 1:",
                            "AC Steckdose Typ 2",
                            "22 kW",
                            "",
                            "Ladepunkt 2:",
                            "AC Steckdose Typ 2",
                            "22 kW"
                          ],
                          "routeRecommendation": [],
                          "footer": [],
                          "lorryParkingFeatureIcons": []
                        }
                    

                    Leider ist Nähe hier nicht hilfreich, denn die Ladestation(en) befinden sich auf einem benachbarten Firmengelände und man kommt natürlich nicht vom Rastplatz dorthin :-(
                    https://www.openstreetmap.org/search?query=Käppelesäcker+10%2C++74235+Erlenbach&zoom=13&minlon=9.128093719482424&minlat=49.13455334608644&maxlon=9.457683563232424&maxlat=49.19494222793185#map=18/49.168479/9.259726

                    Also zumindest bei diesen Daten wäre ich sehr vorsichtig, was die Qualität und Nutzbarkeit anbelangt.

                    1 Antwort Letzte Antwort
                    0
                    • H Offline
                      H Offline
                      Hotze
                      schrieb am zuletzt editiert von
                      #30

                      Ja, wie gesagt, das würde ich ganz anders an gehen. Da müsste man sich die Datenlagen ganz genau ansehen.
                      Bei mir würde es ja auch "nur" um Toiletten gehen. Und die stehen sehr zuverlässig in der liste der Rastplätze!
                      Wenn ich mit einem Elektroauto eine weitere Strecke fahren müsste, würe ich mich eher auf entsprechende Apps verlassen!

                      Das script soll ja kein Navi ersetzen!

                      1 Antwort Letzte Antwort
                      0
                      • R Offline
                        R Offline
                        Rushmed
                        Most Active
                        schrieb am zuletzt editiert von
                        #31

                        Wo finde ich jetzt hier ein Testferiges Script das auf dem neusten Stand ist?

                        H 1 Antwort Letzte Antwort
                        0
                        • R Rushmed

                          Wo finde ich jetzt hier ein Testferiges Script das auf dem neusten Stand ist?

                          H Offline
                          H Offline
                          Hotze
                          schrieb am zuletzt editiert von
                          #32

                          @Rushmed
                          In meinen Beiträgen im "Spoiler-Button"!

                          • Post #1: Das Läuft bei mir fehlerfrei

                          • Post #8: Von mir nicht gestestet! Mit Schaltern zum Konfigurieren.

                          • Post #22: Von mir nicht gestestet! Mit Schaltern zum Konfigurieren und Datenpunkten.

                          • Post #24: Von mir nicht gestestet! Mit Schaltern zum Konfigurieren, Datenpunkten und einer Extranachricht mit einem Link zu GoogleMaps

                          Ihr könnt ja gerne mal schreiben ob die dinge für Alexa und die Datenpunkte fehlerfrei laufen.
                          Dann kann ich die als getestet abhaken!

                          Ihr könnt aber gerne selber daran herumoptimieren und hier posten!
                          Baut eure Änderungen gerne in den Code ein und postet den KOMPLETT! Nur dann kann jemand der kaum Ahnung hat etwas mit den änderungen anfangen!

                          1 Antwort Letzte Antwort
                          0
                          • R Offline
                            R Offline
                            Rushmed
                            Most Active
                            schrieb am zuletzt editiert von
                            #33

                            @hotze Bei den Scripten aus #22 und #24 gibt es bei mir rote Stellen Javascriptfenster.

                            ce27ad54-9f2d-46d5-beb3-0912338d8686-grafik.png

                            und

                            3207d5c1-4513-4837-8646-489a107cf000-grafik.png

                            Log vom ersten Start:

                            
                            javascript.0
                            2025-12-22 17:33:32.304	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.625	info	script.js.aaa_Staumelder_251219_0916: Stopping script
                            
                            javascript.0
                            2025-12-22 17:33:31.564	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.564	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.551	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.513	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.513	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.500	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.459	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.459	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.449	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.413	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.412	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.358	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.318	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.318	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.268	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.231	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.231	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.224	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.182	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.182	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.174	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.139	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.139	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.126	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.089	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.088	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.071	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:31.035	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:31.035	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:31.008	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.968	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.968	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.961	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.921	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.921	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.910	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.866	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.865	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.858	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.823	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.823	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.817	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.777	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.777	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.770	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.731	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.731	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.722	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.688	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.687	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.662	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.627	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.627	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.621	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.585	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.585	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.579	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.542	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.541	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.534	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.495	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.494	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.488	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.452	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.451	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.445	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.411	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.410	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.404	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.364	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.364	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.357	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.321	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.320	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.311	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.271	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.270	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.264	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.224	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.223	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.218	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.178	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.178	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.165	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.123	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.123	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.090	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:30.043	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:30.043	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:30.029	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.992	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.992	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.979	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.942	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.941	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.928	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.887	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.886	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.874	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.835	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.835	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.824	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.785	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.785	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.775	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.736	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.735	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.727	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.691	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.691	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.679	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.642	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.642	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.636	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.596	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.596	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.590	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.550	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.550	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.539	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.500	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.500	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.489	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.450	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.450	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.438	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.397	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.397	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.388	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.352	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.352	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.333	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.293	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.293	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.254	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.214	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.214	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.176	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.136	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.135	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.125	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.086	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.085	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.078	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:29.040	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:29.040	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:29.026	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:28.989	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:28.989	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:28.981	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:28.941	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            
                            javascript.0
                            2025-12-22 17:33:28.940	info	script.js.aaa_Staumelder_251219_0916: Alexa Verkehrsroutine aufgerufen
                            
                            javascript.0
                            2025-12-22 17:33:28.929	info	script.js.aaa_Staumelder_251219_0916: Keine Warnungen im definierten Bereich auf A45
                            
                            javascript.0
                            2025-12-22 17:33:28.894	info	script.js.aaa_Staumelder_251219_0916: Hole Daten von:
                            

                            Die Datenpunkte werden erstellt. Meldungen hab ich bisher keine.

                            1 Antwort Letzte Antwort
                            0
                            • H Offline
                              H Offline
                              Hotze
                              schrieb am zuletzt editiert von Hotze
                              #34

                              Die roten Stellen bedeuten nur das der editor die Funktion nicht kennt. Ich habe das auch, da es funktioniert mache ich mir keine sorgen darüber.

                              Ok! Alexa hat einen Datenpunklt geändert und dann immer wieder abgefragt!
                              Das war also Käse!

                              Versuche bitte den nochmal:

                              // Dieses Skript überwacht Verkehrswarnungen auf der A45 über die Autobahn-API.
                              // Es filtert Meldungen nach einem definierten Koordinatenbereich (z. B. Aßlar bis Lüdenscheid).
                              // Gefundene Warnungen können per Telegram gesendet werden (telegramEnabled).
                              // Zusätzlich können zwei Datenpunkte angelegt werden:
                              //   1) Klartext für Alexa (verkehrsstoerungDP) – OHNE Maps-Link
                              //   2) JSON für Auswertungen (verkehrsstoerungJSONDP) – MIT Maps-Link
                              // Beide Datenpunkte sind unabhängig schaltbar.
                              // Optional kann ein Google-Maps-Link erzeugt und per Telegram gesendet werden.
                              // Das Skript läuft automatisch alle 15 Minuten und kann über den Alexa-Datenpunkt manuell gestartet werden.
                              
                              // =========================
                              // Konfiguration
                              // =========================
                              
                              const roadId = "A45";
                              
                              // Bereichsdefinition
                              const coordsArea = {
                                minLat: 50.6181514,
                                maxLat: 51.3742993,
                                minLon: 7.2582769,
                                maxLon: 8.3822071
                              };
                              
                              // Schalter
                              const telegramEnabled        = 1;   // 1 = Telegram senden
                              const alexaEnabled           = 1;   // 1 = Alexa-Trigger aktiv
                              const verkehrsstoerungDP     = 1;   // 1 = Klartext-Datenpunkt aktiv
                              const verkehrsstoerungJSONDP = 1;   // 1 = JSON-Datenpunkt aktiv
                              const sendMapLink            = 1;   // 1 = Google-Maps-Link mitsenden
                              
                              // Telegram-Konfiguration
                              const telegramInstance = "telegram.0";
                              const telegramChatId   = 123456789;
                              
                              // Datenpunkte
                              const idDatenpunkt     = "0_userdata.0.AlexaRoutineVerkehr";
                              const idDatenpunktJSON = "0_userdata.0.AlexaRoutineVerkehr_JSON";
                              
                              // Datenpunkte anlegen
                              if (verkehrsstoerungDP === 1) {
                                createState(idDatenpunkt, "", false, {
                                    name: 'Verkehrsmeldung',
                                    desc: 'Alexa Morgenroutine',
                                    type: 'string',
                                    role: 'value'
                                });
                              }
                              
                              if (verkehrsstoerungJSONDP === 1) {
                                createState(idDatenpunktJSON, "[]", false, {
                                    name: 'Verkehrsmeldung JSON',
                                    desc: 'JSON für Auswertung',
                                    type: 'string',
                                    role: 'json'
                                });
                              }
                              
                              // API-URL
                              const url = `https://verkehr.autobahn.de/o/autobahn/${roadId}/services/warning`;
                              
                              // =========================
                              // Hilfsfunktionen
                              // =========================
                              
                              function isInArea(lat, lon, area) {
                                return (
                                    lat >= area.minLat &&
                                    lat <= area.maxLat &&
                                    lon >= area.minLon &&
                                    lon <= area.maxLon
                                );
                              }
                              
                              function warningHitsArea(warning, area) {
                                if (warning.coordinate && typeof warning.coordinate.lat === "number" && typeof warning.coordinate.long === "number") {
                                    if (isInArea(warning.coordinate.lat, warning.coordinate.long, area)) {
                                        return true;
                                    }
                                }
                              
                                if (warning.geometry && Array.isArray(warning.geometry.coordinates)) {
                                    for (const coord of warning.geometry.coordinates) {
                                        if (Array.isArray(coord) && coord.length >= 2) {
                                            const lon = coord[0];
                                            const lat = coord[1];
                                            if (isInArea(lat, lon, area)) return true;
                                        }
                                    }
                                }
                              
                                return false;
                              }
                              
                              function buildDescriptionText(descriptionField) {
                                if (Array.isArray(descriptionField)) {
                                    return descriptionField
                                        .filter(d => d && String(d).trim() !== "")
                                        .join("\n");
                                }
                                return String(descriptionField || "").trim();
                              }
                              
                              // =========================
                              // Hauptlogik
                              // =========================
                              
                              async function checkTraffic() {
                                try {
                                    console.log("Hole Daten von:", url);
                              
                                    const axios = require("axios");
                                    const response = await axios.get(url);
                                    const data = response.data;
                              
                                    const warnings = data.warnings || data.warning;
                              
                                    if (!warnings || !Array.isArray(warnings) || warnings.length === 0) {
                                        console.log(`Keine Warnungen auf ${roadId}`);
                              
                                        if (verkehrsstoerungDP === 1)
                                            setState(idDatenpunkt, "Keine Warnungen auf " + roadId);
                              
                                        if (verkehrsstoerungJSONDP === 1)
                                            setState(idDatenpunktJSON, "[]");
                              
                                        return;
                                    }
                              
                                    const relevant = warnings.filter(w => warningHitsArea(w, coordsArea));
                              
                                    if (relevant.length === 0) {
                                        console.log(`Keine Warnungen im definierten Bereich auf ${roadId}`);
                              
                                        if (verkehrsstoerungDP === 1)
                                            setState(idDatenpunkt, "Keine Warnungen im Bereich auf " + roadId);
                              
                                        if (verkehrsstoerungJSONDP === 1)
                                            setState(idDatenpunktJSON, "[]");
                              
                                        return;
                                    }
                              
                                    console.log(`${relevant.length} Warnung(en) im Bereich gefunden.`);
                              
                                    let summaryAlexa = "";
                                    let jsonArray = [];
                              
                                    for (const warning of relevant) {
                                        const descText = buildDescriptionText(warning.description);
                              
                                        // Koordinaten extrahieren (volle Genauigkeit!)
                                        let lat = null;
                                        let lon = null;
                              
                                        if (warning.coordinate) {
                                            lat = warning.coordinate.lat;
                                            lon = warning.coordinate.long;
                                        }
                              
                                        if (!lat && warning.point) {
                                            const parts = warning.point.split(",");
                                            if (parts.length === 2) {
                                                lat = parts[0];
                                                lon = parts[1];
                                            }
                                        }
                              
                                        // Maps-Link erzeugen
                                        let mapLink = "";
                                        if (sendMapLink === 1 && lat && lon) {
                                            mapLink = `https://www.google.com/maps/@${lat},${lon},13.13z`;
                                        }
                              
                                        // Nachricht für Telegram (MIT Link)
                                        let msgTelegram = `⚠️ Störung auf ${roadId}:\n${warning.title}\n${descText}`;
                                        if (mapLink) msgTelegram += `\n\n📍 Position:\n${mapLink}`;
                              
                                        // Nachricht für Alexa (OHNE Link)
                                        let msgAlexa = `⚠️ Störung auf ${roadId}:\n${warning.title}\n${descText}`;
                              
                                        summaryAlexa += msgAlexa + "\n\n";
                              
                                        // JSON-Objekt
                                        jsonArray.push({
                                            road: roadId,
                                            title: warning.title,
                                            description: descText,
                                            start: warning.startTimestamp || null,
                                            type: warning.abnormalTrafficType || null,
                                            coordinate: { lat: lat, lon: lon },
                                            mapLink: mapLink || null
                                        });
                              
                                        // Telegram senden
                                        if (telegramEnabled === 1) {
                                            sendTo(telegramInstance, "send", {
                                                chatId: telegramChatId,
                                                text: msgTelegram
                                            });
                                        }
                                    }
                              
                                    if (verkehrsstoerungDP === 1)
                                        setState(idDatenpunkt, summaryAlexa.trim());
                              
                                    if (verkehrsstoerungJSONDP === 1)
                                        setState(idDatenpunktJSON, JSON.stringify(jsonArray, null, 2));
                              
                                } catch (err) {
                                    console.error("Fehler beim Abruf:", err.message);
                              
                                    if (telegramEnabled === 1) {
                                        sendTo(telegramInstance, "send", {
                                            chatId: telegramChatId,
                                            text: `❌ Fehler beim Abruf der Verkehrsdaten: ${err.message}`
                                        });
                                    }
                              
                                    if (verkehrsstoerungDP === 1)
                                        setState(idDatenpunkt, "Fehler beim Abruf der Verkehrsdaten");
                              
                                    if (verkehrsstoerungJSONDP === 1)
                                        setState(idDatenpunktJSON, "[]");
                                }
                              }
                              
                              // =========================
                              // Trigger
                              // =========================
                              
                              // alle 15 Minuten prüfen
                              schedule("*/15 * * * *", checkTraffic);
                              
                              // Alexa soll NICHT checkTraffic() auslösen.
                              // Sie soll nur den Datenpunkt lesen können.
                              // Daher: Trigger nur für externe (ack:false) Änderungen,
                              // aber OHNE checkTraffic() aufzurufen.
                              
                              if (alexaEnabled === 1 && verkehrsstoerungDP === 1) {
                                 on({ id: idDatenpunkt, change: 'ne', ack: false }, () => {
                                     console.log("Alexa Verkehrsroutine wurde von außen aufgerufen – keine API-Abfrage.");
                                     // KEIN checkTraffic() hier!
                                 });
                              }
                              
                              
                              

                              Ansonsten lassen wir die alexa rraus und machen "nur" die Datenpunkte. Einmal als plainText und einmal als JSON.
                              Dann kann sich jeder selber seine Alexaroutine basteln.

                              1 Antwort Letzte Antwort
                              0
                              • H Offline
                                H Offline
                                Hotze
                                schrieb am zuletzt editiert von Hotze
                                #35

                                Ich habe den Chronjob und Alexa raus genommen!
                                Bitte schaut euch die Äderung an und passt zumindest den Teil mit dem Chronjob an!
                                Das script startet nun nicht zur vollen Viertelstunde sondern einmal beim start und dann alle 15 Minuten.

                                Ich hoffe damit die Abfragen auf die API https://verkehr.autobahn.de zeitmäßig zu verteilen!

                                Getestet, funktioniert:

                                /*
                                Beschreibung
                                Dieses Skript überwacht Verkehrswarnungen über die Autobahn‑API für die in der Variable `roadId` konfigurierte Autobahn.
                                Es filtert Meldungen nach dem definierten Koordinatenbereich (coordsArea).
                                
                                Wichtig: Vor dem ersten Start unbedingt die Variable `roadId` auf die gewünschte Autobahn setzen (z. B. "A45", "A3" etc.).
                                
                                Ausgaben (einzeln schaltbar):
                                - telegramBasicEnabled    : Telegram‑Nachricht ohne Link
                                - telegramWithLinkEnabled : Telegram‑Nachricht mit Google‑Maps‑Link
                                - dpAlexaEnabled          : Klartext‑Datenpunkt (z. B. idAlexa) für Alexa, OHNE Maps‑Link
                                - dpJsonEnabled           : JSON‑Datenpunkt (z. B. idJSON) für Auswertungen, MIT Maps‑Link
                                
                                Verhalten:
                                - Datenpunkte werden nur angelegt, wenn der jeweilige Schalter aktiviert ist.
                                - Beim Start führt das Skript einmal checkTraffic() aus und wiederholt dann alle 15 Minuten (relativ zur Startzeit).
                                - Maps‑Link wird nur erzeugt, wenn Koordinaten vorhanden sind.
                                
                                Hinweise:
                                - Stelle diese Variablen korrekt ein:
                                   - roadId
                                   - coordsArea
                                   - telegramInstance (normalerweise ist es telegram.0)
                                   - telegramChatId
                                   - idAlexa 
                                   - idJSON
                                
                                - Passe die Schalter an
                                */
                                
                                // =========================
                                // Konfiguration
                                // =========================
                                const roadId = "A45";
                                const coordsArea = {
                                   minLat: 50.6181514,
                                   maxLat: 52.2742993,
                                   minLon: 7.2582769,
                                   maxLon: 8.3822071
                                };
                                
                                // Schalter (0 = aus, 1 = an)
                                const telegramBasicEnabled    = 1; // Telegram: Nachricht ohne Link
                                const telegramWithLinkEnabled = 1; // Telegram: Nachricht mit Maps-Link
                                const dpAlexaEnabled          = 1; // Klartext-Datenpunkt (Alexa) ohne Link
                                const dpJsonEnabled           = 1; // JSON-Datenpunkt (mit Link)
                                
                                // Telegram-Konfiguration
                                const telegramInstance = "telegram.0";
                                const telegramChatId   = 123456789;
                                
                                // Datenpunkte (nur anlegen, wenn aktiviert)
                                const idAlexa = "0_userdata.0.Verkehr_Alexa";
                                const idJSON  = "0_userdata.0.Verkehr_JSON";
                                
                                if (dpAlexaEnabled === 1) {
                                   createState(idAlexa, "", false, {
                                       name: "Verkehrsmeldung Klartext",
                                       type: "string",
                                       role: "value"
                                   });
                                }
                                if (dpJsonEnabled === 1) {
                                   createState(idJSON, "[]", false, {
                                       name: "Verkehrsmeldung JSON",
                                       type: "string",
                                       role: "json"
                                   });
                                }
                                
                                // API-URL
                                const url = `https://verkehr.autobahn.de/o/autobahn/${roadId}/services/warning`;
                                
                                // =========================
                                // Hilfsfunktionen
                                // =========================
                                function isInArea(lat, lon, area) {
                                   return lat >= area.minLat && lat <= area.maxLat && lon >= area.minLon && lon <= area.maxLon;
                                }
                                
                                function warningHitsArea(w, area) {
                                   if (w.coordinate && typeof w.coordinate.lat === "number" && typeof w.coordinate.long === "number") {
                                       if (isInArea(w.coordinate.lat, w.coordinate.long, area)) return true;
                                   }
                                   if (w.geometry && Array.isArray(w.geometry.coordinates)) {
                                       for (const c of w.geometry.coordinates) {
                                           if (Array.isArray(c) && c.length >= 2) {
                                               const lon = c[0], lat = c[1];
                                               if (isInArea(lat, lon, area)) return true;
                                           }
                                       }
                                   }
                                   return false;
                                }
                                
                                function buildDescriptionText(desc) {
                                   if (Array.isArray(desc)) return desc.filter(d => d && String(d).trim() !== "").join("\n");
                                   return String(desc || "").trim();
                                }
                                
                                // =========================
                                // Hauptlogik
                                // =========================
                                async function checkTraffic() {
                                   try {
                                       console.log("Hole Daten von:", url);
                                       const axios = require("axios");
                                       const res = await axios.get(url);
                                       const data = res.data;
                                       const warnings = data.warnings || data.warning;
                                
                                       if (!warnings || !Array.isArray(warnings) || warnings.length === 0) {
                                           console.log("Keine Warnungen gefunden.");
                                           if (dpAlexaEnabled === 1) setState(idAlexa, "Keine Warnungen auf " + roadId);
                                           if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                           return;
                                       }
                                
                                       const relevant = warnings.filter(w => warningHitsArea(w, coordsArea));
                                       if (!relevant || relevant.length === 0) {
                                           console.log("Keine Warnungen im Bereich.");
                                           if (dpAlexaEnabled === 1) setState(idAlexa, "Keine Warnungen im Bereich auf " + roadId);
                                           if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                           return;
                                       }
                                
                                       let alexaText = "";
                                       const jsonOut = [];
                                
                                       for (const w of relevant) {
                                           const desc = buildDescriptionText(w.description);
                                           // Koordinaten extrahieren (verschiedene Felder)
                                           let lat = null, lon = null;
                                           if (w.coordinate) { lat = w.coordinate.lat; lon = w.coordinate.long; }
                                           if ((!lat || !lon) && w.point) {
                                               const p = String(w.point).split(",");
                                               if (p.length === 2) { lat = p[0]; lon = p[1]; }
                                           }
                                
                                           const mapLink = (lat && lon) ? `https://www.google.com/maps/@${lat},${lon},13.13z` : "";
                                
                                           // Telegram: Basic (ohne Link)
                                           if (telegramBasicEnabled === 1) {
                                               const msg = `⚠️ Störung auf ${roadId}:\n${w.title}\n${desc}`;
                                               sendTo(telegramInstance, "send", { chatId: telegramChatId, text: msg });
                                           }
                                
                                           // Telegram: With Link
                                           if (telegramWithLinkEnabled === 1 && mapLink) {
                                               const msg = `⚠️ Störung auf ${roadId}:\n${w.title}\n${desc}\n\n📍 ${mapLink}`;
                                               sendTo(telegramInstance, "send", { chatId: telegramChatId, text: msg });
                                           }
                                
                                           // Alexa-Klartext (ohne Link)
                                           if (dpAlexaEnabled === 1) {
                                               alexaText += `Störung auf ${roadId}: ${w.title}. ${desc}\n\n`;
                                           }
                                
                                           // JSON-Ausgabe (mit Link wenn vorhanden)
                                           if (dpJsonEnabled === 1) {
                                               jsonOut.push({
                                                   road: roadId,
                                                   title: w.title,
                                                   description: desc,
                                                   start: w.startTimestamp || null,
                                                   coordinate: lat && lon ? { lat: lat, lon: lon } : null,
                                                   mapLink: mapLink || null
                                               });
                                           }
                                       }
                                
                                       if (dpAlexaEnabled === 1) setState(idAlexa, alexaText.trim());
                                       if (dpJsonEnabled === 1) setState(idJSON, JSON.stringify(jsonOut, null, 2));
                                
                                   } catch (err) {
                                       console.error("Fehler beim Abruf:", err && err.message ? err.message : err);
                                       if (telegramBasicEnabled === 1 || telegramWithLinkEnabled === 1) {
                                           sendTo(telegramInstance, "send", {
                                               chatId: telegramChatId,
                                               text: `❌ Fehler beim Abruf der Verkehrsdaten: ${err && err.message ? err.message : err}`
                                           });
                                       }
                                       if (dpAlexaEnabled === 1) setState(idAlexa, "Fehler beim Abruf der Verkehrsdaten");
                                       if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                   }
                                }
                                
                                // =========================
                                // Start sofort und Intervall alle 15 Minuten (relativ zur Startzeit)
                                // =========================
                                
                                // sofort einmal ausführen
                                checkTraffic();
                                
                                // danach alle 15 Minuten relativ zur Startzeit wiederholen
                                const intervalMs = 15 * 60 * 1000;
                                setInterval(checkTraffic, intervalMs);
                                
                                

                                Edit: Beschreibung in das Script geschrieben.

                                R 1 Antwort Letzte Antwort
                                0
                                • H Hotze

                                  Ich habe den Chronjob und Alexa raus genommen!
                                  Bitte schaut euch die Äderung an und passt zumindest den Teil mit dem Chronjob an!
                                  Das script startet nun nicht zur vollen Viertelstunde sondern einmal beim start und dann alle 15 Minuten.

                                  Ich hoffe damit die Abfragen auf die API https://verkehr.autobahn.de zeitmäßig zu verteilen!

                                  Getestet, funktioniert:

                                  /*
                                  Beschreibung
                                  Dieses Skript überwacht Verkehrswarnungen über die Autobahn‑API für die in der Variable `roadId` konfigurierte Autobahn.
                                  Es filtert Meldungen nach dem definierten Koordinatenbereich (coordsArea).
                                  
                                  Wichtig: Vor dem ersten Start unbedingt die Variable `roadId` auf die gewünschte Autobahn setzen (z. B. "A45", "A3" etc.).
                                  
                                  Ausgaben (einzeln schaltbar):
                                  - telegramBasicEnabled    : Telegram‑Nachricht ohne Link
                                  - telegramWithLinkEnabled : Telegram‑Nachricht mit Google‑Maps‑Link
                                  - dpAlexaEnabled          : Klartext‑Datenpunkt (z. B. idAlexa) für Alexa, OHNE Maps‑Link
                                  - dpJsonEnabled           : JSON‑Datenpunkt (z. B. idJSON) für Auswertungen, MIT Maps‑Link
                                  
                                  Verhalten:
                                  - Datenpunkte werden nur angelegt, wenn der jeweilige Schalter aktiviert ist.
                                  - Beim Start führt das Skript einmal checkTraffic() aus und wiederholt dann alle 15 Minuten (relativ zur Startzeit).
                                  - Maps‑Link wird nur erzeugt, wenn Koordinaten vorhanden sind.
                                  
                                  Hinweise:
                                  - Stelle diese Variablen korrekt ein:
                                     - roadId
                                     - coordsArea
                                     - telegramInstance (normalerweise ist es telegram.0)
                                     - telegramChatId
                                     - idAlexa 
                                     - idJSON
                                  
                                  - Passe die Schalter an
                                  */
                                  
                                  // =========================
                                  // Konfiguration
                                  // =========================
                                  const roadId = "A45";
                                  const coordsArea = {
                                     minLat: 50.6181514,
                                     maxLat: 52.2742993,
                                     minLon: 7.2582769,
                                     maxLon: 8.3822071
                                  };
                                  
                                  // Schalter (0 = aus, 1 = an)
                                  const telegramBasicEnabled    = 1; // Telegram: Nachricht ohne Link
                                  const telegramWithLinkEnabled = 1; // Telegram: Nachricht mit Maps-Link
                                  const dpAlexaEnabled          = 1; // Klartext-Datenpunkt (Alexa) ohne Link
                                  const dpJsonEnabled           = 1; // JSON-Datenpunkt (mit Link)
                                  
                                  // Telegram-Konfiguration
                                  const telegramInstance = "telegram.0";
                                  const telegramChatId   = 123456789;
                                  
                                  // Datenpunkte (nur anlegen, wenn aktiviert)
                                  const idAlexa = "0_userdata.0.Verkehr_Alexa";
                                  const idJSON  = "0_userdata.0.Verkehr_JSON";
                                  
                                  if (dpAlexaEnabled === 1) {
                                     createState(idAlexa, "", false, {
                                         name: "Verkehrsmeldung Klartext",
                                         type: "string",
                                         role: "value"
                                     });
                                  }
                                  if (dpJsonEnabled === 1) {
                                     createState(idJSON, "[]", false, {
                                         name: "Verkehrsmeldung JSON",
                                         type: "string",
                                         role: "json"
                                     });
                                  }
                                  
                                  // API-URL
                                  const url = `https://verkehr.autobahn.de/o/autobahn/${roadId}/services/warning`;
                                  
                                  // =========================
                                  // Hilfsfunktionen
                                  // =========================
                                  function isInArea(lat, lon, area) {
                                     return lat >= area.minLat && lat <= area.maxLat && lon >= area.minLon && lon <= area.maxLon;
                                  }
                                  
                                  function warningHitsArea(w, area) {
                                     if (w.coordinate && typeof w.coordinate.lat === "number" && typeof w.coordinate.long === "number") {
                                         if (isInArea(w.coordinate.lat, w.coordinate.long, area)) return true;
                                     }
                                     if (w.geometry && Array.isArray(w.geometry.coordinates)) {
                                         for (const c of w.geometry.coordinates) {
                                             if (Array.isArray(c) && c.length >= 2) {
                                                 const lon = c[0], lat = c[1];
                                                 if (isInArea(lat, lon, area)) return true;
                                             }
                                         }
                                     }
                                     return false;
                                  }
                                  
                                  function buildDescriptionText(desc) {
                                     if (Array.isArray(desc)) return desc.filter(d => d && String(d).trim() !== "").join("\n");
                                     return String(desc || "").trim();
                                  }
                                  
                                  // =========================
                                  // Hauptlogik
                                  // =========================
                                  async function checkTraffic() {
                                     try {
                                         console.log("Hole Daten von:", url);
                                         const axios = require("axios");
                                         const res = await axios.get(url);
                                         const data = res.data;
                                         const warnings = data.warnings || data.warning;
                                  
                                         if (!warnings || !Array.isArray(warnings) || warnings.length === 0) {
                                             console.log("Keine Warnungen gefunden.");
                                             if (dpAlexaEnabled === 1) setState(idAlexa, "Keine Warnungen auf " + roadId);
                                             if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                             return;
                                         }
                                  
                                         const relevant = warnings.filter(w => warningHitsArea(w, coordsArea));
                                         if (!relevant || relevant.length === 0) {
                                             console.log("Keine Warnungen im Bereich.");
                                             if (dpAlexaEnabled === 1) setState(idAlexa, "Keine Warnungen im Bereich auf " + roadId);
                                             if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                             return;
                                         }
                                  
                                         let alexaText = "";
                                         const jsonOut = [];
                                  
                                         for (const w of relevant) {
                                             const desc = buildDescriptionText(w.description);
                                             // Koordinaten extrahieren (verschiedene Felder)
                                             let lat = null, lon = null;
                                             if (w.coordinate) { lat = w.coordinate.lat; lon = w.coordinate.long; }
                                             if ((!lat || !lon) && w.point) {
                                                 const p = String(w.point).split(",");
                                                 if (p.length === 2) { lat = p[0]; lon = p[1]; }
                                             }
                                  
                                             const mapLink = (lat && lon) ? `https://www.google.com/maps/@${lat},${lon},13.13z` : "";
                                  
                                             // Telegram: Basic (ohne Link)
                                             if (telegramBasicEnabled === 1) {
                                                 const msg = `⚠️ Störung auf ${roadId}:\n${w.title}\n${desc}`;
                                                 sendTo(telegramInstance, "send", { chatId: telegramChatId, text: msg });
                                             }
                                  
                                             // Telegram: With Link
                                             if (telegramWithLinkEnabled === 1 && mapLink) {
                                                 const msg = `⚠️ Störung auf ${roadId}:\n${w.title}\n${desc}\n\n📍 ${mapLink}`;
                                                 sendTo(telegramInstance, "send", { chatId: telegramChatId, text: msg });
                                             }
                                  
                                             // Alexa-Klartext (ohne Link)
                                             if (dpAlexaEnabled === 1) {
                                                 alexaText += `Störung auf ${roadId}: ${w.title}. ${desc}\n\n`;
                                             }
                                  
                                             // JSON-Ausgabe (mit Link wenn vorhanden)
                                             if (dpJsonEnabled === 1) {
                                                 jsonOut.push({
                                                     road: roadId,
                                                     title: w.title,
                                                     description: desc,
                                                     start: w.startTimestamp || null,
                                                     coordinate: lat && lon ? { lat: lat, lon: lon } : null,
                                                     mapLink: mapLink || null
                                                 });
                                             }
                                         }
                                  
                                         if (dpAlexaEnabled === 1) setState(idAlexa, alexaText.trim());
                                         if (dpJsonEnabled === 1) setState(idJSON, JSON.stringify(jsonOut, null, 2));
                                  
                                     } catch (err) {
                                         console.error("Fehler beim Abruf:", err && err.message ? err.message : err);
                                         if (telegramBasicEnabled === 1 || telegramWithLinkEnabled === 1) {
                                             sendTo(telegramInstance, "send", {
                                                 chatId: telegramChatId,
                                                 text: `❌ Fehler beim Abruf der Verkehrsdaten: ${err && err.message ? err.message : err}`
                                             });
                                         }
                                         if (dpAlexaEnabled === 1) setState(idAlexa, "Fehler beim Abruf der Verkehrsdaten");
                                         if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                     }
                                  }
                                  
                                  // =========================
                                  // Start sofort und Intervall alle 15 Minuten (relativ zur Startzeit)
                                  // =========================
                                  
                                  // sofort einmal ausführen
                                  checkTraffic();
                                  
                                  // danach alle 15 Minuten relativ zur Startzeit wiederholen
                                  const intervalMs = 15 * 60 * 1000;
                                  setInterval(checkTraffic, intervalMs);
                                  
                                  

                                  Edit: Beschreibung in das Script geschrieben.

                                  R Offline
                                  R Offline
                                  Rushmed
                                  Most Active
                                  schrieb am zuletzt editiert von
                                  #36

                                  @Hotze Danke, Test läuft.

                                  1 Antwort Letzte Antwort
                                  0
                                  • R Offline
                                    R Offline
                                    Rushmed
                                    Most Active
                                    schrieb am zuletzt editiert von
                                    #37

                                    @Hotze sagte in #Stauerkennung #DieAutobahn:

                                    Getestet, funktioniert:

                                    /*
                                    Beschreibung
                                    Dieses Skript überwacht Verkehrswarnungen über die Autobahn‑API für die in der Variable `roadId` konfigurierte Autobahn.
                                    Es filtert Meldungen nach dem definierten Koordinatenbereich (coordsArea).
                                    
                                    Wichtig: Vor dem ersten Start unbedingt die Variable `roadId` auf die gewünschte Autobahn setzen (z. B. "A45", "A3" etc.).
                                    
                                    Ausgaben (einzeln schaltbar):
                                    - telegramBasicEnabled    : Telegram‑Nachricht ohne Link
                                    - telegramWithLinkEnabled : Telegram‑Nachricht mit Google‑Maps‑Link
                                    - dpAlexaEnabled          : Klartext‑Datenpunkt (z. B. idAlexa) für Alexa, OHNE Maps‑Link
                                    - dpJsonEnabled           : JSON‑Datenpunkt (z. B. idJSON) für Auswertungen, MIT Maps‑Link
                                    
                                    Verhalten:
                                    - Datenpunkte werden nur angelegt, wenn der jeweilige Schalter aktiviert ist.
                                    - Beim Start führt das Skript einmal checkTraffic() aus und wiederholt dann alle 15 Minuten (relativ zur Startzeit).
                                    - Maps‑Link wird nur erzeugt, wenn Koordinaten vorhanden sind.
                                    
                                    Hinweise:
                                    - Stelle diese Variablen korrekt ein:
                                       - roadId
                                       - coordsArea
                                       - telegramInstance (normalerweise ist es telegram.0)
                                       - telegramChatId
                                       - idAlexa 
                                       - idJSON
                                    
                                    - Passe die Schalter an
                                    */
                                    
                                    // =========================
                                    // Konfiguration
                                    // =========================
                                    const roadId = "A45";
                                    const coordsArea = {
                                       minLat: 50.6181514,
                                       maxLat: 52.2742993,
                                       minLon: 7.2582769,
                                       maxLon: 8.3822071
                                    };
                                    
                                    // Schalter (0 = aus, 1 = an)
                                    const telegramBasicEnabled    = 1; // Telegram: Nachricht ohne Link
                                    const telegramWithLinkEnabled = 1; // Telegram: Nachricht mit Maps-Link
                                    const dpAlexaEnabled          = 1; // Klartext-Datenpunkt (Alexa) ohne Link
                                    const dpJsonEnabled           = 1; // JSON-Datenpunkt (mit Link)
                                    
                                    // Telegram-Konfiguration
                                    const telegramInstance = "telegram.0";
                                    const telegramChatId   = 123456789;
                                    
                                    // Datenpunkte (nur anlegen, wenn aktiviert)
                                    const idAlexa = "0_userdata.0.Verkehr_Alexa";
                                    const idJSON  = "0_userdata.0.Verkehr_JSON";
                                    
                                    if (dpAlexaEnabled === 1) {
                                       createState(idAlexa, "", false, {
                                           name: "Verkehrsmeldung Klartext",
                                           type: "string",
                                           role: "value"
                                       });
                                    }
                                    if (dpJsonEnabled === 1) {
                                       createState(idJSON, "[]", false, {
                                           name: "Verkehrsmeldung JSON",
                                           type: "string",
                                           role: "json"
                                       });
                                    }
                                    
                                    // API-URL
                                    const url = `https://verkehr.autobahn.de/o/autobahn/${roadId}/services/warning`;
                                    
                                    // =========================
                                    // Hilfsfunktionen
                                    // =========================
                                    function isInArea(lat, lon, area) {
                                       return lat >= area.minLat && lat <= area.maxLat && lon >= area.minLon && lon <= area.maxLon;
                                    }
                                    
                                    function warningHitsArea(w, area) {
                                       if (w.coordinate && typeof w.coordinate.lat === "number" && typeof w.coordinate.long === "number") {
                                           if (isInArea(w.coordinate.lat, w.coordinate.long, area)) return true;
                                       }
                                       if (w.geometry && Array.isArray(w.geometry.coordinates)) {
                                           for (const c of w.geometry.coordinates) {
                                               if (Array.isArray(c) && c.length >= 2) {
                                                   const lon = c[0], lat = c[1];
                                                   if (isInArea(lat, lon, area)) return true;
                                               }
                                           }
                                       }
                                       return false;
                                    }
                                    
                                    function buildDescriptionText(desc) {
                                       if (Array.isArray(desc)) return desc.filter(d => d && String(d).trim() !== "").join("\n");
                                       return String(desc || "").trim();
                                    }
                                    
                                    // =========================
                                    // Hauptlogik
                                    // =========================
                                    async function checkTraffic() {
                                       try {
                                           console.log("Hole Daten von:", url);
                                           const axios = require("axios");
                                           const res = await axios.get(url);
                                           const data = res.data;
                                           const warnings = data.warnings || data.warning;
                                    
                                           if (!warnings || !Array.isArray(warnings) || warnings.length === 0) {
                                               console.log("Keine Warnungen gefunden.");
                                               if (dpAlexaEnabled === 1) setState(idAlexa, "Keine Warnungen auf " + roadId);
                                               if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                               return;
                                           }
                                    
                                           const relevant = warnings.filter(w => warningHitsArea(w, coordsArea));
                                           if (!relevant || relevant.length === 0) {
                                               console.log("Keine Warnungen im Bereich.");
                                               if (dpAlexaEnabled === 1) setState(idAlexa, "Keine Warnungen im Bereich auf " + roadId);
                                               if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                               return;
                                           }
                                    
                                           let alexaText = "";
                                           const jsonOut = [];
                                    
                                           for (const w of relevant) {
                                               const desc = buildDescriptionText(w.description);
                                               // Koordinaten extrahieren (verschiedene Felder)
                                               let lat = null, lon = null;
                                               if (w.coordinate) { lat = w.coordinate.lat; lon = w.coordinate.long; }
                                               if ((!lat || !lon) && w.point) {
                                                   const p = String(w.point).split(",");
                                                   if (p.length === 2) { lat = p[0]; lon = p[1]; }
                                               }
                                    
                                               const mapLink = (lat && lon) ? `https://www.google.com/maps/@${lat},${lon},13.13z` : "";
                                    
                                               // Telegram: Basic (ohne Link)
                                               if (telegramBasicEnabled === 1) {
                                                   const msg = `⚠️ Störung auf ${roadId}:\n${w.title}\n${desc}`;
                                                   sendTo(telegramInstance, "send", { chatId: telegramChatId, text: msg });
                                               }
                                    
                                               // Telegram: With Link
                                               if (telegramWithLinkEnabled === 1 && mapLink) {
                                                   const msg = `⚠️ Störung auf ${roadId}:\n${w.title}\n${desc}\n\n📍 ${mapLink}`;
                                                   sendTo(telegramInstance, "send", { chatId: telegramChatId, text: msg });
                                               }
                                    
                                               // Alexa-Klartext (ohne Link)
                                               if (dpAlexaEnabled === 1) {
                                                   alexaText += `Störung auf ${roadId}: ${w.title}. ${desc}\n\n`;
                                               }
                                    
                                               // JSON-Ausgabe (mit Link wenn vorhanden)
                                               if (dpJsonEnabled === 1) {
                                                   jsonOut.push({
                                                       road: roadId,
                                                       title: w.title,
                                                       description: desc,
                                                       start: w.startTimestamp || null,
                                                       coordinate: lat && lon ? { lat: lat, lon: lon } : null,
                                                       mapLink: mapLink || null
                                                   });
                                               }
                                           }
                                    
                                           if (dpAlexaEnabled === 1) setState(idAlexa, alexaText.trim());
                                           if (dpJsonEnabled === 1) setState(idJSON, JSON.stringify(jsonOut, null, 2));
                                    
                                       } catch (err) {
                                           console.error("Fehler beim Abruf:", err && err.message ? err.message : err);
                                           if (telegramBasicEnabled === 1 || telegramWithLinkEnabled === 1) {
                                               sendTo(telegramInstance, "send", {
                                                   chatId: telegramChatId,
                                                   text: `❌ Fehler beim Abruf der Verkehrsdaten: ${err && err.message ? err.message : err}`
                                               });
                                           }
                                           if (dpAlexaEnabled === 1) setState(idAlexa, "Fehler beim Abruf der Verkehrsdaten");
                                           if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                       }
                                    }
                                    
                                    // =========================
                                    // Start sofort und Intervall alle 15 Minuten (relativ zur Startzeit)
                                    // =========================
                                    
                                    // sofort einmal ausführen
                                    checkTraffic();
                                    
                                    // danach alle 15 Minuten relativ zur Startzeit wiederholen
                                    const intervalMs = 15 * 60 * 1000;
                                    setInterval(checkTraffic, intervalMs);
                                    
                                    

                                    Edit: Beschreibung in das Script geschrieben.

                                    Bisher läuft alles. Die ersten Meldungen kamen an.
                                    Wenn eine Meldung verfügbar ist wird diese im Abfrageintervall immer wieder per Telegramm gesendet.

                                    H 1 Antwort Letzte Antwort
                                    0
                                    • R Rushmed

                                      @Hotze sagte in #Stauerkennung #DieAutobahn:

                                      Getestet, funktioniert:

                                      /*
                                      Beschreibung
                                      Dieses Skript überwacht Verkehrswarnungen über die Autobahn‑API für die in der Variable `roadId` konfigurierte Autobahn.
                                      Es filtert Meldungen nach dem definierten Koordinatenbereich (coordsArea).
                                      
                                      Wichtig: Vor dem ersten Start unbedingt die Variable `roadId` auf die gewünschte Autobahn setzen (z. B. "A45", "A3" etc.).
                                      
                                      Ausgaben (einzeln schaltbar):
                                      - telegramBasicEnabled    : Telegram‑Nachricht ohne Link
                                      - telegramWithLinkEnabled : Telegram‑Nachricht mit Google‑Maps‑Link
                                      - dpAlexaEnabled          : Klartext‑Datenpunkt (z. B. idAlexa) für Alexa, OHNE Maps‑Link
                                      - dpJsonEnabled           : JSON‑Datenpunkt (z. B. idJSON) für Auswertungen, MIT Maps‑Link
                                      
                                      Verhalten:
                                      - Datenpunkte werden nur angelegt, wenn der jeweilige Schalter aktiviert ist.
                                      - Beim Start führt das Skript einmal checkTraffic() aus und wiederholt dann alle 15 Minuten (relativ zur Startzeit).
                                      - Maps‑Link wird nur erzeugt, wenn Koordinaten vorhanden sind.
                                      
                                      Hinweise:
                                      - Stelle diese Variablen korrekt ein:
                                         - roadId
                                         - coordsArea
                                         - telegramInstance (normalerweise ist es telegram.0)
                                         - telegramChatId
                                         - idAlexa 
                                         - idJSON
                                      
                                      - Passe die Schalter an
                                      */
                                      
                                      // =========================
                                      // Konfiguration
                                      // =========================
                                      const roadId = "A45";
                                      const coordsArea = {
                                         minLat: 50.6181514,
                                         maxLat: 52.2742993,
                                         minLon: 7.2582769,
                                         maxLon: 8.3822071
                                      };
                                      
                                      // Schalter (0 = aus, 1 = an)
                                      const telegramBasicEnabled    = 1; // Telegram: Nachricht ohne Link
                                      const telegramWithLinkEnabled = 1; // Telegram: Nachricht mit Maps-Link
                                      const dpAlexaEnabled          = 1; // Klartext-Datenpunkt (Alexa) ohne Link
                                      const dpJsonEnabled           = 1; // JSON-Datenpunkt (mit Link)
                                      
                                      // Telegram-Konfiguration
                                      const telegramInstance = "telegram.0";
                                      const telegramChatId   = 123456789;
                                      
                                      // Datenpunkte (nur anlegen, wenn aktiviert)
                                      const idAlexa = "0_userdata.0.Verkehr_Alexa";
                                      const idJSON  = "0_userdata.0.Verkehr_JSON";
                                      
                                      if (dpAlexaEnabled === 1) {
                                         createState(idAlexa, "", false, {
                                             name: "Verkehrsmeldung Klartext",
                                             type: "string",
                                             role: "value"
                                         });
                                      }
                                      if (dpJsonEnabled === 1) {
                                         createState(idJSON, "[]", false, {
                                             name: "Verkehrsmeldung JSON",
                                             type: "string",
                                             role: "json"
                                         });
                                      }
                                      
                                      // API-URL
                                      const url = `https://verkehr.autobahn.de/o/autobahn/${roadId}/services/warning`;
                                      
                                      // =========================
                                      // Hilfsfunktionen
                                      // =========================
                                      function isInArea(lat, lon, area) {
                                         return lat >= area.minLat && lat <= area.maxLat && lon >= area.minLon && lon <= area.maxLon;
                                      }
                                      
                                      function warningHitsArea(w, area) {
                                         if (w.coordinate && typeof w.coordinate.lat === "number" && typeof w.coordinate.long === "number") {
                                             if (isInArea(w.coordinate.lat, w.coordinate.long, area)) return true;
                                         }
                                         if (w.geometry && Array.isArray(w.geometry.coordinates)) {
                                             for (const c of w.geometry.coordinates) {
                                                 if (Array.isArray(c) && c.length >= 2) {
                                                     const lon = c[0], lat = c[1];
                                                     if (isInArea(lat, lon, area)) return true;
                                                 }
                                             }
                                         }
                                         return false;
                                      }
                                      
                                      function buildDescriptionText(desc) {
                                         if (Array.isArray(desc)) return desc.filter(d => d && String(d).trim() !== "").join("\n");
                                         return String(desc || "").trim();
                                      }
                                      
                                      // =========================
                                      // Hauptlogik
                                      // =========================
                                      async function checkTraffic() {
                                         try {
                                             console.log("Hole Daten von:", url);
                                             const axios = require("axios");
                                             const res = await axios.get(url);
                                             const data = res.data;
                                             const warnings = data.warnings || data.warning;
                                      
                                             if (!warnings || !Array.isArray(warnings) || warnings.length === 0) {
                                                 console.log("Keine Warnungen gefunden.");
                                                 if (dpAlexaEnabled === 1) setState(idAlexa, "Keine Warnungen auf " + roadId);
                                                 if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                                 return;
                                             }
                                      
                                             const relevant = warnings.filter(w => warningHitsArea(w, coordsArea));
                                             if (!relevant || relevant.length === 0) {
                                                 console.log("Keine Warnungen im Bereich.");
                                                 if (dpAlexaEnabled === 1) setState(idAlexa, "Keine Warnungen im Bereich auf " + roadId);
                                                 if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                                 return;
                                             }
                                      
                                             let alexaText = "";
                                             const jsonOut = [];
                                      
                                             for (const w of relevant) {
                                                 const desc = buildDescriptionText(w.description);
                                                 // Koordinaten extrahieren (verschiedene Felder)
                                                 let lat = null, lon = null;
                                                 if (w.coordinate) { lat = w.coordinate.lat; lon = w.coordinate.long; }
                                                 if ((!lat || !lon) && w.point) {
                                                     const p = String(w.point).split(",");
                                                     if (p.length === 2) { lat = p[0]; lon = p[1]; }
                                                 }
                                      
                                                 const mapLink = (lat && lon) ? `https://www.google.com/maps/@${lat},${lon},13.13z` : "";
                                      
                                                 // Telegram: Basic (ohne Link)
                                                 if (telegramBasicEnabled === 1) {
                                                     const msg = `⚠️ Störung auf ${roadId}:\n${w.title}\n${desc}`;
                                                     sendTo(telegramInstance, "send", { chatId: telegramChatId, text: msg });
                                                 }
                                      
                                                 // Telegram: With Link
                                                 if (telegramWithLinkEnabled === 1 && mapLink) {
                                                     const msg = `⚠️ Störung auf ${roadId}:\n${w.title}\n${desc}\n\n📍 ${mapLink}`;
                                                     sendTo(telegramInstance, "send", { chatId: telegramChatId, text: msg });
                                                 }
                                      
                                                 // Alexa-Klartext (ohne Link)
                                                 if (dpAlexaEnabled === 1) {
                                                     alexaText += `Störung auf ${roadId}: ${w.title}. ${desc}\n\n`;
                                                 }
                                      
                                                 // JSON-Ausgabe (mit Link wenn vorhanden)
                                                 if (dpJsonEnabled === 1) {
                                                     jsonOut.push({
                                                         road: roadId,
                                                         title: w.title,
                                                         description: desc,
                                                         start: w.startTimestamp || null,
                                                         coordinate: lat && lon ? { lat: lat, lon: lon } : null,
                                                         mapLink: mapLink || null
                                                     });
                                                 }
                                             }
                                      
                                             if (dpAlexaEnabled === 1) setState(idAlexa, alexaText.trim());
                                             if (dpJsonEnabled === 1) setState(idJSON, JSON.stringify(jsonOut, null, 2));
                                      
                                         } catch (err) {
                                             console.error("Fehler beim Abruf:", err && err.message ? err.message : err);
                                             if (telegramBasicEnabled === 1 || telegramWithLinkEnabled === 1) {
                                                 sendTo(telegramInstance, "send", {
                                                     chatId: telegramChatId,
                                                     text: `❌ Fehler beim Abruf der Verkehrsdaten: ${err && err.message ? err.message : err}`
                                                 });
                                             }
                                             if (dpAlexaEnabled === 1) setState(idAlexa, "Fehler beim Abruf der Verkehrsdaten");
                                             if (dpJsonEnabled === 1) setState(idJSON, "[]");
                                         }
                                      }
                                      
                                      // =========================
                                      // Start sofort und Intervall alle 15 Minuten (relativ zur Startzeit)
                                      // =========================
                                      
                                      // sofort einmal ausführen
                                      checkTraffic();
                                      
                                      // danach alle 15 Minuten relativ zur Startzeit wiederholen
                                      const intervalMs = 15 * 60 * 1000;
                                      setInterval(checkTraffic, intervalMs);
                                      
                                      

                                      Edit: Beschreibung in das Script geschrieben.

                                      Bisher läuft alles. Die ersten Meldungen kamen an.
                                      Wenn eine Meldung verfügbar ist wird diese im Abfrageintervall immer wieder per Telegramm gesendet.

                                      H Offline
                                      H Offline
                                      Hotze
                                      schrieb am zuletzt editiert von Hotze
                                      #38

                                      @Rushmed
                                      Danke für die Rückmeldug!

                                      Ja, das ist beabsichtigt. Dann ärgere ich mich nicht weil ich vor einigen Stunden eine Meldung bekam, diese aber vergaß und dann doch wieder im Stau stecke!

                                      Eventuell baue ich noch einen schalter ein um Mehrfachsendungen optional zu vermeiden.

                                      Ich teste gerade noch an einer anderen Version in der man zwei startzeiten eintragen kann. Um die startzeiten wird dann zufällig +-2 Minuten gestartet. un der Intervall variert um +-0,5 Minuten.

                                      carsten04C 1 Antwort Letzte Antwort
                                      0
                                      • H Hotze

                                        @Rushmed
                                        Danke für die Rückmeldug!

                                        Ja, das ist beabsichtigt. Dann ärgere ich mich nicht weil ich vor einigen Stunden eine Meldung bekam, diese aber vergaß und dann doch wieder im Stau stecke!

                                        Eventuell baue ich noch einen schalter ein um Mehrfachsendungen optional zu vermeiden.

                                        Ich teste gerade noch an einer anderen Version in der man zwei startzeiten eintragen kann. Um die startzeiten wird dann zufällig +-2 Minuten gestartet. un der Intervall variert um +-0,5 Minuten.

                                        carsten04C Online
                                        carsten04C Online
                                        carsten04
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #39

                                        Bin gerade durch Zufall über diesen Thread gestolpert. Ich habe mal einen Adapter radar-trap geschrieben, der für beliebige Strecken und Gebiete alle möglichen Infos zur Verfügung stellt. Vielleicht geht das ja in die Richtung was ihr braucht.

                                        H 1 Antwort Letzte Antwort
                                        1
                                        • carsten04C carsten04

                                          Bin gerade durch Zufall über diesen Thread gestolpert. Ich habe mal einen Adapter radar-trap geschrieben, der für beliebige Strecken und Gebiete alle möglichen Infos zur Verfügung stellt. Vielleicht geht das ja in die Richtung was ihr braucht.

                                          H Offline
                                          H Offline
                                          Hotze
                                          schrieb am zuletzt editiert von
                                          #40

                                          @carsten04
                                          Schönes Teil, leider habe ich den Adapter nicht mit Stauwarnungen in Verbindung gebracht!
                                          Naja, den werde ich auch testen!
                                          Darf ich fragen woher die daten Stammen? Warnt der auch vor Sperrung und langsamem Verkehr?

                                          carsten04C 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

                                          599

                                          Online

                                          32.6k

                                          Benutzer

                                          82.1k

                                          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