NEWS
FF-Einsätze OÖ auswerten
-
gleiche antwort wie vorhin
https://forum.iobroker.net/topic/76734/ff-einsätze-oö-auswerten/32?_=1725986213189 -
so ist das Script aktuell
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 einsaetzeGesendet = []; 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; } function prepareMessages(einsaetze, kurz, alle) { let messages = []; 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, ';', einsatz.startzeit, ';', einsatz.bezirk_name, '; Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join('')); } einsaetzeGesendet.push(einsatz.id); } }) return messages.join("\n"); } function sendTelegram(text, user) { sendTo("telegram.0", "send", { text: text, user: user, }); } function sendEMail(text, to, subject) { sendTo("email.0", "send", { text: text, to: to, subject: subject }); } function sendAlexa(text, lautstaerke) { setState('alexa2.0.Echo-Devices.xxxxxxxxxx.Commands.speak-volume', lautstaerke); setState('alexa2.0.Echo-Devices.xxxxxxx.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, 2); let html1 = toHtml(einsaetze_einheiten); let html2 = toHtml(einsaetze_bezirk); let html3 = toHtml(einsaetze); let messages = prepareMessages(einsaetze, false, false); //messages = prepareMessages(einsaetze, true, false); let nachtruhe=compareTimeBetween("01:00", "06:00"); 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)
-
@negalein sagte in FF-Einsätze OÖ auswerten:
kann gerade nicht testen, da nirgends ein Einsatz ist.
ggfs in die rohe rss seite schauen und mal eine andere einheit raussuchen zum testen
bspw
403212
-
@oliverio sagte in FF-Einsätze OÖ auswerten:
gleiche antwort wie vorhin
ahhh, das hab ich übersehn
ggfs in die rohe rss seite schauen und mal eine andere einheit raussuchen zum testen
hab jetzt Bezirk 10 (Schärding) und FF 410321, 410327 (Schärding und Wernstein).
Aber es kommt alles
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 = prepareMessages(einsaetze, false, false); //messages = 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);
Achtung; Feuerwehreinsatz in Vorchdorf; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:35:22 +0200;Gmunden; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Sierning; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:29:43 +0200;SE-11; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Vöcklamarkt; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:25:55 +0200;Vöcklabruck; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Pettenbach; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:16:57 +0200;Kirchdorf; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Neumarkt im Mühlkreis; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:15:50 +0200;Freistadt; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Polling im Innkreis; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:15:30 +0200;Braunau; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Bad Hall; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:14:01 +0200;SE-11; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Kirchberg-Thening; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:13:34 +0200;Linz-Land; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Schärding; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:13:19 +0200;Schärding; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Timelkam; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:09:02 +0200;Vöcklabruck; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Kremsmünster; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:06:32 +0200;Kirchdorf; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Berg im Attergau; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 19:03:41 +0200;Vöcklabruck; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Laakirchen; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 18:32:27 +0200;Gmunden; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Berg bei Rohrbach; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 18:29:07 +0200;Rohrbach; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Kirchdorf am Inn; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 16:46:26 +0200;Ried im Innkreis; Anzahl Feuerwehren 1; Achtung; Feuerwehreinsatz in Tiefgraben; Alarmstufe 0; Einsatz od. Einsatzübung;Mon, 09 Sep 2024 19:09:30 +0200;Vöcklabruck; Anzahl Feuerwehren 1;
-
@negalein sagte in FF-Einsätze OÖ auswerten:
ja weil du hier die messages aus allen einsätzen aufbereitest
let messages = prepareMessages(einsaetze, false, false);
in zeile 5 und 6 hast du die ja gefiltert und das ergebnis in den variablen gespeichert
let einsaetze_einheiten = filterEinheiten(einsaetze, [410321, 410327]); let einsaetze_bezirk = filterBezirk(einsaetze, 10);
also musst du wählen, ob du die messages aus den einheiten
let messages = prepareMessages(einsaetze_einheiten , false, false);
oder dem bezirk erzeugst
let messages = prepareMessages(einsaetze_bezirk , false, false);
erzeugst.
-
@oliverio sagte in FF-Einsätze OÖ auswerten:
@negalein said in FF-Einsätze OÖ auswerten:
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">hm, das hast du selbst angegeben.
du kannst es auch gerne verlängern.Die Frage war von mir, wo kann ich das verlängern?
-
in dieser zeile, gaanz am ende
schedule('*/30 * * * * *',main)
die sternchenlogik kannst du mit dem cron assistenten im modus simple erzeugen
den findest du im skript über das uhren icon oben rechts -
@oliverio sagte in FF-Einsätze OÖ auswerten:
in dieser zeile, gaanz am ende
schedule('*/30 * * * * *',main)
die sternchenlogik kannst du mit dem cron assistenten im modus simple erzeugen
den findest du im skript über das uhren icon oben rechtsDann habe ich ein altes:
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"; 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) { return einsaetze.filter(einsatz => einheiten.some(id => einsatz.einheiten.some(einheit => einheit.id == id))); } function filterBezirk(einsaetze, bezirk) { 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 main() { let xml = await getData() let json = await xml2json(xml); let einsaetze = normalizeData(json.webext2.einsaetze.einsatz); let einsaetze_einheiten = filterEinheiten(einsaetze, []); let einsaetze_bezirk = filterBezirk(einsaetze, 6); let html1 = toHtml(einsaetze_einheiten); let html2 = toHtml(einsaetze_bezirk); let html3 = toHtml(einsaetze); console.log(html1); console.log(html2); console.log(html3); setState("0_userdata.0.FF-Einsatz.Einsatz", html2); } main();
-
@oliverio sagte in FF-Einsätze OÖ auswerten:
oder dem bezirk erzeugst
ah, jetzt check ich es.
Funktioniert
Das kann man noch formatieren?
Text (Telegram & Mail) und Sprache (Alexa)?? -
@sigi234 sagte in FF-Einsätze OÖ auswerten:
Dann habe ich ein altes:
aktuelles
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 einsaetzeGesendet = []; 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; } function prepareMessages(einsaetze, kurz, alle) { let messages = []; 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, ';', einsatz.startzeit, ';', einsatz.bezirk_name, '; Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join('')); } einsaetzeGesendet.push(einsatz.id); } }) return messages.join("\n"); } function sendTelegram(text, user) { sendTo("telegram.0", "send", { text: text, user: user, }); } function sendEMail(text, to, subject) { sendTo("email.0", "send", { text: text, to: to, subject: subject }); } function sendAlexa(text, lautstaerke) { setState('alexa2.0.Echo-Devices.sss.Commands.speak-volume', lautstaerke); setState('alexa2.0.Echo-Devices.sss.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 = prepareMessages(einsaetze_bezirk, false, false); //messages = 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@xx.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('*/60 * * * * *',main)
-
sieht erst mal gut aus
und nun beobachten ob alles richtig läuft.
dann kann man nachjustieren.du kannst dir auch mehrere emails zusenden mit den gefilterten mesages für bezirk und für einheiten.
let messages_einheiten= prepareMessages(einsaetze_einheiten, false, false); let messages_bezirk = prepareMessages(einsaetze_bezirk, false, false); if (messages_bezirk) sendEMail(messages_bezirk , "christian@xx.at", "Neuer Feuerwehreinsatz"); if (messages_einheiten) sendEMail(messages_einheiten, "christian@xx.at", "Neuer Feuerwehreinsatz");
am besten zuerst einheiten in prepareMessages aufbereiten lassen.
dann sind in messages_bezirk nur noch die restlichen, die vorher nicht gemeldet wurden.im endeffekt funktionieren diese funktionen wie die bausteine in blockly, die du dann sinnvoll aneinander reihen musst. du musst dir nur verdeutlichen was kommt wo rein und was davon du wo wieder reinstopfen möchtest
-
@oliverio sagte in FF-Einsätze OÖ auswerten:
du kannst dir auch mehrere emails zusenden mit den gefilterten mesages für bezirk und für einheiten.
cool, Danke!
Oben hab ich noch was wegen Formatierung ergänzt.
-
@negalein sagte in FF-Einsätze OÖ auswerten:
Das kann man noch formatieren?
Text (Telegram & Mail) und Sprache (Alexa)??klar
was willst du wie formatiert/ausgegeben haben?
wie die letzten tage schonmal geschrieben ist die ausgabe alles sehr roh.
aber das kann man nun feinjustierenidealerweise sind die Texte von Sprache/Mail/Telegram gleich. dann vereinfacht sich das schreiben
-
@oliverio sagte in FF-Einsätze OÖ auswerten:
idealerweise sind die Texte von Sprache/Mail/Telegram gleich. dann vereinfacht sich das schreiben
1 Format für alles reicht vollkommen.
Im Prinzip so ungefähr:
Roh:
Achtung; Feuerwehreinsatz in Dorf an der Pram; Alarmstufe 0; Einsatz od. Einsatzübung;Tue, 10 Sep 2024 20:29:56 +0200;Schärding; Anzahl Feuerwehren 1;Format:
Achtung
Feuerwehreinsatz in Dorf an der Pram
Alarmstufe 0
Einsatz od. Einsatzübung -
bitte diese funktionen ersetzen.
ich habe mir mal erlaubt die zeit auch zu optimierenfunction prepareMessages(einsaetze, kurz, alle) { let messages = []; 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")} ${new Date(einsatz.startzeit).toLocaleTimeString("de")}`, ';', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join('')); } einsaetzeGesendet.push(einsatz.id); } }) 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.xxxxxxx.Commands.speak', text.replace(/;/gm, "\n"),); }
mit allen sieht das jetzt so aus
Achtung Feuerwehreinsatz in Walding Alarmstufe 0 Brandverdacht 10.9.2024 20:46:32 Urfahr-Umgebung Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Scharten Alarmstufe 0 Einsatz od. Einsatzübung 10.9.2024 20:39:03 Eferding Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Bad Zell Alarmstufe 0 Brand PKW im Freien 10.9.2024 20:34:47 Freistadt Anzahl Feuerwehren 3 Achtung Feuerwehreinsatz in Dorf an der Pram Alarmstufe 0 Einsatz od. Einsatzübung 10.9.2024 20:29:56 Schärding Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Vorchdorf Alarmstufe 0 Einsatz od. Einsatzübung 10.9.2024 19:35:22 Gmunden Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Vöcklamarkt Alarmstufe 0 Einsatz od. Einsatzübung 10.9.2024 19:25:55 Vöcklabruck Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Neumarkt im Mühlkreis Alarmstufe 0 Einsatz od. Einsatzübung 10.9.2024 19:15:50 Freistadt Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Timelkam Alarmstufe 0 Einsatz od. Einsatzübung 10.9.2024 19:09:02 Vöcklabruck Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Berg bei Rohrbach Alarmstufe 0 Einsatz od. Einsatzübung 10.9.2024 18:29:07 Rohrbach Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Kirchdorf am Inn Alarmstufe 0 Einsatz od. Einsatzübung 10.9.2024 16:46:26 Ried im Innkreis Anzahl Feuerwehren 1 Achtung Feuerwehreinsatz in Tiefgraben Alarmstufe 0 Einsatz od. Einsatzübung 9.9.2024 19:09:30 Vöcklabruck Anzahl Feuerwehren 1
-
@oliverio sagte in FF-Einsätze OÖ auswerten:
mit allen sieht das jetzt so aus
Danke
kleine Änderungen bitte
Feuerwehreinsatz in Dorf an der Pram,
Alarmstufe 0,
Einsatz od. Einsatzübung,
10.9.2024 20:29:56
Schärding
Anzahl Feuerwehren 1bitte mit
,
, da die Quassel Alexandra sonst alles in einer Wurst plappert.Das durchgestrichene bitte raus.
-
wo soll das komma überall hin?
nach jeder Zeile? -
@oliverio sagte in FF-Einsätze OÖ auswerten:
nach jeder Zeile?
Ja, denke schon.
Bin mir nicht sicher,Ok, hab gerade getestet.
Ein
;
macht eine schönere PauseAlso
Achtung;
Feuerwehreinsatz in Dorf an der Pram;
Alarmstufe 0;
Einsatz od. Einsatzübung;
Anzahl Feuerwehren 1 -
dann das hier ersetzen
function sendAlexa(text, lautstaerke) { setState('alexa2.0.Echo-Devices.xxxxxxxxxx.Commands.speak-volume', lautstaerke); setState('alexa2.0.Echo-Devices.xxxxxxx.Commands.speak', text,); }
-
@oliverio sagte in FF-Einsätze OÖ auswerten:
dann das hier ersetzen
Danke
Datum liest sie komisch vor
aus
10.9.2024
wird10 komma 9 komma 2024
Uhrzeit wird richtig vorgelesen.