NEWS
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? -
@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.
-
@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 änderteinen fehler findest du dann im iobroker log
-
@negalein sagte in FF-Einsätze OÖ auswerten:
speichern der bereits gemeldeten einsätze in einem datenpunkt
Das wäre sicher eine Überlegung wertziemlich 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
vorherlet messages = prepareMessages(einsaetze, false, false);
nachher
let messages = await prepareMessages(einsaetze, false, false);
falls irgendwas nicht funktioniert, bitte dann nochmal deinen kompletten code posten
-
@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? -
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 ichja
-
@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.
-
@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?
-
@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
-
@sigi234 sagte in FF-Einsätze OÖ auswerten:
Kannst du den aktuellen Code mal raufladen?
Ausgabe schaut so aus:
Achtung
Feuerwehreinsatz in xxxxxx
Alarmstufe 0
Verkehrsunfall Aufräumarbeiten
Bezirk xxxxxx
Anzahl Feuerwehren 2 -
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
-
ja, alle zeilen mit console.log einfach auskommentieren
vorher
console.log(....
nachher
//console.log(....
-
Danke
-
Hallo Oliver!
Ist es möglich, dies noch zu implementieren (in Alexa, Telegram und Email).
<einheiten>
<einheit id="410314">Feuerwehr/Florian Maasbach (45314)</einheit>
</einheiten>Aber nur den Namen davon.
Im Beispiel alsoFeuerwehr/Florian Maasbach
-
@negalein
Klar
Poste bitte mal deinen letzten skriptstand
Dann kann ich morgen/übermorgen mal schauen
Ist nix großes -
@oliverio sagte in FF-Einsätze OÖ auswerten:
Poste bitte mal deinen letzten skriptstand
Danke
Ah und noch was.
wie hier zu sehn, werde
Eggerding
mit den Abschnitten `Maasbach, Hof, ...) alarmiert.
Sind dann 4 Meldungen hintereinander.
Kann man in so einem Fall dies auf 1 Zusammenfassen?zB so:
Achtung
Feuerwehreinsatz in Eggerding
Alarmstufe 0
Einsatz od. Einsatzübung
Einheit Hof, Maasbach, Vollmannsdorf, Eggerding
Bezirk Schärding
Anzahl Feuerwehren 1 -
Bitte noch deinen letzten Stand vom Skript posten.
-
@negalein sagte in FF-Einsätze OÖ auswerten:
@oliverio sagte in FF-Einsätze OÖ auswerten:Poste bitte mal deinen letzten skriptstand
-
ach, der knopf, danke.
-
für die erste anforderung bitte die folgende funktion tauschen
Es erzeugt nun folgende Nachricht'Achtung;Feuerwehreinsatz in Kefermarkt;Feuerwehr/Florian Kefermarkt ;Alarmstufe 0;Einsatz od. Einsatzübung;Bezirk Freistadt;Anzahl Feuerwehren 1;
Wenn mehrere Einheiten aufgeführt werden, dann lautet die Meldung
'Achtung;Feuerwehreinsatz in Kefermarkt;Feuerwehr/Florian Einheit A Feuerwehr/Florian Einheit B Feuerwehr/Florian Einheit C;Alarmstufe 0;Einsatz od. Einsatzübung;Bezirk Freistadt;Anzahl Feuerwehren 1;
Das ist alles relativ viel Wiederholung. ggfs. könnte man das auch noch so aufbauen:
Einheiten A B C
In meinen aktuellen Daten fängt das Feld immer mit Feuerwehr/Florian an. Das könnte man noch herausfiltern. Wenn das dann aber mal anders heißt dann schlägt das ggfs fehl.
async function prepareMessages(einsaetze, kurz, alle) { let messages = []; const dateOptions = { weekday: "long", }; const timeOptions = { hour: "2-digit", minute: "2-digit" }; let data = await getStateAsync(savedEinsaetzeDP); let einsaetzeGesendet = JSON.parse(data.val || "[]"); einsaetze.map(einsatz => { if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) { let einheiten = einsatz.einheiten.reduce((acc, einheit) => { return acc + einheit.bezeichnung.replace(/(.+) \(\d+\)/gm, "$1") + " "; }, "") if (kurz) { messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', einheiten, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join('')); } else { messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', einheiten, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join('')); } einsaetzeGesendet.push({ id: einsatz.id, time: new Date() }); } }) await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet)); return messages.join(";"); }