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
    231

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

FF-Einsätze OÖ auswerten

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

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

    das datum komplett ist wahrscheinlich langweilig

    wie meinst du das?

    die einsätze sind ja eher aktuell und nicht von letzter woche.
    daher ist das komplette datum nicht notwendig.
    wahrscheinlich reicht der Wochentag also

    Montag, 10:45 Uhr oder
    Dienstag, 13:32 Uhr

    hier mal als option noch mit modifizierter zeitausgabe

    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, ';', `${new Date(einsatz.startzeit).toLocaleDateString("de", dateOptions)}, ${new Date(einsatz.startzeit).toLocaleTimeString("de", timeOptions)} Uhr`, ';', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                }
                einsaetzeGesendet.push(einsatz.id);
            }
        })
        return messages.join(";");
    }
    
    sigi234S Online
    sigi234S Online
    sigi234
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #75

    @oliverio

    Hallo, wie kann ich den Abstand verändern?

    Screenshot (957).png

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

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          451

                                          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