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
    235

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

FF-Einsätze OÖ auswerten

Geplant Angeheftet Gesperrt Verschoben JavaScript
115 Beiträge 5 Kommentatoren 12.9k Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • NegaleinN Negalein

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

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

    Danke, funktioniert.

    Der neue DP wird beschrieben. :)

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

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

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

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

    Danke, funktioniert.

    Der neue DP wird beschrieben. :)

    Kannst du den aktuellen Code mal raufladen?

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

    NegaleinN 1 Antwort Letzte Antwort
    0
    • OliverIOO OliverIO

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

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

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

      Aktuell wird nur eine rohe html Tabelle ausgegeben.

      Kann man es auch als JSON-Table ausgeben?

      Edit:

      So wie bei Lebensmittelwarnung

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

      1 Antwort Letzte Antwort
      0
      • sigi234S sigi234

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

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

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

        Danke, funktioniert.

        Der neue DP wird beschrieben. :)

        Kannst du den aktuellen Code mal raufladen?

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

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

        Kannst du den aktuellen Code mal raufladen?

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

        Ausgabe schaut so aus:

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

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

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

          @OliverIO

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

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

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

          PS: Kaffee ist nicht vergessen ;)

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

          OliverIOO 1 Antwort Letzte Antwort
          0
          • NegaleinN Negalein

            @OliverIO

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

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

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

            PS: Kaffee ist nicht vergessen ;)

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

            @negalein

            ja, alle zeilen mit console.log einfach auskommentieren

            vorher

            console.log(....
            

            nachher

            //console.log(....
            

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

            NegaleinN 1 Antwort Letzte Antwort
            0
            • OliverIOO OliverIO

              @negalein

              ja, alle zeilen mit console.log einfach auskommentieren

              vorher

              console.log(....
              

              nachher

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

              @oliverio

              Danke

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

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

                Hallo Oliver!

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

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

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

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

                OliverIOO 1 Antwort Letzte Antwort
                0
                • NegaleinN Negalein

                  Hallo Oliver!

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

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

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

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

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

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

                  NegaleinN 1 Antwort Letzte Antwort
                  0
                  • OliverIOO OliverIO

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

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

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

                    Poste bitte mal deinen letzten skriptstand

                    Danke

                    Ah und noch was.

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

                    zB so:

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

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

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

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

                    OliverIOO NegaleinN 2 Antworten Letzte Antwort
                    0
                    • NegaleinN Negalein

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

                      Poste bitte mal deinen letzten skriptstand

                      Danke

                      Ah und noch was.

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

                      zB so:

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

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

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

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

                      @negalein

                      Bitte noch deinen letzten Stand vom Skript posten.

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

                      1 Antwort Letzte Antwort
                      0
                      • NegaleinN Negalein

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

                        Poste bitte mal deinen letzten skriptstand

                        Danke

                        Ah und noch was.

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

                        zB so:

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

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

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

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

                        @OliverIO

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

                        Poste bitte mal deinen letzten skriptstand

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

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

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

                          @negalein

                          ach, der knopf, danke.

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

                          1 Antwort Letzte Antwort
                          1
                          • NegaleinN Negalein

                            @OliverIO

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

                            Poste bitte mal deinen letzten skriptstand

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

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

                            @negalein

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

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

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

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

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

                            Einheiten A B C
                            

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

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

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

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          809

                                          Online

                                          32.5k

                                          Benutzer

                                          81.9k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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