- Home
- Deutsch
- Skripten / Logik
- JavaScript
- Fehler im script nach Update Adapter
Fehler im script nach Update Adapter
-
@wendy2702
Jo, heute abend ändere ich das. -
Danke!
-
@wendy2702 nachdem ich im sayit die Sprache auf AWS Polly gestellt habe, kam nun auch eine Ansage
-
OK.
Das habe ich schon aktiv seitdem es diese Möglichkeit gibt.
-
Bestellte Änderungen eingefügt.
Hab die Pushdiensteinstellung geändert sollte selbst erklärend sein.
Die Formatierung von Datum/Zeit ist oben im Script und kann angepasst werden.EDIT: die Pusheinstellungen hab ich geändert, weil mir die Fehlermeldungen wegen fehlendem SayIt auf den Keks gingen
/* ************************************************************************* */ /* Script zum Übertragen der DWD-Wetterwarnungen über */ /* Telegram, Pushover, Home24-Mediaplayer oder SayIt */ /* mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals) */ /* Stand: 130022017 PrinzEisenherz1 */ /* */ /* */ /* - Fehlerbehebung z.B. 5 gültig bis 5 */ /* */ /* */ /* */ /* */ /* Variante für 5-warnings */ /* */ /* ************************************************************************* */ var request = require('request'); /* Nachrichten-Dienst festlegen */ /* Konstanten nicht verändern */ const TELEGRAM = 1; const PUSHOVER = 2; const EMAIL = 4; const SAYIT = 8; var pushdienst=0; //pushdienst+= TELEGRAM; // Auskommentieren zum aktivieren //pushdienst+= PUSHOVER; // Auskommentieren zum aktivieren //pushdienst+= EMAIL; // Auskommentieren zum aktivieren //pushdienst+= SAYIT; // Auskommentieren zum aktivieren var senderEmailID = ""; // mit Sender Emailadresse füllen. email Adapter muß installiert sein var empfaengerEmailID = "";// mit Empfänger Emailadresse füllen. // Filter einstellungen const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden; const maxhoehe = 1000 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" const formatierungString = "TT.MM.YY SS:mm"; /* Konfiguration Sprachausgabe über Home24-Mediaplayer */ var idSprachausgabe = false; // Wenn zusätzlich eine Sprachausgabe erfolgen soll dann auf true var idMediaplayer = "192.168.178.68:50000"; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer /* Konfiguration Sprachausgabe über SayIt */ var idSprachausgabeSayIt = true; // Wenn zusätzlich eine Sprachausgabe über SayIt erfolgen soll dann auf true var idSayIt = "sayit.0.tts.text"; var lautstaerke = 60; /* Trigger für Wetterwarnungen */ var idDescription0 = "dwd.0.warning.object"; var idDescription1 = "dwd.0.warning1.object"; var idDescription2 = "dwd.0.warning2.object"; var idDescription3 = "dwd.0.warning3.object"; var idDescription4 = "dwd.0.warning4.object"; /* Arrays festlegen */ var newDescriptions = [5]; var oldDescriptions = [5]; var newHeadlines = [5]; var oldHeadlines = [5]; var newBegins = [5]; var oldBegins = [5]; var newEnds = [5]; var oldEnds = [5]; var timer = null; /* aktivieren bzw erstmaliges Befüllen der arrays */ newDescriptions[0] = ''; newDescriptions[1] = ''; newDescriptions[2] = ''; newDescriptions[3] = ''; newDescriptions[4] = ''; oldDescriptions[0] = ''; oldDescriptions[1] = ''; oldDescriptions[2] = ''; oldDescriptions[3] = ''; oldDescriptions[4] = ''; newHeadlines[0] = ''; newHeadlines[1] = ''; newHeadlines[2] = ''; newHeadlines[3] = ''; newHeadlines[4] = ''; oldHeadlines[0] = ''; oldHeadlines[1] = ''; oldHeadlines[2] = ''; oldHeadlines[3] = ''; oldHeadlines[4] = ''; newBegins[0] = ''; newBegins[1] = ''; newBegins[2] = ''; newBegins[3] = ''; newBegins[4] = ''; oldBegins[0] = ''; oldBegins[1] = ''; oldBegins[2] = ''; oldBegins[3] = ''; oldBegins[4] = ''; newEnds[0] = ''; newEnds[1] = ''; newEnds[2] = ''; newEnds[3] = ''; newEnds[4] = ''; oldEnds[0] = ''; oldEnds[1] = ''; oldEnds[2] = ''; oldEnds[3] = ''; oldEnds[4] = ''; function check() { /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */ if(newDescriptions[0] === "") { MeldungSpracheDWD = 'Achtung' + ' . ' + 'Alle Warnmeldungen des DWD wurden aufgehoben'; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((pushdienst & SAYIT)!=0 && idSprachausgabe === true){ var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; request(Url); } /* Bereich für Sprachausgabe SayIt im Zeitraum */ var ENDE= '22:30'; // Ende immer 22:30h var START; schedule("0 6 * * *", function (){ //ausgelöst jeden Tag um 6h morgens; prüft, ob Wochenende ist var date = new Date(); var n = date.getDay(); var weekend = 0; weekend = (n === 0 || n == 6) ? 1 : 0; if(weekend == 1){ // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h START = '9:00'; } else{ START = '6:45'; } }); /* Bereich für Sprachausgabe über SayIt */ if((pushdienst & SAYIT)!=0 && idSprachausgabeSayIt === true && compareTime(START, ENDE, 'between')){ // Ansage über Sayit nur im definierten Zeitbereich setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); } if ((pushdienst & TELEGRAM)!=0 ) { setTimeout(()=>(sendTo ("telegram.0", 'Alle Warnmeldungen des DWD wurden aufgehoben')), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0 ) { sendTo("pushover.0", 'Alle Warnmeldungen des DWD wurden aufgehoben'); } if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID !='') { sendEmail('Wetterentwarnung des DWD(iobroker)','Alle Warnmeldungen des DWD wurden aufgehoben'); } /* alle Sicherungen Wetterwarnung löschen */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); return; } /* Variablen für Meldungen Text */ var MeldungOld = ''; var MeldungNew = ''; /* Variablen für Meldungen Sprache */ var MeldungSpracheDWD = ''; var MeldungNewSprache = ''; var MeldungOldSprache = ''; var AllEmailMsg = ''; var headline; var description; var begin; var end; var i; var warn; /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */ for(i = 0; i < 5; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = oldHeadlines[i]; description = oldDescriptions[i]; begin = oldBegins[i]; end = oldEnds[i]; if(newDescriptions.indexOf(description) == -1 && description !== '' && description !== undefined) { MeldungOld = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben'; MeldungOldSprache = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben' + ' . '; if ((pushdienst & TELEGRAM)!=0) { setTimeout(()=>(sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben")), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0) { sendTo("pushover.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"); } if ((pushdienst & EMAiL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') { AllEmailMsg+="Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"+'\n'; } /* Verknüpfen aller aufgehobenen Wetterwarnungen */ if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){ MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache; } } } /* Bereich für 'Neue Amtliche Wetterwarnung' */ for(i = 0; i < 5; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = newHeadlines[i]; description = newDescriptions[i]; begin = newBegins[i]; end = newEnds[i]; if(oldDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) { MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description; /* Entfernen °C für Sprachausgabe */ var replaceDescription0 = entferneDatenpunkt(description); MeldungNewSprache = headline + " gültig vom " + begin + " Uhr, bis " + end + " Uhr. " + replaceDescription0 + ' . '; if ((pushdienst & TELEGRAM)!=0) { setTimeout(()=>(sendTo ("telegram.0", MeldungNew)), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0) { sendTo("pushover.0", MeldungNew); } if ((pushdienst & EMAIL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') { AllEmailMsg+=MeldungNew+'\n'; } /* Verknüpfen aller neuen Warnmeldungen */ if(MeldungNewSprache !== "" && MeldungNewSprache !== undefined){ MeldungSpracheDWD = MeldungSpracheDWD + MeldungNewSprache; } } } /* Verknüpfen aller neuen und abgelaufenen Warnmeldungen */ MeldungSpracheDWD = 'Achtung . ' + MeldungSpracheDWD; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((pushdienst & SAYIT)!=0 && (idSprachausgabe === true) && (MeldungSpracheDWD !== "")){ var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; log('Url2 :' + Url2); request(Url2); } /* Bereich für Sprachausgabe über SayIt */ if((pushdienst & SAYIT)!=0 && (idSprachausgabeSayIt === true) && (MeldungSpracheDWD !== "")){ setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); } if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID != '' && AllEmailMsg != '') { sendEmail("Wetterwarnungen des DWD(iobroker)",AllEmailMsg); } /* Neue Werte sichern */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); } /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */ function entferneDatenpunkt(beschreibung) { var rueckgabe; rueckgabe = beschreibung; try { rueckgabe = rueckgabe.replace(/\°C/g, "Grad"); rueckgabe = rueckgabe.replace(/\km\/h/g, "Kilometer pro Stunde"); } catch(e) {} return rueckgabe; } on(idDescription0, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[0] = warn.description === undefined ? '' : warn.description; newHeadlines[0] = warn.headline === undefined ? '' : warn.headline; newBegins[0] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[0] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription1, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[1] = warn.description === undefined ? '' : warn.description; newHeadlines[1] = warn.headline === undefined ? '' : warn.headline; newBegins[1] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[1] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription2, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[2] = warn.description === undefined ? '' : warn.description; newHeadlines[2] = warn.headline === undefined ? '' : warn.headline; newBegins[2] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[2] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription3, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[3] = warn.description === undefined ? '' : warn.description; newHeadlines[3] = warn.headline === undefined ? '' : warn.headline; newBegins[3] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[3] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription4, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[4] = warn.description === undefined ? '' : warn.description; newHeadlines[4] = warn.headline === undefined ? '' : warn.headline; newBegins[4] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[4] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); function getFormatDate(a) { if (!a) return ''; return formatDate(a.getTime(), formatierungString); } function sendEmail(topic, msg) { if (senderEmailID=='') { log('senderEmailID ist nicht definiert!','warn'); return; } if (empfaengerEmailID=='') { log('empfaengerEmailID ist nicht definiert!','warn'); return; } sendTo("email", { from: senderEmailID, to: empfaengerEmailID, subject: topic, text: msg }); }
-
Das liest und hört sich sehr gut an.
Danke!
-
@wendy2702
Ich sehe gerade das ich Home24 und SayIt in einen Topf geworfen habe. Man kann nur beides aktivieren oder deaktivieren. Macht das was?//Version 5 /* ************************************************************************* */ /* Script zum Übertragen der DWD-Wetterwarnungen über */ /* Telegram, Pushover, Home24-Mediaplayer oder SayIt */ /* mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals) */ /* Stand: 130022017 PrinzEisenherz1 */ /* */ /* */ /* - Fehlerbehebung z.B. 5 gültig bis 5 */ /* */ /* */ /* */ /* */ /* Variante für 5-warnings */ /* */ /* ************************************************************************* */ var request = require('request'); /* Nachrichten-Dienst festlegen */ /* Konstanten nicht verändern */ const TELEGRAM = 1; const PUSHOVER = 2; const EMAIL = 4; const SAYIT = 8; const HOMETWO = 16; var pushdienst=0; //pushdienst+= TELEGRAM; // Auskommentieren zum aktivieren //pushdienst+= PUSHOVER; // Auskommentieren zum aktivieren //pushdienst+= EMAIL; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen //pushdienst+= SAYIT; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen //pushdienst+= HOMETWO; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen // Filtereinstellungen const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden; const maxhoehe = 1000 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" const formatierungString = "TT.MM.YY SS:mm"; /* Einstellungen zur Emailbenachrichtigung*/ var senderEmailID = ""; // mit Sender Emailadresse füllen. email Adapter muß installiert sein var empfaengerEmailID = "";// mit Empfänger Emailadresse füllen. /* Konfiguration Sprachausgabe über Home24-Mediaplayer */ var idMediaplayer = "192.168.178.68:50000"; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer /* Konfiguration Sprachausgabe über SayIt */ var idSayIt = "sayit.0.tts.text"; var lautstaerke = 60; /* Keine Anpassungen ab hier, außer du weißt was du tuest */ var idSprachausgabe = ((pushdienst & HOMETWO) !=0); var idSprachausgabeSayIt = ((pushdienst & SAYIT) !=0); /* Trigger für Wetterwarnungen */ var idDescription0 = "dwd.0.warning.object"; var idDescription1 = "dwd.0.warning1.object"; var idDescription2 = "dwd.0.warning2.object"; var idDescription3 = "dwd.0.warning3.object"; var idDescription4 = "dwd.0.warning4.object"; /* Arrays festlegen */ var newDescriptions = [5]; var oldDescriptions = [5]; var newHeadlines = [5]; var oldHeadlines = [5]; var newBegins = [5]; var oldBegins = [5]; var newEnds = [5]; var oldEnds = [5]; var timer = null; /* aktivieren bzw erstmaliges Befüllen der arrays */ newDescriptions[0] = ''; newDescriptions[1] = ''; newDescriptions[2] = ''; newDescriptions[3] = ''; newDescriptions[4] = ''; oldDescriptions[0] = ''; oldDescriptions[1] = ''; oldDescriptions[2] = ''; oldDescriptions[3] = ''; oldDescriptions[4] = ''; newHeadlines[0] = ''; newHeadlines[1] = ''; newHeadlines[2] = ''; newHeadlines[3] = ''; newHeadlines[4] = ''; oldHeadlines[0] = ''; oldHeadlines[1] = ''; oldHeadlines[2] = ''; oldHeadlines[3] = ''; oldHeadlines[4] = ''; newBegins[0] = ''; newBegins[1] = ''; newBegins[2] = ''; newBegins[3] = ''; newBegins[4] = ''; oldBegins[0] = ''; oldBegins[1] = ''; oldBegins[2] = ''; oldBegins[3] = ''; oldBegins[4] = ''; newEnds[0] = ''; newEnds[1] = ''; newEnds[2] = ''; newEnds[3] = ''; newEnds[4] = ''; oldEnds[0] = ''; oldEnds[1] = ''; oldEnds[2] = ''; oldEnds[3] = ''; oldEnds[4] = ''; function check() { /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */ if(newDescriptions[0] === "") { MeldungSpracheDWD = 'Achtung' + ' . ' + 'Alle Warnmeldungen des DWD wurden aufgehoben'; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((pushdienst & HOMETWO)!=0 && idSprachausgabe === true){ var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; request(Url); } /* Bereich für Sprachausgabe SayIt im Zeitraum */ var ENDE= '22:30'; // Ende immer 22:30h var START; schedule("0 6 * * *", function (){ //ausgelöst jeden Tag um 6h morgens; prüft, ob Wochenende ist var date = new Date(); var n = date.getDay(); var weekend = 0; weekend = (n === 0 || n == 6) ? 1 : 0; if(weekend == 1){ // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h START = '9:00'; } else{ START = '6:45'; } }); /* Bereich für Sprachausgabe über SayIt */ if((pushdienst & SAYIT)!=0 && idSprachausgabeSayIt === true && compareTime(START, ENDE, 'between')){ // Ansage über Sayit nur im definierten Zeitbereich setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); } if ((pushdienst & TELEGRAM)!=0 ) { setTimeout(()=>(sendTo ("telegram.0", 'Alle Warnmeldungen des DWD wurden aufgehoben')), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0 ) { sendTo("pushover.0", 'Alle Warnmeldungen des DWD wurden aufgehoben'); } if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID !='') { sendEmail('Wetterentwarnung des DWD(iobroker)','Alle Warnmeldungen des DWD wurden aufgehoben'); } /* alle Sicherungen Wetterwarnung löschen */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); return; } /* Variablen für Meldungen Text */ var MeldungOld = ''; var MeldungNew = ''; /* Variablen für Meldungen Sprache */ var MeldungSpracheDWD = ''; var MeldungNewSprache = ''; var MeldungOldSprache = ''; var AllEmailMsg = ''; var headline; var description; var begin; var end; var i; var warn; /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */ for(i = 0; i < 5; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = oldHeadlines[i]; description = oldDescriptions[i]; begin = oldBegins[i]; end = oldEnds[i]; if(newDescriptions.indexOf(description) == -1 && description !== '' && description !== undefined) { MeldungOld = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben'; MeldungOldSprache = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben' + ' . '; if ((pushdienst & TELEGRAM)!=0) { setTimeout(()=>(sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben")), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0) { sendTo("pushover.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"); } if ((pushdienst & EMAiL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') { AllEmailMsg+="Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"+'\n'; } /* Verknüpfen aller aufgehobenen Wetterwarnungen */ if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){ MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache; } } } /* Bereich für 'Neue Amtliche Wetterwarnung' */ for(i = 0; i < 5; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = newHeadlines[i]; description = newDescriptions[i]; begin = newBegins[i]; end = newEnds[i]; if(oldDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) { MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description; /* Entfernen °C für Sprachausgabe */ var replaceDescription0 = entferneDatenpunkt(description); MeldungNewSprache = headline + " gültig vom " + begin + " Uhr, bis " + end + " Uhr. " + replaceDescription0 + ' . '; if ((pushdienst & TELEGRAM)!=0) { setTimeout(()=>(sendTo ("telegram.0", MeldungNew)), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0) { sendTo("pushover.0", MeldungNew); } if ((pushdienst & EMAIL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') { AllEmailMsg+=MeldungNew+'\n'; } /* Verknüpfen aller neuen Warnmeldungen */ if(MeldungNewSprache !== "" && MeldungNewSprache !== undefined){ MeldungSpracheDWD = MeldungSpracheDWD + MeldungNewSprache; } } } /* Verknüpfen aller neuen und abgelaufenen Warnmeldungen */ MeldungSpracheDWD = 'Achtung . ' + MeldungSpracheDWD; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((pushdienst & HOMETWO)!=0 && (idSprachausgabe === true) && (MeldungSpracheDWD !== "")){ var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; log('Url2 :' + Url2); request(Url2); } /* Bereich für Sprachausgabe über SayIt */ if((pushdienst & SAYIT)!=0 && (idSprachausgabeSayIt === true) && (MeldungSpracheDWD !== "")){ setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); } if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID != '' && AllEmailMsg != '') { sendEmail("Wetterwarnungen des DWD(iobroker)",AllEmailMsg); } /* Neue Werte sichern */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); } /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */ function entferneDatenpunkt(beschreibung) { var rueckgabe; rueckgabe = beschreibung; try { rueckgabe = rueckgabe.replace(/\°C/g, "Grad"); rueckgabe = rueckgabe.replace(/\km\/h/g, "Kilometer pro Stunde"); } catch(e) {} return rueckgabe; } on(idDescription0, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[0] = warn.description === undefined ? '' : warn.description; newHeadlines[0] = warn.headline === undefined ? '' : warn.headline; newBegins[0] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[0] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription1, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[1] = warn.description === undefined ? '' : warn.description; newHeadlines[1] = warn.headline === undefined ? '' : warn.headline; newBegins[1] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[1] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription2, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[2] = warn.description === undefined ? '' : warn.description; newHeadlines[2] = warn.headline === undefined ? '' : warn.headline; newBegins[2] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[2] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription3, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[3] = warn.description === undefined ? '' : warn.description; newHeadlines[3] = warn.headline === undefined ? '' : warn.headline; newBegins[3] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[3] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription4, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[4] = warn.description === undefined ? '' : warn.description; newHeadlines[4] = warn.headline === undefined ? '' : warn.headline; newBegins[4] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[4] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); function getFormatDate(a) { if (!a) return ''; return formatDate(a.getTime(), formatierungString); } function sendEmail(topic, msg) { if (senderEmailID=='') { log('senderEmailID ist nicht definiert!','warn'); return; } if (empfaengerEmailID=='') { log('empfaengerEmailID ist nicht definiert!','warn'); return; } sendTo("email", { from: senderEmailID, to: empfaengerEmailID, subject: topic, text: msg }); }
-
Für mich kein Problem
-
Ich bekomme keine Ansage wenn die Warnungen aufgehoben werden.
Klappt das bei euch?
-
@wendy2702
Meinst du damit generell keine Ansage oder nur wenn alle Aufgehoben wurden? Ich erweitere das um Alexa und teste es/benutze es. -
Wenn ich das mal mit meine Telegramm Nachrichten vergleiche ist es etwas merkwürdig:
Gestern diese Warnungen bekommen und eine das Aufgehoben wurde:
Heute dann das:
Die Meldung Aufgehoben ist immer gleich, ohne Ansage und ohne das dazwischen eine neue Meldung kam.
-
@wendy2702
Das ist sehr merkwürdig. Ich sehe im Script keinen Grund für dieses Verhalten. Ich aktivere das mal bei mir und beobachte es. Wobei mein Neustart morgens um 5 sich aktuell nicht mit dem Skript verträgt. -
Ich habe aber auch um 18:20Uhr eine Warnmeldung bekommen, allerdings keine Ansage und keine Telegram Nachricht.
Machen Vielleicht die Zeitstempel ein Problem?
-
@wendy2702
Ne, ich hole die Information jetzt aus .object. Hab aber nichts an der Verwaltung dieser Daten geändert. Ich schaue später mal richtig rein. -
Gerade kommt eine Änderung der Warnungen: Sieht in den Objekten jetzt so aus:
In Telegram so:
Im Log das:
javascript.0 2020-02-26 20:00:09.030 error (25370) at Timer.processTimers (timers.js:223:10) javascript.0 2020-02-26 20:00:09.030 error (25370) at listOnTimeout (timers.js:263:5) javascript.0 2020-02-26 20:00:09.030 error (25370) at tryOnTimeout (timers.js:300:5) javascript.0 2020-02-26 20:00:09.030 error (25370) at ontimeout (timers.js:438:13) javascript.0 2020-02-26 20:00:09.030 error (25370) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2076:34) javascript.0 2020-02-26 20:00:09.030 error (25370) at Object.check (script.js.common.Ansagen.Ansage_Telegramm_DWD_5_Warnungen:199:25) javascript.0 2020-02-26 20:00:09.030 error (25370) Error in callback: ReferenceError: EMAiL is not defined
Vielleicht liegt es der nicht definierten Mail ?
-
@wendy2702
Rechtschreibfehler. Korrigiert!//Version 6 /* ************************************************************************* */ /* Script zum Übertragen der DWD-Wetterwarnungen über */ /* Telegram, Pushover, Home24-Mediaplayer oder SayIt */ /* mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals) */ /* Stand: 130022017 PrinzEisenherz1 */ /* */ /* */ /* - Fehlerbehebung z.B. 5 gültig bis 5 */ /* */ /* */ /* */ /* */ /* Variante für 5-warnings */ /* */ /* ************************************************************************* */ var request = require('request'); /* Nachrichten-Dienst festlegen */ /* Konstanten nicht verändern */ const TELEGRAM = 1; const PUSHOVER = 2; const EMAIL = 4; const SAYIT = 8; const HOMETWO = 16; var pushdienst=0; //pushdienst+= TELEGRAM; // Auskommentieren zum aktivieren //pushdienst+= PUSHOVER; // Auskommentieren zum aktivieren //pushdienst+= EMAIL; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen //pushdienst+= SAYIT; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen //pushdienst+= HOMETWO; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen // Filtereinstellungen const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden; const maxhoehe = 1000 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" const formatierungString = "TT.MM.YY SS:mm"; /* Einstellungen zur Emailbenachrichtigung*/ var senderEmailID = ""; // mit Sender Emailadresse füllen. email Adapter muß installiert sein var empfaengerEmailID = "";// mit Empfänger Emailadresse füllen. /* Konfiguration Sprachausgabe über Home24-Mediaplayer */ var idMediaplayer = "192.168.178.68:50000"; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer /* Konfiguration Sprachausgabe über SayIt */ var idSayIt = "sayit.0.tts.text"; var lautstaerke = 60; /* Keine Anpassungen ab hier, außer du weißt was du tuest */ var idSprachausgabe = ((pushdienst & HOMETWO) !=0); var idSprachausgabeSayIt = ((pushdienst & SAYIT) !=0); /* Trigger für Wetterwarnungen */ var idDescription0 = "dwd.0.warning.object"; var idDescription1 = "dwd.0.warning1.object"; var idDescription2 = "dwd.0.warning2.object"; var idDescription3 = "dwd.0.warning3.object"; var idDescription4 = "dwd.0.warning4.object"; /* Arrays festlegen */ var newDescriptions = [5]; var oldDescriptions = [5]; var newHeadlines = [5]; var oldHeadlines = [5]; var newBegins = [5]; var oldBegins = [5]; var newEnds = [5]; var oldEnds = [5]; var timer = null; /* aktivieren bzw erstmaliges Befüllen der arrays */ newDescriptions[0] = ''; newDescriptions[1] = ''; newDescriptions[2] = ''; newDescriptions[3] = ''; newDescriptions[4] = ''; oldDescriptions[0] = ''; oldDescriptions[1] = ''; oldDescriptions[2] = ''; oldDescriptions[3] = ''; oldDescriptions[4] = ''; newHeadlines[0] = ''; newHeadlines[1] = ''; newHeadlines[2] = ''; newHeadlines[3] = ''; newHeadlines[4] = ''; oldHeadlines[0] = ''; oldHeadlines[1] = ''; oldHeadlines[2] = ''; oldHeadlines[3] = ''; oldHeadlines[4] = ''; newBegins[0] = ''; newBegins[1] = ''; newBegins[2] = ''; newBegins[3] = ''; newBegins[4] = ''; oldBegins[0] = ''; oldBegins[1] = ''; oldBegins[2] = ''; oldBegins[3] = ''; oldBegins[4] = ''; newEnds[0] = ''; newEnds[1] = ''; newEnds[2] = ''; newEnds[3] = ''; newEnds[4] = ''; oldEnds[0] = ''; oldEnds[1] = ''; oldEnds[2] = ''; oldEnds[3] = ''; oldEnds[4] = ''; function check() { /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */ if(newDescriptions[0] === "") { MeldungSpracheDWD = 'Achtung' + ' . ' + 'Alle Warnmeldungen des DWD wurden aufgehoben'; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((pushdienst & HOMETWO)!=0 && idSprachausgabe === true){ var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; request(Url); } /* Bereich für Sprachausgabe SayIt im Zeitraum */ var ENDE= '22:30'; // Ende immer 22:30h var START; schedule("0 6 * * *", function (){ //ausgelöst jeden Tag um 6h morgens; prüft, ob Wochenende ist var date = new Date(); var n = date.getDay(); var weekend = 0; weekend = (n === 0 || n == 6) ? 1 : 0; if(weekend == 1){ // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h START = '9:00'; } else{ START = '6:45'; } }); /* Bereich für Sprachausgabe über SayIt */ if((pushdienst & SAYIT)!=0 && idSprachausgabeSayIt === true && compareTime(START, ENDE, 'between')){ // Ansage über Sayit nur im definierten Zeitbereich setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); } if ((pushdienst & TELEGRAM)!=0 ) { setTimeout(()=>(sendTo ("telegram.0", 'Alle Warnmeldungen des DWD wurden aufgehoben')), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0 ) { sendTo("pushover.0", 'Alle Warnmeldungen des DWD wurden aufgehoben'); } if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID !='') { sendEmail('Wetterentwarnung des DWD(iobroker)','Alle Warnmeldungen des DWD wurden aufgehoben'); } /* alle Sicherungen Wetterwarnung löschen */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); return; } /* Variablen für Meldungen Text */ var MeldungOld = ''; var MeldungNew = ''; /* Variablen für Meldungen Sprache */ var MeldungSpracheDWD = ''; var MeldungNewSprache = ''; var MeldungOldSprache = ''; var AllEmailMsg = ''; var headline; var description; var begin; var end; var i; var warn; /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */ for(i = 0; i < 5; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = oldHeadlines[i]; description = oldDescriptions[i]; begin = oldBegins[i]; end = oldEnds[i]; if(newDescriptions.indexOf(description) == -1 && description !== '' && description !== undefined) { MeldungOld = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben'; MeldungOldSprache = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben' + ' . '; if ((pushdienst & TELEGRAM)!=0) { setTimeout(()=>(sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben")), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0) { sendTo("pushover.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"); } if ((pushdienst & EMAIL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') { AllEmailMsg+="Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"+'\n'; } /* Verknüpfen aller aufgehobenen Wetterwarnungen */ if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){ MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache; } } } /* Bereich für 'Neue Amtliche Wetterwarnung' */ for(i = 0; i < 5; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = newHeadlines[i]; description = newDescriptions[i]; begin = newBegins[i]; end = newEnds[i]; if(oldDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) { MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description; /* Entfernen °C für Sprachausgabe */ var replaceDescription0 = entferneDatenpunkt(description); MeldungNewSprache = headline + " gültig vom " + begin + " Uhr, bis " + end + " Uhr. " + replaceDescription0 + ' . '; if ((pushdienst & TELEGRAM)!=0) { setTimeout(()=>(sendTo ("telegram.0", MeldungNew)), 3 * 1000); } if ((pushdienst & PUSHOVER)!=0) { sendTo("pushover.0", MeldungNew); } if ((pushdienst & EMAIL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') { AllEmailMsg+=MeldungNew+'\n'; } /* Verknüpfen aller neuen Warnmeldungen */ if(MeldungNewSprache !== "" && MeldungNewSprache !== undefined){ MeldungSpracheDWD = MeldungSpracheDWD + MeldungNewSprache; } } } /* Verknüpfen aller neuen und abgelaufenen Warnmeldungen */ MeldungSpracheDWD = 'Achtung . ' + MeldungSpracheDWD; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((pushdienst & HOMETWO)!=0 && (idSprachausgabe === true) && (MeldungSpracheDWD !== "")){ var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; log('Url2 :' + Url2); request(Url2); } /* Bereich für Sprachausgabe über SayIt */ if((pushdienst & SAYIT)!=0 && (idSprachausgabeSayIt === true) && (MeldungSpracheDWD !== "")){ setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); } if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID != '' && AllEmailMsg != '') { sendEmail("Wetterwarnungen des DWD(iobroker)",AllEmailMsg); } /* Neue Werte sichern */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); } /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */ function entferneDatenpunkt(beschreibung) { var rueckgabe; rueckgabe = beschreibung; try { rueckgabe = rueckgabe.replace(/\°C/g, "Grad"); rueckgabe = rueckgabe.replace(/\km\/h/g, "Kilometer pro Stunde"); } catch(e) {} return rueckgabe; } on(idDescription0, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[0] = warn.description === undefined ? '' : warn.description; newHeadlines[0] = warn.headline === undefined ? '' : warn.headline; newBegins[0] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[0] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription1, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[1] = warn.description === undefined ? '' : warn.description; newHeadlines[1] = warn.headline === undefined ? '' : warn.headline; newBegins[1] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[1] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription2, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[2] = warn.description === undefined ? '' : warn.description; newHeadlines[2] = warn.headline === undefined ? '' : warn.headline; newBegins[2] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[2] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription3, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[3] = warn.description === undefined ? '' : warn.description; newHeadlines[3] = warn.headline === undefined ? '' : warn.headline; newBegins[3] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[3] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription4, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = (!warn ? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; newDescriptions[4] = warn.description === undefined ? '' : warn.description; newHeadlines[4] = warn.headline === undefined ? '' : warn.headline; newBegins[4] = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); newEnds[4] = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); function getFormatDate(a) { if (!a) return ''; return formatDate(a.getTime(), formatierungString); } function sendEmail(topic, msg) { if (senderEmailID=='') { log('senderEmailID ist nicht definiert!','warn'); return; } if (empfaengerEmailID=='') { log('empfaengerEmailID ist nicht definiert!','warn'); return; } sendTo("email", { from: senderEmailID, to: empfaengerEmailID, subject: topic, text: msg }); }
Ich glaube nicht, dass es daran liegt.Kann sein -
Danke.
Werde Testen und mich melden.
-
@wendy2702
Ich hab bei mir noch eine neustart sichere Version laufen, die stelle ich, wenn sie bis morgen abend sauber läuft, online. -
@wendy2702
Hatte heute morgen noch einen Fehler, aber seit dem läufts. -
Denke jetzt ist alles ok:
EDIT: nö war noch was V9 ist aktuellÄnderungen ab dem ersten Posting:
- Alexa hinzugefügt
- Email hinzugefügt
- Sprachausgabe Datum geändert auf Tag, Monatsname, Stunde, Minute
- Filter für maximale Höhe
- Filter für minimales Gefahrenlevel
- Konfigurationsumgestaltung
- Daten werden aus Json (.object) gewonnen und nicht über die einzelnen States
- Startzeit für Sprachausgabe Normal + Wochenende in den Konfigurationsabschnitt verlegt.
Fehlerbehebung:
- Ausgelassene Nachrichten (telegram)
- undefinied in Zeitanzeigen (telegram)
- alle unnützen Timeouts rausgeworfen
- der Fehler der im ersten Post genannt wurde
- nach einem Restart wird erkannt ob Warnungen aufgehoben wurden.
- V8 request definition ist nicht mehr nötig
- V8 nach einem Restart wurden aufgehoben Nachrichten für gefilterte Warnungen ausgegeben
- V8 Zeileneinsprung korrigiert (kosmetisch Code)
- V9 Alle Warnungen aufgehoben wurde versendet, wenn der erste Eintrag gefiltert wurde.
- V9 von/bis Zeiten für Sprachausgabe so gestaltet, dass ich es nachvollziehen kann.
Bekannte Fehler:
- wenn während einem Restart neue Warnungen veröffentlicht werden, werden diese mal ausgegeben und mal nicht. Oder Präziser: Wenn der DWD nach einem Neustart aktualisiert bevor das Script initialisiert wurde, werden die Warnungen als "alte" Warnungen erkannt und ignoriert.
ToDo:
- Handlungsanweisungen ausgeben, wenn verfügbar.
- States auf Existenz überprüfen
Das war das Hinzufügen von ()0=> hätte besser function(){} empfohlen. Aber jetzt hab ich ein nettes Skript das auch ich nützlich finde
//Version 9 /* ************************************************************************* */ /* Script zum Übertragen der DWD-Wetterwarnungen über */ /* Telegram, Pushover, Home24-Mediaplayer oder SayIt */ /* mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals) */ /* Stand: 130022017 PrinzEisenherz1 */ /* */ /* */ /* - Fehlerbehebung z.B. 5 gültig bis 5 */ /* */ /* */ /* */ /* */ /* Variante für 5-warnings */ /* */ /* ************************************************************************* */ /* Nachrichten-Dienst festlegen */ /* Konstanten nicht verändern */ const TELEGRAM = 1; const PUSHOVER = 2; const EMAIL = 4; const SAYIT = 8; const HOMETWO = 16; const ALEXA = 32; var pushdienst=0; //pushdienst+= TELEGRAM; // Auskommentieren zum aktivieren //pushdienst+= PUSHOVER; // Auskommentieren zum aktivieren //pushdienst+= EMAIL; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen //pushdienst+= SAYIT; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen //pushdienst+= HOMETWO; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen //pushdienst+= ALEXA; // Auskommentieren zum aktivieren. Einstellungen nicht vergessen // Filtereinstellungen const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden; const maxhoehe = 1000 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" const formatierungString = "TT.MM.YYYY SS:mm"; /* Einstellungen zur Emailbenachrichtigung*/ var senderEmailID = ""; // mit Sender Emailadresse füllen. email Adapter muß installiert sein var empfaengerEmailID = "";// mit Empfänger Emailadresse füllen. /* Konfiguration Sprachausgabe über Home24-Mediaplayer */ var idMediaplayer = "192.168.178.68:50000"; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer /* Konfiguration Sprachausgabe über SayIt */ var idSayIt = "sayit.0.tts.text"; var lautstaerke = 60; //Konfiguration Sprachausgabe über Alexa var idAlexaSerial =''; var idAlexa = 'alexa2.0.Echo-Devices.'+idAlexaSerial+'.Commands.announcement'; const startTimeSpeak = '6:45'; const startTimeSpeakWeekend = '9:00'; /* Keine Anpassungen ab hier, außer du weißt was du tuest */ /* Trigger für Wetterwarnungen */ var idDescription0 = "dwd.0.warning.object"; var idDescription1 = "dwd.0.warning1.object"; var idDescription2 = "dwd.0.warning2.object"; var idDescription3 = "dwd.0.warning3.object"; var idDescription4 = "dwd.0.warning4.object"; /* Arrays festlegen */ var newDescriptions = [5]; var oldDescriptions = [5]; var newHeadlines = [5]; var oldHeadlines = [5]; var newBegins = [5]; var oldBegins = [5]; var newEnds = [5]; var oldEnds = [5]; var timer = null; /* aktivieren bzw erstmaliges Befüllen der arrays */ newDescriptions[0] = ''; newDescriptions[1] = ''; newDescriptions[2] = ''; newDescriptions[3] = ''; newDescriptions[4] = ''; oldDescriptions[0] = convertJsonDWD(getState(idDescription0).val).description; oldDescriptions[1] = convertJsonDWD(getState(idDescription1).val).description; oldDescriptions[2] = convertJsonDWD(getState(idDescription2).val).description; oldDescriptions[3] = convertJsonDWD(getState(idDescription3).val).description; oldDescriptions[4] = convertJsonDWD(getState(idDescription4).val).description; newHeadlines[0] = ''; newHeadlines[1] = ''; newHeadlines[2] = ''; newHeadlines[3] = ''; newHeadlines[4] = ''; oldHeadlines[0] = convertJsonDWD(getState(idDescription0).val).headline; oldHeadlines[1] = convertJsonDWD(getState(idDescription1).val).headline; oldHeadlines[2] = convertJsonDWD(getState(idDescription2).val).headline; oldHeadlines[3] = convertJsonDWD(getState(idDescription3).val).headline; oldHeadlines[4] = convertJsonDWD(getState(idDescription4).val).headline; newBegins[0] = ''; newBegins[1] = ''; newBegins[2] = ''; newBegins[3] = ''; newBegins[4] = ''; oldBegins[0] = convertJsonDWD(getState(idDescription0).val).start; oldBegins[1] = convertJsonDWD(getState(idDescription1).val).start; oldBegins[2] = convertJsonDWD(getState(idDescription2).val).start; oldBegins[3] = convertJsonDWD(getState(idDescription3).val).start; oldBegins[4] = convertJsonDWD(getState(idDescription4).val).start; newEnds[0] = ''; newEnds[1] = ''; newEnds[2] = ''; newEnds[3] = ''; newEnds[4] = ''; oldEnds[0] = convertJsonDWD(getState(idDescription0).val).end; oldEnds[1] = convertJsonDWD(getState(idDescription1).val).end; oldEnds[2] = convertJsonDWD(getState(idDescription2).val).end; oldEnds[3] = convertJsonDWD(getState(idDescription3).val).end; oldEnds[4] = convertJsonDWD(getState(idDescription4).val).end; // Zeitsteuerung für SayIt & Alexa var START = '9:00'; setWeekend() schedule("0 6 * * *", setWeekend); //ausgelöst jeden Tag um 6h morgens; prüft, ob Wochenende ist function setWeekend() { let date = new Date(); let n = date.getDay(); let weekend = 0; weekend = (n === 0 || n == 6) ? 1 : 0; if(weekend == 1){ // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h START = startTimeSpeakWeekend; } else{ START = startTimeSpeak; } } function check() { /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */ if(newDescriptions.findIndex(function(a){return a != '';})==-1) { MeldungSpracheDWD = 'Achtung' + ' . ' + 'Alle Warnmeldungen des DWD wurden aufgehoben'; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((pushdienst & HOMETWO)!=0 ){ var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; request(Url); } /* Bereich für Sprachausgabe SayIt & ALexa im Zeitraum */ var ENDE= '22:30'; // Ende immer 22:30h /* Bereich für Sprachausgabe über SayIt & Alexa */ if (compareTime(START, ENDE, 'between')){ // Ansage über Sayit nur im definierten Zeitbereich if ((pushdienst & SAYIT)!=0) setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); if ((pushdienst & ALEXA)!=0) setState(idAlexa, MeldungSpracheDWD); } if ((pushdienst & TELEGRAM)!=0 ) { sendTo ("telegram.0", 'Alle Warnmeldungen des DWD wurden aufgehoben'); } if ((pushdienst & PUSHOVER)!=0 ) { sendTo("pushover.0", 'Alle Warnmeldungen des DWD wurden aufgehoben'); } if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID !='') { sendEmail('Wetterentwarnung des DWD(iobroker)','Alle Warnmeldungen des DWD wurden aufgehoben'); } /* alle Sicherungen Wetterwarnung löschen */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); return; } /* Variablen für Meldungen Text */ var MeldungOld = ''; var MeldungNew = ''; /* Variablen für Meldungen Sprache */ var MeldungSpracheDWD = ''; var MeldungNewSprache = ''; var MeldungOldSprache = ''; var AllEmailMsg = ''; var headline; var description; var begin; var end; var i; var warn; /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */ for(i = 0; i < 5; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = oldHeadlines[i]; description = oldDescriptions[i]; begin = oldBegins[i]; end = oldEnds[i]; if(newDescriptions.indexOf(description) == -1 && description !== '' && description !== undefined) { MeldungOld = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben'; MeldungOldSprache = oldHeadlines[i] + ' gültig bis ' + getFormatDateSpeak(oldEnds[i]) + ' Uhr wurde aufgehoben' + ' . '; if ((pushdienst & TELEGRAM)!=0) { sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"); } if ((pushdienst & PUSHOVER)!=0) { sendTo("pushover.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"); } if ((pushdienst & EMAIL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') { AllEmailMsg+="Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"+'\n'; } /* Verknüpfen aller aufgehobenen Wetterwarnungen */ if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){ MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache; } } } /* Bereich für 'Neue Amtliche Wetterwarnung' */ for(i = 0; i < 5; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = newHeadlines[i]; description = newDescriptions[i]; begin = newBegins[i]; end = newEnds[i]; if(oldDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) { MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description; /* Entfernen °C für Sprachausgabe */ var replaceDescription0 = entferneDatenpunkt(description); MeldungNewSprache = headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + ' . '; if ((pushdienst & TELEGRAM)!=0) { sendTo ("telegram.0", MeldungNew); } if ((pushdienst & PUSHOVER)!=0) { sendTo("pushover.0", MeldungNew); } if ((pushdienst & EMAIL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') { AllEmailMsg+=MeldungNew+'\n\n'; } /* Verknüpfen aller neuen Warnmeldungen */ if(MeldungNewSprache !== "" && MeldungNewSprache !== undefined){ MeldungSpracheDWD = MeldungSpracheDWD + MeldungNewSprache; } } } /* Verknüpfen aller neuen und abgelaufenen Warnmeldungen */ MeldungSpracheDWD = 'Achtung . ' + MeldungSpracheDWD; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((pushdienst & HOMETWO)!=0 && (MeldungSpracheDWD !== "")){ var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; log('Url2 :' + Url2); request(Url2); } /* Bereich für Sprachausgabe über SayIt */ if ((MeldungSpracheDWD !== "")){ if ((pushdienst & SAYIT)!=0) setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); if ((pushdienst & ALEXA)!=0) setState(idAlexa, MeldungSpracheDWD); } if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID != '' && AllEmailMsg != '') { sendEmail("Wetterwarnungen des DWD(iobroker)",AllEmailMsg); } /* Neue Werte sichern */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); } /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */ function entferneDatenpunkt(beschreibung) { var rueckgabe; rueckgabe = beschreibung; try { rueckgabe = rueckgabe.replace(/\°C/g, "Grad"); rueckgabe = rueckgabe.replace(/\km\/h/g, "Kilometer pro Stunde"); } catch(e) {} return rueckgabe; } on(idDescription0, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = convertJsonDWD(warn); newDescriptions[0] = warn.description ; newHeadlines[0] = warn.headline; newBegins[0] = warn.start; newEnds[0] = warn.end; if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription1, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = convertJsonDWD(warn); newDescriptions[1] = warn.description ; newHeadlines[1] = warn.headline; newBegins[1] = warn.start; newEnds[1] = warn.end; if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription2, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = convertJsonDWD(warn); newDescriptions[2] = warn.description ; newHeadlines[2] = warn.headline; newBegins[2] = warn.start; newEnds[2] = warn.end; if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription3, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = convertJsonDWD(warn); newDescriptions[3] = warn.description ; newHeadlines[3] = warn.headline; newBegins[3] = warn.start; newEnds[3] = warn.end; if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription4, function(dp) { var warn = null; if (dp.state.val != '') warn = JSON.parse(dp.state.val); warn = convertJsonDWD(warn); newDescriptions[4] = warn.description ; newHeadlines[4] = warn.headline; newBegins[4] = warn.start; newEnds[4] = warn.end; if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); function convertJsonDWD(warn) { warn = (!warn || warn === ''? {} : warn); if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level <= minlevel)) warn = {}; var a = warn.description === undefined ? '' : warn.description; var b = warn.headline === undefined ? '' : warn.headline; var c = warn.start === undefined ? '' : getFormatDate(new Date(warn.start)); var d = warn.end === undefined ? '' : getFormatDate(new Date(warn.end)); return {"description":a,"headline":b,"start":c,"end":d}; } function getFormatDate(a) { if (!a || a === '') return ''; return formatDate(a.getTime(), formatierungString); } // @PARAM Rückgabe von getFormatDate function getFormatDateSpeak(a) { if (!a || a === '') return ''; var b = a.split('.'); var m = ''; switch (b[1]) { case '01': m='Januar';break; case '02': m='Februar';break; case '03': m='März';break; case '04': m='April';break; case '05': m='Mai';break; case '06': m='Juni';break; case '07': m='Juli';break; case '08': m='August';break; case '09': m='September';break; case '10': m='Oktober';break; case '11': m='November';break; case '12': m='Dezember';break; default: m=''; } b[1]=m; // setze Monatsname // entferne Jahr var c = b[2].split(' '); c[0]=''; b[2] = c.join(' '); return b.join(' '); } function sendEmail(topic, msg) { if (senderEmailID=='') { log('senderEmailID ist nicht definiert!','warn'); return; } if (empfaengerEmailID=='') { log('empfaengerEmailID ist nicht definiert!','warn'); return; } sendTo("email", { from: senderEmailID, to: empfaengerEmailID, subject: topic, text: msg }); }
Kann aber noch immer Fehler enthalten, hab vorhin gesehen das mein DWD Adapter spinntAdapter neuinstalliert