Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. FF-Einsätze OÖ auswerten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    FF-Einsätze OÖ auswerten

    This topic has been deleted. Only users with topic management privileges can see it.
    • Negalein
      Negalein Global Moderator last edited by

      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

      OliverIO 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @Negalein last edited by

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

        Negalein 1 Reply Last reply Reply Quote 0
        • Negalein
          Negalein Global Moderator @OliverIO last edited by

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

          OliverIO Negalein 2 Replies Last reply Reply Quote 0
          • OliverIO
            OliverIO @Negalein last edited by

            @negalein

            Bitte noch deinen letzten Stand vom Skript posten.

            1 Reply Last reply Reply Quote 0
            • Negalein
              Negalein Global Moderator @Negalein last edited by

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

              OliverIO 2 Replies Last reply Reply Quote 0
              • OliverIO
                OliverIO last edited by

                @negalein

                ach, der knopf, danke.

                1 Reply Last reply Reply Quote 1
                • OliverIO
                  OliverIO @Negalein last edited by OliverIO

                  @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(";");
                  }
                  
                  Negalein 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @Negalein last edited by OliverIO

                    @negalein

                    für die 2.anforderung, die Zusammenfassung ist etwas schwieriger.
                    Die Datenlogik sagt, das das alles einzelne Einsätze sind.
                    Jeder Einsatz hat die Möglichkeit 1 oder mehrere Einheiten zu benennen.
                    In diesem Fall wurden aber verschiedene Einsätze mit jeweils einer Feuerwehr definiert worden.

                    Wenn ich nun eine Logik erarbeite, die unterschiedliche Einsätze evtl anhand des Namens versucht zusammenzufassen, dann kann es aber auch falsches zusammenfassen.

                    hier mal ein Screenshot von einem Einsatz mit mehreren Einheiten

                    26b1caa5-1d15-4343-bcc6-de3949f1e638-image.png

                    Dein Beispiel mit Eggerding habe ich hier allerdings auch nicht gefunden
                    https://cf-einsaetze.ooelfv.at/einsatz/monat-0

                    Negalein 1 Reply Last reply Reply Quote 0
                    • Negalein
                      Negalein Global Moderator @OliverIO last edited by

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

                      Dein Beispiel mit Eggerding habe ich hier allerdings auch nicht gefunden

                      da dürfte für meinen Bezirk etwas nicht freigeschaltet sein.

                      403 ERROR
                      The request could not be satisfied.
                      This distribution is not configured to allow the HTTP request method that was used for this request. The distribution supports only cachable requests. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
                      If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
                      Generated by cloudfront (CloudFront)
                      Request ID: 6gDmI6j51Qi2t3xCnv1jm4fba93dTLXgUS-uJEp-feAvBAAa0KSzhA==
                      

                      Ah, verstehe.
                      Das lassen wir dann sein. 🙂

                      OliverIO 1 Reply Last reply Reply Quote 0
                      • Negalein
                        Negalein Global Moderator @OliverIO last edited by Negalein

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

                        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.

                        Ja, das wäre super.
                        Vielleicht nur Feuerwehr herausfiltern?

                        5c965d58-9646-4465-a6d6-7ae14cddc78c-image.png

                        OliverIO 1 Reply Last reply Reply Quote 0
                        • OliverIO
                          OliverIO @Negalein last edited by

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

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

                          Dein Beispiel mit Eggerding habe ich hier allerdings auch nicht gefunden

                          da dürfte für meinen Bezirk etwas nicht freigeschaltet sein.

                          403 ERROR
                          The request could not be satisfied.
                          This distribution is not configured to allow the HTTP request method that was used for this request. The distribution supports only cachable requests. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
                          If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
                          Generated by cloudfront (CloudFront)
                          Request ID: 6gDmI6j51Qi2t3xCnv1jm4fba93dTLXgUS-uJEp-feAvBAAa0KSzhA==
                          

                          Ah, verstehe.
                          Das lassen wir dann sein. 🙂

                          Komisch.
                          Bin da ja nicht mal angemeldet und rufe aus D ab.
                          Oben rechts auf der Webseite kann man die verschiedenen Zeiträume abrufen. Das ist die Seite für den ganzen Oktober

                          Negalein 1 Reply Last reply Reply Quote 0
                          • Negalein
                            Negalein Global Moderator @OliverIO last edited by

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

                            Oben rechts auf der Webseite kann man die verschiedenen Zeiträume abrufen. Das ist die Seite für den ganzen Oktober

                            funktioniert wieder. Deren Server hatte Schluckauf 😉

                            1 Reply Last reply Reply Quote 0
                            • OliverIO
                              OliverIO @Negalein last edited by

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

                              Vielleicht nur Feuerwehr herausfiltern?

                              So, hier bitte nochmal Funktion 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) {
                                          let einheiten = einsatz.einheiten.reduce((acc, einheit) => {
                                              return acc + einheit.bezeichnung.replace(/Feuerwehr\/(.+)\s\(\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(";");
                              }
                              
                              Negalein 1 Reply Last reply Reply Quote 0
                              • Negalein
                                Negalein Global Moderator @OliverIO last edited by

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

                                So, hier bitte nochmal Funktion tauschen

                                Danke

                                wo muss ich bei der Formatierung den , eingeben, damit es so ausschaut?

                                Achtung
                                Feuerwehreinsatz in Diersbach
                                Florian Diersbach, Florian Oberedt
                                Alarmstufe 0
                                Bergung PKW
                                Bezirk Schärding
                                Anzahl Feuerwehren 2

                                OliverIO 2 Replies Last reply Reply Quote 0
                                • OliverIO
                                  OliverIO @Negalein last edited by OliverIO

                                  @negalein
                                  Zeile 12

                                  
                                  return acc + einheit.bezeichnung.replace(/Feuerwehr\/(.+)\s\(\d+\)/gm, "$1") + ", ";
                                  
                                  
                                  1 Reply Last reply Reply Quote 1
                                  • OliverIO
                                    OliverIO @Negalein last edited by

                                    @negalein

                                    mach mal lieber so, sonst bleibt immer ein komma am ende übrig

                                    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.map((einheit) => {
                                                    return einheit.bezeichnung.replace(/Feuerwehr\/(.+)\s\(\d+\)/gm, "$1");
                                                }).join(", ");
                                                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(";");
                                    }
                                    
                                    Negalein 1 Reply Last reply Reply Quote 1
                                    • Negalein
                                      Negalein Global Moderator @OliverIO last edited by Negalein

                                      @oliverio

                                      Hallo Oliver!

                                      Kann man im Script noch folgendes einbauen?

                                      Standardlautstärke für Alexa ist im Script auf 60.
                                      Jetzt möchte ich aber die Lautstärke am Dienstag von 18:45 bis 22 Uhr nur auf Lautstärke 10.

                                      Zeile 169 - 173 ist die Alexa Funktion
                                      Zeile 188 ist die Lautstärke

                                      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) {
                                                  let einheiten = einsatz.einheiten.map((einheit) => {
                                                      return einheit.bezeichnung.replace(/Feuerwehr\/(.+)\s\(\d+\)/gm, "$1");
                                                  }).join(", ");
                                                  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(";");
                                      }
                                      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 sendWhatsapp(text, user) {
                                          sendTo("whatsapp-cmb.0", "send", {
                                              text: text.replace(/;/gm, "\n"),
                                              user: user,
                                          });
                                      }
                                      function sendAlexa(text, lautstaerke) {
                                          setState('alexa2.0.Echo-Devices.G2A0XL07022603EU.Commands.speak-volume', lautstaerke);
                                          setState('alexa2.0.Echo-Devices.G2A0XL07022603EU.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) sendWhatsapp(messages, "");
                                          if (messages) sendEMail(messages, "christian@xxxxxx.de", "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)
                                      
                                      
                                      OliverIO 1 Reply Last reply Reply Quote 0
                                      • OliverIO
                                        OliverIO @Negalein last edited by

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

                                        probier mal folgendes.
                                        ich habe das einfach nur mal nach chat gpt reingeworfen und als ergebnis kam folgendes heraus

                                        es wird dann die lautstärke genau auf diese eine bedingung auf 10 gesetzt

                                        function sendAlexa(text, lautstaerke) {
                                            // Aktuelles Datum und Uhrzeit ermitteln
                                            const jetzt = new Date();
                                            const wochentag = jetzt.getDay(); // 0 = Sonntag, 1 = Montag, ..., 6 = Samstag
                                            const stunde = jetzt.getHours();
                                            const minute = jetzt.getMinutes();
                                        
                                            // Überprüfen, ob es Dienstag (wochentag 2) ist und die Uhrzeit zwischen 18:45 und 22:00 Uhr liegt
                                            if (wochentag === 2 && ((stunde === 18 && minute >= 45) || (stunde >= 19 && stunde < 22))) {
                                                lautstaerke = 10; // Lautstärke auf 10 setzen
                                            }
                                        
                                            // Lautstärke und Text an Alexa senden
                                            setState('alexa2.0.Echo-Devices.G2A0XL07022603EU.Commands.speak-volume', lautstaerke);
                                            setState('alexa2.0.Echo-Devices.G2A0XL07022603EU.Commands.speak', text);
                                        }
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • First post
                                          Last post

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        824
                                        Online

                                        31.8k
                                        Users

                                        80.0k
                                        Topics

                                        1.3m
                                        Posts

                                        5
                                        115
                                        6402
                                        Loading More Posts
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                        The ioBroker Community 2014-2023
                                        logo