//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
});
}