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
    275

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

  • 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.
  • sigi234S sigi234

    @oliverio

    Hallo, wie kann ich den Abstand verändern?

    Screenshot (957).png

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

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

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

    sigi234S 1 Antwort Letzte Antwort
    0
    • NegaleinN Negalein

      @OliverIO

      Hallo Oliver

      Danke schonmal :)

      Also, dies ist die URL
      https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml

      Die Seite (XML) soll alle 30 Sekunden abgefragt werden, ob bestimmte Feuerwehren (bei mir 2) aktuell einen Einsatz haben.
      <einheit id="410321">
      <einheit id="410327">

      Oder nach Bezirk
      <bezirk id="10>

      Einheid oder Bezirk; beides nicht gleichzeitig nötig; aber wenn Einheit, dann sollten mehrere Angaben möglich sein

      Intressant ist:
      <alarmstufe>
      <alarmtext>
      <resource name="hier steht der Name" hier die ID"> ---> nicht ident mit einheit id; deshalb nur Name wichtig
      <earea>
      <lng>
      <lat>

      Visualisierung:
      über einzelne DP, damit VIS, Alexa und Telegramm gefüttert werden können.

      Hoffe es ist einigermassen Verständlich erklärt. ;)

      Meister MopperM Online
      Meister MopperM Online
      Meister Mopper
      schrieb am zuletzt editiert von
      #77

      @negalein

      Habe gerade deinen thread erstmalig gelesen.

      Warum stellt ihr diese einsatzsensiblen Daten abrufbar ins Internet? Gibt es keine Intranet-Lösung?

      Proxmox und HA

      NegaleinN 1 Antwort Letzte Antwort
      0
      • Meister MopperM Meister Mopper

        @negalein

        Habe gerade deinen thread erstmalig gelesen.

        Warum stellt ihr diese einsatzsensiblen Daten abrufbar ins Internet? Gibt es keine Intranet-Lösung?

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

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

        Warum stellt ihr diese einsatzsensiblen Daten abrufbar ins Internet? Gibt es keine Intranet-Lösung?

        Doch, aber nur für FF-Mitglieder.

        Diese Daten die ich abrufe, sind dank DSGVO nicht einsatzsensibel. Es ist der Einsatzort nicht ersichtlich.

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

        Meister MopperM 1 Antwort Letzte Antwort
        0
        • NegaleinN Negalein

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

          Warum stellt ihr diese einsatzsensiblen Daten abrufbar ins Internet? Gibt es keine Intranet-Lösung?

          Doch, aber nur für FF-Mitglieder.

          Diese Daten die ich abrufe, sind dank DSGVO nicht einsatzsensibel. Es ist der Einsatzort nicht ersichtlich.

          Meister MopperM Online
          Meister MopperM Online
          Meister Mopper
          schrieb am zuletzt editiert von
          #79

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

          Diese Daten die ich abrufe, sind dank DSGVO nicht einsatzsensibel. Es ist der Einsatzort nicht ersichtlich.

          Ja, das schon, aber die Einsatzbelastung ist schon relevant.

          Wenn jemand stören möchte, kann er es zu geeigneten Zeiten tun, um den größtmöglichen Schaden anzurichten.

          Das sollte aus meiner Sicht bedacht werden.

          Proxmox und HA

          NegaleinN 1 Antwort Letzte Antwort
          0
          • Meister MopperM Meister Mopper

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

            Diese Daten die ich abrufe, sind dank DSGVO nicht einsatzsensibel. Es ist der Einsatzort nicht ersichtlich.

            Ja, das schon, aber die Einsatzbelastung ist schon relevant.

            Wenn jemand stören möchte, kann er es zu geeigneten Zeiten tun, um den größtmöglichen Schaden anzurichten.

            Das sollte aus meiner Sicht bedacht werden.

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

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

            Das sollte aus meiner Sicht bedacht werden.

            gibt bei uns GsD noch normale Menschen.

            Wenn jemand stören möchte, kann er es zu geeigneten Zeiten tun, um den größtmöglichen Schaden anzurichten.

            dann dürfte auch keine Sirene, usw. losgehn. Ein Einsatz ist normal weiträumig zu hören.
            Zumindest bei uns. ;)

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

            Meister MopperM 1 Antwort Letzte Antwort
            0
            • NegaleinN Negalein

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

              Das sollte aus meiner Sicht bedacht werden.

              gibt bei uns GsD noch normale Menschen.

              Wenn jemand stören möchte, kann er es zu geeigneten Zeiten tun, um den größtmöglichen Schaden anzurichten.

              dann dürfte auch keine Sirene, usw. losgehn. Ein Einsatz ist normal weiträumig zu hören.
              Zumindest bei uns. ;)

              Meister MopperM Online
              Meister MopperM Online
              Meister Mopper
              schrieb am zuletzt editiert von
              #81

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

              dann dürfte auch keine Sirene, usw. losgehn. Ein Einsatz ist normal weiträumig zu hören.
              Zumindest bei uns.

              Ja, das mag sein, aber bei geplanten Anschlägen von außen hilft die Sirene nüscht :man-shrugging: .

              Ich zumindest würde die Thematik mal oben einwerfen.

              Proxmox und HA

              NegaleinN 1 Antwort Letzte Antwort
              0
              • NegaleinN Negalein

                @oliverio

                Gutn Morgen

                gerade ist eine Meldung gekommen :)

                Achtung
                Feuerwehreinsatz in Taufkirchen an der Pram
                Alarmstufe 0
                Einsatz od. Einsatzübung
                Mittwoch, 07:50 Uhr
                Schärding
                Anzahl Feuerwehren 1


                Bitte noch Datum, Zeit entfernen & vor einsatz.bezirk_name bitte das Wort Bezirk einfügen.

                Achtung
                Feuerwehreinsatz in Taufkirchen an der Pram
                Bezirk Schärding
                Alarmstufe 0
                Einsatz od. Einsatzübung
                Anzahl Feuerwehren 1

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

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

                Bitte noch Datum, Zeit entfernen & vor einsatz.bezirk_name bitte das Wort Bezirk einfügen

                function prepareMessages(einsaetze, kurz, alle) {
                    let messages = [];
                    const dateOptions = {
                        weekday: "long",
                    };
                    const timeOptions = { hour: "2-digit", minute: "2-digit" };
                    einsaetze.map(einsatz => {
                        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(einsatz.id);
                        }
                    })
                    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

                1 Antwort Letzte Antwort
                0
                • sigi234S sigi234

                  @oliverio

                  Hallo,

                  gerade ein Einsatz, wo kann ich einstellen das Ansage Alexa und die E-Mail nur 1 mal kommt?

                  Edit:

                  Anscheinend da:

                  let messages = prepareMessages(einsaetze_bezirk, true, false);
                  

                  Das letzte false war es, hatte da true

                  EDIT2

                  Doch nicht

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

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

                  EDIT2
                  Doch nicht

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

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

                  sigi234S NegaleinN 2 Antworten Letzte Antwort
                  0
                  • Meister MopperM Meister Mopper

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

                    dann dürfte auch keine Sirene, usw. losgehn. Ein Einsatz ist normal weiträumig zu hören.
                    Zumindest bei uns.

                    Ja, das mag sein, aber bei geplanten Anschlägen von außen hilft die Sirene nüscht :man-shrugging: .

                    Ich zumindest würde die Thematik mal oben einwerfen.

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

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

                    Ja, das mag sein, aber bei geplanten Anschlägen von außen hilft die Sirene nüscht .

                    das würde jetzt hier zu OT werden.

                    Aber noch 1x OT ;)
                    Was meinst du mit "bei geplanten Anschlägen von außen hilft die Sirene nüscht"?
                    Gerne auch per PN weiter.

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

                    1 Antwort Letzte Antwort
                    0
                    • OliverIOO OliverIO

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

                      EDIT2
                      Doch nicht

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

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

                      @oliverio

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

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

                      OliverIOO 1 Antwort Letzte Antwort
                      0
                      • OliverIOO OliverIO

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

                        EDIT2
                        Doch nicht

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

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

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

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

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

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

                        OliverIOO 1 Antwort Letzte Antwort
                        1
                        • sigi234S sigi234

                          @oliverio

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

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

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

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

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

                          einen fehler findest du dann im iobroker log

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

                          1 Antwort Letzte Antwort
                          1
                          • NegaleinN Negalein

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

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

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

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

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

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

                            ziemlich am anfang (zeile 3) folgendes einfügen

                            let savedEinsaetzeDP = "0_userdata.a";
                            

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

                            let einsaetzeGesendet ....
                            

                            folgende funktion bitte tauschen

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

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

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

                            nachher

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

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

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

                            NegaleinN 1 Antwort Letzte Antwort
                            0
                            • OliverIOO OliverIO

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

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

                              ziemlich am anfang (zeile 3) folgendes einfügen

                              let savedEinsaetzeDP = "0_userdata.a";
                              

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

                              let einsaetzeGesendet ....
                              

                              folgende funktion bitte tauschen

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

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

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

                              nachher

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

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

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

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

                              nachher

                              bei mir 1x

                              so richtig, denke ich

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

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

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

                              OliverIOO 1 Antwort Letzte Antwort
                              0
                              • NegaleinN Negalein

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

                                nachher

                                bei mir 1x

                                so richtig, denke ich

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

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

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

                                @negalein

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

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

                                ja

                                bei mir 1x
                                so richtig, denke ich

                                ja

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

                                NegaleinN 1 Antwort Letzte Antwort
                                0
                                • OliverIOO OliverIO

                                  @negalein

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

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

                                  ja

                                  bei mir 1x
                                  so richtig, denke ich

                                  ja

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

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

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

                                  Danke, funktioniert.

                                  Der neue DP wird beschrieben. :)

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

                                  sigi234S 1 Antwort Letzte Antwort
                                  0
                                  • NegaleinN Negalein

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

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

                                    Danke, funktioniert.

                                    Der neue DP wird beschrieben. :)

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

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

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

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

                                    Danke, funktioniert.

                                    Der neue DP wird beschrieben. :)

                                    Kannst du den aktuellen Code mal raufladen?

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

                                    NegaleinN 1 Antwort Letzte Antwort
                                    0
                                    • OliverIOO OliverIO

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

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

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

                                      Aktuell wird nur eine rohe html Tabelle ausgegeben.

                                      Kann man es auch als JSON-Table ausgeben?

                                      Edit:

                                      So wie bei Lebensmittelwarnung

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

                                      1 Antwort Letzte Antwort
                                      0
                                      • sigi234S sigi234

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

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

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

                                        Danke, funktioniert.

                                        Der neue DP wird beschrieben. :)

                                        Kannst du den aktuellen Code mal raufladen?

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

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

                                        Kannst du den aktuellen Code mal raufladen?

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

                                        Ausgabe schaut so aus:

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

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

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

                                          @OliverIO

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

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

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

                                          PS: Kaffee ist nicht vergessen ;)

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

                                          OliverIOO 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          785

                                          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