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. FF-Einsätze OÖ auswerten

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

FF-Einsätze OÖ auswerten

Geplant Angeheftet Gesperrt Verschoben JavaScript
115 Beiträge 5 Kommentatoren 12.9k Aufrufe 5 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.
  • OliverIOO OliverIO

    @sigi234 sagte in FF-Einsätze OÖ auswerten:

    EDIT2
    Doch nicht

    wie weiter oben schon mal gesagt merkt sich das skript
    die meldungen nur innerhalb eines starts.
    nach dem nächsten start ist das wieder vergessen.
    man könnte das gedächtnis in einen datenpunkt verlagern. dann überlebt dies auch den neustart eines skripts

    sigi234S Online
    sigi234S Online
    sigi234
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #85

    @oliverio

    Ich kann mich noch erinnern als ein Sturm war da kamen Einsätze (300) im Minuten Takt rein.
    Da stürzte das Blockly dann ab. Kann man das irgendwie abfangen?

    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Immer Daten sichern!

    OliverIOO 1 Antwort Letzte Antwort
    0
    • OliverIOO OliverIO

      @sigi234 sagte in FF-Einsätze OÖ auswerten:

      EDIT2
      Doch nicht

      wie weiter oben schon mal gesagt merkt sich das skript
      die meldungen nur innerhalb eines starts.
      nach dem nächsten start ist das wieder vergessen.
      man könnte das gedächtnis in einen datenpunkt verlagern. dann überlebt dies auch den neustart eines skripts

      NegaleinN Offline
      NegaleinN Offline
      Negalein
      Global Moderator
      schrieb am zuletzt editiert von
      #86

      @oliverio sagte in FF-Einsätze OÖ auswerten:

      man könnte das gedächtnis in einen datenpunkt verlagern. dann überlebt dies auch den neustart eines skripts

      Das wäre sicher eine Überlegung wert. :)

      ° Node.js Update ---> iob nodejs-update
      ° Fixer ---> iob fix

      OliverIOO 1 Antwort Letzte Antwort
      1
      • sigi234S sigi234

        @oliverio

        Ich kann mich noch erinnern als ein Sturm war da kamen Einsätze (300) im Minuten Takt rein.
        Da stürzte das Blockly dann ab. Kann man das irgendwie abfangen?

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #87

        @sigi234 sagte in FF-Einsätze OÖ auswerten:

        Ich kann mich noch erinnern als ein Sturm war da kamen Einsätze (300) im Minuten Takt rein.
        Da stürzte das Blockly dann ab. Kann man das irgendwie abfangen?

        du fragst ja eigentlich nur alle 30 sekunden oder größer ab.
        auch wenn es 1000 gemeldete einsätze gibt, dürfte es kein problem mit absturz oder speicher geben.
        wenn, dann irgendeine code-konstellation, die nicht vorgesehen ist. aber wir haben da gar nicht soviel drin. evtl mal, das sich im quelldatenformat was ändert

        einen fehler findest du dann im iobroker log

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        1 Antwort Letzte Antwort
        1
        • NegaleinN Negalein

          @oliverio sagte in FF-Einsätze OÖ auswerten:

          man könnte das gedächtnis in einen datenpunkt verlagern. dann überlebt dies auch den neustart eines skripts

          Das wäre sicher eine Überlegung wert. :)

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von OliverIO
          #88

          @negalein sagte in FF-Einsätze OÖ auswerten:

          speichern der bereits gemeldeten einsätze in einem datenpunkt
          Das wäre sicher eine Überlegung wert

          ziemlich am anfang (zeile 3) folgendes einfügen

          let savedEinsaetzeDP = "0_userdata.a";
          

          die folgende zeile, auch am anfang, bitte löschen

          let einsaetzeGesendet ....
          

          folgende funktion bitte tauschen

          async function prepareMessages(einsaetze, kurz, alle) {
              let messages = [];
              const dateOptions = {
                  weekday: "long",
              };
              const timeOptions = { hour: "2-digit", minute: "2-digit" };
              let data = await getStateAsync(savedEinsaetzeDP);
              let einsaetzeGesendet = JSON.parse(data.val || "[]");
              einsaetze.map(einsatz => {
                  if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                      //if (!einsaetzeGesendet.includes(einsatz.id) || alle) {
                      if (kurz) {
                          messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                      } else {
                          messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                      }
                      einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                  }
              })
              await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
              return messages.join(";");
          }
          
          

          da prepareMessage nun eine async funktion ist, muss an jeder stelle wo diese aufgerufen wird nun await hinzugefügt werden. also so wie folgt
          vorher

          let messages = prepareMessages(einsaetze, false, false);
          

          nachher

          let messages = await prepareMessages(einsaetze, false, false);
          

          falls irgendwas nicht funktioniert, bitte dann nochmal deinen kompletten code posten

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          NegaleinN 1 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

            @negalein sagte in FF-Einsätze OÖ auswerten:

            speichern der bereits gemeldeten einsätze in einem datenpunkt
            Das wäre sicher eine Überlegung wert

            ziemlich am anfang (zeile 3) folgendes einfügen

            let savedEinsaetzeDP = "0_userdata.a";
            

            die folgende zeile, auch am anfang, bitte löschen

            let einsaetzeGesendet ....
            

            folgende funktion bitte tauschen

            async function prepareMessages(einsaetze, kurz, alle) {
                let messages = [];
                const dateOptions = {
                    weekday: "long",
                };
                const timeOptions = { hour: "2-digit", minute: "2-digit" };
                let data = await getStateAsync(savedEinsaetzeDP);
                let einsaetzeGesendet = JSON.parse(data.val || "[]");
                einsaetze.map(einsatz => {
                    if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                        //if (!einsaetzeGesendet.includes(einsatz.id) || alle) {
                        if (kurz) {
                            messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                        } else {
                            messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                        }
                        einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                    }
                })
                await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
                return messages.join(";");
            }
            
            

            da prepareMessage nun eine async funktion ist, muss an jeder stelle wo diese aufgerufen wird nun await hinzugefügt werden. also so wie folgt
            vorher

            let messages = prepareMessages(einsaetze, false, false);
            

            nachher

            let messages = await prepareMessages(einsaetze, false, false);
            

            falls irgendwas nicht funktioniert, bitte dann nochmal deinen kompletten code posten

            NegaleinN Offline
            NegaleinN Offline
            Negalein
            Global Moderator
            schrieb am zuletzt editiert von
            #89

            @oliverio sagte in FF-Einsätze OÖ auswerten:

            nachher

            bei mir 1x

            so richtig, denke ich

            async function main() {
                let xml = await getData()
                let json = await xml2json(xml);
                let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
                let einsaetze_einheiten = filterEinheiten(einsaetze, [410321, 410327]);
                let einsaetze_bezirk = filterBezirk(einsaetze, 10);
                let html1 = toHtml(einsaetze_einheiten);
                let html2 = toHtml(einsaetze_bezirk);
                let html3 = toHtml(einsaetze);
                let messages = await prepareMessages(einsaetze_bezirk, false, false);
                //messages = await prepareMessages(einsaetze, true, false);
                let nachtruhe=compareTime("01:00", "06:00","between");
                if (!nachtruhe || messages) sendAlexa(messages, 60);
                if (messages) sendTelegram(messages, "");
                if (messages) sendEMail(messages, "christian@nega.at", "Neuer Feuerwehreinsatz");
                console.log(html1);
                console.log(html2);
                console.log(html3);
                //setState("0_userdata.0.testFolder.a", html3);
            	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
            

            let savedEinsaetzeDP = "0_userdata.a"; --> String?

            ° Node.js Update ---> iob nodejs-update
            ° Fixer ---> iob fix

            OliverIOO 1 Antwort Letzte Antwort
            0
            • NegaleinN Negalein

              @oliverio sagte in FF-Einsätze OÖ auswerten:

              nachher

              bei mir 1x

              so richtig, denke ich

              async function main() {
                  let xml = await getData()
                  let json = await xml2json(xml);
                  let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
                  let einsaetze_einheiten = filterEinheiten(einsaetze, [410321, 410327]);
                  let einsaetze_bezirk = filterBezirk(einsaetze, 10);
                  let html1 = toHtml(einsaetze_einheiten);
                  let html2 = toHtml(einsaetze_bezirk);
                  let html3 = toHtml(einsaetze);
                  let messages = await prepareMessages(einsaetze_bezirk, false, false);
                  //messages = await prepareMessages(einsaetze, true, false);
                  let nachtruhe=compareTime("01:00", "06:00","between");
                  if (!nachtruhe || messages) sendAlexa(messages, 60);
                  if (messages) sendTelegram(messages, "");
                  if (messages) sendEMail(messages, "christian@nega.at", "Neuer Feuerwehreinsatz");
                  console.log(html1);
                  console.log(html2);
                  console.log(html3);
                  //setState("0_userdata.0.testFolder.a", html3);
              	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
              

              let savedEinsaetzeDP = "0_userdata.a"; --> String?

              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von OliverIO
              #90

              @negalein

              ich habe gerade nochmal aktualisiert, bitte den code nochmal von oben kopieren

              let savedEinsaetzeDP = "0_userdata.a"; --> String?

              ja

              bei mir 1x
              so richtig, denke ich

              ja

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              NegaleinN 1 Antwort Letzte Antwort
              0
              • OliverIOO OliverIO

                @negalein

                ich habe gerade nochmal aktualisiert, bitte den code nochmal von oben kopieren

                let savedEinsaetzeDP = "0_userdata.a"; --> String?

                ja

                bei mir 1x
                so richtig, denke ich

                ja

                NegaleinN Offline
                NegaleinN Offline
                Negalein
                Global Moderator
                schrieb am zuletzt editiert von
                #91

                @oliverio sagte in FF-Einsätze OÖ auswerten:

                ich habe gerade nochmal aktualisiert, bitte den code nochmal von oben kopieren

                Danke, funktioniert.

                Der neue DP wird beschrieben. :)

                ° Node.js Update ---> iob nodejs-update
                ° Fixer ---> iob fix

                sigi234S 1 Antwort Letzte Antwort
                0
                • NegaleinN Negalein

                  @oliverio sagte in FF-Einsätze OÖ auswerten:

                  ich habe gerade nochmal aktualisiert, bitte den code nochmal von oben kopieren

                  Danke, funktioniert.

                  Der neue DP wird beschrieben. :)

                  sigi234S Online
                  sigi234S Online
                  sigi234
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von
                  #92

                  @negalein sagte in FF-Einsätze OÖ auswerten:

                  @oliverio sagte in FF-Einsätze OÖ auswerten:

                  ich habe gerade nochmal aktualisiert, bitte den code nochmal von oben kopieren

                  Danke, funktioniert.

                  Der neue DP wird beschrieben. :)

                  Kannst du den aktuellen Code mal raufladen?

                  Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                  Immer Daten sichern!

                  NegaleinN 1 Antwort Letzte Antwort
                  0
                  • OliverIOO OliverIO

                    @sigi234
                    Mit css
                    Aktuell wird nur eine rohe html Tabelle ausgegeben.
                    Mit Abstand meinst du padding oder margin?

                    sigi234S Online
                    sigi234S Online
                    sigi234
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von sigi234
                    #93

                    @oliverio sagte in FF-Einsätze OÖ auswerten:

                    Aktuell wird nur eine rohe html Tabelle ausgegeben.

                    Kann man es auch als JSON-Table ausgeben?

                    Edit:

                    So wie bei Lebensmittelwarnung

                    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                    Immer Daten sichern!

                    1 Antwort Letzte Antwort
                    0
                    • sigi234S sigi234

                      @negalein sagte in FF-Einsätze OÖ auswerten:

                      @oliverio sagte in FF-Einsätze OÖ auswerten:

                      ich habe gerade nochmal aktualisiert, bitte den code nochmal von oben kopieren

                      Danke, funktioniert.

                      Der neue DP wird beschrieben. :)

                      Kannst du den aktuellen Code mal raufladen?

                      NegaleinN Offline
                      NegaleinN Offline
                      Negalein
                      Global Moderator
                      schrieb am zuletzt editiert von
                      #94

                      @sigi234 sagte in FF-Einsätze OÖ auswerten:

                      Kannst du den aktuellen Code mal raufladen?

                      var xml2js = require('xml2js');
                      var fetch = require('node-fetch');
                      const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
                      let savedEinsaetzeDP = "0_userdata.0.FF-Einsatz.Await";
                       
                      async function getData() {
                          const response = await fetch("https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml", {
                              "headers": {
                                  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                  "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                  "cache-control": "no-cache",
                                  "pragma": "no-cache",
                                  "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                  "sec-ch-ua-mobile": "?0",
                                  "sec-ch-ua-platform": "\"Windows\"",
                                  "sec-fetch-dest": "document",
                                  "sec-fetch-mode": "navigate",
                                  "sec-fetch-site": "none",
                                  "sec-fetch-user": "?1",
                                  "upgrade-insecure-requests": "1",
                                  "User-Agent": useragent
                              },
                              "referrerPolicy": "strict-origin-when-cross-origin",
                              "body": null,
                              "method": "GET"
                          });
                          let text = await response.text();
                          return text;
                      }
                      async function xml2json(xml) {
                          return new Promise(function (resolve, reject) {
                              var parser = new xml2js.Parser(
                                  {
                                      explicitArray: false
                                  }
                              );
                              parser.parseString(xml, function (err, result) {
                                  if (err) {
                                      reject(err);
                                  } else {
                                      resolve(result);
                                  }
                              })
                              // xml2js.parseString(xml, function (err, result) {
                              // });
                          })
                          // var parser = new xml2js.Parser();
                          // parser.parseString(xml, function (err, result) {
                          //     console.dir(result);
                          // });
                      }
                      function normalizeData(obj) {
                          let a = 1;
                          let einsaetze = [];
                          for (let i = 0; i < obj.length; i++) {
                              let einsatz = obj[i];
                              let einsatzNeu = {
                                  id: einsatz.$.id,
                                  startzeit: einsatz.startzeit,
                                  status: einsatz.status,
                                  alarmstufe: einsatz.alarmstufe,
                                  einsatzart: einsatz.einsatzart,
                                  einsatzorg: einsatz.einsatzorg,
                                  einsatztyp: einsatz.einsatztyp._,
                                  einsatzsubtyp: einsatz.einsatzsubtyp._,
                                  alarmtext: einsatz.alarmtext,
                                  earea: einsatz.adresse.earea,
                                  bezirk_name: einsatz.bezirk._,
                                  bezirk_id: einsatz.bezirk.$.id,
                                  lng: einsatz.lng,
                                  lat: einsatz.lat,
                                  einheiten: []
                              };
                              if (Array.isArray(einsatz.einheiten.einheit) == false) {
                                  einsatz.einheiten.einheit = [einsatz.einheiten.einheit];
                              }
                              for (let j = 0; j < einsatz.einheiten.einheit.length; j++) {
                                  let einheit = einsatz.einheiten.einheit[j];
                                  einsatzNeu.einheiten.push({
                                      id: einheit.$.id,
                                      bezeichnung: einheit._
                                  })
                              }
                              einsaetze.push(einsatzNeu);
                          }
                          return einsaetze;
                      }
                      function filterEinheiten(einsaetze, einheiten) {
                          if (!einheiten) throw Error("Einheiten ids müssen angegeben werden");
                          return einsaetze.filter(einsatz => einheiten.some(id => einsatz.einheiten.some(einheit => einheit.id == id)));
                      }
                      function filterBezirk(einsaetze, bezirk) {
                          if (!bezirk) throw Error("bezirkid muss angegeben werden");
                          return einsaetze.filter(einsatz => einsatz.bezirk_id == bezirk);
                      }
                      function toHtml(einsaetze) {
                          let rows = "";
                          einsaetze.forEach(einsatz => {
                              let einheiten = einsatz.einheiten.map(einheit => einheit.bezeichnung).join("<br>");
                              rows += `
                                  <tr>
                                      <td>${einsatz.alarmstufe}</td>
                                      <td>${einsatz.alarmtext}</td>
                                      <td>${einheiten}</td>
                                      <td>${einsatz.earea}</td>
                                      <td>${einsatz.lat}</td>
                                      <td>${einsatz.lng}</td>
                                  </tr>
                              `
                          })
                          let html = `
                          <table>
                            <tr>
                              <th>Alarmstufe</th>
                              <th>Alarmtext</th>
                              <th>Einheiten</th>
                              <th>EAREA</th>
                              <th>lat</th>
                              <th>lng</th>
                            </tr>
                            ${rows}
                          </table>
                          `;
                       
                          return html;
                      }
                      async function prepareMessages(einsaetze, kurz, alle) {
                          let messages = [];
                          const dateOptions = {
                              weekday: "long",
                          };
                          const timeOptions = { hour: "2-digit", minute: "2-digit" };
                          let data = await getStateAsync(savedEinsaetzeDP);
                          let einsaetzeGesendet = JSON.parse(data.val || "[]");
                          einsaetze.map(einsatz => {
                              if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                                  //if (!einsaetzeGesendet.includes(einsatz.id) || alle) {
                                  if (kurz) {
                                      messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                                  } else {
                                      messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                                  }
                                  einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                              }
                          })
                          await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
                          return messages.join(";");
                      }
                      function sendTelegram(text, user) {
                          sendTo("telegram.0", "send", {
                              text: text.replace(/;/gm, "\n"),
                              user: user,
                          });
                      }
                      function sendEMail(text, to, subject) {
                          sendTo("email.0", "send", {
                              text: text.replace(/;/gm, "\n"),
                              to: to,
                              subject: subject
                          });
                      }
                      function sendAlexa(text, lautstaerke) {
                          setState('alexa2.0.Echo-Devices.xxxxxxxxxx.Commands.speak-volume', lautstaerke);
                          setState('alexa2.0.Echo-Devices.xxxxxxxxxx.Commands.speak', text,);
                      }
                      
                       
                      async function main() {
                          let xml = await getData()
                          let json = await xml2json(xml);
                          let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
                          let einsaetze_einheiten = filterEinheiten(einsaetze, [410321, 410327]);
                          let einsaetze_bezirk = filterBezirk(einsaetze,10);
                          let html1 = toHtml(einsaetze_einheiten);
                          let html2 = toHtml(einsaetze_bezirk);
                          let html3 = toHtml(einsaetze);
                          let messages = await prepareMessages(einsaetze_bezirk, false, false);
                          //messages = await prepareMessages(einsaetze, true, false);
                          let nachtruhe=compareTime("01:00", "06:00","between");
                          if (!nachtruhe || messages) sendAlexa(messages, 60);
                          if (messages) sendTelegram(messages, "");
                          if (messages) sendEMail(messages, "christian@xxxxxxxxx.at", "Neuer Feuerwehreinsatz");
                          console.log(html1);
                          console.log(html2);
                          console.log(html3);
                          //setState("0_userdata.0.testFolder.a", html3);
                      	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
                      }
                      schedule('*/30 * * * * *',main)
                      
                      

                      Ausgabe schaut so aus:

                      Achtung
                      Feuerwehreinsatz in xxxxxx
                      Alarmstufe 0
                      Verkehrsunfall Aufräumarbeiten
                      Bezirk xxxxxx
                      Anzahl Feuerwehren 2

                      ° Node.js Update ---> iob nodejs-update
                      ° Fixer ---> iob fix

                      1 Antwort Letzte Antwort
                      1
                      • NegaleinN Offline
                        NegaleinN Offline
                        Negalein
                        Global Moderator
                        schrieb am zuletzt editiert von
                        #95

                        @OliverIO

                        kann man den Log abschalten?
                        Wird sonst immer so 40 MB/Tag groß.

                        Also, dass nicht immer zB so ins Log geschrieben wird.

                        javascript.0 2024-09-17 19:46:00.316	info	script.js.Feuerwehr.FF-Alarm: <table> <tr> <th>Alarmstufe</th> <th>Alarmtext</th> <th>Einheiten</th> <th>EAREA</th> <th>lat</th> <th>lng</th> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Aurach am Hongar (50405)</td> <td>Aurach am Hongar</td> <td>47.9502</td> <td>13.6698</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Perwang am Grabensee (33215)</td> <td>Perwang am Grabensee</td> <td>48.009</td> <td>13.0879</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Hackenbuch (SD) (45306)</td> <td>St. Marienkirchen bei Schärding</td> <td>48.3879</td> <td>13.4698</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Neukirchen (36214)</td> <td>Altmünster</td> <td>47.8738</td> <td>13.7073</td> </tr> <tr> <td>0</td> <td>Sirenenprogramm FEUER von FW ausgelöst</td> <td>Feuerwehr/Florian Saxen (42110)</td> <td>Saxen</td> <td>48.2057</td> <td>14.793</td> </tr> <tr> <td>0</td> <td>Verkehrsunfall Aufräumarbeiten</td> <td>Feuerwehr/Florian Baumgartenberg (42304)</td> <td>Baumgartenberg</td> <td>48.2152</td> <td>14.7436</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Vöcklamarkt (50142)</td> <td>Vöcklamarkt</td> <td>48.0032</td> <td>13.4918</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Palting (33214)</td> <td>Palting</td> <td>48.0149</td> <td>13.1281</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Sankt Wolfgang im Salzkammergut (36118)</td> <td>St. Wolfgang im Salzkammergut</td> <td>47.7391</td> <td>13.4478</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Pupping (34116)</td> <td>Pupping</td> <td>48.3155</td> <td>14.0454</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Grieskirchen (37104)</td> <td>Grieskirchen</td> <td>48.2362</td> <td>13.8166</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Neukirchen bei Lambach (51112)</td> <td>Neukirchen bei Lambach</td> <td>48.1026</td> <td>13.8145</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Tal (37321)</td> <td>Natternbach</td> <td>48.4331</td> <td>13.7216</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Luftenberg an der Donau (42208)</td> <td>Luftenberg an der Donau</td> <td>48.2735</td> <td>14.429</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Lasberg (35112)</td> <td>Lasberg</td> <td>48.4737</td> <td>14.5302</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Dimbach (42102)</td> <td>Dimbach</td> <td>48.3037</td> <td>14.905</td> </tr> <tr> <td>0</td> <td>Keller überflutet</td> <td>Feuerwehr/Florian Pfaffstätt (33216)</td> <td>Pfaffstätt</td> <td>48.0756</td> <td>13.142</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Teichstätt (33223)</td> <td>Lengau</td> <td>48.0253</td> <td>13.2157</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Wiesen (36227)</td> <td>Pinsdorf</td> <td>47.9477</td> <td>13.7515</td> </tr> <tr> <td>0</td> <td>Keller überflutet</td> <td>Feuerwehr/Florian Eggelsberg (33402)</td> <td>Eggelsberg</td> <td>48.0736</td> <td>12.9897</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Alkersdorf (50502)</td> <td>St. Georgen im Attergau</td> <td>47.9346</td> <td>13.5124</td> </tr> <tr> <td>0</td> <td>Keller überflutet</td> <td>Feuerwehr/Florian Perg (42312)</td> <td>Perg</td> <td>48.2449</td> <td>14.6356</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Treffling (49315)</td> <td>Engerwitzdorf</td> <td>48.3353</td> <td>14.385</td> </tr> <tr> <td>0</td> <td>Ölaustritt Gewässer</td> <td>Feuerwehr/Florian Offenhausen (51113)</td> <td>Offenhausen</td> <td>48.1546</td> <td>13.8355</td> </tr> <tr> <td>0</td> <td>Ölspur/Ölaustritt</td> <td>Feuerwehr/Florian Reindlmühl (36219)</td> <td>Altmünster</td> <td>47.8962</td> <td>13.7141</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Wirling (36120)</td> <td>St. Wolfgang im Salzkammergut</td> <td>47.7251</td> <td>13.5529</td> </tr> <tr> <td>0</td> <td>Gebäude überflutet</td> <td>Feuerwehr/Florian Kefermarkt (35109)</td> <td>Kefermarkt</td> <td>48.4391</td> <td>14.5384</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Moosbach (33310)</td> <td>Moosbach</td> <td>48.2068</td> <td>13.1639</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Dietrichschlag (49105)</td> <td>Bad Leonfelden</td> <td>48.4954</td> <td>14.2803</td> </tr> <tr> <td>0</td> <td>Überflutete Fahrbahn</td> <td>Feuerwehr/Florian Pichl bei Wels (51217)</td> <td>Pichl bei Wels</td> <td>48.186</td> <td>13.9001</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Steegen (37319)</td> <td>Steegen</td> <td>48.3413</td> <td>13.7654</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Steyr Zug 2 Steyrdorf (47102)</td> <td>Steyr</td> <td>48.044</td> <td>14.4147</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Holzleiten im Machland (42305)</td> <td>Naarn im Machlande</td> <td>48.1965</td> <td>14.6528</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Attnang (50404)</td> <td>Attnang-Puchheim</td> <td>48.0164</td> <td>13.7192</td> </tr> </table>
                        

                        PS: Kaffee ist nicht vergessen ;)

                        ° Node.js Update ---> iob nodejs-update
                        ° Fixer ---> iob fix

                        OliverIOO 1 Antwort Letzte Antwort
                        0
                        • NegaleinN Negalein

                          @OliverIO

                          kann man den Log abschalten?
                          Wird sonst immer so 40 MB/Tag groß.

                          Also, dass nicht immer zB so ins Log geschrieben wird.

                          javascript.0 2024-09-17 19:46:00.316	info	script.js.Feuerwehr.FF-Alarm: <table> <tr> <th>Alarmstufe</th> <th>Alarmtext</th> <th>Einheiten</th> <th>EAREA</th> <th>lat</th> <th>lng</th> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Aurach am Hongar (50405)</td> <td>Aurach am Hongar</td> <td>47.9502</td> <td>13.6698</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Perwang am Grabensee (33215)</td> <td>Perwang am Grabensee</td> <td>48.009</td> <td>13.0879</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Hackenbuch (SD) (45306)</td> <td>St. Marienkirchen bei Schärding</td> <td>48.3879</td> <td>13.4698</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Neukirchen (36214)</td> <td>Altmünster</td> <td>47.8738</td> <td>13.7073</td> </tr> <tr> <td>0</td> <td>Sirenenprogramm FEUER von FW ausgelöst</td> <td>Feuerwehr/Florian Saxen (42110)</td> <td>Saxen</td> <td>48.2057</td> <td>14.793</td> </tr> <tr> <td>0</td> <td>Verkehrsunfall Aufräumarbeiten</td> <td>Feuerwehr/Florian Baumgartenberg (42304)</td> <td>Baumgartenberg</td> <td>48.2152</td> <td>14.7436</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Vöcklamarkt (50142)</td> <td>Vöcklamarkt</td> <td>48.0032</td> <td>13.4918</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Palting (33214)</td> <td>Palting</td> <td>48.0149</td> <td>13.1281</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Sankt Wolfgang im Salzkammergut (36118)</td> <td>St. Wolfgang im Salzkammergut</td> <td>47.7391</td> <td>13.4478</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Pupping (34116)</td> <td>Pupping</td> <td>48.3155</td> <td>14.0454</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Grieskirchen (37104)</td> <td>Grieskirchen</td> <td>48.2362</td> <td>13.8166</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Neukirchen bei Lambach (51112)</td> <td>Neukirchen bei Lambach</td> <td>48.1026</td> <td>13.8145</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Tal (37321)</td> <td>Natternbach</td> <td>48.4331</td> <td>13.7216</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Luftenberg an der Donau (42208)</td> <td>Luftenberg an der Donau</td> <td>48.2735</td> <td>14.429</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Lasberg (35112)</td> <td>Lasberg</td> <td>48.4737</td> <td>14.5302</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Dimbach (42102)</td> <td>Dimbach</td> <td>48.3037</td> <td>14.905</td> </tr> <tr> <td>0</td> <td>Keller überflutet</td> <td>Feuerwehr/Florian Pfaffstätt (33216)</td> <td>Pfaffstätt</td> <td>48.0756</td> <td>13.142</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Teichstätt (33223)</td> <td>Lengau</td> <td>48.0253</td> <td>13.2157</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Wiesen (36227)</td> <td>Pinsdorf</td> <td>47.9477</td> <td>13.7515</td> </tr> <tr> <td>0</td> <td>Keller überflutet</td> <td>Feuerwehr/Florian Eggelsberg (33402)</td> <td>Eggelsberg</td> <td>48.0736</td> <td>12.9897</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Alkersdorf (50502)</td> <td>St. Georgen im Attergau</td> <td>47.9346</td> <td>13.5124</td> </tr> <tr> <td>0</td> <td>Keller überflutet</td> <td>Feuerwehr/Florian Perg (42312)</td> <td>Perg</td> <td>48.2449</td> <td>14.6356</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Treffling (49315)</td> <td>Engerwitzdorf</td> <td>48.3353</td> <td>14.385</td> </tr> <tr> <td>0</td> <td>Ölaustritt Gewässer</td> <td>Feuerwehr/Florian Offenhausen (51113)</td> <td>Offenhausen</td> <td>48.1546</td> <td>13.8355</td> </tr> <tr> <td>0</td> <td>Ölspur/Ölaustritt</td> <td>Feuerwehr/Florian Reindlmühl (36219)</td> <td>Altmünster</td> <td>47.8962</td> <td>13.7141</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Wirling (36120)</td> <td>St. Wolfgang im Salzkammergut</td> <td>47.7251</td> <td>13.5529</td> </tr> <tr> <td>0</td> <td>Gebäude überflutet</td> <td>Feuerwehr/Florian Kefermarkt (35109)</td> <td>Kefermarkt</td> <td>48.4391</td> <td>14.5384</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Moosbach (33310)</td> <td>Moosbach</td> <td>48.2068</td> <td>13.1639</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Dietrichschlag (49105)</td> <td>Bad Leonfelden</td> <td>48.4954</td> <td>14.2803</td> </tr> <tr> <td>0</td> <td>Überflutete Fahrbahn</td> <td>Feuerwehr/Florian Pichl bei Wels (51217)</td> <td>Pichl bei Wels</td> <td>48.186</td> <td>13.9001</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Steegen (37319)</td> <td>Steegen</td> <td>48.3413</td> <td>13.7654</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Steyr Zug 2 Steyrdorf (47102)</td> <td>Steyr</td> <td>48.044</td> <td>14.4147</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Holzleiten im Machland (42305)</td> <td>Naarn im Machlande</td> <td>48.1965</td> <td>14.6528</td> </tr> <tr> <td>0</td> <td>Einsatz od. Einsatzübung</td> <td>Feuerwehr/Florian Attnang (50404)</td> <td>Attnang-Puchheim</td> <td>48.0164</td> <td>13.7192</td> </tr> </table>
                          

                          PS: Kaffee ist nicht vergessen ;)

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von
                          #96

                          @negalein

                          ja, alle zeilen mit console.log einfach auskommentieren

                          vorher

                          console.log(....
                          

                          nachher

                          //console.log(....
                          

                          Meine Adapter und Widgets
                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                          Links im Profil

                          NegaleinN 1 Antwort Letzte Antwort
                          0
                          • OliverIOO OliverIO

                            @negalein

                            ja, alle zeilen mit console.log einfach auskommentieren

                            vorher

                            console.log(....
                            

                            nachher

                            //console.log(....
                            
                            NegaleinN Offline
                            NegaleinN Offline
                            Negalein
                            Global Moderator
                            schrieb am zuletzt editiert von
                            #97

                            @oliverio

                            Danke

                            ° Node.js Update ---> iob nodejs-update
                            ° Fixer ---> iob fix

                            1 Antwort Letzte Antwort
                            0
                            • NegaleinN Offline
                              NegaleinN Offline
                              Negalein
                              Global Moderator
                              schrieb am zuletzt editiert von
                              #98

                              Hallo Oliver!

                              Ist es möglich, dies noch zu implementieren (in Alexa, Telegram und Email).

                              <einheiten>
                              <einheit id="410314">Feuerwehr/Florian Maasbach (45314)</einheit>
                              </einheiten>

                              Aber nur den Namen davon.
                              Im Beispiel also Feuerwehr/Florian Maasbach

                              ° Node.js Update ---> iob nodejs-update
                              ° Fixer ---> iob fix

                              OliverIOO 1 Antwort Letzte Antwort
                              0
                              • NegaleinN Negalein

                                Hallo Oliver!

                                Ist es möglich, dies noch zu implementieren (in Alexa, Telegram und Email).

                                <einheiten>
                                <einheit id="410314">Feuerwehr/Florian Maasbach (45314)</einheit>
                                </einheiten>

                                Aber nur den Namen davon.
                                Im Beispiel also Feuerwehr/Florian Maasbach

                                OliverIOO Offline
                                OliverIOO Offline
                                OliverIO
                                schrieb am zuletzt editiert von
                                #99

                                @negalein
                                Klar
                                Poste bitte mal deinen letzten skriptstand
                                Dann kann ich morgen/übermorgen mal schauen
                                Ist nix großes

                                Meine Adapter und Widgets
                                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                Links im Profil

                                NegaleinN 1 Antwort Letzte Antwort
                                0
                                • OliverIOO OliverIO

                                  @negalein
                                  Klar
                                  Poste bitte mal deinen letzten skriptstand
                                  Dann kann ich morgen/übermorgen mal schauen
                                  Ist nix großes

                                  NegaleinN Offline
                                  NegaleinN Offline
                                  Negalein
                                  Global Moderator
                                  schrieb am zuletzt editiert von
                                  #100

                                  @oliverio sagte in FF-Einsätze OÖ auswerten:

                                  Poste bitte mal deinen letzten skriptstand

                                  Danke

                                  Ah und noch was.

                                  wie hier zu sehn, werde Eggerding mit den Abschnitten `Maasbach, Hof, ...) alarmiert.
                                  Sind dann 4 Meldungen hintereinander.
                                  Kann man in so einem Fall dies auf 1 Zusammenfassen?

                                  zB so:

                                  Achtung
                                  Feuerwehreinsatz in Eggerding
                                  Alarmstufe 0
                                  Einsatz od. Einsatzübung
                                  Einheit Hof, Maasbach, Vollmannsdorf, Eggerding
                                  Bezirk Schärding
                                  Anzahl Feuerwehren 1

                                  86e22dab-8c8d-4845-8aea-4de18ef821e9-image.png

                                  var xml2js = require('xml2js');
                                  var fetch = require('node-fetch');
                                  const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
                                  let savedEinsaetzeDP = "0_userdata.0.FF-Einsatz.Await";
                                   
                                  async function getData() {
                                      const response = await fetch("https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml", {
                                          "headers": {
                                              "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                              "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                              "cache-control": "no-cache",
                                              "pragma": "no-cache",
                                              "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                              "sec-ch-ua-mobile": "?0",
                                              "sec-ch-ua-platform": "\"Windows\"",
                                              "sec-fetch-dest": "document",
                                              "sec-fetch-mode": "navigate",
                                              "sec-fetch-site": "none",
                                              "sec-fetch-user": "?1",
                                              "upgrade-insecure-requests": "1",
                                              "User-Agent": useragent
                                          },
                                          "referrerPolicy": "strict-origin-when-cross-origin",
                                          "body": null,
                                          "method": "GET"
                                      });
                                      let text = await response.text();
                                      return text;
                                  }
                                  async function xml2json(xml) {
                                      return new Promise(function (resolve, reject) {
                                          var parser = new xml2js.Parser(
                                              {
                                                  explicitArray: false
                                              }
                                          );
                                          parser.parseString(xml, function (err, result) {
                                              if (err) {
                                                  reject(err);
                                              } else {
                                                  resolve(result);
                                              }
                                          })
                                          // xml2js.parseString(xml, function (err, result) {
                                          // });
                                      })
                                      // var parser = new xml2js.Parser();
                                      // parser.parseString(xml, function (err, result) {
                                      //     console.dir(result);
                                      // });
                                  }
                                  function normalizeData(obj) {
                                      let a = 1;
                                      let einsaetze = [];
                                      for (let i = 0; i < obj.length; i++) {
                                          let einsatz = obj[i];
                                          let einsatzNeu = {
                                              id: einsatz.$.id,
                                              startzeit: einsatz.startzeit,
                                              status: einsatz.status,
                                              alarmstufe: einsatz.alarmstufe,
                                              einsatzart: einsatz.einsatzart,
                                              einsatzorg: einsatz.einsatzorg,
                                              einsatztyp: einsatz.einsatztyp._,
                                              einsatzsubtyp: einsatz.einsatzsubtyp._,
                                              alarmtext: einsatz.alarmtext,
                                              earea: einsatz.adresse.earea,
                                              bezirk_name: einsatz.bezirk._,
                                              bezirk_id: einsatz.bezirk.$.id,
                                              lng: einsatz.lng,
                                              lat: einsatz.lat,
                                              einheiten: []
                                          };
                                          if (Array.isArray(einsatz.einheiten.einheit) == false) {
                                              einsatz.einheiten.einheit = [einsatz.einheiten.einheit];
                                          }
                                          for (let j = 0; j < einsatz.einheiten.einheit.length; j++) {
                                              let einheit = einsatz.einheiten.einheit[j];
                                              einsatzNeu.einheiten.push({
                                                  id: einheit.$.id,
                                                  bezeichnung: einheit._
                                              })
                                          }
                                          einsaetze.push(einsatzNeu);
                                      }
                                      return einsaetze;
                                  }
                                  function filterEinheiten(einsaetze, einheiten) {
                                      if (!einheiten) throw Error("Einheiten ids müssen angegeben werden");
                                      return einsaetze.filter(einsatz => einheiten.some(id => einsatz.einheiten.some(einheit => einheit.id == id)));
                                  }
                                  function filterBezirk(einsaetze, bezirk) {
                                      if (!bezirk) throw Error("bezirkid muss angegeben werden");
                                      return einsaetze.filter(einsatz => einsatz.bezirk_id == bezirk);
                                  }
                                  function toHtml(einsaetze) {
                                      let rows = "";
                                      einsaetze.forEach(einsatz => {
                                          let einheiten = einsatz.einheiten.map(einheit => einheit.bezeichnung).join("<br>");
                                          rows += `
                                              <tr>
                                                  <td>${einsatz.alarmstufe}</td>
                                                  <td>${einsatz.alarmtext}</td>
                                                  <td>${einheiten}</td>
                                                  <td>${einsatz.earea}</td>
                                                  <td>${einsatz.lat}</td>
                                                  <td>${einsatz.lng}</td>
                                              </tr>
                                          `
                                      })
                                      let html = `
                                      <table>
                                        <tr>
                                          <th>Alarmstufe</th>
                                          <th>Alarmtext</th>
                                          <th>Einheiten</th>
                                          <th>EAREA</th>
                                          <th>lat</th>
                                          <th>lng</th>
                                        </tr>
                                        ${rows}
                                      </table>
                                      `;
                                   
                                      return html;
                                  }
                                  async function prepareMessages(einsaetze, kurz, alle) {
                                      let messages = [];
                                      const dateOptions = {
                                          weekday: "long",
                                      };
                                      const timeOptions = { hour: "2-digit", minute: "2-digit" };
                                      let data = await getStateAsync(savedEinsaetzeDP);
                                      let einsaetzeGesendet = JSON.parse(data.val || "[]");
                                      einsaetze.map(einsatz => {
                                          if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                                              //if (!einsaetzeGesendet.includes(einsatz.id) || alle) {
                                              if (kurz) {
                                                  messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                                              } else {
                                                  messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                                              }
                                              einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                                          }
                                      })
                                      await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
                                      return messages.join(";");
                                  }
                                  function sendTelegram(text, user) {
                                      sendTo("telegram.0", "send", {
                                          text: text.replace(/;/gm, "\n"),
                                          user: user,
                                      });
                                  }
                                  function sendEMail(text, to, subject) {
                                      sendTo("email.0", "send", {
                                          text: text.replace(/;/gm, "\n"),
                                          to: to,
                                          subject: subject
                                      });
                                  }
                                  function sendAlexa(text, lautstaerke) {
                                      setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak-volume', lautstaerke);
                                      setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak', text,);
                                  }
                                  
                                   
                                  async function main() {
                                      let xml = await getData()
                                      let json = await xml2json(xml);
                                      let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
                                      let einsaetze_einheiten = filterEinheiten(einsaetze, [xxxxx, xxxxxx]);
                                      let einsaetze_bezirk = filterBezirk(einsaetze,xx);
                                      let html1 = toHtml(einsaetze_einheiten);
                                      let html2 = toHtml(einsaetze_bezirk);
                                      let html3 = toHtml(einsaetze);
                                      let messages = await prepareMessages(einsaetze_bezirk, false, false);
                                      //messages = await prepareMessages(einsaetze, true, false);
                                      let nachtruhe=compareTime("01:00", "06:00","between");
                                      if (!nachtruhe || messages) sendAlexa(messages, 60);
                                      if (messages) sendTelegram(messages, "");
                                      if (messages) sendEMail(messages, "xxxxxxx@xxxxxx.at", "Neuer Feuerwehreinsatz");
                                      //console.log(html1);
                                      //console.log(html2);
                                      //console.log(html3);
                                      //setState("0_userdata.0.testFolder.a", html3);
                                  	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
                                  }
                                  schedule('*/30 * * * * *',main)
                                  

                                  ° Node.js Update ---> iob nodejs-update
                                  ° Fixer ---> iob fix

                                  OliverIOO NegaleinN 2 Antworten Letzte Antwort
                                  0
                                  • NegaleinN Negalein

                                    @oliverio sagte in FF-Einsätze OÖ auswerten:

                                    Poste bitte mal deinen letzten skriptstand

                                    Danke

                                    Ah und noch was.

                                    wie hier zu sehn, werde Eggerding mit den Abschnitten `Maasbach, Hof, ...) alarmiert.
                                    Sind dann 4 Meldungen hintereinander.
                                    Kann man in so einem Fall dies auf 1 Zusammenfassen?

                                    zB so:

                                    Achtung
                                    Feuerwehreinsatz in Eggerding
                                    Alarmstufe 0
                                    Einsatz od. Einsatzübung
                                    Einheit Hof, Maasbach, Vollmannsdorf, Eggerding
                                    Bezirk Schärding
                                    Anzahl Feuerwehren 1

                                    86e22dab-8c8d-4845-8aea-4de18ef821e9-image.png

                                    var xml2js = require('xml2js');
                                    var fetch = require('node-fetch');
                                    const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
                                    let savedEinsaetzeDP = "0_userdata.0.FF-Einsatz.Await";
                                     
                                    async function getData() {
                                        const response = await fetch("https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml", {
                                            "headers": {
                                                "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                                "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                                "cache-control": "no-cache",
                                                "pragma": "no-cache",
                                                "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                                "sec-ch-ua-mobile": "?0",
                                                "sec-ch-ua-platform": "\"Windows\"",
                                                "sec-fetch-dest": "document",
                                                "sec-fetch-mode": "navigate",
                                                "sec-fetch-site": "none",
                                                "sec-fetch-user": "?1",
                                                "upgrade-insecure-requests": "1",
                                                "User-Agent": useragent
                                            },
                                            "referrerPolicy": "strict-origin-when-cross-origin",
                                            "body": null,
                                            "method": "GET"
                                        });
                                        let text = await response.text();
                                        return text;
                                    }
                                    async function xml2json(xml) {
                                        return new Promise(function (resolve, reject) {
                                            var parser = new xml2js.Parser(
                                                {
                                                    explicitArray: false
                                                }
                                            );
                                            parser.parseString(xml, function (err, result) {
                                                if (err) {
                                                    reject(err);
                                                } else {
                                                    resolve(result);
                                                }
                                            })
                                            // xml2js.parseString(xml, function (err, result) {
                                            // });
                                        })
                                        // var parser = new xml2js.Parser();
                                        // parser.parseString(xml, function (err, result) {
                                        //     console.dir(result);
                                        // });
                                    }
                                    function normalizeData(obj) {
                                        let a = 1;
                                        let einsaetze = [];
                                        for (let i = 0; i < obj.length; i++) {
                                            let einsatz = obj[i];
                                            let einsatzNeu = {
                                                id: einsatz.$.id,
                                                startzeit: einsatz.startzeit,
                                                status: einsatz.status,
                                                alarmstufe: einsatz.alarmstufe,
                                                einsatzart: einsatz.einsatzart,
                                                einsatzorg: einsatz.einsatzorg,
                                                einsatztyp: einsatz.einsatztyp._,
                                                einsatzsubtyp: einsatz.einsatzsubtyp._,
                                                alarmtext: einsatz.alarmtext,
                                                earea: einsatz.adresse.earea,
                                                bezirk_name: einsatz.bezirk._,
                                                bezirk_id: einsatz.bezirk.$.id,
                                                lng: einsatz.lng,
                                                lat: einsatz.lat,
                                                einheiten: []
                                            };
                                            if (Array.isArray(einsatz.einheiten.einheit) == false) {
                                                einsatz.einheiten.einheit = [einsatz.einheiten.einheit];
                                            }
                                            for (let j = 0; j < einsatz.einheiten.einheit.length; j++) {
                                                let einheit = einsatz.einheiten.einheit[j];
                                                einsatzNeu.einheiten.push({
                                                    id: einheit.$.id,
                                                    bezeichnung: einheit._
                                                })
                                            }
                                            einsaetze.push(einsatzNeu);
                                        }
                                        return einsaetze;
                                    }
                                    function filterEinheiten(einsaetze, einheiten) {
                                        if (!einheiten) throw Error("Einheiten ids müssen angegeben werden");
                                        return einsaetze.filter(einsatz => einheiten.some(id => einsatz.einheiten.some(einheit => einheit.id == id)));
                                    }
                                    function filterBezirk(einsaetze, bezirk) {
                                        if (!bezirk) throw Error("bezirkid muss angegeben werden");
                                        return einsaetze.filter(einsatz => einsatz.bezirk_id == bezirk);
                                    }
                                    function toHtml(einsaetze) {
                                        let rows = "";
                                        einsaetze.forEach(einsatz => {
                                            let einheiten = einsatz.einheiten.map(einheit => einheit.bezeichnung).join("<br>");
                                            rows += `
                                                <tr>
                                                    <td>${einsatz.alarmstufe}</td>
                                                    <td>${einsatz.alarmtext}</td>
                                                    <td>${einheiten}</td>
                                                    <td>${einsatz.earea}</td>
                                                    <td>${einsatz.lat}</td>
                                                    <td>${einsatz.lng}</td>
                                                </tr>
                                            `
                                        })
                                        let html = `
                                        <table>
                                          <tr>
                                            <th>Alarmstufe</th>
                                            <th>Alarmtext</th>
                                            <th>Einheiten</th>
                                            <th>EAREA</th>
                                            <th>lat</th>
                                            <th>lng</th>
                                          </tr>
                                          ${rows}
                                        </table>
                                        `;
                                     
                                        return html;
                                    }
                                    async function prepareMessages(einsaetze, kurz, alle) {
                                        let messages = [];
                                        const dateOptions = {
                                            weekday: "long",
                                        };
                                        const timeOptions = { hour: "2-digit", minute: "2-digit" };
                                        let data = await getStateAsync(savedEinsaetzeDP);
                                        let einsaetzeGesendet = JSON.parse(data.val || "[]");
                                        einsaetze.map(einsatz => {
                                            if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                                                //if (!einsaetzeGesendet.includes(einsatz.id) || alle) {
                                                if (kurz) {
                                                    messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                                                } else {
                                                    messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                                                }
                                                einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                                            }
                                        })
                                        await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
                                        return messages.join(";");
                                    }
                                    function sendTelegram(text, user) {
                                        sendTo("telegram.0", "send", {
                                            text: text.replace(/;/gm, "\n"),
                                            user: user,
                                        });
                                    }
                                    function sendEMail(text, to, subject) {
                                        sendTo("email.0", "send", {
                                            text: text.replace(/;/gm, "\n"),
                                            to: to,
                                            subject: subject
                                        });
                                    }
                                    function sendAlexa(text, lautstaerke) {
                                        setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak-volume', lautstaerke);
                                        setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak', text,);
                                    }
                                    
                                     
                                    async function main() {
                                        let xml = await getData()
                                        let json = await xml2json(xml);
                                        let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
                                        let einsaetze_einheiten = filterEinheiten(einsaetze, [xxxxx, xxxxxx]);
                                        let einsaetze_bezirk = filterBezirk(einsaetze,xx);
                                        let html1 = toHtml(einsaetze_einheiten);
                                        let html2 = toHtml(einsaetze_bezirk);
                                        let html3 = toHtml(einsaetze);
                                        let messages = await prepareMessages(einsaetze_bezirk, false, false);
                                        //messages = await prepareMessages(einsaetze, true, false);
                                        let nachtruhe=compareTime("01:00", "06:00","between");
                                        if (!nachtruhe || messages) sendAlexa(messages, 60);
                                        if (messages) sendTelegram(messages, "");
                                        if (messages) sendEMail(messages, "xxxxxxx@xxxxxx.at", "Neuer Feuerwehreinsatz");
                                        //console.log(html1);
                                        //console.log(html2);
                                        //console.log(html3);
                                        //setState("0_userdata.0.testFolder.a", html3);
                                    	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
                                    }
                                    schedule('*/30 * * * * *',main)
                                    

                                    OliverIOO Offline
                                    OliverIOO Offline
                                    OliverIO
                                    schrieb am zuletzt editiert von
                                    #101

                                    @negalein

                                    Bitte noch deinen letzten Stand vom Skript posten.

                                    Meine Adapter und Widgets
                                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                    Links im Profil

                                    1 Antwort Letzte Antwort
                                    0
                                    • NegaleinN Negalein

                                      @oliverio sagte in FF-Einsätze OÖ auswerten:

                                      Poste bitte mal deinen letzten skriptstand

                                      Danke

                                      Ah und noch was.

                                      wie hier zu sehn, werde Eggerding mit den Abschnitten `Maasbach, Hof, ...) alarmiert.
                                      Sind dann 4 Meldungen hintereinander.
                                      Kann man in so einem Fall dies auf 1 Zusammenfassen?

                                      zB so:

                                      Achtung
                                      Feuerwehreinsatz in Eggerding
                                      Alarmstufe 0
                                      Einsatz od. Einsatzübung
                                      Einheit Hof, Maasbach, Vollmannsdorf, Eggerding
                                      Bezirk Schärding
                                      Anzahl Feuerwehren 1

                                      86e22dab-8c8d-4845-8aea-4de18ef821e9-image.png

                                      var xml2js = require('xml2js');
                                      var fetch = require('node-fetch');
                                      const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
                                      let savedEinsaetzeDP = "0_userdata.0.FF-Einsatz.Await";
                                       
                                      async function getData() {
                                          const response = await fetch("https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml", {
                                              "headers": {
                                                  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                                  "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                                  "cache-control": "no-cache",
                                                  "pragma": "no-cache",
                                                  "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                                  "sec-ch-ua-mobile": "?0",
                                                  "sec-ch-ua-platform": "\"Windows\"",
                                                  "sec-fetch-dest": "document",
                                                  "sec-fetch-mode": "navigate",
                                                  "sec-fetch-site": "none",
                                                  "sec-fetch-user": "?1",
                                                  "upgrade-insecure-requests": "1",
                                                  "User-Agent": useragent
                                              },
                                              "referrerPolicy": "strict-origin-when-cross-origin",
                                              "body": null,
                                              "method": "GET"
                                          });
                                          let text = await response.text();
                                          return text;
                                      }
                                      async function xml2json(xml) {
                                          return new Promise(function (resolve, reject) {
                                              var parser = new xml2js.Parser(
                                                  {
                                                      explicitArray: false
                                                  }
                                              );
                                              parser.parseString(xml, function (err, result) {
                                                  if (err) {
                                                      reject(err);
                                                  } else {
                                                      resolve(result);
                                                  }
                                              })
                                              // xml2js.parseString(xml, function (err, result) {
                                              // });
                                          })
                                          // var parser = new xml2js.Parser();
                                          // parser.parseString(xml, function (err, result) {
                                          //     console.dir(result);
                                          // });
                                      }
                                      function normalizeData(obj) {
                                          let a = 1;
                                          let einsaetze = [];
                                          for (let i = 0; i < obj.length; i++) {
                                              let einsatz = obj[i];
                                              let einsatzNeu = {
                                                  id: einsatz.$.id,
                                                  startzeit: einsatz.startzeit,
                                                  status: einsatz.status,
                                                  alarmstufe: einsatz.alarmstufe,
                                                  einsatzart: einsatz.einsatzart,
                                                  einsatzorg: einsatz.einsatzorg,
                                                  einsatztyp: einsatz.einsatztyp._,
                                                  einsatzsubtyp: einsatz.einsatzsubtyp._,
                                                  alarmtext: einsatz.alarmtext,
                                                  earea: einsatz.adresse.earea,
                                                  bezirk_name: einsatz.bezirk._,
                                                  bezirk_id: einsatz.bezirk.$.id,
                                                  lng: einsatz.lng,
                                                  lat: einsatz.lat,
                                                  einheiten: []
                                              };
                                              if (Array.isArray(einsatz.einheiten.einheit) == false) {
                                                  einsatz.einheiten.einheit = [einsatz.einheiten.einheit];
                                              }
                                              for (let j = 0; j < einsatz.einheiten.einheit.length; j++) {
                                                  let einheit = einsatz.einheiten.einheit[j];
                                                  einsatzNeu.einheiten.push({
                                                      id: einheit.$.id,
                                                      bezeichnung: einheit._
                                                  })
                                              }
                                              einsaetze.push(einsatzNeu);
                                          }
                                          return einsaetze;
                                      }
                                      function filterEinheiten(einsaetze, einheiten) {
                                          if (!einheiten) throw Error("Einheiten ids müssen angegeben werden");
                                          return einsaetze.filter(einsatz => einheiten.some(id => einsatz.einheiten.some(einheit => einheit.id == id)));
                                      }
                                      function filterBezirk(einsaetze, bezirk) {
                                          if (!bezirk) throw Error("bezirkid muss angegeben werden");
                                          return einsaetze.filter(einsatz => einsatz.bezirk_id == bezirk);
                                      }
                                      function toHtml(einsaetze) {
                                          let rows = "";
                                          einsaetze.forEach(einsatz => {
                                              let einheiten = einsatz.einheiten.map(einheit => einheit.bezeichnung).join("<br>");
                                              rows += `
                                                  <tr>
                                                      <td>${einsatz.alarmstufe}</td>
                                                      <td>${einsatz.alarmtext}</td>
                                                      <td>${einheiten}</td>
                                                      <td>${einsatz.earea}</td>
                                                      <td>${einsatz.lat}</td>
                                                      <td>${einsatz.lng}</td>
                                                  </tr>
                                              `
                                          })
                                          let html = `
                                          <table>
                                            <tr>
                                              <th>Alarmstufe</th>
                                              <th>Alarmtext</th>
                                              <th>Einheiten</th>
                                              <th>EAREA</th>
                                              <th>lat</th>
                                              <th>lng</th>
                                            </tr>
                                            ${rows}
                                          </table>
                                          `;
                                       
                                          return html;
                                      }
                                      async function prepareMessages(einsaetze, kurz, alle) {
                                          let messages = [];
                                          const dateOptions = {
                                              weekday: "long",
                                          };
                                          const timeOptions = { hour: "2-digit", minute: "2-digit" };
                                          let data = await getStateAsync(savedEinsaetzeDP);
                                          let einsaetzeGesendet = JSON.parse(data.val || "[]");
                                          einsaetze.map(einsatz => {
                                              if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                                                  //if (!einsaetzeGesendet.includes(einsatz.id) || alle) {
                                                  if (kurz) {
                                                      messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                                                  } else {
                                                      messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                                                  }
                                                  einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                                              }
                                          })
                                          await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
                                          return messages.join(";");
                                      }
                                      function sendTelegram(text, user) {
                                          sendTo("telegram.0", "send", {
                                              text: text.replace(/;/gm, "\n"),
                                              user: user,
                                          });
                                      }
                                      function sendEMail(text, to, subject) {
                                          sendTo("email.0", "send", {
                                              text: text.replace(/;/gm, "\n"),
                                              to: to,
                                              subject: subject
                                          });
                                      }
                                      function sendAlexa(text, lautstaerke) {
                                          setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak-volume', lautstaerke);
                                          setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak', text,);
                                      }
                                      
                                       
                                      async function main() {
                                          let xml = await getData()
                                          let json = await xml2json(xml);
                                          let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
                                          let einsaetze_einheiten = filterEinheiten(einsaetze, [xxxxx, xxxxxx]);
                                          let einsaetze_bezirk = filterBezirk(einsaetze,xx);
                                          let html1 = toHtml(einsaetze_einheiten);
                                          let html2 = toHtml(einsaetze_bezirk);
                                          let html3 = toHtml(einsaetze);
                                          let messages = await prepareMessages(einsaetze_bezirk, false, false);
                                          //messages = await prepareMessages(einsaetze, true, false);
                                          let nachtruhe=compareTime("01:00", "06:00","between");
                                          if (!nachtruhe || messages) sendAlexa(messages, 60);
                                          if (messages) sendTelegram(messages, "");
                                          if (messages) sendEMail(messages, "xxxxxxx@xxxxxx.at", "Neuer Feuerwehreinsatz");
                                          //console.log(html1);
                                          //console.log(html2);
                                          //console.log(html3);
                                          //setState("0_userdata.0.testFolder.a", html3);
                                      	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
                                      }
                                      schedule('*/30 * * * * *',main)
                                      

                                      NegaleinN Offline
                                      NegaleinN Offline
                                      Negalein
                                      Global Moderator
                                      schrieb am zuletzt editiert von
                                      #102

                                      @OliverIO

                                      @negalein sagte in FF-Einsätze OÖ auswerten:
                                      @oliverio sagte in FF-Einsätze OÖ auswerten:

                                      Poste bitte mal deinen letzten skriptstand

                                      var xml2js = require('xml2js');
                                      var fetch = require('node-fetch');
                                      const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
                                      let savedEinsaetzeDP = "0_userdata.0.FF-Einsatz.Await";
                                       
                                      async function getData() {
                                          const response = await fetch("https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml", {
                                              "headers": {
                                                  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                                  "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                                  "cache-control": "no-cache",
                                                  "pragma": "no-cache",
                                                  "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                                  "sec-ch-ua-mobile": "?0",
                                                  "sec-ch-ua-platform": "\"Windows\"",
                                                  "sec-fetch-dest": "document",
                                                  "sec-fetch-mode": "navigate",
                                                  "sec-fetch-site": "none",
                                                  "sec-fetch-user": "?1",
                                                  "upgrade-insecure-requests": "1",
                                                  "User-Agent": useragent
                                              },
                                              "referrerPolicy": "strict-origin-when-cross-origin",
                                              "body": null,
                                              "method": "GET"
                                          });
                                          let text = await response.text();
                                          return text;
                                      }
                                      async function xml2json(xml) {
                                          return new Promise(function (resolve, reject) {
                                              var parser = new xml2js.Parser(
                                                  {
                                                      explicitArray: false
                                                  }
                                              );
                                              parser.parseString(xml, function (err, result) {
                                                  if (err) {
                                                      reject(err);
                                                  } else {
                                                      resolve(result);
                                                  }
                                              })
                                              // xml2js.parseString(xml, function (err, result) {
                                              // });
                                          })
                                          // var parser = new xml2js.Parser();
                                          // parser.parseString(xml, function (err, result) {
                                          //     console.dir(result);
                                          // });
                                      }
                                      function normalizeData(obj) {
                                          let a = 1;
                                          let einsaetze = [];
                                          for (let i = 0; i < obj.length; i++) {
                                              let einsatz = obj[i];
                                              let einsatzNeu = {
                                                  id: einsatz.$.id,
                                                  startzeit: einsatz.startzeit,
                                                  status: einsatz.status,
                                                  alarmstufe: einsatz.alarmstufe,
                                                  einsatzart: einsatz.einsatzart,
                                                  einsatzorg: einsatz.einsatzorg,
                                                  einsatztyp: einsatz.einsatztyp._,
                                                  einsatzsubtyp: einsatz.einsatzsubtyp._,
                                                  alarmtext: einsatz.alarmtext,
                                                  earea: einsatz.adresse.earea,
                                                  bezirk_name: einsatz.bezirk._,
                                                  bezirk_id: einsatz.bezirk.$.id,
                                                  lng: einsatz.lng,
                                                  lat: einsatz.lat,
                                                  einheiten: []
                                              };
                                              if (Array.isArray(einsatz.einheiten.einheit) == false) {
                                                  einsatz.einheiten.einheit = [einsatz.einheiten.einheit];
                                              }
                                              for (let j = 0; j < einsatz.einheiten.einheit.length; j++) {
                                                  let einheit = einsatz.einheiten.einheit[j];
                                                  einsatzNeu.einheiten.push({
                                                      id: einheit.$.id,
                                                      bezeichnung: einheit._
                                                  })
                                              }
                                              einsaetze.push(einsatzNeu);
                                          }
                                          return einsaetze;
                                      }
                                      function filterEinheiten(einsaetze, einheiten) {
                                          if (!einheiten) throw Error("Einheiten ids müssen angegeben werden");
                                          return einsaetze.filter(einsatz => einheiten.some(id => einsatz.einheiten.some(einheit => einheit.id == id)));
                                      }
                                      function filterBezirk(einsaetze, bezirk) {
                                          if (!bezirk) throw Error("bezirkid muss angegeben werden");
                                          return einsaetze.filter(einsatz => einsatz.bezirk_id == bezirk);
                                      }
                                      function toHtml(einsaetze) {
                                          let rows = "";
                                          einsaetze.forEach(einsatz => {
                                              let einheiten = einsatz.einheiten.map(einheit => einheit.bezeichnung).join("<br>");
                                              rows += `
                                                  <tr>
                                                      <td>${einsatz.alarmstufe}</td>
                                                      <td>${einsatz.alarmtext}</td>
                                                      <td>${einheiten}</td>
                                                      <td>${einsatz.earea}</td>
                                                      <td>${einsatz.lat}</td>
                                                      <td>${einsatz.lng}</td>
                                                  </tr>
                                              `
                                          })
                                          let html = `
                                          <table>
                                            <tr>
                                              <th>Alarmstufe</th>
                                              <th>Alarmtext</th>
                                              <th>Einheiten</th>
                                              <th>EAREA</th>
                                              <th>lat</th>
                                              <th>lng</th>
                                            </tr>
                                            ${rows}
                                          </table>
                                          `;
                                       
                                          return html;
                                      }
                                      async function prepareMessages(einsaetze, kurz, alle) {
                                          let messages = [];
                                          const dateOptions = {
                                              weekday: "long",
                                          };
                                          const timeOptions = { hour: "2-digit", minute: "2-digit" };
                                          let data = await getStateAsync(savedEinsaetzeDP);
                                          let einsaetzeGesendet = JSON.parse(data.val || "[]");
                                          einsaetze.map(einsatz => {
                                              if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                                                  //if (!einsaetzeGesendet.includes(einsatz.id) || alle) {
                                                  if (kurz) {
                                                      messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                                                  } else {
                                                      messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                                                  }
                                                  einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                                              }
                                          })
                                          await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
                                          return messages.join(";");
                                      }
                                      function sendTelegram(text, user) {
                                          sendTo("telegram.0", "send", {
                                              text: text.replace(/;/gm, "\n"),
                                              user: user,
                                          });
                                      }
                                      function sendEMail(text, to, subject) {
                                          sendTo("email.0", "send", {
                                              text: text.replace(/;/gm, "\n"),
                                              to: to,
                                              subject: subject
                                          });
                                      }
                                      function sendAlexa(text, lautstaerke) {
                                          setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak-volume', lautstaerke);
                                          setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak', text,);
                                      }
                                      
                                       
                                      async function main() {
                                          let xml = await getData()
                                          let json = await xml2json(xml);
                                          let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
                                          let einsaetze_einheiten = filterEinheiten(einsaetze, [xxxxx, xxxxxx]);
                                          let einsaetze_bezirk = filterBezirk(einsaetze,xx);
                                          let html1 = toHtml(einsaetze_einheiten);
                                          let html2 = toHtml(einsaetze_bezirk);
                                          let html3 = toHtml(einsaetze);
                                          let messages = await prepareMessages(einsaetze_bezirk, false, false);
                                          //messages = await prepareMessages(einsaetze, true, false);
                                          let nachtruhe=compareTime("01:00", "06:00","between");
                                          if (!nachtruhe || messages) sendAlexa(messages, 60);
                                          if (messages) sendTelegram(messages, "");
                                          if (messages) sendEMail(messages, "xxxxxxx@xxxxxx.at", "Neuer Feuerwehreinsatz");
                                          //console.log(html1);
                                          //console.log(html2);
                                          //console.log(html3);
                                          //setState("0_userdata.0.testFolder.a", html3);
                                      	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
                                      }
                                      schedule('*/30 * * * * *',main)
                                      

                                      ° Node.js Update ---> iob nodejs-update
                                      ° Fixer ---> iob fix

                                      OliverIOO 2 Antworten Letzte Antwort
                                      0
                                      • OliverIOO Offline
                                        OliverIOO Offline
                                        OliverIO
                                        schrieb am zuletzt editiert von
                                        #103

                                        @negalein

                                        ach, der knopf, danke.

                                        Meine Adapter und Widgets
                                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                        Links im Profil

                                        1 Antwort Letzte Antwort
                                        1
                                        • NegaleinN Negalein

                                          @OliverIO

                                          @negalein sagte in FF-Einsätze OÖ auswerten:
                                          @oliverio sagte in FF-Einsätze OÖ auswerten:

                                          Poste bitte mal deinen letzten skriptstand

                                          var xml2js = require('xml2js');
                                          var fetch = require('node-fetch');
                                          const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
                                          let savedEinsaetzeDP = "0_userdata.0.FF-Einsatz.Await";
                                           
                                          async function getData() {
                                              const response = await fetch("https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml", {
                                                  "headers": {
                                                      "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                                      "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                                      "cache-control": "no-cache",
                                                      "pragma": "no-cache",
                                                      "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                                      "sec-ch-ua-mobile": "?0",
                                                      "sec-ch-ua-platform": "\"Windows\"",
                                                      "sec-fetch-dest": "document",
                                                      "sec-fetch-mode": "navigate",
                                                      "sec-fetch-site": "none",
                                                      "sec-fetch-user": "?1",
                                                      "upgrade-insecure-requests": "1",
                                                      "User-Agent": useragent
                                                  },
                                                  "referrerPolicy": "strict-origin-when-cross-origin",
                                                  "body": null,
                                                  "method": "GET"
                                              });
                                              let text = await response.text();
                                              return text;
                                          }
                                          async function xml2json(xml) {
                                              return new Promise(function (resolve, reject) {
                                                  var parser = new xml2js.Parser(
                                                      {
                                                          explicitArray: false
                                                      }
                                                  );
                                                  parser.parseString(xml, function (err, result) {
                                                      if (err) {
                                                          reject(err);
                                                      } else {
                                                          resolve(result);
                                                      }
                                                  })
                                                  // xml2js.parseString(xml, function (err, result) {
                                                  // });
                                              })
                                              // var parser = new xml2js.Parser();
                                              // parser.parseString(xml, function (err, result) {
                                              //     console.dir(result);
                                              // });
                                          }
                                          function normalizeData(obj) {
                                              let a = 1;
                                              let einsaetze = [];
                                              for (let i = 0; i < obj.length; i++) {
                                                  let einsatz = obj[i];
                                                  let einsatzNeu = {
                                                      id: einsatz.$.id,
                                                      startzeit: einsatz.startzeit,
                                                      status: einsatz.status,
                                                      alarmstufe: einsatz.alarmstufe,
                                                      einsatzart: einsatz.einsatzart,
                                                      einsatzorg: einsatz.einsatzorg,
                                                      einsatztyp: einsatz.einsatztyp._,
                                                      einsatzsubtyp: einsatz.einsatzsubtyp._,
                                                      alarmtext: einsatz.alarmtext,
                                                      earea: einsatz.adresse.earea,
                                                      bezirk_name: einsatz.bezirk._,
                                                      bezirk_id: einsatz.bezirk.$.id,
                                                      lng: einsatz.lng,
                                                      lat: einsatz.lat,
                                                      einheiten: []
                                                  };
                                                  if (Array.isArray(einsatz.einheiten.einheit) == false) {
                                                      einsatz.einheiten.einheit = [einsatz.einheiten.einheit];
                                                  }
                                                  for (let j = 0; j < einsatz.einheiten.einheit.length; j++) {
                                                      let einheit = einsatz.einheiten.einheit[j];
                                                      einsatzNeu.einheiten.push({
                                                          id: einheit.$.id,
                                                          bezeichnung: einheit._
                                                      })
                                                  }
                                                  einsaetze.push(einsatzNeu);
                                              }
                                              return einsaetze;
                                          }
                                          function filterEinheiten(einsaetze, einheiten) {
                                              if (!einheiten) throw Error("Einheiten ids müssen angegeben werden");
                                              return einsaetze.filter(einsatz => einheiten.some(id => einsatz.einheiten.some(einheit => einheit.id == id)));
                                          }
                                          function filterBezirk(einsaetze, bezirk) {
                                              if (!bezirk) throw Error("bezirkid muss angegeben werden");
                                              return einsaetze.filter(einsatz => einsatz.bezirk_id == bezirk);
                                          }
                                          function toHtml(einsaetze) {
                                              let rows = "";
                                              einsaetze.forEach(einsatz => {
                                                  let einheiten = einsatz.einheiten.map(einheit => einheit.bezeichnung).join("<br>");
                                                  rows += `
                                                      <tr>
                                                          <td>${einsatz.alarmstufe}</td>
                                                          <td>${einsatz.alarmtext}</td>
                                                          <td>${einheiten}</td>
                                                          <td>${einsatz.earea}</td>
                                                          <td>${einsatz.lat}</td>
                                                          <td>${einsatz.lng}</td>
                                                      </tr>
                                                  `
                                              })
                                              let html = `
                                              <table>
                                                <tr>
                                                  <th>Alarmstufe</th>
                                                  <th>Alarmtext</th>
                                                  <th>Einheiten</th>
                                                  <th>EAREA</th>
                                                  <th>lat</th>
                                                  <th>lng</th>
                                                </tr>
                                                ${rows}
                                              </table>
                                              `;
                                           
                                              return html;
                                          }
                                          async function prepareMessages(einsaetze, kurz, alle) {
                                              let messages = [];
                                              const dateOptions = {
                                                  weekday: "long",
                                              };
                                              const timeOptions = { hour: "2-digit", minute: "2-digit" };
                                              let data = await getStateAsync(savedEinsaetzeDP);
                                              let einsaetzeGesendet = JSON.parse(data.val || "[]");
                                              einsaetze.map(einsatz => {
                                                  if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                                                      //if (!einsaetzeGesendet.includes(einsatz.id) || alle) {
                                                      if (kurz) {
                                                          messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                                                      } else {
                                                          messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                                                      }
                                                      einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                                                  }
                                              })
                                              await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
                                              return messages.join(";");
                                          }
                                          function sendTelegram(text, user) {
                                              sendTo("telegram.0", "send", {
                                                  text: text.replace(/;/gm, "\n"),
                                                  user: user,
                                              });
                                          }
                                          function sendEMail(text, to, subject) {
                                              sendTo("email.0", "send", {
                                                  text: text.replace(/;/gm, "\n"),
                                                  to: to,
                                                  subject: subject
                                              });
                                          }
                                          function sendAlexa(text, lautstaerke) {
                                              setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak-volume', lautstaerke);
                                              setState('alexa2.0.Echo-Devices.xxxxxxxxxxx.Commands.speak', text,);
                                          }
                                          
                                           
                                          async function main() {
                                              let xml = await getData()
                                              let json = await xml2json(xml);
                                              let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
                                              let einsaetze_einheiten = filterEinheiten(einsaetze, [xxxxx, xxxxxx]);
                                              let einsaetze_bezirk = filterBezirk(einsaetze,xx);
                                              let html1 = toHtml(einsaetze_einheiten);
                                              let html2 = toHtml(einsaetze_bezirk);
                                              let html3 = toHtml(einsaetze);
                                              let messages = await prepareMessages(einsaetze_bezirk, false, false);
                                              //messages = await prepareMessages(einsaetze, true, false);
                                              let nachtruhe=compareTime("01:00", "06:00","between");
                                              if (!nachtruhe || messages) sendAlexa(messages, 60);
                                              if (messages) sendTelegram(messages, "");
                                              if (messages) sendEMail(messages, "xxxxxxx@xxxxxx.at", "Neuer Feuerwehreinsatz");
                                              //console.log(html1);
                                              //console.log(html2);
                                              //console.log(html3);
                                              //setState("0_userdata.0.testFolder.a", html3);
                                          	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
                                          }
                                          schedule('*/30 * * * * *',main)
                                          

                                          OliverIOO Offline
                                          OliverIOO Offline
                                          OliverIO
                                          schrieb am zuletzt editiert von OliverIO
                                          #104

                                          @negalein

                                          für die erste anforderung bitte die folgende funktion tauschen
                                          Es erzeugt nun folgende Nachricht

                                          'Achtung;Feuerwehreinsatz in Kefermarkt;Feuerwehr/Florian Kefermarkt ;Alarmstufe 0;Einsatz od. Einsatzübung;Bezirk Freistadt;Anzahl Feuerwehren 1;
                                          

                                          Wenn mehrere Einheiten aufgeführt werden, dann lautet die Meldung

                                          'Achtung;Feuerwehreinsatz in Kefermarkt;Feuerwehr/Florian Einheit A Feuerwehr/Florian Einheit B Feuerwehr/Florian Einheit C;Alarmstufe 0;Einsatz od. Einsatzübung;Bezirk Freistadt;Anzahl Feuerwehren 1;
                                          

                                          Das ist alles relativ viel Wiederholung. ggfs. könnte man das auch noch so aufbauen:

                                          Einheiten A B C
                                          

                                          In meinen aktuellen Daten fängt das Feld immer mit Feuerwehr/Florian an. Das könnte man noch herausfiltern. Wenn das dann aber mal anders heißt dann schlägt das ggfs fehl.

                                          async function prepareMessages(einsaetze, kurz, alle) {
                                              let messages = [];
                                              const dateOptions = {
                                                  weekday: "long",
                                              };
                                              const timeOptions = { hour: "2-digit", minute: "2-digit" };
                                              let data = await getStateAsync(savedEinsaetzeDP);
                                              let einsaetzeGesendet = JSON.parse(data.val || "[]");
                                              einsaetze.map(einsatz => {
                                                  if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                                                      let einheiten = einsatz.einheiten.reduce((acc, einheit) => {
                                                          return acc + einheit.bezeichnung.replace(/(.+) \(\d+\)/gm, "$1") + " ";
                                                      }, "")
                                                      if (kurz) {
                                                          messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', einheiten, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                                                      } else {
                                                          messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', einheiten, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                                                      }
                                                      einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
                                                  }
                                              })
                                              await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
                                              return messages.join(";");
                                          }
                                          

                                          Meine Adapter und Widgets
                                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                          Links im Profil

                                          NegaleinN 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

                                          521

                                          Online

                                          32.5k

                                          Benutzer

                                          81.9k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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