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
    434

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

  • 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

    @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
            • 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
              #105

              @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

              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

                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

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

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

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

                OliverIOO 1 Antwort Letzte Antwort
                0
                • OliverIOO 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(";");
                  }
                  
                  NegaleinN Offline
                  NegaleinN Offline
                  Negalein
                  Global Moderator
                  schrieb am zuletzt editiert von Negalein
                  #107

                  @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

                  ° 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:

                    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. :)

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

                    @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

                    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:

                      @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

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

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

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

                      1 Antwort Letzte Antwort
                      0
                      • NegaleinN 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

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

                        @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(";");
                        }
                        

                        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:

                          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(";");
                          }
                          
                          NegaleinN Offline
                          NegaleinN Offline
                          Negalein
                          Global Moderator
                          schrieb am zuletzt editiert von
                          #111

                          @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

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

                          OliverIOO 2 Antworten Letzte Antwort
                          0
                          • NegaleinN Negalein

                            @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

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

                            @negalein
                            Zeile 12

                            
                            return acc + einheit.bezeichnung.replace(/Feuerwehr\/(.+)\s\(\d+\)/gm, "$1") + ", ";
                            
                            

                            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:

                              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

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

                              @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(";");
                              }
                              

                              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
                              1
                              • OliverIOO OliverIO

                                @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(";");
                                }
                                
                                NegaleinN Offline
                                NegaleinN Offline
                                Negalein
                                Global Moderator
                                schrieb am zuletzt editiert von Negalein
                                #114

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

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

                                OliverIOO 1 Antwort Letzte Antwort
                                0
                                • NegaleinN 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)
                                  
                                  
                                  OliverIOO Offline
                                  OliverIOO Offline
                                  OliverIO
                                  schrieb am zuletzt editiert von
                                  #115

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

                                  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
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  385

                                  Online

                                  32.6k

                                  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