Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Script] DWD/UWZ/NINA Warnungen als Push/Sprachnachrichten

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.8k

[Script] DWD/UWZ/NINA Warnungen als Push/Sprachnachrichten

Geplant Angeheftet Gesperrt Verschoben JavaScript
1.5k Beiträge 53 Kommentatoren 572.0k Aufrufe 52 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von ticaki
    #52

    Nein ich bekomme keine doppelten Nachrichten. Ich lasse das jetzt mal laufen ohne filter

    • Hab zuviel rausgefiltert

    v13.6

    //Version 13.6
    //nachbearbeitet von ticaki
    /*
    
    */
    /* ************************************************************************* */
    /*             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                    */
    /*                                                                           */
    /*                                                                           */
    /*                                                                           */
    /* ************************************************************************* */
    
    /* ************************************************************************* */
    /* NICHT EDITIEREN */
    var konstanten = [
       {"name":'telegram',"value":1},
       {"name":'pushover',"value":2},
       {"name":'email',"value":4},
       {"name":'sayit',"value":8},
       {"name":'home24',"value":16},
       {"name":'alexa',"value":32},
       {"name":'state',"value":64},
       {"name":'iogo',"value":128}
    ];
    const TELEGRAM = konstanten[0].value;
    const PUSHOVER = konstanten[1].value;
    const EMAIL = konstanten[2].value;
    const SAYIT = konstanten[3].value;
    const HOMETWO = konstanten[4].value;
    const ALEXA = konstanten[5].value;
    const STATE = konstanten[6].value;
    const IOGO = konstanten[7].value;
    var pushdienst=0;
    /* ************************************************************************* */
    /*                       Konfiguration ab hier                               */
    /* ************************************************************************* */
    
    /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
    //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
    //pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
    //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
    
    /* 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 =''; // die reine Seriennummer des Echos z.B.: var idAlexaSerial ='G090RV32984110Y';
    var alexaVolumen = 40; // Lautstärke 0-100 (denke ich :) )
    
    //Konfiguration von ioGo
    var ioGoUser = ''; // Einzelnutzer 'Hans'; Multinutzer ['Hans','Peter']; Nutzer vom Adapter übernehmen '';
    
    //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
    var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . nicht vergessen
    
    // Filtereinstellungen
    const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden;
    const maxhoehe = 1410 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden
    
    //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" KEINE Anpassung nötig
    const formatierungString = "TT.MM.YYYY SS:mm";
    
    // Sprachausgabe Zeiten
    // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
    var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
    var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
    var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
    
    // Automatikmodus auschalten
    var autoMode = true;
    //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
    var forcedSpeak = false;
    // ignoriere Warnmeldungen von geringerer Schwere, wenn ansonsten vergleichbare Warnmeldungen vorliegen.
    var SkipDuplicates = true;
    
    /* ************************************************************************* */
    /* ************************************************************************* */
    /* ************************************************************************* */
    /*                       Konfiguration Ende                                  */
    /* ************************************************************************* */
    /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
    /* ************************************************************************* */
    /* ************************************************************************* */
    /* ************************************************************************* */
    
    var idAlexa = 'alexa2.0.Echo-Devices.'+idAlexaSerial+'.Commands.announcement';
    var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+idAlexaSerial+'.Commands.speak-volume';
    var forceSpeak = false;
    /* Arrays festlegen */
    const InitArrayLenght = 9;
    var newDescriptions = [InitArrayLenght];
    var oldDescriptions = [InitArrayLenght];
    var newHeadlines = [InitArrayLenght];
    var oldHeadlines = [InitArrayLenght];
    var newBegins = [InitArrayLenght];
    var oldBegins = [InitArrayLenght];
    var newEnds = [InitArrayLenght];
    var oldEnds = [InitArrayLenght];
    var newInstruction = [InitArrayLenght];
    var oldData = [InitArrayLenght];
    var newData = [InitArrayLenght];
    var timer = null;
    /* erstmaliges Befüllen der arrays */
    for (let a=0;a<InitArrayLenght;a++) {
       var id = "dwd.0.warning";
       if (a!=0) id+=a.toString();
       id+='.object';
       var warn = {};
       if (existsState(id)) warn = JSON.parse(getState(id).val);
       warn = convertJsonDWD(warn);
       newDescriptions[a] = warn.description;
       oldDescriptions[a] = warn.description;
       newHeadlines[a] = warn.headline;
       oldHeadlines[a] = warn.headline;
       newBegins[a] = warn.start;
       oldBegins[a] = warn.start;
       newEnds[a] = warn.end;
       oldEnds[a] = warn.end;
       newData[a] = {"level":warn.level,"type":warn.type};
       oldData[a] = {"level":warn.level,"type":warn.type};
    }
    
    // State der Pushnachrichten über pushover/telegram spiegelt
    const mirrorMessageState = onClickMessageState+'message';
    if (!existsState(mirrorMessageState)) {
       createState(mirrorMessageState,'', {
           read: true,
           write: false,
           desc: "Beschreibung",
           type: "string",
       });
    }
    
    // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
    const AlertState = onClickMessageState+'alertlevel';
    if (!existsState(AlertState)) {
       createState(AlertState,0, {
           read: true,
           write: false,
           desc: "Beschreibung",
           type: "number"
       });
    } else {
       let AlertLevel = -1;
       newData.forEach((item, i) => {if (AlertLevel<item.level) AlertLevel = item.level;});
       oldData.forEach((item, i) => {if (AlertLevel<item.level) AlertLevel = item.level;});
       setState(AlertState,AlertLevel);
    }
    
    // Nachrichtenversand per Click States erzeugen und subscript
    for (var a=0;a<konstanten.length;a++){
       if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
           createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
               read: true,
               write: true,
               desc: "Beschreibung",
               type: "boolean",
               def: false
           });
       }
       if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
           subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
               if (!obj.state.val) return;
               setState(obj.id,false,true);
               let b = obj.id.split('.');
               let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
               if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
               if ((pushdienst & konstanten[d].value) == 0) return;
               let oldPushdienst = pushdienst;
               pushdienst = konstanten[d].value*1;
               let tempHeadlines = oldHeadlines.slice();
               let tempDescriptions = oldDescriptions.slice();
               let tempBegins = oldBegins.slice();
               let tempEnds = oldEnds.slice();
               for (let i=0;i<oldDescriptions.length;i++) {
                   oldHeadlines[i] = '';
                   oldDescriptions[i] = '';
                   oldBegins[i] = '';
                   oldEnds[i] = '';
               }
               forceSpeak = forcedSpeak;
               check();
               forceSpeak = false;
               pushdienst = oldPushdienst;
               // sollte überflüssig sein
               //oldHeadlines = tempHeadlines.slice();
               //oldDescriptions = tempDescriptions.slice();
               //oldBegins = tempBegins.slice();
               //oldEnds = tempEnds.slice();
           })
       }
    }
    
    // Zeitsteuerung für SayIt & Alexa
    var START = new Date();
    var ENDE = new Date();
    setWeekend();
    
    function setWeekend()
    {
       if (forceSpeak) return;
       let date = new Date();
       let n = date.getDay();
       let weekend = 0;
       weekend = (n === 0 || n == 6) ? 1 : 0;
       let d = new Date();
       if(weekend == 1){                     // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h
           var e = startTimeSpeakWeekend.split(':');
           d.setHours(e[0]);
           d.setMinutes(e[1]);
           d.setSeconds(0);
           START = d;
       }
       else{
           var e = startTimeSpeak.split(':');
           d.setHours(e[0]);
           d.setMinutes(e[1]);
           d.setSeconds(0);
           START = d;
       }
       var e = endTimeSpeak.split(':');
       ENDE = new Date();
       ENDE.setHours(e[0]);
       ENDE.setMinutes(e[1]);
       ENDE.setSeconds(0);
    }
    
    function check() {
       if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
       setWeekend();
    
       // Werfe doppelte Nachrichten raus
       if(SkipDuplicates && newDescriptions.findIndex(function(a){return (!a);})!=-1 ) {
           for (let a=0; a<newData.length;a++) {
               if (newData[a].type==-1) continue;
               for (let b=0; b<newData.length;b++) {
                   if (newData[b].type==-1) continue;
                   if (
                       (
                           a!=b
                           && newData[b].type!=-1 // vergleiche neue Daten mit neuen Daten
                           && newData[a].type == newData[b].type
                           && newData[a].level <= newData[b].level
                           && newBegins[a] >= newBegins[b]
                           && newEnds[a] <= newEnds[b]
                       )||(
                           oldData[b].type!=-1 // vergleiche neue Daten mit alten Daten
                           && newData[a].type == oldData[b].type
                           && newData[a].level <= oldData[b].level
                           && newEnds[a] < oldEnds[b]
                       )
                   ) { // lösche Daten da diese eine niedrigeres level haben
                       newDescriptions[a] = '';
                       newHeadlines[a] = '';
                       newBegins[a] = '';
                       newEnds[a] = '';
                       newData[a].type = -1;
                       newData[a].level = -1;
                   }
               }
           }
       }
       let AlertLevel = -1;
       newData.forEach((item, i) => {if (AlertLevel<item.level) AlertLevel = item.level;});
       oldData.forEach((item, i) => {if (AlertLevel<item.level) AlertLevel = item.level;});
       setState(AlertState,AlertLevel);
    
       /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
       if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
           MeldungSpracheDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
    
           /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
           if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
               if ((pushdienst & SAYIT)!=0) {
                   setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD);
               }
               if ((pushdienst & ALEXA)!=0) {
                   setState(idAlexaVolumen, alexaVolumen);
                   setState(idAlexa, MeldungSpracheDWD);
               }
               if((pushdienst & HOMETWO)!=0 ){
                   var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD;
                   request(Url);
               }
           }
           let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
           if ((pushdienst & TELEGRAM)!=0 ) {
               sendTo ("telegram.0", pushmsg);
           }
           if ((pushdienst & PUSHOVER)!=0 ) {
               sendTo("pushover.0", pushmsg);
           }
           if ((pushdienst & IOGO)!=0 ) {
               sendioGo('Wetterentwarnung', pushmsg);
           }
           if ((pushdienst & STATE)!=0 ) {
               setState(mirrorMessageState, pushmsg);
           }
           if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID !='') {
               sendEmail('Wetterentwarnung des DWD(iobroker)',pushmsg);
           }
    
           /* alle Sicherungen Wetterwarnung löschen */
           oldHeadlines = newHeadlines.slice();
           oldDescriptions = newDescriptions.slice();
           oldBegins = newBegins.slice();
           oldEnds = newEnds.slice();
           oldData = newData.slice();
           return;
       }
    
       /* Variablen für Meldungen Text */
       var MeldungNew = '';
       /* Variablen für Meldungen Sprache */
       var MeldungSpracheDWD = '';
       var MeldungNewSprache = '';
       var MeldungOldSprache = '';
       var AllEmailMsg = '';
       var AllEmailMsgDelete = '';
    
       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 < newDescriptions.length; i++) {
           headline = oldHeadlines[i];
           description = oldDescriptions[i];
           begin = oldBegins[i];
           end = oldEnds[i];
           if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
               MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
               let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben";
               if ((pushdienst & TELEGRAM)!=0) {
                   sendTo ("telegram.0", pushmsg);
               }
               if ((pushdienst & PUSHOVER)!=0) {
                   sendTo("pushover.0", pushmsg);
               }
               if ((pushdienst & IOGO)!=0) {
                   sendioGo('Wetterentwarnung',pushmsg);
               }
               if ((pushdienst & STATE)!=0 ) {
                   setState(mirrorMessageState, pushmsg);
               }
               if ((pushdienst & EMAIL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') {
                   AllEmailMsgDelete+=pushmsg+'\n\n';
               }
               /* Verknüpfen aller aufgehobenen Wetterwarnungen */
               if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){
                   MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache;
               }
           }
       }
    
       /* Bereich für 'Neue Amtliche Wetterwarnung' */
       for(i = 0; i < newDescriptions.length; i++) {
           headline = newHeadlines[i];
           description = newDescriptions[i];
           begin = newBegins[i];
           end = newEnds[i];
           var instruction = newInstruction[i];
           if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
               MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
               if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
               /* Entfernen °C für Sprachausgabe */
               var replaceDescription0 = entferneDatenpunkt(description);
               MeldungNewSprache = headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
               if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
               if ((pushdienst & TELEGRAM)!=0) {
                   sendTo ("telegram.0", MeldungNew);
               }
               if ((pushdienst & PUSHOVER)!=0) {
                   sendTo("pushover.0", MeldungNew);
               }
               if ((pushdienst & IOGO)!=0) {
                   sendioGo('Wetterwarnung',MeldungNew);
               }
               if ((pushdienst & STATE)!=0 ) {
                   setState(mirrorMessageState,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((forceSpeak || compareTime(START, ENDE, 'between') ) && (pushdienst & HOMETWO)!=0 && (MeldungSpracheDWD !== "" )){
           var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD;
           log('Url2 :' + Url2);
           request(Url2);
       }
       /* Bereich für Sprachausgabe über SayIt + Alexa */
       if (MeldungSpracheDWD !== "" && (forceSpeak || compareTime(START, ENDE, 'between'))){
           if ((pushdienst & SAYIT)!=0) setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD);
           if ((pushdienst & ALEXA)!=0) {
               setState(idAlexaVolumen, alexaVolumen);
               setState(idAlexa, MeldungSpracheDWD);
           }
       }
       AllEmailMsg+=AllEmailMsgDelete;
       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();
       oldData = newData.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");
           rueckgabe = rueckgabe.replace(/\kn/g, " Knoten");
           rueckgabe = rueckgabe.replace(/\bft/g, " Windstärke");
           rueckgabe = rueckgabe.replace(/\m\/s/g, " Meter pro Sekunde");
       }
       catch(e) {}
       return rueckgabe;
    }
    
    on(/^dwd\.0\..*\.object$/, function(dp) {
       let i = getIdIndex(dp.id);
       var warn = null;
       if (dp.state.val != '') warn = JSON.parse(dp.state.val);
       warn = convertJsonDWD(warn);
       newDescriptions[i] = warn.description ;
       newHeadlines[i] = warn.headline;
       newBegins[i] = warn.start;
       newEnds[i] = warn.end;
       newInstruction[i] = warn.instruction;
       newData[i].level = warn.level;
       newData[i].type = warn.type;
       if(timer) clearTimeout(timer);
       if (autoMode) timer = setTimeout(check, 10000);
    });
    
    function convertJsonDWD(warn) {
       warn = (!warn || warn === ''? {} : warn);
       if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
       let a = warn.description === undefined ? '' : warn.description;
       let b = warn.headline === undefined ? '' : warn.headline;
       let c = warn.start === undefined ? '' : getFormatDate(new Date(warn.start));
       let d = warn.end === undefined ? '' : getFormatDate(new Date(warn.end));
       let e = warn.instruction === undefined ? '' : warn.instruction;
       let f = warn.type === undefined ? -1 : warn.type;
       let g = warn.level === undefined ? -1 : warn.level;
       return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
    }
    
    function getIdIndex(a) {
       a = a.split('.');
       if (a[2].length == 7) return 0
       return a[2][7];
    }
    function getFormatDate(a) {
       if (!a || a === '') return '';
       return formatDate(a.getTime(), formatierungString);
    }
    // @PARAM Rückgabe von getFormatDate
    function getFormatDateSpeak(a) {
       if (!a || a === '') return '';
       let b = a.split('.');
       let 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
       let 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
       });
    }
    
    function sendioGo(topic, msg) {
       if ((pushdienst & IOGO)!=0) {
           if (ioGoUser) {
               sendTo('iogo.0', "send", {
                   user:                   ioGoUser,
                   text:                   topic,
                   title:                  msg
               });
           } else {
               sendTo('iogo.0', "send", {
                   text:                   topic,
                   title:                  msg
               });
           }
       }
    }
    
    
    

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    crunchipC 1 Antwort Letzte Antwort
    0
    • crunchipC Abwesend
      crunchipC Abwesend
      crunchip
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #53

      bei mir version 13.1
      heute Morgen....alle Wetterwarnungen wurden aufgehoben.....alles korrekt
      Vormittag, eine neue Wetterwarnung, auch alles korrekt

      umgestiegen von Proxmox auf Unraid

      1 Antwort Letzte Antwort
      0
      • T ticaki

        Nein ich bekomme keine doppelten Nachrichten. Ich lasse das jetzt mal laufen ohne filter

        • Hab zuviel rausgefiltert

        v13.6

        //Version 13.6
        //nachbearbeitet von ticaki
        /*
        
        */
        /* ************************************************************************* */
        /*             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                    */
        /*                                                                           */
        /*                                                                           */
        /*                                                                           */
        /* ************************************************************************* */
        
        /* ************************************************************************* */
        /* NICHT EDITIEREN */
        var konstanten = [
           {"name":'telegram',"value":1},
           {"name":'pushover',"value":2},
           {"name":'email',"value":4},
           {"name":'sayit',"value":8},
           {"name":'home24',"value":16},
           {"name":'alexa',"value":32},
           {"name":'state',"value":64},
           {"name":'iogo',"value":128}
        ];
        const TELEGRAM = konstanten[0].value;
        const PUSHOVER = konstanten[1].value;
        const EMAIL = konstanten[2].value;
        const SAYIT = konstanten[3].value;
        const HOMETWO = konstanten[4].value;
        const ALEXA = konstanten[5].value;
        const STATE = konstanten[6].value;
        const IOGO = konstanten[7].value;
        var pushdienst=0;
        /* ************************************************************************* */
        /*                       Konfiguration ab hier                               */
        /* ************************************************************************* */
        
        /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
        //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
        //pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
        //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
        
        /* 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 =''; // die reine Seriennummer des Echos z.B.: var idAlexaSerial ='G090RV32984110Y';
        var alexaVolumen = 40; // Lautstärke 0-100 (denke ich :) )
        
        //Konfiguration von ioGo
        var ioGoUser = ''; // Einzelnutzer 'Hans'; Multinutzer ['Hans','Peter']; Nutzer vom Adapter übernehmen '';
        
        //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
        var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . nicht vergessen
        
        // Filtereinstellungen
        const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden;
        const maxhoehe = 1410 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden
        
        //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" KEINE Anpassung nötig
        const formatierungString = "TT.MM.YYYY SS:mm";
        
        // Sprachausgabe Zeiten
        // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
        var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
        var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
        var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
        
        // Automatikmodus auschalten
        var autoMode = true;
        //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
        var forcedSpeak = false;
        // ignoriere Warnmeldungen von geringerer Schwere, wenn ansonsten vergleichbare Warnmeldungen vorliegen.
        var SkipDuplicates = true;
        
        /* ************************************************************************* */
        /* ************************************************************************* */
        /* ************************************************************************* */
        /*                       Konfiguration Ende                                  */
        /* ************************************************************************* */
        /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
        /* ************************************************************************* */
        /* ************************************************************************* */
        /* ************************************************************************* */
        
        var idAlexa = 'alexa2.0.Echo-Devices.'+idAlexaSerial+'.Commands.announcement';
        var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+idAlexaSerial+'.Commands.speak-volume';
        var forceSpeak = false;
        /* Arrays festlegen */
        const InitArrayLenght = 9;
        var newDescriptions = [InitArrayLenght];
        var oldDescriptions = [InitArrayLenght];
        var newHeadlines = [InitArrayLenght];
        var oldHeadlines = [InitArrayLenght];
        var newBegins = [InitArrayLenght];
        var oldBegins = [InitArrayLenght];
        var newEnds = [InitArrayLenght];
        var oldEnds = [InitArrayLenght];
        var newInstruction = [InitArrayLenght];
        var oldData = [InitArrayLenght];
        var newData = [InitArrayLenght];
        var timer = null;
        /* erstmaliges Befüllen der arrays */
        for (let a=0;a<InitArrayLenght;a++) {
           var id = "dwd.0.warning";
           if (a!=0) id+=a.toString();
           id+='.object';
           var warn = {};
           if (existsState(id)) warn = JSON.parse(getState(id).val);
           warn = convertJsonDWD(warn);
           newDescriptions[a] = warn.description;
           oldDescriptions[a] = warn.description;
           newHeadlines[a] = warn.headline;
           oldHeadlines[a] = warn.headline;
           newBegins[a] = warn.start;
           oldBegins[a] = warn.start;
           newEnds[a] = warn.end;
           oldEnds[a] = warn.end;
           newData[a] = {"level":warn.level,"type":warn.type};
           oldData[a] = {"level":warn.level,"type":warn.type};
        }
        
        // State der Pushnachrichten über pushover/telegram spiegelt
        const mirrorMessageState = onClickMessageState+'message';
        if (!existsState(mirrorMessageState)) {
           createState(mirrorMessageState,'', {
               read: true,
               write: false,
               desc: "Beschreibung",
               type: "string",
           });
        }
        
        // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
        const AlertState = onClickMessageState+'alertlevel';
        if (!existsState(AlertState)) {
           createState(AlertState,0, {
               read: true,
               write: false,
               desc: "Beschreibung",
               type: "number"
           });
        } else {
           let AlertLevel = -1;
           newData.forEach((item, i) => {if (AlertLevel<item.level) AlertLevel = item.level;});
           oldData.forEach((item, i) => {if (AlertLevel<item.level) AlertLevel = item.level;});
           setState(AlertState,AlertLevel);
        }
        
        // Nachrichtenversand per Click States erzeugen und subscript
        for (var a=0;a<konstanten.length;a++){
           if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
               createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
                   read: true,
                   write: true,
                   desc: "Beschreibung",
                   type: "boolean",
                   def: false
               });
           }
           if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
               subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
                   if (!obj.state.val) return;
                   setState(obj.id,false,true);
                   let b = obj.id.split('.');
                   let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
                   if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
                   if ((pushdienst & konstanten[d].value) == 0) return;
                   let oldPushdienst = pushdienst;
                   pushdienst = konstanten[d].value*1;
                   let tempHeadlines = oldHeadlines.slice();
                   let tempDescriptions = oldDescriptions.slice();
                   let tempBegins = oldBegins.slice();
                   let tempEnds = oldEnds.slice();
                   for (let i=0;i<oldDescriptions.length;i++) {
                       oldHeadlines[i] = '';
                       oldDescriptions[i] = '';
                       oldBegins[i] = '';
                       oldEnds[i] = '';
                   }
                   forceSpeak = forcedSpeak;
                   check();
                   forceSpeak = false;
                   pushdienst = oldPushdienst;
                   // sollte überflüssig sein
                   //oldHeadlines = tempHeadlines.slice();
                   //oldDescriptions = tempDescriptions.slice();
                   //oldBegins = tempBegins.slice();
                   //oldEnds = tempEnds.slice();
               })
           }
        }
        
        // Zeitsteuerung für SayIt & Alexa
        var START = new Date();
        var ENDE = new Date();
        setWeekend();
        
        function setWeekend()
        {
           if (forceSpeak) return;
           let date = new Date();
           let n = date.getDay();
           let weekend = 0;
           weekend = (n === 0 || n == 6) ? 1 : 0;
           let d = new Date();
           if(weekend == 1){                     // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h
               var e = startTimeSpeakWeekend.split(':');
               d.setHours(e[0]);
               d.setMinutes(e[1]);
               d.setSeconds(0);
               START = d;
           }
           else{
               var e = startTimeSpeak.split(':');
               d.setHours(e[0]);
               d.setMinutes(e[1]);
               d.setSeconds(0);
               START = d;
           }
           var e = endTimeSpeak.split(':');
           ENDE = new Date();
           ENDE.setHours(e[0]);
           ENDE.setMinutes(e[1]);
           ENDE.setSeconds(0);
        }
        
        function check() {
           if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
           setWeekend();
        
           // Werfe doppelte Nachrichten raus
           if(SkipDuplicates && newDescriptions.findIndex(function(a){return (!a);})!=-1 ) {
               for (let a=0; a<newData.length;a++) {
                   if (newData[a].type==-1) continue;
                   for (let b=0; b<newData.length;b++) {
                       if (newData[b].type==-1) continue;
                       if (
                           (
                               a!=b
                               && newData[b].type!=-1 // vergleiche neue Daten mit neuen Daten
                               && newData[a].type == newData[b].type
                               && newData[a].level <= newData[b].level
                               && newBegins[a] >= newBegins[b]
                               && newEnds[a] <= newEnds[b]
                           )||(
                               oldData[b].type!=-1 // vergleiche neue Daten mit alten Daten
                               && newData[a].type == oldData[b].type
                               && newData[a].level <= oldData[b].level
                               && newEnds[a] < oldEnds[b]
                           )
                       ) { // lösche Daten da diese eine niedrigeres level haben
                           newDescriptions[a] = '';
                           newHeadlines[a] = '';
                           newBegins[a] = '';
                           newEnds[a] = '';
                           newData[a].type = -1;
                           newData[a].level = -1;
                       }
                   }
               }
           }
           let AlertLevel = -1;
           newData.forEach((item, i) => {if (AlertLevel<item.level) AlertLevel = item.level;});
           oldData.forEach((item, i) => {if (AlertLevel<item.level) AlertLevel = item.level;});
           setState(AlertState,AlertLevel);
        
           /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
           if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
               MeldungSpracheDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
        
               /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
               if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
                   if ((pushdienst & SAYIT)!=0) {
                       setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD);
                   }
                   if ((pushdienst & ALEXA)!=0) {
                       setState(idAlexaVolumen, alexaVolumen);
                       setState(idAlexa, MeldungSpracheDWD);
                   }
                   if((pushdienst & HOMETWO)!=0 ){
                       var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD;
                       request(Url);
                   }
               }
               let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
               if ((pushdienst & TELEGRAM)!=0 ) {
                   sendTo ("telegram.0", pushmsg);
               }
               if ((pushdienst & PUSHOVER)!=0 ) {
                   sendTo("pushover.0", pushmsg);
               }
               if ((pushdienst & IOGO)!=0 ) {
                   sendioGo('Wetterentwarnung', pushmsg);
               }
               if ((pushdienst & STATE)!=0 ) {
                   setState(mirrorMessageState, pushmsg);
               }
               if ((pushdienst & EMAIL)!=0 && senderEmailID != '' && empfaengerEmailID !='') {
                   sendEmail('Wetterentwarnung des DWD(iobroker)',pushmsg);
               }
        
               /* alle Sicherungen Wetterwarnung löschen */
               oldHeadlines = newHeadlines.slice();
               oldDescriptions = newDescriptions.slice();
               oldBegins = newBegins.slice();
               oldEnds = newEnds.slice();
               oldData = newData.slice();
               return;
           }
        
           /* Variablen für Meldungen Text */
           var MeldungNew = '';
           /* Variablen für Meldungen Sprache */
           var MeldungSpracheDWD = '';
           var MeldungNewSprache = '';
           var MeldungOldSprache = '';
           var AllEmailMsg = '';
           var AllEmailMsgDelete = '';
        
           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 < newDescriptions.length; i++) {
               headline = oldHeadlines[i];
               description = oldDescriptions[i];
               begin = oldBegins[i];
               end = oldEnds[i];
               if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
                   MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
                   let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben";
                   if ((pushdienst & TELEGRAM)!=0) {
                       sendTo ("telegram.0", pushmsg);
                   }
                   if ((pushdienst & PUSHOVER)!=0) {
                       sendTo("pushover.0", pushmsg);
                   }
                   if ((pushdienst & IOGO)!=0) {
                       sendioGo('Wetterentwarnung',pushmsg);
                   }
                   if ((pushdienst & STATE)!=0 ) {
                       setState(mirrorMessageState, pushmsg);
                   }
                   if ((pushdienst & EMAIL)!=0 && senderEmailID!= '' && empfaengerEmailID!='') {
                       AllEmailMsgDelete+=pushmsg+'\n\n';
                   }
                   /* Verknüpfen aller aufgehobenen Wetterwarnungen */
                   if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){
                       MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache;
                   }
               }
           }
        
           /* Bereich für 'Neue Amtliche Wetterwarnung' */
           for(i = 0; i < newDescriptions.length; i++) {
               headline = newHeadlines[i];
               description = newDescriptions[i];
               begin = newBegins[i];
               end = newEnds[i];
               var instruction = newInstruction[i];
               if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
                   MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                   if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
                   /* Entfernen °C für Sprachausgabe */
                   var replaceDescription0 = entferneDatenpunkt(description);
                   MeldungNewSprache = headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
                   if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
                   if ((pushdienst & TELEGRAM)!=0) {
                       sendTo ("telegram.0", MeldungNew);
                   }
                   if ((pushdienst & PUSHOVER)!=0) {
                       sendTo("pushover.0", MeldungNew);
                   }
                   if ((pushdienst & IOGO)!=0) {
                       sendioGo('Wetterwarnung',MeldungNew);
                   }
                   if ((pushdienst & STATE)!=0 ) {
                       setState(mirrorMessageState,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((forceSpeak || compareTime(START, ENDE, 'between') ) && (pushdienst & HOMETWO)!=0 && (MeldungSpracheDWD !== "" )){
               var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD;
               log('Url2 :' + Url2);
               request(Url2);
           }
           /* Bereich für Sprachausgabe über SayIt + Alexa */
           if (MeldungSpracheDWD !== "" && (forceSpeak || compareTime(START, ENDE, 'between'))){
               if ((pushdienst & SAYIT)!=0) setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD);
               if ((pushdienst & ALEXA)!=0) {
                   setState(idAlexaVolumen, alexaVolumen);
                   setState(idAlexa, MeldungSpracheDWD);
               }
           }
           AllEmailMsg+=AllEmailMsgDelete;
           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();
           oldData = newData.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");
               rueckgabe = rueckgabe.replace(/\kn/g, " Knoten");
               rueckgabe = rueckgabe.replace(/\bft/g, " Windstärke");
               rueckgabe = rueckgabe.replace(/\m\/s/g, " Meter pro Sekunde");
           }
           catch(e) {}
           return rueckgabe;
        }
        
        on(/^dwd\.0\..*\.object$/, function(dp) {
           let i = getIdIndex(dp.id);
           var warn = null;
           if (dp.state.val != '') warn = JSON.parse(dp.state.val);
           warn = convertJsonDWD(warn);
           newDescriptions[i] = warn.description ;
           newHeadlines[i] = warn.headline;
           newBegins[i] = warn.start;
           newEnds[i] = warn.end;
           newInstruction[i] = warn.instruction;
           newData[i].level = warn.level;
           newData[i].type = warn.type;
           if(timer) clearTimeout(timer);
           if (autoMode) timer = setTimeout(check, 10000);
        });
        
        function convertJsonDWD(warn) {
           warn = (!warn || warn === ''? {} : warn);
           if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
           let a = warn.description === undefined ? '' : warn.description;
           let b = warn.headline === undefined ? '' : warn.headline;
           let c = warn.start === undefined ? '' : getFormatDate(new Date(warn.start));
           let d = warn.end === undefined ? '' : getFormatDate(new Date(warn.end));
           let e = warn.instruction === undefined ? '' : warn.instruction;
           let f = warn.type === undefined ? -1 : warn.type;
           let g = warn.level === undefined ? -1 : warn.level;
           return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
        }
        
        function getIdIndex(a) {
           a = a.split('.');
           if (a[2].length == 7) return 0
           return a[2][7];
        }
        function getFormatDate(a) {
           if (!a || a === '') return '';
           return formatDate(a.getTime(), formatierungString);
        }
        // @PARAM Rückgabe von getFormatDate
        function getFormatDateSpeak(a) {
           if (!a || a === '') return '';
           let b = a.split('.');
           let 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
           let 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
           });
        }
        
        function sendioGo(topic, msg) {
           if ((pushdienst & IOGO)!=0) {
               if (ioGoUser) {
                   sendTo('iogo.0', "send", {
                       user:                   ioGoUser,
                       text:                   topic,
                       title:                  msg
                   });
               } else {
                   sendTo('iogo.0', "send", {
                       text:                   topic,
                       title:                  msg
                   });
               }
           }
        }
        
        
        

        crunchipC Abwesend
        crunchipC Abwesend
        crunchip
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #54

        @ticaki hab noch v13.1,
        aktuell gerade reinkommende Warnung

        dwd.0.warning.description

        Es treten Sturmböen mit Geschwindigkeiten zwischen 60 km/h (17m/s, 33kn, Bft 7) und 75 km/h (21m/s, 41kn, Bft 9) anfangs aus südwestlicher, später aus westlicher Richtung auf. In Schauernähe muss mit Sturmböen bis 85 km/h (24m/s, 47kn, Bft 9) gerechnet werden.
        

        im log steht

        bbad8ef8-6aca-428e-b5f4-acf967e67e64-image.png

        vorgelesen wurde es auch wieder...so wie es da steht ...60 km/h (17m/s, 33kn, Bft 7)

        umgestiegen von Proxmox auf Unraid

        T 1 Antwort Letzte Antwort
        0
        • crunchipC crunchip

          @ticaki hab noch v13.1,
          aktuell gerade reinkommende Warnung

          dwd.0.warning.description

          Es treten Sturmböen mit Geschwindigkeiten zwischen 60 km/h (17m/s, 33kn, Bft 7) und 75 km/h (21m/s, 41kn, Bft 9) anfangs aus südwestlicher, später aus westlicher Richtung auf. In Schauernähe muss mit Sturmböen bis 85 km/h (24m/s, 47kn, Bft 9) gerechnet werden.
          

          im log steht

          bbad8ef8-6aca-428e-b5f4-acf967e67e64-image.png

          vorgelesen wurde es auch wieder...so wie es da steht ...60 km/h (17m/s, 33kn, Bft 7)

          T Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von ticaki
          #55

          @crunchip
          Ich hab jetzt den "Achtung ." und sonst nix fehler gefunden. Aber wieso die nicht ersetzt werden muß ich noch finden. Du benutzt SayIt?
          Die Ersetzung funktioniert nur in mir bekannten Sprachausgaben.

          • Alexa
          • SayIt
          • Home24

          Für Textform war ursprüchlich die Kurzversion vorgesehen, das hab ich dann so übernommen ohne weiter darüber nachzudenken.

          Sind die Handlungsanweisungen eigentlich ok. Oder nervt das?

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          crunchipC 1 Antwort Letzte Antwort
          0
          • T ticaki

            @crunchip
            Ich hab jetzt den "Achtung ." und sonst nix fehler gefunden. Aber wieso die nicht ersetzt werden muß ich noch finden. Du benutzt SayIt?
            Die Ersetzung funktioniert nur in mir bekannten Sprachausgaben.

            • Alexa
            • SayIt
            • Home24

            Für Textform war ursprüchlich die Kurzversion vorgesehen, das hab ich dann so übernommen ohne weiter darüber nachzudenken.

            Sind die Handlungsanweisungen eigentlich ok. Oder nervt das?

            crunchipC Abwesend
            crunchipC Abwesend
            crunchip
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #56

            @ticaki ich benutze beides

            • Alexa
            • Sayit
              hatte aber zur Zeit nur letzteres akiviert

            @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

            Handlungsanweisungen

            hat mich nur gewundert, da diese in dwd.0.warning.description gar nicht erscheinen und vorgelesen wurden

            @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

            "Achtung ." und sonst nix fehler gefunden

            das klingt schon mal positiv

            umgestiegen von Proxmox auf Unraid

            T 1 Antwort Letzte Antwort
            0
            • crunchipC crunchip

              @ticaki ich benutze beides

              • Alexa
              • Sayit
                hatte aber zur Zeit nur letzteres akiviert

              @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

              Handlungsanweisungen

              hat mich nur gewundert, da diese in dwd.0.warning.description gar nicht erscheinen und vorgelesen wurden

              @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

              "Achtung ." und sonst nix fehler gefunden

              das klingt schon mal positiv

              T Nicht stören
              T Nicht stören
              ticaki
              schrieb am zuletzt editiert von
              #57

              @crunchip
              Die instruction werden im Adapter nicht angezeigt. Sind aber im Json enthalten.

              Bin gerade auf ein Zeichenlimit in Alexa gestoßen. Werde das so ändern das alle 30 Sekunden eine Warnung vorgelesen wird.

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              1 Antwort Letzte Antwort
              0
              • T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von
                #58

                13.7
                sollte das Knoten endlich ausgesprochen werden.
                Hab bis jetzt überwiegend sprachausgabe ohne Filter getestet.

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                crunchipC 1 Antwort Letzte Antwort
                0
                • T ticaki

                  13.7
                  sollte das Knoten endlich ausgesprochen werden.
                  Hab bis jetzt überwiegend sprachausgabe ohne Filter getestet.

                  crunchipC Abwesend
                  crunchipC Abwesend
                  crunchip
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von crunchip
                  #59

                  @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

                  Knoten endlich ausgesprochen
                  1357d154-f9a8-44d3-b3fd-834b431c4590-image.png

                  das wird ja ausgesprochen, es wird ja genau so vorgelesen wie hier zu sehen. Sinnigerweise wäre es doch sinnvoll das es erst gar nicht ausgesprochen wird. Also alles zwischen ( ) weglassen, wäre meine Idee gewesen

                  umgestiegen von Proxmox auf Unraid

                  T 1 Antwort Letzte Antwort
                  0
                  • crunchipC crunchip

                    @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

                    Knoten endlich ausgesprochen
                    1357d154-f9a8-44d3-b3fd-834b431c4590-image.png

                    das wird ja ausgesprochen, es wird ja genau so vorgelesen wie hier zu sehen. Sinnigerweise wäre es doch sinnvoll das es erst gar nicht ausgesprochen wird. Also alles zwischen ( ) weglassen, wäre meine Idee gewesen

                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von
                    #60

                    @crunchip
                    :grin:

                    Tja die Idee hatte ich auch... ist in 13.7 konfigurierbar. SpeedDetailSpeak ... die Variablebezeichnung gefällt mir garnicht.

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    crunchipC 1 Antwort Letzte Antwort
                    0
                    • T ticaki

                      @crunchip
                      :grin:

                      Tja die Idee hatte ich auch... ist in 13.7 konfigurierbar. SpeedDetailSpeak ... die Variablebezeichnung gefällt mir garnicht.

                      crunchipC Abwesend
                      crunchipC Abwesend
                      crunchip
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von
                      #61

                      @ticaki guck ich mir später an, wenns Kind im Bett ist

                      umgestiegen von Proxmox auf Unraid

                      1 Antwort Letzte Antwort
                      0
                      • T Nicht stören
                        T Nicht stören
                        ticaki
                        schrieb am zuletzt editiert von
                        #62

                        Hab die Versionsnummer geändert und höre auf neue Funktionen einzubauen. Bitte testen so das ich die letzten Fehler raus bekomme.

                        • Neue Pushmöglichkeiten hinzuzufügen ist weiterhin kein Ding.

                        Das einzige was ich noch einbaue, wenn Interesse besteht ist:

                        • Wenn Interesse besteht erweitere ich die Alerts um höchste Warnstufe, Anfang, Ende per Warnungstyp. Dann könnte man in anderen Skripten z.B. bei starkem Regen und offenen Fenstern oder ausgefahrener Markise einen Hinweis versenden oder bei Sturm die Rollos absenken usw. Ohne sich zuviele Gedanken um den DWD Kram zu machen.

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

                        sigi234S 1 Antwort Letzte Antwort
                        1
                        • T ticaki

                          Hab die Versionsnummer geändert und höre auf neue Funktionen einzubauen. Bitte testen so das ich die letzten Fehler raus bekomme.

                          • Neue Pushmöglichkeiten hinzuzufügen ist weiterhin kein Ding.

                          Das einzige was ich noch einbaue, wenn Interesse besteht ist:

                          • Wenn Interesse besteht erweitere ich die Alerts um höchste Warnstufe, Anfang, Ende per Warnungstyp. Dann könnte man in anderen Skripten z.B. bei starkem Regen und offenen Fenstern oder ausgefahrener Markise einen Hinweis versenden oder bei Sturm die Rollos absenken usw. Ohne sich zuviele Gedanken um den DWD Kram zu machen.
                          sigi234S Online
                          sigi234S Online
                          sigi234
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #63

                          @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

                          Wenn Interesse besteht erweitere ich die Alerts um höchste Warnstufe, Anfang, Ende per Warnungstyp

                          :+1:

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

                          1 Antwort Letzte Antwort
                          0
                          • T Nicht stören
                            T Nicht stören
                            ticaki
                            schrieb am zuletzt editiert von
                            #64

                            v1.15.0 noch nicht installieren hat noch eine Fehler

                            Alert um das angesprochene erweitert. Am besten Script anhalten, alle Datenpunkte löschen und neues Skript starten, anhalten, starten.

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            T 1 Antwort Letzte Antwort
                            0
                            • T ticaki

                              v1.15.0 noch nicht installieren hat noch eine Fehler

                              Alert um das angesprochene erweitert. Am besten Script anhalten, alle Datenpunkte löschen und neues Skript starten, anhalten, starten.

                              T Nicht stören
                              T Nicht stören
                              ticaki
                              schrieb am zuletzt editiert von
                              #65

                              v1.15.1
                              Sprachausgabe hat keine Zeit genannt, behoben.

                              Alert um das angesprochene erweitert. Am besten Script anhalten, alle Datenpunkte löschen und neues Skript starten, anhalten, starten.

                              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                              Spenden

                              crunchipC 1 Antwort Letzte Antwort
                              0
                              • T ticaki

                                v1.15.1
                                Sprachausgabe hat keine Zeit genannt, behoben.

                                Alert um das angesprochene erweitert. Am besten Script anhalten, alle Datenpunkte löschen und neues Skript starten, anhalten, starten.

                                crunchipC Abwesend
                                crunchipC Abwesend
                                crunchip
                                Forum Testing Most Active
                                schrieb am zuletzt editiert von
                                #66

                                @ticaki ich werde mal installieren, zum testen komme ich allerdings heute nicht mehr.

                                umgestiegen von Proxmox auf Unraid

                                T 1 Antwort Letzte Antwort
                                0
                                • crunchipC crunchip

                                  @ticaki ich werde mal installieren, zum testen komme ich allerdings heute nicht mehr.

                                  T Nicht stören
                                  T Nicht stören
                                  ticaki
                                  schrieb am zuletzt editiert von
                                  #67

                                  @crunchip
                                  Danke, nachher kommt aber wahrscheinlich noch eine Version mit einer letzten nützlichen Idee von mir. Installiere das, wenn ich es denn hin bekomme :)

                                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                  Spenden

                                  1 Antwort Letzte Antwort
                                  0
                                  • T Nicht stören
                                    T Nicht stören
                                    ticaki
                                    schrieb am zuletzt editiert von
                                    #68

                                    Hab noch Multitarget hinzugefügt wo es ging. Telegram, ioGo, email, Alexa, Sayit, Home24
                                    Zu Pushover hab ich nix gefunden.
                                    Leider geht das mit Alexa nicht bei mir. Der Echo macht was er soll, aber der Echo dot 2 Gen will keine announcement/ssml abspielen und mit speak funktioniert es nicht sauber. :(

                                    Das Script kommt jetzt auch mit Gruppen klar, da kann man keine Lautstärke übertragen, konfiguriert sollte sie trotzdem werden.

                                    Das sollte jetzt aber die letzte Funktion gewesen sein, die neue/alte Fehler produziert,

                                    //Version 1.15.4
                                    //nachbearbeitet von ticaki
                                    /*
                                    
                                    */
                                    /* ************************************************************************* */
                                    /*             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                    */
                                    /*                                                                           */
                                    /*                                                                           */
                                    /*                                                                           */
                                    /* ************************************************************************* */
                                    
                                    /* ************************************************************************* */
                                    /* NICHT EDITIEREN */
                                    var konstanten = [
                                       {"name":'telegram',"value":1},
                                       {"name":'pushover',"value":2},
                                       {"name":'email',"value":4},
                                       {"name":'sayit',"value":8},
                                       {"name":'home24',"value":16},
                                       {"name":'alexa',"value":32},
                                       {"name":'state',"value":64},
                                       {"name":'iogo',"value":128}
                                    ];
                                    const TELEGRAM = konstanten[0].value;
                                    const PUSHOVER = konstanten[1].value;
                                    const EMAIL = konstanten[2].value;
                                    const SAYIT = konstanten[3].value;
                                    const HOMETWO = konstanten[4].value;
                                    const ALEXA = konstanten[5].value;
                                    const STATE = konstanten[6].value;
                                    const IOGO = konstanten[7].value;
                                    var pushdienst=0;
                                    /* ************************************************************************* */
                                    /*                       Konfiguration ab hier                               */
                                    /* ************************************************************************* */
                                    
                                    /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
                                    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
                                    pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
                                    //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
                                    
                                    /* Einstellungen zur Emailbenachrichtigung*/
                                    var senderEmailID = []; // mit Sender Emailadresse füllen. email Adapter muß installiert sein. 1 Eintrag erlaubt [] oder ["email1"]
                                    var empfaengerEmailID = [];// mit Empfänger Emailadresse füllen. Mehrere Empfänger möglich. [] oder ["email1"] oder ["email1","email2"]
                                    
                                    /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
                                    var idMediaplayer = ["192.168.178.68:50000"]; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer mehrere Möglich - ungetestet
                                    
                                    /* Konfiguration Telegram */
                                    var telegramUser = []; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
                                    
                                    /* Konfiguration Sprachausgabe über SayIt */
                                    var idSayIt = ["sayit.0.tts.text"]; // mehrfach Einträge möglich
                                    var lautstaerke = [60]; // gleiche Anzahl wie idSayIt
                                    
                                    /* Konfiguration Sprachausgabe über Alexa
                                    /* mehrere Einträge möglich, bei mir ging nur der Echo, 2 dots 2.Gen reagieren nicht auf announcement. */
                                    var idAlexaSerial =[]; // die reine Seriennummer des Echos z.B.: var idAlexaSerial =['G090RV32984110Y','G090RV32984110Y']
                                    var alexaVolumen = [40]; // Lautstärke die gleiche Anzahl an Einträgen wie bei idAlexaSerial
                                    
                                    //Konfiguration von ioGo
                                    var ioGoUser = []; // // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
                                    
                                    //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
                                    var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . 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" KEINE Anpassung nötig
                                    const formatierungString = "TT.MM.YY SS:mm";
                                    
                                    // Sprachausgabe Zeiten
                                    // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
                                    var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
                                    var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
                                    var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
                                    
                                    // Automatikmodus auschalten
                                    var autoMode = true;
                                    //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
                                    var forcedSpeak = false;
                                    // keine Ansage über m/s Knoten und Windstärke. Die Angabe mit Kilometer pro Stunde wird angesagt
                                    var WindForceDetailsSpeak = false;
                                    
                                    /* ************************************************************************* */
                                    /* ************************************************************************* */
                                    /* ************************************************************************* */
                                    /*                       Konfiguration Ende                                  */
                                    /* ************************************************************************* */
                                    /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
                                    /* ************************************************************************* */
                                    /* ************************************************************************* */
                                    /* ************************************************************************* */
                                    var placeHolder = 'XXXXPLACEHOLDERXXXX';
                                    var idAlexa = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.announcement';
                                    var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.speak-volume';
                                    var forceSpeak = false;
                                    /* Arrays festlegen */
                                    const InitArraylength = 9;
                                    var newDescriptions = [InitArraylength];
                                    var oldDescriptions = [InitArraylength];
                                    var newHeadlines = [InitArraylength];
                                    var oldHeadlines = [InitArraylength];
                                    var newBegins = [InitArraylength];
                                    var oldBegins = [InitArraylength];
                                    var newEnds = [InitArraylength];
                                    var oldEnds = [InitArraylength];
                                    var newInstruction = [InitArraylength];
                                    var oldData = [InitArraylength];
                                    var newData = [InitArraylength];
                                    var timer = null;
                                    var onClickCheckRun = false;
                                    
                                    function getFullId(a,b) {
                                     return a.replace(placeHolder,b)
                                    }
                                    /* Überpüfe die Konfiguration soweit möglich */
                                    if ((pushdienst&ALEXA) != 0) {
                                     for (let a=0;a<idAlexaSerial.length;a++) {
                                       if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                                         log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
                                         stopScript();
                                       }
                                     }
                                    }
                                    
                                    if ((pushdienst&SAYIT) != 0) {
                                     for (let a=0;a<idSayIt.length;a++) {
                                       if (
                                         !existsState(idSayIt[a])
                                       ) {
                                         log('SayIt-Konfiguration ist fehlerhaft. Überpüfen!','error');
                                         stopScript();
                                       }
                                     }
                                    }
                                    
                                    if ((pushdienst&EMAIL) != 0) {
                                     if (senderEmailID.length>1) {
                                       log('eMail-Konfiguration ist fehlerhaft. Nur 1 Eintrag in senderEmailID erlaubt!','error');
                                       stopScript();
                                     }
                                    }
                                    
                                    
                                    
                                    
                                    
                                    /* erstmaliges Befüllen der arrays */
                                    for (let a=0;a<InitArraylength;a++) {
                                       var id = "dwd.0.warning";
                                       if (a!=0) id+=a.toString();
                                       id+='.object';
                                       var warn = {};
                                       if (existsState(id)) warn = JSON.parse(getState(id).val);
                                       warn = convertJsonDWD(warn);
                                       newDescriptions[a] = warn.description;
                                       oldDescriptions[a] = warn.description;
                                       newHeadlines[a] = warn.headline;
                                       oldHeadlines[a] = warn.headline;
                                       newBegins[a] = warn.start;
                                       oldBegins[a] = warn.start;
                                       newEnds[a] = warn.end;
                                       oldEnds[a] = warn.end;
                                       newData[a] = {"level":warn.level,"type":warn.type};
                                       oldData[a] = {"level":warn.level,"type":warn.type};
                                    }
                                    
                                    // State der Pushnachrichten über pushover/telegram spiegelt
                                    const mirrorMessageState = onClickMessageState+'message';
                                    if (!existsState(mirrorMessageState)) {
                                       createState(mirrorMessageState,'', {
                                           read: true,
                                           write: false,
                                           desc: "Beschreibung",
                                           type: "string",
                                       });
                                    }
                                    
                                    // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
                                    // Warning types
                                    var warningTypesString = [
                                       'Gewitter',
                                       'Sturm',
                                       'Regen',
                                       'Schnee',
                                       'Nebel',
                                       'Frost',
                                       'Glatteis',
                                       'Tauwetter',
                                       'Hitzewarnungen',
                                       'UV_Warnungen'/*,
                                       'Kuestenwarnungen',
                                       'Binnenseewarnungen'*/
                                    ];
                                    const stateAlert = // Änderungen auch in SetAlertState() anpassen
                                    [
                                       {"name":'level',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
                                       {"name":'type',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
                                       {"name":'start',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string",name:''}},
                                       {"name":'end',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string", name:''}},
                                    ]
                                    {
                                       let stateAlertId = onClickMessageState+'alert.';
                                       let allStateExist = true;
                                       for (let b=0;b<warningTypesString.length;b++) {
                                           for (let a=0;a<stateAlert.length;a++)
                                           {
                                               let stateAlertIdFull = stateAlertId+warningTypesString[b]+'.'+stateAlert[a].name;
                                               stateAlert[a].type.name = stateAlertIdFull.toString();
                                               if (!existsState(stateAlertIdFull)) {
                                                   createState(stateAlertIdFull,stateAlert[a].default, stateAlert[a].type);
                                                   allStateExist=false;
                                               }
                                           }
                                       }
                                       if (allStateExist) SetAlertState();
                                    }
                                    
                                    // Nachrichtenversand per Click States erzeugen und subscript
                                    for (var a=0;a<konstanten.length;a++){
                                       if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
                                           createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
                                               read: true,
                                               write: true,
                                               desc: "Beschreibung",
                                               type: "boolean",
                                               def: false
                                           });
                                       }
                                       if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
                                           subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
                                               if (!obj.state.val) return;
                                               setState(obj.id,false,true);
                                               let b = obj.id.split('.');
                                               let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
                                               if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
                                               if ((pushdienst & konstanten[d].value) == 0) return;
                                               let oldPushdienst = pushdienst;
                                               pushdienst = konstanten[d].value*1;
                                               for (let i=0;i<oldDescriptions.length;i++) {
                                                   oldHeadlines[i] = '';
                                                   oldDescriptions[i] = '';
                                                   oldBegins[i] = '';
                                                   oldEnds[i] = '';
                                                   oldData[i] = {"type":-1,"level":-1};
                                               }
                                               forceSpeak = forcedSpeak;
                                               onClickCheckRun = true;
                                               check();
                                               onClickCheckRun = false;
                                               forceSpeak = false;
                                               pushdienst = oldPushdienst;
                                           })
                                       }
                                    }
                                    
                                    // Zeitsteuerung für SayIt & Alexa
                                    var START = new Date();
                                    var ENDE = new Date();
                                    setWeekend();
                                    
                                    function setWeekend()
                                    {
                                       if (forceSpeak) return;
                                       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 = convertStringToDate(startTimeSpeakWeekend);
                                       }
                                       else{
                                           START = convertStringToDate(startTimeSpeak);
                                       }
                                       ENDE = convertStringToDate(endTimeSpeak);
                                    }
                                    
                                    function convertStringToDate(s) {
                                       if (typeof s !== 'string' ) return null;
                                       var e = s.split(':');
                                       if (!Array.isArray(e) || e.length != 2) return null;
                                       var d = new Date();
                                       d.setHours(e[0]);
                                       d.setMinutes(e[1]);
                                       d.setSeconds(0);
                                       return d;
                                    }
                                    
                                    function check() {
                                       if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
                                       setWeekend();
                                    
                                       SetAlertState();
                                    
                                       let activeCount = 0;
                                       newDescriptions.forEach((item, i) => {if (item) activeCount++;});
                                    
                                       /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
                                       if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
                                           let MeldungSDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
                                    
                                           /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
                                           if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
                                               /*if ((pushdienst & SAYIT)!=0) {
                                                   setState(idSayIt, lautstaerke + ";" + MeldungSDWD);
                                               }
                                               if ((pushdienst & ALEXA)!=0) {
                                                   setState(idAlexaVolumen, alexaVolumen);
                                                   setState(idAlexa, MeldungSDWD);
                                               }
                                               if((pushdienst & HOMETWO)!=0 ){
                                                   var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSDWD;
                                                   request(Url);
                                               }*/
                                               sendMessage(pushdienst,'','',MeldungSDWD,'');
                                           }
                                           let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
                                           /*if ((pushdienst & TELEGRAM)!=0 ) {
                                               sendTo ("telegram.0", pushmsg);
                                           }
                                           if ((pushdienst & PUSHOVER)!=0 ) {
                                               sendTo("pushover.0", pushmsg);
                                           }
                                           if ((pushdienst & IOGO)!=0 ) {
                                               sendioGo('Wetterentwarnung', pushmsg);
                                           }
                                           if ((pushdienst & STATE)!=0 ) {
                                               setState(mirrorMessageState, pushmsg);
                                           }
                                           if ((pushdienst & EMAIL)!=0 ) {
                                               sendEmail('Wetterentwarnung des DWD(iobroker)',pushmsg);
                                           }*/
                                           sendMessage(pushdienst,'Wetterentwarnung',pushmsg,'','');
                                           sendMessage(pushdienst,'Wetterentwarnung des DWD(iobroker)','','',pushmsg);
                                    
                                           /* alle Sicherungen Wetterwarnung löschen */
                                           oldHeadlines = newHeadlines.slice();
                                           oldDescriptions = newDescriptions.slice();
                                           oldBegins = newBegins.slice();
                                           oldEnds = newEnds.slice();
                                           oldData = newData.slice();
                                           return;
                                       }
                                    
                                       /* Variablen für Meldungen Text */
                                       var MeldungNew = '';
                                       /* Variablen für Meldungen Sprache */
                                       var MeldungSpracheDWD = [];
                                       var MeldungNewSprache = '';
                                       var MeldungOldSprache = '';
                                       var AllEmailMsg = '';
                                       var AllEmailMsgDelete = '';
                                    
                                       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 < newDescriptions.length; i++) {
                                           headline = oldHeadlines[i];
                                           description = oldDescriptions[i];
                                           end = getFormatDate(oldEnds[i]);
                                           if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
                                               MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
                                               let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben.";
                                               pushmsg += ' Insgesamt '+(activeCount==1 ?'eine gültige Warnung.':activeCount+' gültige Warnungen.');
                                               /*if ((pushdienst & TELEGRAM)!=0) {
                                                   sendTo ("telegram.0", pushmsg);
                                               }
                                               if ((pushdienst & PUSHOVER)!=0) {
                                                   sendTo("pushover.0", pushmsg);
                                               }
                                               if ((pushdienst & IOGO)!=0) {
                                                   sendioGo('Wetterentwarnung',pushmsg);
                                               }
                                               if ((pushdienst & STATE)!=0 ) {
                                                   setState(mirrorMessageState, pushmsg);
                                               }*/
                                               if ((pushdienst & EMAIL)!=0 ) {
                                                   AllEmailMsgDelete+=pushmsg+'\n\n';
                                               }
                                               sendMessage(pushdienst,'Wetterentwarnung',pushmsg,'','');
                                               /* Verknüpfen aller aufgehobenen Wetterwarnungen */
                                               if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){
                                                   MeldungSpracheDWD.push(MeldungOldSprache);
                                               }
                                           }
                                       }
                                       let gefahr = false;
                                       /* Bereich für 'Neue Amtliche Wetterwarnung' */
                                       for(i = 0; i < newDescriptions.length; i++) {
                                           headline = newHeadlines[i];
                                           description = newDescriptions[i];
                                           begin = getFormatDate(new Date(newBegins[i]));
                                           end = getFormatDate(new Date(newEnds[i]));
                                           let level = newData[i].level;
                                           var instruction = newInstruction[i];
                                           if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
                                               MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                                               if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
                                               if (activeCount>1) MeldungNew += ' Insgesamt '+activeCount+' gültige Warnungen.'
                                               /* Entfernen °C für Sprachausgabe */
                                               var replaceDescription0 = entferneDatenpunkt(description);
                                               /* ab Level 4 zusätzlicher Hinweis */
                                               if (!gefahr) gefahr=level>3;
                                               let topic = (level>3)?'Wichtige Wetterwarnung':'Wetterwarnung';
                                               MeldungNewSprache = (level>3)?'Achtung Unwetter ':'' + headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
                                               if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
                                    
                                               sendMessage(pushdienst,topic,MeldungNew,'','');
                                               /*if ((pushdienst & TELEGRAM)!=0) {
                                                   sendTo ("telegram.0", MeldungNew);
                                               }
                                               if ((pushdienst & PUSHOVER)!=0) {
                                                   sendTo("pushover.0", MeldungNew);
                                               }
                                               if ((pushdienst & IOGO)!=0) {
                                                   sendioGo(topic,MeldungNew);
                                               }
                                               if ((pushdienst & STATE)!=0 ) {
                                                   setState(mirrorMessageState,MeldungNew);
                                               }*/
                                               if ((pushdienst & EMAIL)!=0 ) {
                                                   AllEmailMsg+=MeldungNew+'\n\n';
                                               }
                                               /* Verknüpfen aller neuen Warnmeldungen */
                                               if(MeldungNewSprache !== "" && MeldungNewSprache !== undefined){
                                                   MeldungSpracheDWD.push(MeldungNewSprache);
                                               }
                                           }
                                       }
                                       /* Bereich für Sprachausgabe */
                                       if (onClickCheckRun) {
                                           if (MeldungSpracheDWD.length==0) MeldungSpracheDWD.push('Es liegen keine Warnmeldungen des DWD vor.');
                                       }
                                       if (MeldungSpracheDWD.length>0 && (forceSpeak || compareTime(START, ENDE, 'between')) && (pushdienst & (HOMETWO+SAYIT+ALEXA))!=0 ) {
                                           let a=1000;
                                           let b = a;
                                           let c = a;
                                           while (MeldungSpracheDWD.length>0)
                                           {
                                               let b = 60000;
                                               let msgAppend = '';
                                               if (MeldungSpracheDWD.length > 1) {
                                                   if (MeldungSpracheDWD.length-1==1) {
                                                       msgAppend = ' Eine weitere neue Warnung.';
                                                   } else {
                                                       msgAppend = MeldungSpracheDWD.length-1+' weitere neue Warnungen.';
                                                   }
                                               } else {
                                                   if (activeCount==0) msgAppend = ' keine weitere Warnung.';
                                                   else {
                                                       if (activeCount==1) msgAppend = ' Ingesamt eine aktive Warnung.';
                                                       else msgAppend = ' Insgesamt '+activeCount+ 'aktive Warnungen.';
                                                   }
                                               }
                                               if((pushdienst & HOMETWO)!=0 ){
                                                   setTimeout(function(msg,msg2){
                                                     sendMessage(HOMETWO,'','',msg+msg2,'');
                                    
                                                       /*var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + msg+msg2;
                                                       log('Url2 :' + Url2);
                                                       request(Url2);*/
                                                   },a,MeldungSpracheDWD[0], msgAppend);
                                               }
                                               /* Bereich für Sprachausgabe über SayIt + Alexa */
                                               if ((pushdienst & SAYIT)!=0) {
                                                   setTimeout(function(msg,msg2){
                                                     sendMessage(SAYIT,'','',msg+msg2,'');
                                                       //setState(idSayIt, lautstaerke + ";" + msg+msg2);
                                                   },b,MeldungSpracheDWD[0], msgAppend);
                                               }
                                               if ((pushdienst & ALEXA)!=0) {
                                                   setTimeout(function(msg,msg2){
                                                     sendMessage(ALEXA,'','',msg+msg2,'');
                                                       //setState(idAlexaVolumen, alexaVolumen);
                                                       //setState(idAlexa, msg+msg2);
                                                   },c,MeldungSpracheDWD[0], msgAppend);
                                               }
                                               a+=60000;
                                               b+=45000;
                                               c+=30000;
                                               MeldungSpracheDWD.shift();
                                           }
                                       }
                                    
                                       AllEmailMsg+=AllEmailMsgDelete;
                                       if ((pushdienst & EMAIL)!=0 && AllEmailMsg != '') {
                                           //sendEmail(gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",AllEmailMsg);
                                           sendMessage(EMAIL,gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",'','',AllEmailMsg);
                                       }
                                    
                                       /* Neue Werte sichern */
                                       oldHeadlines = newHeadlines.slice();
                                       oldDescriptions = newDescriptions.slice();
                                       oldBegins = newBegins.slice();
                                       oldEnds = newEnds.slice();
                                       oldData = newData.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");
                                           if (!WindForceDetailsSpeak) {
                                               rueckgabe = rueckgabe.replace(/[0-9]+.m\/s..[0-9]+kn..Bft.[0-9]+/g, "");
                                           } else {
                                               rueckgabe = rueckgabe.replace(/kn/g, " Knoten");
                                               rueckgabe = rueckgabe.replace(/Bft/g, " Windstärke");
                                               rueckgabe = rueckgabe.replace(/m\/s/g, " Meter pro Sekunde");
                                           }
                                       }
                                       catch(e) {log(e,'warn');}
                                       return rueckgabe;
                                    }
                                    
                                    on(/^dwd\.0\..*\.object$/, function(dp) {
                                       let i = getIdIndex(dp.id);
                                       var warn = null;
                                       if (dp.state.val != '') warn = JSON.parse(dp.state.val);
                                       warn = convertJsonDWD(warn);
                                       newDescriptions[i] = warn.description ;
                                       newHeadlines[i] = warn.headline;
                                       newBegins[i] = warn.start;
                                       newEnds[i] = warn.end;
                                       newInstruction[i] = warn.instruction;
                                       newData[i].level = warn.level;
                                       newData[i].type = warn.type;
                                       if(timer) clearTimeout(timer);
                                       if (autoMode) timer = setTimeout(check, 10000);
                                    });
                                    
                                    function convertJsonDWD(warn) {
                                       warn = (!warn || warn === ''? {} : warn);
                                       if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
                                       let a = warn.description === undefined ? '' : warn.description;
                                       let b = warn.headline === undefined ? '' : warn.headline;
                                       let c = warn.start === undefined ? null : warn.start||null;
                                       let d = warn.end === undefined ? null : warn.end||null;
                                       let e = warn.instruction === undefined ? '' : warn.instruction;
                                       let f = warn.type === undefined ? -1 : warn.type;
                                       let g = warn.level === undefined ? -1 : warn.level;
                                       return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
                                    }
                                    
                                    function getIdIndex(a) {
                                       a = a.split('.');
                                       if (a[2].length == 7) return 0
                                       return a[2][7];
                                    }
                                    function getFormatDate(a) {
                                       if (!a || a === '') return '';
                                       return formatDate(a.getTime(), formatierungString);
                                    }
                                    // @PARAM Rückgabe von getFormatDate
                                    function getFormatDateSpeak(a) {
                                       if (!a || a === '') return '';
                                       let b = a.split('.');
                                       let 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
                                       let c = b[2].split(' ');
                                       c[0]='';
                                       b[2] = c.join(' ');
                                       return b.join(' ');
                                    }
                                    
                                    function SetAlertState(){
                                       let stateAlertid = onClickMessageState+'alert.';
                                       for (let b=0;b<warningTypesString.length;b++)
                                       {
                                           let stateAlertIdFull = stateAlertid+warningTypesString[b]+'.';
                                           let AlertLevel = -1;
                                           let AlertType = -1;
                                           let AlertStart = null;
                                           let AlertEnd = null;
                                           let AlertIndex = -1;
                                           for (let c=0;c<newData.length;c++) {
                                               if (newData[c].type == b && newData[c].level > AlertLevel) {
                                                   AlertLevel=newData[c].level;
                                                   AlertIndex=c;
                                               }
                                           }
                                           if (getState(stateAlertIdFull+stateAlert[0].name).val!=AlertIndex) {
                                               setState(stateAlertIdFull+stateAlert[0].name,AlertLevel);
                                               setState(stateAlertIdFull+stateAlert[1].name,b);
                                               setState(stateAlertIdFull+stateAlert[2].name,(AlertIndex>-1)?formatDate(new Date(newBegins[AlertIndex]))||null:null);
                                               setState(stateAlertIdFull+stateAlert[3].name,(AlertIndex>-1)?formatDate(new Date(newEnds[AlertIndex]))||null:null);
                                           }
                                       }
                                    }
                                    
                                    function sendMessage(pushdienst, topic, msgsingle, msgspeak, msgall) {
                                     if (msgsingle) {
                                       if ((pushdienst & TELEGRAM)!=0) {
                                         if (telegramUser.length>0) {
                                           for (let a=0;a<telegramUser.length;a++) {
                                             sendTo ("telegram.0", {user: telegramUser[a], text: msgsingle});
                                           }
                                         } else {
                                           sendTo ("telegram.0", msgsingle);
                                         }
                                       }
                                       if ((pushdienst & PUSHOVER)!=0) {
                                         sendTo("pushover.0", msgsingle);
                                       }
                                       if ((pushdienst & IOGO)!=0) {
                                         if (ioGoUser.length>0) {
                                           for (let a=0;a<ioGoUser.length;a++) {
                                             sendTo('iogo.0', "send", {
                                               user:                   ioGoUser[a],
                                               text:                   topic,
                                               title:                  msgsingle
                                             });
                                           }
                                         } else {
                                           sendTo('iogo.0', "send", {
                                             text:                   topic,
                                             title:                  msgsingle
                                           });
                                         }
                                       }
                                       if ((pushdienst & STATE)!=0 ) {
                                         setState(mirrorMessageState,msgsingle,true);
                                       }
                                     }
                                     if(msgspeak){
                                       if((pushdienst & HOMETWO)!=0 ){
                                         for(let a=0;a<idMediaplayer.length;a++) {
                                           var Url2 = "http://" + idMediaplayer[a] + "/track=4fachgong.mp3|tts=" + msgspeak;
                                           log('Url2 :' + Url2);
                                           request(Url2);
                                         }
                                       }
                                       if ((pushdienst & SAYIT)!=0) {
                                         for(let a=0;a<idSayIt.length;a++) {
                                           setState(idSayIt[a], lautstaerke[a] + ";" + msgspeak);
                                         }
                                       }
                                       if ((pushdienst & ALEXA)!=0) {
                                    
                                          for(let a=0;a<idAlexaSerial.length;a++) {
                                                   // Wenn auf Gruppe keine Lautstärken regelung möglich
                                                   if (existsState(getFullId(idAlexaVolumen,idAlexaSerial[a]))) setState(getFullId(idAlexaVolumen,idAlexaSerial[a]), alexaVolumen[a]);
                                                   setState(getFullId(idAlexa,idAlexaSerial[a]), msgspeak);
                                         }
                                       }
                                     }
                                     if (msgall &&(pushdienst & EMAIL)!=0) {
                                       if (empfaengerEmailID.length>0) {
                                         for (let a=0;a<empfaengerEmailID.length;a++) {
                                           sendTo("email", senderEmailID[0]?{from: senderEmailID[0], to: empfaengerEmailID[a], subject: topic, text: msgall}:{to: empfaengerEmailID[a], subject: topic, text: msgall});
                                         }
                                       } else {
                                         sendTo("email", senderEmailID[0]?{from: senderEmailID[0], subject: topic, text: msgall}:{subject: topic, text: msgall});
                                       }
                                     }
                                    }
                                    
                                    /* function sendioGo(topic, msg) {
                                     if ((pushdienst & IOGO)!=0) {
                                       if (ioGoUser.length>0) {
                                         for (let a=0;a<ioGoUser.length;a++) {
                                           sendTo('iogo.0', "send", {
                                             user:                   ioGoUser[a],
                                             text:                   topic,
                                             title:                  msg
                                           });
                                         ]
                                       } else {
                                         sendTo('iogo.0', "send", {
                                           text:                   topic,
                                           title:                  msg
                                         });
                                       }
                                     }
                                    }*/
                                    
                                    

                                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                    Spenden

                                    crunchipC 1 Antwort Letzte Antwort
                                    0
                                    • T ticaki

                                      Hab noch Multitarget hinzugefügt wo es ging. Telegram, ioGo, email, Alexa, Sayit, Home24
                                      Zu Pushover hab ich nix gefunden.
                                      Leider geht das mit Alexa nicht bei mir. Der Echo macht was er soll, aber der Echo dot 2 Gen will keine announcement/ssml abspielen und mit speak funktioniert es nicht sauber. :(

                                      Das Script kommt jetzt auch mit Gruppen klar, da kann man keine Lautstärke übertragen, konfiguriert sollte sie trotzdem werden.

                                      Das sollte jetzt aber die letzte Funktion gewesen sein, die neue/alte Fehler produziert,

                                      //Version 1.15.4
                                      //nachbearbeitet von ticaki
                                      /*
                                      
                                      */
                                      /* ************************************************************************* */
                                      /*             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                    */
                                      /*                                                                           */
                                      /*                                                                           */
                                      /*                                                                           */
                                      /* ************************************************************************* */
                                      
                                      /* ************************************************************************* */
                                      /* NICHT EDITIEREN */
                                      var konstanten = [
                                         {"name":'telegram',"value":1},
                                         {"name":'pushover',"value":2},
                                         {"name":'email',"value":4},
                                         {"name":'sayit',"value":8},
                                         {"name":'home24',"value":16},
                                         {"name":'alexa',"value":32},
                                         {"name":'state',"value":64},
                                         {"name":'iogo',"value":128}
                                      ];
                                      const TELEGRAM = konstanten[0].value;
                                      const PUSHOVER = konstanten[1].value;
                                      const EMAIL = konstanten[2].value;
                                      const SAYIT = konstanten[3].value;
                                      const HOMETWO = konstanten[4].value;
                                      const ALEXA = konstanten[5].value;
                                      const STATE = konstanten[6].value;
                                      const IOGO = konstanten[7].value;
                                      var pushdienst=0;
                                      /* ************************************************************************* */
                                      /*                       Konfiguration ab hier                               */
                                      /* ************************************************************************* */
                                      
                                      /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
                                      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
                                      pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
                                      //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
                                      
                                      /* Einstellungen zur Emailbenachrichtigung*/
                                      var senderEmailID = []; // mit Sender Emailadresse füllen. email Adapter muß installiert sein. 1 Eintrag erlaubt [] oder ["email1"]
                                      var empfaengerEmailID = [];// mit Empfänger Emailadresse füllen. Mehrere Empfänger möglich. [] oder ["email1"] oder ["email1","email2"]
                                      
                                      /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
                                      var idMediaplayer = ["192.168.178.68:50000"]; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer mehrere Möglich - ungetestet
                                      
                                      /* Konfiguration Telegram */
                                      var telegramUser = []; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
                                      
                                      /* Konfiguration Sprachausgabe über SayIt */
                                      var idSayIt = ["sayit.0.tts.text"]; // mehrfach Einträge möglich
                                      var lautstaerke = [60]; // gleiche Anzahl wie idSayIt
                                      
                                      /* Konfiguration Sprachausgabe über Alexa
                                      /* mehrere Einträge möglich, bei mir ging nur der Echo, 2 dots 2.Gen reagieren nicht auf announcement. */
                                      var idAlexaSerial =[]; // die reine Seriennummer des Echos z.B.: var idAlexaSerial =['G090RV32984110Y','G090RV32984110Y']
                                      var alexaVolumen = [40]; // Lautstärke die gleiche Anzahl an Einträgen wie bei idAlexaSerial
                                      
                                      //Konfiguration von ioGo
                                      var ioGoUser = []; // // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
                                      
                                      //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
                                      var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . 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" KEINE Anpassung nötig
                                      const formatierungString = "TT.MM.YY SS:mm";
                                      
                                      // Sprachausgabe Zeiten
                                      // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
                                      var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
                                      var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
                                      var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
                                      
                                      // Automatikmodus auschalten
                                      var autoMode = true;
                                      //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
                                      var forcedSpeak = false;
                                      // keine Ansage über m/s Knoten und Windstärke. Die Angabe mit Kilometer pro Stunde wird angesagt
                                      var WindForceDetailsSpeak = false;
                                      
                                      /* ************************************************************************* */
                                      /* ************************************************************************* */
                                      /* ************************************************************************* */
                                      /*                       Konfiguration Ende                                  */
                                      /* ************************************************************************* */
                                      /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
                                      /* ************************************************************************* */
                                      /* ************************************************************************* */
                                      /* ************************************************************************* */
                                      var placeHolder = 'XXXXPLACEHOLDERXXXX';
                                      var idAlexa = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.announcement';
                                      var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.speak-volume';
                                      var forceSpeak = false;
                                      /* Arrays festlegen */
                                      const InitArraylength = 9;
                                      var newDescriptions = [InitArraylength];
                                      var oldDescriptions = [InitArraylength];
                                      var newHeadlines = [InitArraylength];
                                      var oldHeadlines = [InitArraylength];
                                      var newBegins = [InitArraylength];
                                      var oldBegins = [InitArraylength];
                                      var newEnds = [InitArraylength];
                                      var oldEnds = [InitArraylength];
                                      var newInstruction = [InitArraylength];
                                      var oldData = [InitArraylength];
                                      var newData = [InitArraylength];
                                      var timer = null;
                                      var onClickCheckRun = false;
                                      
                                      function getFullId(a,b) {
                                       return a.replace(placeHolder,b)
                                      }
                                      /* Überpüfe die Konfiguration soweit möglich */
                                      if ((pushdienst&ALEXA) != 0) {
                                       for (let a=0;a<idAlexaSerial.length;a++) {
                                         if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                                           log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
                                           stopScript();
                                         }
                                       }
                                      }
                                      
                                      if ((pushdienst&SAYIT) != 0) {
                                       for (let a=0;a<idSayIt.length;a++) {
                                         if (
                                           !existsState(idSayIt[a])
                                         ) {
                                           log('SayIt-Konfiguration ist fehlerhaft. Überpüfen!','error');
                                           stopScript();
                                         }
                                       }
                                      }
                                      
                                      if ((pushdienst&EMAIL) != 0) {
                                       if (senderEmailID.length>1) {
                                         log('eMail-Konfiguration ist fehlerhaft. Nur 1 Eintrag in senderEmailID erlaubt!','error');
                                         stopScript();
                                       }
                                      }
                                      
                                      
                                      
                                      
                                      
                                      /* erstmaliges Befüllen der arrays */
                                      for (let a=0;a<InitArraylength;a++) {
                                         var id = "dwd.0.warning";
                                         if (a!=0) id+=a.toString();
                                         id+='.object';
                                         var warn = {};
                                         if (existsState(id)) warn = JSON.parse(getState(id).val);
                                         warn = convertJsonDWD(warn);
                                         newDescriptions[a] = warn.description;
                                         oldDescriptions[a] = warn.description;
                                         newHeadlines[a] = warn.headline;
                                         oldHeadlines[a] = warn.headline;
                                         newBegins[a] = warn.start;
                                         oldBegins[a] = warn.start;
                                         newEnds[a] = warn.end;
                                         oldEnds[a] = warn.end;
                                         newData[a] = {"level":warn.level,"type":warn.type};
                                         oldData[a] = {"level":warn.level,"type":warn.type};
                                      }
                                      
                                      // State der Pushnachrichten über pushover/telegram spiegelt
                                      const mirrorMessageState = onClickMessageState+'message';
                                      if (!existsState(mirrorMessageState)) {
                                         createState(mirrorMessageState,'', {
                                             read: true,
                                             write: false,
                                             desc: "Beschreibung",
                                             type: "string",
                                         });
                                      }
                                      
                                      // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
                                      // Warning types
                                      var warningTypesString = [
                                         'Gewitter',
                                         'Sturm',
                                         'Regen',
                                         'Schnee',
                                         'Nebel',
                                         'Frost',
                                         'Glatteis',
                                         'Tauwetter',
                                         'Hitzewarnungen',
                                         'UV_Warnungen'/*,
                                         'Kuestenwarnungen',
                                         'Binnenseewarnungen'*/
                                      ];
                                      const stateAlert = // Änderungen auch in SetAlertState() anpassen
                                      [
                                         {"name":'level',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
                                         {"name":'type',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
                                         {"name":'start',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string",name:''}},
                                         {"name":'end',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string", name:''}},
                                      ]
                                      {
                                         let stateAlertId = onClickMessageState+'alert.';
                                         let allStateExist = true;
                                         for (let b=0;b<warningTypesString.length;b++) {
                                             for (let a=0;a<stateAlert.length;a++)
                                             {
                                                 let stateAlertIdFull = stateAlertId+warningTypesString[b]+'.'+stateAlert[a].name;
                                                 stateAlert[a].type.name = stateAlertIdFull.toString();
                                                 if (!existsState(stateAlertIdFull)) {
                                                     createState(stateAlertIdFull,stateAlert[a].default, stateAlert[a].type);
                                                     allStateExist=false;
                                                 }
                                             }
                                         }
                                         if (allStateExist) SetAlertState();
                                      }
                                      
                                      // Nachrichtenversand per Click States erzeugen und subscript
                                      for (var a=0;a<konstanten.length;a++){
                                         if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
                                             createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
                                                 read: true,
                                                 write: true,
                                                 desc: "Beschreibung",
                                                 type: "boolean",
                                                 def: false
                                             });
                                         }
                                         if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
                                             subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
                                                 if (!obj.state.val) return;
                                                 setState(obj.id,false,true);
                                                 let b = obj.id.split('.');
                                                 let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
                                                 if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
                                                 if ((pushdienst & konstanten[d].value) == 0) return;
                                                 let oldPushdienst = pushdienst;
                                                 pushdienst = konstanten[d].value*1;
                                                 for (let i=0;i<oldDescriptions.length;i++) {
                                                     oldHeadlines[i] = '';
                                                     oldDescriptions[i] = '';
                                                     oldBegins[i] = '';
                                                     oldEnds[i] = '';
                                                     oldData[i] = {"type":-1,"level":-1};
                                                 }
                                                 forceSpeak = forcedSpeak;
                                                 onClickCheckRun = true;
                                                 check();
                                                 onClickCheckRun = false;
                                                 forceSpeak = false;
                                                 pushdienst = oldPushdienst;
                                             })
                                         }
                                      }
                                      
                                      // Zeitsteuerung für SayIt & Alexa
                                      var START = new Date();
                                      var ENDE = new Date();
                                      setWeekend();
                                      
                                      function setWeekend()
                                      {
                                         if (forceSpeak) return;
                                         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 = convertStringToDate(startTimeSpeakWeekend);
                                         }
                                         else{
                                             START = convertStringToDate(startTimeSpeak);
                                         }
                                         ENDE = convertStringToDate(endTimeSpeak);
                                      }
                                      
                                      function convertStringToDate(s) {
                                         if (typeof s !== 'string' ) return null;
                                         var e = s.split(':');
                                         if (!Array.isArray(e) || e.length != 2) return null;
                                         var d = new Date();
                                         d.setHours(e[0]);
                                         d.setMinutes(e[1]);
                                         d.setSeconds(0);
                                         return d;
                                      }
                                      
                                      function check() {
                                         if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
                                         setWeekend();
                                      
                                         SetAlertState();
                                      
                                         let activeCount = 0;
                                         newDescriptions.forEach((item, i) => {if (item) activeCount++;});
                                      
                                         /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
                                         if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
                                             let MeldungSDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
                                      
                                             /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
                                             if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
                                                 /*if ((pushdienst & SAYIT)!=0) {
                                                     setState(idSayIt, lautstaerke + ";" + MeldungSDWD);
                                                 }
                                                 if ((pushdienst & ALEXA)!=0) {
                                                     setState(idAlexaVolumen, alexaVolumen);
                                                     setState(idAlexa, MeldungSDWD);
                                                 }
                                                 if((pushdienst & HOMETWO)!=0 ){
                                                     var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSDWD;
                                                     request(Url);
                                                 }*/
                                                 sendMessage(pushdienst,'','',MeldungSDWD,'');
                                             }
                                             let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
                                             /*if ((pushdienst & TELEGRAM)!=0 ) {
                                                 sendTo ("telegram.0", pushmsg);
                                             }
                                             if ((pushdienst & PUSHOVER)!=0 ) {
                                                 sendTo("pushover.0", pushmsg);
                                             }
                                             if ((pushdienst & IOGO)!=0 ) {
                                                 sendioGo('Wetterentwarnung', pushmsg);
                                             }
                                             if ((pushdienst & STATE)!=0 ) {
                                                 setState(mirrorMessageState, pushmsg);
                                             }
                                             if ((pushdienst & EMAIL)!=0 ) {
                                                 sendEmail('Wetterentwarnung des DWD(iobroker)',pushmsg);
                                             }*/
                                             sendMessage(pushdienst,'Wetterentwarnung',pushmsg,'','');
                                             sendMessage(pushdienst,'Wetterentwarnung des DWD(iobroker)','','',pushmsg);
                                      
                                             /* alle Sicherungen Wetterwarnung löschen */
                                             oldHeadlines = newHeadlines.slice();
                                             oldDescriptions = newDescriptions.slice();
                                             oldBegins = newBegins.slice();
                                             oldEnds = newEnds.slice();
                                             oldData = newData.slice();
                                             return;
                                         }
                                      
                                         /* Variablen für Meldungen Text */
                                         var MeldungNew = '';
                                         /* Variablen für Meldungen Sprache */
                                         var MeldungSpracheDWD = [];
                                         var MeldungNewSprache = '';
                                         var MeldungOldSprache = '';
                                         var AllEmailMsg = '';
                                         var AllEmailMsgDelete = '';
                                      
                                         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 < newDescriptions.length; i++) {
                                             headline = oldHeadlines[i];
                                             description = oldDescriptions[i];
                                             end = getFormatDate(oldEnds[i]);
                                             if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
                                                 MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
                                                 let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben.";
                                                 pushmsg += ' Insgesamt '+(activeCount==1 ?'eine gültige Warnung.':activeCount+' gültige Warnungen.');
                                                 /*if ((pushdienst & TELEGRAM)!=0) {
                                                     sendTo ("telegram.0", pushmsg);
                                                 }
                                                 if ((pushdienst & PUSHOVER)!=0) {
                                                     sendTo("pushover.0", pushmsg);
                                                 }
                                                 if ((pushdienst & IOGO)!=0) {
                                                     sendioGo('Wetterentwarnung',pushmsg);
                                                 }
                                                 if ((pushdienst & STATE)!=0 ) {
                                                     setState(mirrorMessageState, pushmsg);
                                                 }*/
                                                 if ((pushdienst & EMAIL)!=0 ) {
                                                     AllEmailMsgDelete+=pushmsg+'\n\n';
                                                 }
                                                 sendMessage(pushdienst,'Wetterentwarnung',pushmsg,'','');
                                                 /* Verknüpfen aller aufgehobenen Wetterwarnungen */
                                                 if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){
                                                     MeldungSpracheDWD.push(MeldungOldSprache);
                                                 }
                                             }
                                         }
                                         let gefahr = false;
                                         /* Bereich für 'Neue Amtliche Wetterwarnung' */
                                         for(i = 0; i < newDescriptions.length; i++) {
                                             headline = newHeadlines[i];
                                             description = newDescriptions[i];
                                             begin = getFormatDate(new Date(newBegins[i]));
                                             end = getFormatDate(new Date(newEnds[i]));
                                             let level = newData[i].level;
                                             var instruction = newInstruction[i];
                                             if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
                                                 MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                                                 if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
                                                 if (activeCount>1) MeldungNew += ' Insgesamt '+activeCount+' gültige Warnungen.'
                                                 /* Entfernen °C für Sprachausgabe */
                                                 var replaceDescription0 = entferneDatenpunkt(description);
                                                 /* ab Level 4 zusätzlicher Hinweis */
                                                 if (!gefahr) gefahr=level>3;
                                                 let topic = (level>3)?'Wichtige Wetterwarnung':'Wetterwarnung';
                                                 MeldungNewSprache = (level>3)?'Achtung Unwetter ':'' + headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
                                                 if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
                                      
                                                 sendMessage(pushdienst,topic,MeldungNew,'','');
                                                 /*if ((pushdienst & TELEGRAM)!=0) {
                                                     sendTo ("telegram.0", MeldungNew);
                                                 }
                                                 if ((pushdienst & PUSHOVER)!=0) {
                                                     sendTo("pushover.0", MeldungNew);
                                                 }
                                                 if ((pushdienst & IOGO)!=0) {
                                                     sendioGo(topic,MeldungNew);
                                                 }
                                                 if ((pushdienst & STATE)!=0 ) {
                                                     setState(mirrorMessageState,MeldungNew);
                                                 }*/
                                                 if ((pushdienst & EMAIL)!=0 ) {
                                                     AllEmailMsg+=MeldungNew+'\n\n';
                                                 }
                                                 /* Verknüpfen aller neuen Warnmeldungen */
                                                 if(MeldungNewSprache !== "" && MeldungNewSprache !== undefined){
                                                     MeldungSpracheDWD.push(MeldungNewSprache);
                                                 }
                                             }
                                         }
                                         /* Bereich für Sprachausgabe */
                                         if (onClickCheckRun) {
                                             if (MeldungSpracheDWD.length==0) MeldungSpracheDWD.push('Es liegen keine Warnmeldungen des DWD vor.');
                                         }
                                         if (MeldungSpracheDWD.length>0 && (forceSpeak || compareTime(START, ENDE, 'between')) && (pushdienst & (HOMETWO+SAYIT+ALEXA))!=0 ) {
                                             let a=1000;
                                             let b = a;
                                             let c = a;
                                             while (MeldungSpracheDWD.length>0)
                                             {
                                                 let b = 60000;
                                                 let msgAppend = '';
                                                 if (MeldungSpracheDWD.length > 1) {
                                                     if (MeldungSpracheDWD.length-1==1) {
                                                         msgAppend = ' Eine weitere neue Warnung.';
                                                     } else {
                                                         msgAppend = MeldungSpracheDWD.length-1+' weitere neue Warnungen.';
                                                     }
                                                 } else {
                                                     if (activeCount==0) msgAppend = ' keine weitere Warnung.';
                                                     else {
                                                         if (activeCount==1) msgAppend = ' Ingesamt eine aktive Warnung.';
                                                         else msgAppend = ' Insgesamt '+activeCount+ 'aktive Warnungen.';
                                                     }
                                                 }
                                                 if((pushdienst & HOMETWO)!=0 ){
                                                     setTimeout(function(msg,msg2){
                                                       sendMessage(HOMETWO,'','',msg+msg2,'');
                                      
                                                         /*var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + msg+msg2;
                                                         log('Url2 :' + Url2);
                                                         request(Url2);*/
                                                     },a,MeldungSpracheDWD[0], msgAppend);
                                                 }
                                                 /* Bereich für Sprachausgabe über SayIt + Alexa */
                                                 if ((pushdienst & SAYIT)!=0) {
                                                     setTimeout(function(msg,msg2){
                                                       sendMessage(SAYIT,'','',msg+msg2,'');
                                                         //setState(idSayIt, lautstaerke + ";" + msg+msg2);
                                                     },b,MeldungSpracheDWD[0], msgAppend);
                                                 }
                                                 if ((pushdienst & ALEXA)!=0) {
                                                     setTimeout(function(msg,msg2){
                                                       sendMessage(ALEXA,'','',msg+msg2,'');
                                                         //setState(idAlexaVolumen, alexaVolumen);
                                                         //setState(idAlexa, msg+msg2);
                                                     },c,MeldungSpracheDWD[0], msgAppend);
                                                 }
                                                 a+=60000;
                                                 b+=45000;
                                                 c+=30000;
                                                 MeldungSpracheDWD.shift();
                                             }
                                         }
                                      
                                         AllEmailMsg+=AllEmailMsgDelete;
                                         if ((pushdienst & EMAIL)!=0 && AllEmailMsg != '') {
                                             //sendEmail(gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",AllEmailMsg);
                                             sendMessage(EMAIL,gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",'','',AllEmailMsg);
                                         }
                                      
                                         /* Neue Werte sichern */
                                         oldHeadlines = newHeadlines.slice();
                                         oldDescriptions = newDescriptions.slice();
                                         oldBegins = newBegins.slice();
                                         oldEnds = newEnds.slice();
                                         oldData = newData.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");
                                             if (!WindForceDetailsSpeak) {
                                                 rueckgabe = rueckgabe.replace(/[0-9]+.m\/s..[0-9]+kn..Bft.[0-9]+/g, "");
                                             } else {
                                                 rueckgabe = rueckgabe.replace(/kn/g, " Knoten");
                                                 rueckgabe = rueckgabe.replace(/Bft/g, " Windstärke");
                                                 rueckgabe = rueckgabe.replace(/m\/s/g, " Meter pro Sekunde");
                                             }
                                         }
                                         catch(e) {log(e,'warn');}
                                         return rueckgabe;
                                      }
                                      
                                      on(/^dwd\.0\..*\.object$/, function(dp) {
                                         let i = getIdIndex(dp.id);
                                         var warn = null;
                                         if (dp.state.val != '') warn = JSON.parse(dp.state.val);
                                         warn = convertJsonDWD(warn);
                                         newDescriptions[i] = warn.description ;
                                         newHeadlines[i] = warn.headline;
                                         newBegins[i] = warn.start;
                                         newEnds[i] = warn.end;
                                         newInstruction[i] = warn.instruction;
                                         newData[i].level = warn.level;
                                         newData[i].type = warn.type;
                                         if(timer) clearTimeout(timer);
                                         if (autoMode) timer = setTimeout(check, 10000);
                                      });
                                      
                                      function convertJsonDWD(warn) {
                                         warn = (!warn || warn === ''? {} : warn);
                                         if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
                                         let a = warn.description === undefined ? '' : warn.description;
                                         let b = warn.headline === undefined ? '' : warn.headline;
                                         let c = warn.start === undefined ? null : warn.start||null;
                                         let d = warn.end === undefined ? null : warn.end||null;
                                         let e = warn.instruction === undefined ? '' : warn.instruction;
                                         let f = warn.type === undefined ? -1 : warn.type;
                                         let g = warn.level === undefined ? -1 : warn.level;
                                         return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
                                      }
                                      
                                      function getIdIndex(a) {
                                         a = a.split('.');
                                         if (a[2].length == 7) return 0
                                         return a[2][7];
                                      }
                                      function getFormatDate(a) {
                                         if (!a || a === '') return '';
                                         return formatDate(a.getTime(), formatierungString);
                                      }
                                      // @PARAM Rückgabe von getFormatDate
                                      function getFormatDateSpeak(a) {
                                         if (!a || a === '') return '';
                                         let b = a.split('.');
                                         let 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
                                         let c = b[2].split(' ');
                                         c[0]='';
                                         b[2] = c.join(' ');
                                         return b.join(' ');
                                      }
                                      
                                      function SetAlertState(){
                                         let stateAlertid = onClickMessageState+'alert.';
                                         for (let b=0;b<warningTypesString.length;b++)
                                         {
                                             let stateAlertIdFull = stateAlertid+warningTypesString[b]+'.';
                                             let AlertLevel = -1;
                                             let AlertType = -1;
                                             let AlertStart = null;
                                             let AlertEnd = null;
                                             let AlertIndex = -1;
                                             for (let c=0;c<newData.length;c++) {
                                                 if (newData[c].type == b && newData[c].level > AlertLevel) {
                                                     AlertLevel=newData[c].level;
                                                     AlertIndex=c;
                                                 }
                                             }
                                             if (getState(stateAlertIdFull+stateAlert[0].name).val!=AlertIndex) {
                                                 setState(stateAlertIdFull+stateAlert[0].name,AlertLevel);
                                                 setState(stateAlertIdFull+stateAlert[1].name,b);
                                                 setState(stateAlertIdFull+stateAlert[2].name,(AlertIndex>-1)?formatDate(new Date(newBegins[AlertIndex]))||null:null);
                                                 setState(stateAlertIdFull+stateAlert[3].name,(AlertIndex>-1)?formatDate(new Date(newEnds[AlertIndex]))||null:null);
                                             }
                                         }
                                      }
                                      
                                      function sendMessage(pushdienst, topic, msgsingle, msgspeak, msgall) {
                                       if (msgsingle) {
                                         if ((pushdienst & TELEGRAM)!=0) {
                                           if (telegramUser.length>0) {
                                             for (let a=0;a<telegramUser.length;a++) {
                                               sendTo ("telegram.0", {user: telegramUser[a], text: msgsingle});
                                             }
                                           } else {
                                             sendTo ("telegram.0", msgsingle);
                                           }
                                         }
                                         if ((pushdienst & PUSHOVER)!=0) {
                                           sendTo("pushover.0", msgsingle);
                                         }
                                         if ((pushdienst & IOGO)!=0) {
                                           if (ioGoUser.length>0) {
                                             for (let a=0;a<ioGoUser.length;a++) {
                                               sendTo('iogo.0', "send", {
                                                 user:                   ioGoUser[a],
                                                 text:                   topic,
                                                 title:                  msgsingle
                                               });
                                             }
                                           } else {
                                             sendTo('iogo.0', "send", {
                                               text:                   topic,
                                               title:                  msgsingle
                                             });
                                           }
                                         }
                                         if ((pushdienst & STATE)!=0 ) {
                                           setState(mirrorMessageState,msgsingle,true);
                                         }
                                       }
                                       if(msgspeak){
                                         if((pushdienst & HOMETWO)!=0 ){
                                           for(let a=0;a<idMediaplayer.length;a++) {
                                             var Url2 = "http://" + idMediaplayer[a] + "/track=4fachgong.mp3|tts=" + msgspeak;
                                             log('Url2 :' + Url2);
                                             request(Url2);
                                           }
                                         }
                                         if ((pushdienst & SAYIT)!=0) {
                                           for(let a=0;a<idSayIt.length;a++) {
                                             setState(idSayIt[a], lautstaerke[a] + ";" + msgspeak);
                                           }
                                         }
                                         if ((pushdienst & ALEXA)!=0) {
                                      
                                            for(let a=0;a<idAlexaSerial.length;a++) {
                                                     // Wenn auf Gruppe keine Lautstärken regelung möglich
                                                     if (existsState(getFullId(idAlexaVolumen,idAlexaSerial[a]))) setState(getFullId(idAlexaVolumen,idAlexaSerial[a]), alexaVolumen[a]);
                                                     setState(getFullId(idAlexa,idAlexaSerial[a]), msgspeak);
                                           }
                                         }
                                       }
                                       if (msgall &&(pushdienst & EMAIL)!=0) {
                                         if (empfaengerEmailID.length>0) {
                                           for (let a=0;a<empfaengerEmailID.length;a++) {
                                             sendTo("email", senderEmailID[0]?{from: senderEmailID[0], to: empfaengerEmailID[a], subject: topic, text: msgall}:{to: empfaengerEmailID[a], subject: topic, text: msgall});
                                           }
                                         } else {
                                           sendTo("email", senderEmailID[0]?{from: senderEmailID[0], subject: topic, text: msgall}:{subject: topic, text: msgall});
                                         }
                                       }
                                      }
                                      
                                      /* function sendioGo(topic, msg) {
                                       if ((pushdienst & IOGO)!=0) {
                                         if (ioGoUser.length>0) {
                                           for (let a=0;a<ioGoUser.length;a++) {
                                             sendTo('iogo.0', "send", {
                                               user:                   ioGoUser[a],
                                               text:                   topic,
                                               title:                  msg
                                             });
                                           ]
                                         } else {
                                           sendTo('iogo.0', "send", {
                                             text:                   topic,
                                             title:                  msg
                                           });
                                         }
                                       }
                                      }*/
                                      
                                      

                                      crunchipC Abwesend
                                      crunchipC Abwesend
                                      crunchip
                                      Forum Testing Most Active
                                      schrieb am zuletzt editiert von
                                      #69

                                      @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

                                      Das Script kommt jetzt auch mit Gruppen klar,

                                      Gruppen ging doch auch schon in vorherigen Versionen, ab dem Zeitpunkt als du alexa hinzugefügt hattest
                                      mal sehn, ich hab dot 3. Gen und echo 2. Gen

                                      umgestiegen von Proxmox auf Unraid

                                      T 1 Antwort Letzte Antwort
                                      0
                                      • crunchipC crunchip

                                        @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

                                        Das Script kommt jetzt auch mit Gruppen klar,

                                        Gruppen ging doch auch schon in vorherigen Versionen, ab dem Zeitpunkt als du alexa hinzugefügt hattest
                                        mal sehn, ich hab dot 3. Gen und echo 2. Gen

                                        T Nicht stören
                                        T Nicht stören
                                        ticaki
                                        schrieb am zuletzt editiert von ticaki
                                        #70

                                        @crunchip
                                        Ob es ging weiß ich nicht, jedoch hab ich ne Fehlermeldung gehabt, weil Gruppierungen keine Lautstärke unterstützen. Zumindest meine Gruppierung. :) Ich prüfe jetzt einfach ob der State da ist.

                                        Dann brauche ich in der Küche einen dot 3. gen

                                        Fehlerbehebung:

                                        • Einzelne Wetterentwarnung wurde nicht gesendet.

                                        v1.15.6

                                        • wieder meine Daten drin
                                        • role geändert auf button von Control states

                                        //Version 1.15.6
                                        //nachbearbeitet von ticaki
                                        /*
                                        
                                        */
                                        /* ************************************************************************* */
                                        /*             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                    */
                                        /*                                                                           */
                                        /*                                                                           */
                                        /*                                                                           */
                                        /* ************************************************************************* */
                                        
                                        /* ************************************************************************* */
                                        /* NICHT EDITIEREN */
                                        var konstanten = [
                                           {"name":'telegram',"value":1},
                                           {"name":'pushover',"value":2},
                                           {"name":'email',"value":4},
                                           {"name":'sayit',"value":8},
                                           {"name":'home24',"value":16},
                                           {"name":'alexa',"value":32},
                                           {"name":'state',"value":64},
                                           {"name":'iogo',"value":128}
                                        ];
                                        const TELEGRAM = konstanten[0].value;
                                        const PUSHOVER = konstanten[1].value;
                                        const EMAIL = konstanten[2].value;
                                        const SAYIT = konstanten[3].value;
                                        const HOMETWO = konstanten[4].value;
                                        const ALEXA = konstanten[5].value;
                                        const STATE = konstanten[6].value;
                                        const IOGO = konstanten[7].value;
                                        var pushdienst=0;
                                        /* ************************************************************************* */
                                        /*                       Konfiguration ab hier                               */
                                        /* ************************************************************************* */
                                        
                                        /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
                                        //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
                                        //pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
                                        //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
                                        
                                        /* Einstellungen zur Emailbenachrichtigung*/
                                        var senderEmailID = [""]; // mit Sender Emailadresse füllen. email Adapter muß installiert sein. 1 Eintrag erlaubt [] oder ["email1"]
                                        var empfaengerEmailID = [""];// mit Empfänger Emailadresse füllen. Mehrere Empfänger möglich. [] oder ["email1"] oder ["email1","email2"]
                                        
                                        /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
                                        var idMediaplayer = ["192.168.178.68:50000"]; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer mehrere Möglich - ungetestet
                                        
                                        /* Konfiguration Telegram */
                                        var telegramUser = []; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
                                        
                                        /* Konfiguration Sprachausgabe über SayIt */
                                        var idSayIt = ["sayit.0.tts.text"]; // mehrfach Einträge möglich
                                        var lautstaerke = [60]; // gleiche Anzahl wie idSayIt
                                        
                                        /* Konfiguration Sprachausgabe über Alexa
                                        /* mehrere Einträge möglich, bei mir ging nur der Echo, 2 dots 2.Gen reagieren nicht auf announcement. */
                                        var idAlexaSerial =['']; // die reine Seriennummer des Echos z.B.: var idAlexaSerial =['G090RV32984110Y','G090RV32984110Y']
                                        var alexaVolumen = [40]; // Lautstärke die gleiche Anzahl an Einträgen wie bei idAlexaSerial
                                        
                                        //Konfiguration von ioGo
                                        var ioGoUser = []; // // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
                                        
                                        //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
                                        var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . nicht vergessen
                                        
                                        // Filtereinstellungen
                                        const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden;
                                        const maxhoehe = 1410 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden
                                        
                                        //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" KEINE Anpassung nötig
                                        const formatierungString = "TT.MM.YY SS:mm";
                                        
                                        // Sprachausgabe Zeiten
                                        // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
                                        var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
                                        var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
                                        var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
                                        
                                        // Automatikmodus auschalten
                                        var autoMode = true;
                                        //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
                                        var forcedSpeak = true;
                                        // keine Ansage über m/s Knoten und Windstärke. Die Angabe mit Kilometer pro Stunde wird angesagt
                                        var WindForceDetailsSpeak = false;
                                        
                                        /* ************************************************************************* */
                                        /* ************************************************************************* */
                                        /* ************************************************************************* */
                                        /*                       Konfiguration Ende                                  */
                                        /* ************************************************************************* */
                                        /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
                                        /* ************************************************************************* */
                                        /* ************************************************************************* */
                                        /* ************************************************************************* */
                                        var SPEAK = ALEXA+HOMETWO+SAYIT;
                                        var PUSH = TELEGRAM+PUSHOVER+IOGO+STATE;
                                        var ALLMSG = EMAIL;
                                        var placeHolder = 'XXXXPLACEHOLDERXXXX';
                                        var idAlexa = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.announcement';
                                        var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.speak-volume';
                                        var forceSpeak = false;
                                        /* Arrays festlegen */
                                        const InitArraylength = 9;
                                        var newDescriptions = [InitArraylength];
                                        var oldDescriptions = [InitArraylength];
                                        var newHeadlines = [InitArraylength];
                                        var oldHeadlines = [InitArraylength];
                                        var newBegins = [InitArraylength];
                                        var oldBegins = [InitArraylength];
                                        var newEnds = [InitArraylength];
                                        var oldEnds = [InitArraylength];
                                        var newInstruction = [InitArraylength];
                                        var oldData = [InitArraylength];
                                        var newData = [InitArraylength];
                                        var timer = null;
                                        var onClickCheckRun = false;
                                        
                                        function getFullId(a,b) {
                                         return a.replace(placeHolder,b)
                                        }
                                        /* Überpüfe die Konfiguration soweit möglich */
                                        if ((pushdienst&ALEXA) != 0) {
                                         for (let a=0;a<idAlexaSerial.length;a++) {
                                           if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                                             log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
                                             stopScript();
                                           }
                                         }
                                        }
                                        
                                        if ((pushdienst&SAYIT) != 0) {
                                         for (let a=0;a<idSayIt.length;a++) {
                                           if (
                                             !existsState(idSayIt[a])
                                           ) {
                                             log('SayIt-Konfiguration ist fehlerhaft. Überpüfen!','error');
                                             stopScript();
                                           }
                                         }
                                        }
                                        
                                        if ((pushdienst&EMAIL) != 0) {
                                         if (senderEmailID.length>1) {
                                           log('eMail-Konfiguration ist fehlerhaft. Nur 1 Eintrag in senderEmailID erlaubt!','error');
                                           stopScript();
                                         }
                                        }
                                        
                                        /* erstmaliges Befüllen der arrays */
                                        for (let a=0;a<InitArraylength;a++) {
                                           var id = "dwd.0.warning";
                                           if (a!=0) id+=a.toString();
                                           id+='.object';
                                           var warn = {};
                                           if (existsState(id)) warn = JSON.parse(getState(id).val);
                                           warn = convertJsonDWD(warn);
                                           newDescriptions[a] = warn.description;
                                           oldDescriptions[a] = warn.description;
                                           newHeadlines[a] = warn.headline;
                                           oldHeadlines[a] = warn.headline;
                                           newBegins[a] = warn.start;
                                           oldBegins[a] = warn.start;
                                           newEnds[a] = warn.end;
                                           oldEnds[a] = warn.end;
                                           newData[a] = {"level":warn.level,"type":warn.type};
                                           oldData[a] = {"level":warn.level,"type":warn.type};
                                        }
                                        
                                        // State der Pushnachrichten über pushover/telegram spiegelt
                                        const mirrorMessageState = onClickMessageState+'message';
                                        if (!existsState(mirrorMessageState)) {
                                           createState(mirrorMessageState,'', {
                                               read: true,
                                               write: false,
                                               desc: "Beschreibung",
                                               type: "string",
                                           });
                                        }
                                        
                                        // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
                                        // Warning types
                                        var warningTypesString = [
                                           'Gewitter',
                                           'Sturm',
                                           'Regen',
                                           'Schnee',
                                           'Nebel',
                                           'Frost',
                                           'Glatteis',
                                           'Tauwetter',
                                           'Hitzewarnungen',
                                           'UV_Warnungen'/*,
                                           'Kuestenwarnungen',
                                           'Binnenseewarnungen'*/
                                        ];
                                        const stateAlert = // Änderungen auch in SetAlertState() anpassen
                                        [
                                           {"name":'level',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
                                           {"name":'type',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
                                           {"name":'start',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string",name:''}},
                                           {"name":'end',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string", name:''}},
                                        ]
                                        {
                                           let stateAlertId = onClickMessageState+'alert.';
                                           let allStateExist = true;
                                           for (let b=0;b<warningTypesString.length;b++) {
                                               for (let a=0;a<stateAlert.length;a++)
                                               {
                                                   let stateAlertIdFull = stateAlertId+warningTypesString[b]+'.'+stateAlert[a].name;
                                                   stateAlert[a].type.name = stateAlertIdFull.toString();
                                                   if (!existsState(stateAlertIdFull)) {
                                                       createState(stateAlertIdFull,stateAlert[a].default, stateAlert[a].type);
                                                       allStateExist=false;
                                                   }
                                               }
                                           }
                                           if (allStateExist) SetAlertState();
                                        }
                                        
                                        // Nachrichtenversand per Click States erzeugen und subscript
                                        for (var a=0;a<konstanten.length;a++){
                                           if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
                                               createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
                                                   read: true,
                                                   write: true,
                                                   desc: "Beschreibung",
                                                   type: "boolean",
                                                   role: "button",
                                                   def: false
                                               });
                                           }
                                           if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
                                               subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
                                                   if (!obj.state.val) return;
                                                   setState(obj.id,false,true);
                                                   let b = obj.id.split('.');
                                                   let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
                                                   if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
                                                   if ((pushdienst & konstanten[d].value) == 0) return;
                                                   let oldPushdienst = pushdienst;
                                                   pushdienst = konstanten[d].value*1;
                                                   for (let i=0;i<oldDescriptions.length;i++) {
                                                       oldHeadlines[i] = '';
                                                       oldDescriptions[i] = '';
                                                       oldBegins[i] = '';
                                                       oldEnds[i] = '';
                                                       oldData[i] = {"type":-1,"level":-1};
                                                   }
                                                   forceSpeak = forcedSpeak;
                                                   onClickCheckRun = true;
                                                   check();
                                                   onClickCheckRun = false;
                                                   forceSpeak = false;
                                                   pushdienst = oldPushdienst;
                                               })
                                           }
                                        }
                                        
                                        // Zeitsteuerung für SayIt & Alexa
                                        var START = new Date();
                                        var ENDE = new Date();
                                        setWeekend();
                                        
                                        function setWeekend()
                                        {
                                           if (forceSpeak) return;
                                           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 = convertStringToDate(startTimeSpeakWeekend);
                                           }
                                           else{
                                               START = convertStringToDate(startTimeSpeak);
                                           }
                                           ENDE = convertStringToDate(endTimeSpeak);
                                        }
                                        
                                        function convertStringToDate(s) {
                                           if (typeof s !== 'string' ) return null;
                                           var e = s.split(':');
                                           if (!Array.isArray(e) || e.length != 2) return null;
                                           var d = new Date();
                                           d.setHours(e[0]);
                                           d.setMinutes(e[1]);
                                           d.setSeconds(0);
                                           return d;
                                        }
                                        
                                        function check() {
                                           if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
                                           setWeekend();
                                        
                                           SetAlertState();
                                        
                                           let activeCount = 0;
                                           newDescriptions.forEach((item, i) => {if (item) activeCount++;});
                                        
                                           /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
                                           if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
                                               let MeldungSDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
                                        
                                               /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
                                               if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
                                                   sendMessage(pushdienst&SPEAK,'','',MeldungSDWD,'');
                                               }
                                               let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
                                               sendMessage(pushdienst&PUSH,'Wetterentwarnung',pushmsg,'','');
                                               sendMessage(pushdienst&ALLMSG,'Wetterentwarnung des DWD(iobroker)','','',pushmsg);
                                        
                                               /* alle Sicherungen Wetterwarnung löschen */
                                               oldHeadlines = newHeadlines.slice();
                                               oldDescriptions = newDescriptions.slice();
                                               oldBegins = newBegins.slice();
                                               oldEnds = newEnds.slice();
                                               oldData = newData.slice();
                                               return;
                                           }
                                        
                                           /* Variablen für Meldungen Text */
                                           var MeldungNew = '';
                                           /* Variablen für Meldungen Sprache */
                                           var MeldungSpracheDWD = [];
                                           var MeldungNewSprache = '';
                                           var MeldungOldSprache = '';
                                           var AllEmailMsg = '';
                                           var AllEmailMsgDelete = '';
                                        
                                           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 < newDescriptions.length; i++) {
                                             description = oldDescriptions[i];
                                             headline = oldHeadlines[i];
                                               if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
                                                   end = getFormatDate(oldEnds[i]);
                                        
                                                   let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben.";
                                                   pushmsg += ' Insgesamt '+(activeCount==1 ?'eine gültige Warnung.':activeCount+' gültige Warnungen.');
                                                   AllEmailMsgDelete+=pushmsg+'\n\n';
                                                   sendMessage(pushdienst&PUSH,'Wetterentwarnung',pushmsg,'','');
                                        
                                                   /* Sprache: Verknüpfen aller aufgehobenen Wetterwarnungen */
                                                   MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
                                                   MeldungSpracheDWD.push(MeldungOldSprache);
                                               }
                                           }
                                           let gefahr = false;
                                           /* Bereich für 'Neue Amtliche Wetterwarnung' */
                                           for(i = 0; i < newDescriptions.length; i++) {
                                               headline = newHeadlines[i];
                                               description = newDescriptions[i];
                                               let level = newData[i].level;
                                               var instruction = newInstruction[i];
                                               if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
                                                   begin = getFormatDate(new Date(newBegins[i]));
                                                   end = getFormatDate(new Date(newEnds[i]));
                                                   MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                                                   if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
                                                   if (activeCount>1) MeldungNew += ' Insgesamt '+activeCount+' gültige Warnungen.'
                                                   /* ab Level 4 zusätzlicher Hinweis */
                                                   if (!gefahr) gefahr=level>3;
                                                   let topic = (level>3)?'Wichtige Wetterwarnung':'Wetterwarnung';
                                        
                                                   sendMessage(pushdienst&PUSH,topic,MeldungNew,'','');
                                                   AllEmailMsg+=MeldungNew+'\n\n';
                                                   /* Sprache: Verknüpfen aller neuen Warnmeldungen */
                                        
                                                   var replaceDescription0 = entferneDatenpunkt(description);
                                                   MeldungNewSprache = (level>3)?'Achtung Unwetter ':'' + headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
                                                   if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
                                                   MeldungSpracheDWD.push(MeldungNewSprache);
                                               }
                                           }
                                           /* Bereich für Sprachausgabe */
                                           if (onClickCheckRun) {
                                               if (MeldungSpracheDWD.length==0) MeldungSpracheDWD.push('Es liegen keine Warnmeldungen des DWD vor.');
                                           }
                                           if (MeldungSpracheDWD.length>0 && (forceSpeak || compareTime(START, ENDE, 'between')) && (pushdienst & (HOMETWO+SAYIT+ALEXA))!=0 ) {
                                               let a=1000;
                                               let b = a;
                                               let c = a;
                                               while (MeldungSpracheDWD.length>0)
                                               {
                                                   let b = 60000;
                                                   let msgAppend = '';
                                                   if (MeldungSpracheDWD.length > 1) {
                                                       if (MeldungSpracheDWD.length-1==1) {
                                                           msgAppend = ' Eine weitere neue Warnung.';
                                                       } else {
                                                           msgAppend = MeldungSpracheDWD.length-1+' weitere neue Warnungen.';
                                                       }
                                                   } else {
                                                       if (activeCount==0) msgAppend = ' keine weitere Warnung.';
                                                       else {
                                                           if (activeCount==1) msgAppend = ' Ingesamt eine aktive Warnung.';
                                                           else msgAppend = ' Insgesamt '+activeCount+ 'aktive Warnungen.';
                                                       }
                                                   }
                                                   if((pushdienst & HOMETWO)!=0 ){
                                                       setTimeout(function(msg,msg2){
                                                         sendMessage(HOMETWO,'','',msg+msg2,'');
                                                       },a,MeldungSpracheDWD[0], msgAppend);
                                                   }
                                                   /* Bereich für Sprachausgabe über SayIt + Alexa */
                                                   if ((pushdienst & SAYIT)!=0) {
                                                       setTimeout(function(msg,msg2){
                                                         sendMessage(SAYIT,'','',msg+msg2,'');
                                                       },b,MeldungSpracheDWD[0], msgAppend);
                                                   }
                                                   if ((pushdienst & ALEXA)!=0) {
                                                       setTimeout(function(msg,msg2){
                                                         sendMessage(ALEXA,'','',msg+msg2,'');
                                                       },c,MeldungSpracheDWD[0], msgAppend);
                                                   }
                                                   a+=60000;
                                                   b+=45000;
                                                   c+=30000;
                                                   MeldungSpracheDWD.shift();
                                               }
                                           }
                                        
                                           AllEmailMsg+=AllEmailMsgDelete;
                                           if ((pushdienst & ALLMSG)!=0 && AllEmailMsg != '') {
                                               //sendEmail(gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",AllEmailMsg);
                                               sendMessage(pushdienst&ALLMSG,gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",'','',AllEmailMsg);
                                           }
                                        
                                           /* Neue Werte sichern */
                                           oldHeadlines = newHeadlines.slice();
                                           oldDescriptions = newDescriptions.slice();
                                           oldBegins = newBegins.slice();
                                           oldEnds = newEnds.slice();
                                           oldData = newData.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");
                                               if (!WindForceDetailsSpeak) {
                                                   rueckgabe = rueckgabe.replace(/[0-9]+.m\/s..[0-9]+kn..Bft.[0-9]+/g, "");
                                               } else {
                                                   rueckgabe = rueckgabe.replace(/kn/g, " Knoten");
                                                   rueckgabe = rueckgabe.replace(/Bft/g, " Windstärke");
                                                   rueckgabe = rueckgabe.replace(/m\/s/g, " Meter pro Sekunde");
                                               }
                                           }
                                           catch(e) {log(e,'warn');}
                                           return rueckgabe;
                                        }
                                        
                                        on(/^dwd\.0\..*\.object$/, function(dp) {
                                           let i = getIdIndex(dp.id);
                                           var warn = null;
                                           if (dp.state.val != '') warn = JSON.parse(dp.state.val);
                                           warn = convertJsonDWD(warn);
                                           newDescriptions[i] = warn.description ;
                                           newHeadlines[i] = warn.headline;
                                           newBegins[i] = warn.start;
                                           newEnds[i] = warn.end;
                                           newInstruction[i] = warn.instruction;
                                           newData[i].level = warn.level;
                                           newData[i].type = warn.type;
                                           if(timer) clearTimeout(timer);
                                           if (autoMode) timer = setTimeout(check, 10000);
                                        });
                                        
                                        function convertJsonDWD(warn) {
                                           warn = (!warn || warn === ''? {} : warn);
                                           if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
                                           let a = warn.description === undefined ? '' : warn.description;
                                           let b = warn.headline === undefined ? '' : warn.headline;
                                           let c = warn.start === undefined ? null : warn.start||null;
                                           let d = warn.end === undefined ? null : warn.end||null;
                                           let e = warn.instruction === undefined ? '' : warn.instruction;
                                           let f = warn.type === undefined ? -1 : warn.type;
                                           let g = warn.level === undefined ? -1 : warn.level;
                                           return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
                                        }
                                        
                                        function getIdIndex(a) {
                                           a = a.split('.');
                                           if (a[2].length == 7) return 0
                                           return a[2][7];
                                        }
                                        function getFormatDate(a) {
                                           if (!a || a === '') return '';
                                           return formatDate(a.getTime(), formatierungString);
                                        }
                                        // @PARAM Rückgabe von getFormatDate
                                        function getFormatDateSpeak(a) {
                                           if (!a || a === '') return '';
                                           let b = a.split('.');
                                           let 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
                                           let c = b[2].split(' ');
                                           c[0]='';
                                           b[2] = c.join(' ');
                                           return b.join(' ');
                                        }
                                        
                                        function SetAlertState(){
                                           let stateAlertid = onClickMessageState+'alert.';
                                           for (let b=0;b<warningTypesString.length;b++)
                                           {
                                               let stateAlertIdFull = stateAlertid+warningTypesString[b]+'.';
                                               let AlertLevel = -1;
                                               let AlertType = -1;
                                               let AlertStart = null;
                                               let AlertEnd = null;
                                               let AlertIndex = -1;
                                               for (let c=0;c<newData.length;c++) {
                                                   if (newData[c].type == b && newData[c].level > AlertLevel) {
                                                       AlertLevel=newData[c].level;
                                                       AlertIndex=c;
                                                   }
                                               }
                                               if (getState(stateAlertIdFull+stateAlert[0].name).val!=AlertIndex) {
                                                   setState(stateAlertIdFull+stateAlert[0].name,AlertLevel);
                                                   setState(stateAlertIdFull+stateAlert[1].name,b);
                                                   setState(stateAlertIdFull+stateAlert[2].name,(AlertIndex>-1)?formatDate(new Date(newBegins[AlertIndex])):'');
                                                   setState(stateAlertIdFull+stateAlert[3].name,(AlertIndex>-1)?formatDate(new Date(newEnds[AlertIndex])):'');
                                               }
                                           }
                                        }
                                        
                                        function sendMessage(pushdienst, topic, msgsingle, msgspeak, msgall) {
                                         if (msgsingle) {
                                           if ((pushdienst & TELEGRAM)!=0) {
                                             if (telegramUser.length>0) {
                                               for (let a=0;a<telegramUser.length;a++) {
                                                 sendTo ("telegram.0", {user: telegramUser[a], text: msgsingle});
                                               }
                                             } else {
                                               sendTo ("telegram.0", msgsingle);
                                             }
                                           }
                                           if ((pushdienst & PUSHOVER)!=0) {
                                             sendTo("pushover.0", msgsingle);
                                           }
                                           if ((pushdienst & IOGO)!=0) {
                                             if (ioGoUser.length>0) {
                                               for (let a=0;a<ioGoUser.length;a++) {
                                                 sendTo('iogo.0', "send", {
                                                   user:                   ioGoUser[a],
                                                   text:                   topic,
                                                   title:                  msgsingle
                                                 });
                                               }
                                             } else {
                                               sendTo('iogo.0', "send", {
                                                 text:                   topic,
                                                 title:                  msgsingle
                                               });
                                             }
                                           }
                                           if ((pushdienst & STATE)!=0 ) {
                                             setState(mirrorMessageState,msgsingle,true);
                                           }
                                         }
                                         if(msgspeak){
                                           if((pushdienst & HOMETWO)!=0 ){
                                             for(let a=0;a<idMediaplayer.length;a++) {
                                               var Url2 = "http://" + idMediaplayer[a] + "/track=4fachgong.mp3|tts=" + msgspeak;
                                               log('Url2 :' + Url2);
                                               request(Url2);
                                             }
                                           }
                                           if ((pushdienst & SAYIT)!=0) {
                                             for(let a=0;a<idSayIt.length;a++) {
                                               setState(idSayIt[a], lautstaerke[a] + ";" + msgspeak);
                                             }
                                           }
                                           if ((pushdienst & ALEXA)!=0) {
                                        
                                              for(let a=0;a<idAlexaSerial.length;a++) {
                                                       // Wenn auf Gruppe keine Lautstärken regelung möglich
                                                       if (existsState(getFullId(idAlexaVolumen,idAlexaSerial[a]))) setState(getFullId(idAlexaVolumen,idAlexaSerial[a]), alexaVolumen[a]);
                                                       setState(getFullId(idAlexa,idAlexaSerial[a]), msgspeak);
                                             }
                                           }
                                         }
                                         if (msgall &&(pushdienst & EMAIL)!=0) {
                                           if (empfaengerEmailID.length>0) {
                                             for (let a=0;a<empfaengerEmailID.length;a++) {
                                               sendTo("email", senderEmailID[0]?{from: senderEmailID[0], to: empfaengerEmailID[a], subject: topic, text: msgall}:{to: empfaengerEmailID[a], subject: topic, text: msgall});
                                             }
                                           } else {
                                             sendTo("email", senderEmailID[0]?{from: senderEmailID[0], subject: topic, text: msgall}:{subject: topic, text: msgall});
                                           }
                                         }
                                        }
                                        
                                        
                                        

                                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                        Spenden

                                        sigi234S 1 Antwort Letzte Antwort
                                        0
                                        • T ticaki

                                          @crunchip
                                          Ob es ging weiß ich nicht, jedoch hab ich ne Fehlermeldung gehabt, weil Gruppierungen keine Lautstärke unterstützen. Zumindest meine Gruppierung. :) Ich prüfe jetzt einfach ob der State da ist.

                                          Dann brauche ich in der Küche einen dot 3. gen

                                          Fehlerbehebung:

                                          • Einzelne Wetterentwarnung wurde nicht gesendet.

                                          v1.15.6

                                          • wieder meine Daten drin
                                          • role geändert auf button von Control states

                                          //Version 1.15.6
                                          //nachbearbeitet von ticaki
                                          /*
                                          
                                          */
                                          /* ************************************************************************* */
                                          /*             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                    */
                                          /*                                                                           */
                                          /*                                                                           */
                                          /*                                                                           */
                                          /* ************************************************************************* */
                                          
                                          /* ************************************************************************* */
                                          /* NICHT EDITIEREN */
                                          var konstanten = [
                                             {"name":'telegram',"value":1},
                                             {"name":'pushover',"value":2},
                                             {"name":'email',"value":4},
                                             {"name":'sayit',"value":8},
                                             {"name":'home24',"value":16},
                                             {"name":'alexa',"value":32},
                                             {"name":'state',"value":64},
                                             {"name":'iogo',"value":128}
                                          ];
                                          const TELEGRAM = konstanten[0].value;
                                          const PUSHOVER = konstanten[1].value;
                                          const EMAIL = konstanten[2].value;
                                          const SAYIT = konstanten[3].value;
                                          const HOMETWO = konstanten[4].value;
                                          const ALEXA = konstanten[5].value;
                                          const STATE = konstanten[6].value;
                                          const IOGO = konstanten[7].value;
                                          var pushdienst=0;
                                          /* ************************************************************************* */
                                          /*                       Konfiguration ab hier                               */
                                          /* ************************************************************************* */
                                          
                                          /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
                                          //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
                                          //pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
                                          //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
                                          
                                          /* Einstellungen zur Emailbenachrichtigung*/
                                          var senderEmailID = [""]; // mit Sender Emailadresse füllen. email Adapter muß installiert sein. 1 Eintrag erlaubt [] oder ["email1"]
                                          var empfaengerEmailID = [""];// mit Empfänger Emailadresse füllen. Mehrere Empfänger möglich. [] oder ["email1"] oder ["email1","email2"]
                                          
                                          /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
                                          var idMediaplayer = ["192.168.178.68:50000"]; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer mehrere Möglich - ungetestet
                                          
                                          /* Konfiguration Telegram */
                                          var telegramUser = []; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
                                          
                                          /* Konfiguration Sprachausgabe über SayIt */
                                          var idSayIt = ["sayit.0.tts.text"]; // mehrfach Einträge möglich
                                          var lautstaerke = [60]; // gleiche Anzahl wie idSayIt
                                          
                                          /* Konfiguration Sprachausgabe über Alexa
                                          /* mehrere Einträge möglich, bei mir ging nur der Echo, 2 dots 2.Gen reagieren nicht auf announcement. */
                                          var idAlexaSerial =['']; // die reine Seriennummer des Echos z.B.: var idAlexaSerial =['G090RV32984110Y','G090RV32984110Y']
                                          var alexaVolumen = [40]; // Lautstärke die gleiche Anzahl an Einträgen wie bei idAlexaSerial
                                          
                                          //Konfiguration von ioGo
                                          var ioGoUser = []; // // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
                                          
                                          //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
                                          var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . nicht vergessen
                                          
                                          // Filtereinstellungen
                                          const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden;
                                          const maxhoehe = 1410 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden
                                          
                                          //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" KEINE Anpassung nötig
                                          const formatierungString = "TT.MM.YY SS:mm";
                                          
                                          // Sprachausgabe Zeiten
                                          // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
                                          var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
                                          var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
                                          var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
                                          
                                          // Automatikmodus auschalten
                                          var autoMode = true;
                                          //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
                                          var forcedSpeak = true;
                                          // keine Ansage über m/s Knoten und Windstärke. Die Angabe mit Kilometer pro Stunde wird angesagt
                                          var WindForceDetailsSpeak = false;
                                          
                                          /* ************************************************************************* */
                                          /* ************************************************************************* */
                                          /* ************************************************************************* */
                                          /*                       Konfiguration Ende                                  */
                                          /* ************************************************************************* */
                                          /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
                                          /* ************************************************************************* */
                                          /* ************************************************************************* */
                                          /* ************************************************************************* */
                                          var SPEAK = ALEXA+HOMETWO+SAYIT;
                                          var PUSH = TELEGRAM+PUSHOVER+IOGO+STATE;
                                          var ALLMSG = EMAIL;
                                          var placeHolder = 'XXXXPLACEHOLDERXXXX';
                                          var idAlexa = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.announcement';
                                          var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.speak-volume';
                                          var forceSpeak = false;
                                          /* Arrays festlegen */
                                          const InitArraylength = 9;
                                          var newDescriptions = [InitArraylength];
                                          var oldDescriptions = [InitArraylength];
                                          var newHeadlines = [InitArraylength];
                                          var oldHeadlines = [InitArraylength];
                                          var newBegins = [InitArraylength];
                                          var oldBegins = [InitArraylength];
                                          var newEnds = [InitArraylength];
                                          var oldEnds = [InitArraylength];
                                          var newInstruction = [InitArraylength];
                                          var oldData = [InitArraylength];
                                          var newData = [InitArraylength];
                                          var timer = null;
                                          var onClickCheckRun = false;
                                          
                                          function getFullId(a,b) {
                                           return a.replace(placeHolder,b)
                                          }
                                          /* Überpüfe die Konfiguration soweit möglich */
                                          if ((pushdienst&ALEXA) != 0) {
                                           for (let a=0;a<idAlexaSerial.length;a++) {
                                             if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                                               log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
                                               stopScript();
                                             }
                                           }
                                          }
                                          
                                          if ((pushdienst&SAYIT) != 0) {
                                           for (let a=0;a<idSayIt.length;a++) {
                                             if (
                                               !existsState(idSayIt[a])
                                             ) {
                                               log('SayIt-Konfiguration ist fehlerhaft. Überpüfen!','error');
                                               stopScript();
                                             }
                                           }
                                          }
                                          
                                          if ((pushdienst&EMAIL) != 0) {
                                           if (senderEmailID.length>1) {
                                             log('eMail-Konfiguration ist fehlerhaft. Nur 1 Eintrag in senderEmailID erlaubt!','error');
                                             stopScript();
                                           }
                                          }
                                          
                                          /* erstmaliges Befüllen der arrays */
                                          for (let a=0;a<InitArraylength;a++) {
                                             var id = "dwd.0.warning";
                                             if (a!=0) id+=a.toString();
                                             id+='.object';
                                             var warn = {};
                                             if (existsState(id)) warn = JSON.parse(getState(id).val);
                                             warn = convertJsonDWD(warn);
                                             newDescriptions[a] = warn.description;
                                             oldDescriptions[a] = warn.description;
                                             newHeadlines[a] = warn.headline;
                                             oldHeadlines[a] = warn.headline;
                                             newBegins[a] = warn.start;
                                             oldBegins[a] = warn.start;
                                             newEnds[a] = warn.end;
                                             oldEnds[a] = warn.end;
                                             newData[a] = {"level":warn.level,"type":warn.type};
                                             oldData[a] = {"level":warn.level,"type":warn.type};
                                          }
                                          
                                          // State der Pushnachrichten über pushover/telegram spiegelt
                                          const mirrorMessageState = onClickMessageState+'message';
                                          if (!existsState(mirrorMessageState)) {
                                             createState(mirrorMessageState,'', {
                                                 read: true,
                                                 write: false,
                                                 desc: "Beschreibung",
                                                 type: "string",
                                             });
                                          }
                                          
                                          // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
                                          // Warning types
                                          var warningTypesString = [
                                             'Gewitter',
                                             'Sturm',
                                             'Regen',
                                             'Schnee',
                                             'Nebel',
                                             'Frost',
                                             'Glatteis',
                                             'Tauwetter',
                                             'Hitzewarnungen',
                                             'UV_Warnungen'/*,
                                             'Kuestenwarnungen',
                                             'Binnenseewarnungen'*/
                                          ];
                                          const stateAlert = // Änderungen auch in SetAlertState() anpassen
                                          [
                                             {"name":'level',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
                                             {"name":'type',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
                                             {"name":'start',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string",name:''}},
                                             {"name":'end',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string", name:''}},
                                          ]
                                          {
                                             let stateAlertId = onClickMessageState+'alert.';
                                             let allStateExist = true;
                                             for (let b=0;b<warningTypesString.length;b++) {
                                                 for (let a=0;a<stateAlert.length;a++)
                                                 {
                                                     let stateAlertIdFull = stateAlertId+warningTypesString[b]+'.'+stateAlert[a].name;
                                                     stateAlert[a].type.name = stateAlertIdFull.toString();
                                                     if (!existsState(stateAlertIdFull)) {
                                                         createState(stateAlertIdFull,stateAlert[a].default, stateAlert[a].type);
                                                         allStateExist=false;
                                                     }
                                                 }
                                             }
                                             if (allStateExist) SetAlertState();
                                          }
                                          
                                          // Nachrichtenversand per Click States erzeugen und subscript
                                          for (var a=0;a<konstanten.length;a++){
                                             if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
                                                 createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
                                                     read: true,
                                                     write: true,
                                                     desc: "Beschreibung",
                                                     type: "boolean",
                                                     role: "button",
                                                     def: false
                                                 });
                                             }
                                             if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
                                                 subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
                                                     if (!obj.state.val) return;
                                                     setState(obj.id,false,true);
                                                     let b = obj.id.split('.');
                                                     let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
                                                     if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
                                                     if ((pushdienst & konstanten[d].value) == 0) return;
                                                     let oldPushdienst = pushdienst;
                                                     pushdienst = konstanten[d].value*1;
                                                     for (let i=0;i<oldDescriptions.length;i++) {
                                                         oldHeadlines[i] = '';
                                                         oldDescriptions[i] = '';
                                                         oldBegins[i] = '';
                                                         oldEnds[i] = '';
                                                         oldData[i] = {"type":-1,"level":-1};
                                                     }
                                                     forceSpeak = forcedSpeak;
                                                     onClickCheckRun = true;
                                                     check();
                                                     onClickCheckRun = false;
                                                     forceSpeak = false;
                                                     pushdienst = oldPushdienst;
                                                 })
                                             }
                                          }
                                          
                                          // Zeitsteuerung für SayIt & Alexa
                                          var START = new Date();
                                          var ENDE = new Date();
                                          setWeekend();
                                          
                                          function setWeekend()
                                          {
                                             if (forceSpeak) return;
                                             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 = convertStringToDate(startTimeSpeakWeekend);
                                             }
                                             else{
                                                 START = convertStringToDate(startTimeSpeak);
                                             }
                                             ENDE = convertStringToDate(endTimeSpeak);
                                          }
                                          
                                          function convertStringToDate(s) {
                                             if (typeof s !== 'string' ) return null;
                                             var e = s.split(':');
                                             if (!Array.isArray(e) || e.length != 2) return null;
                                             var d = new Date();
                                             d.setHours(e[0]);
                                             d.setMinutes(e[1]);
                                             d.setSeconds(0);
                                             return d;
                                          }
                                          
                                          function check() {
                                             if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
                                             setWeekend();
                                          
                                             SetAlertState();
                                          
                                             let activeCount = 0;
                                             newDescriptions.forEach((item, i) => {if (item) activeCount++;});
                                          
                                             /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
                                             if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
                                                 let MeldungSDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
                                          
                                                 /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
                                                 if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
                                                     sendMessage(pushdienst&SPEAK,'','',MeldungSDWD,'');
                                                 }
                                                 let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
                                                 sendMessage(pushdienst&PUSH,'Wetterentwarnung',pushmsg,'','');
                                                 sendMessage(pushdienst&ALLMSG,'Wetterentwarnung des DWD(iobroker)','','',pushmsg);
                                          
                                                 /* alle Sicherungen Wetterwarnung löschen */
                                                 oldHeadlines = newHeadlines.slice();
                                                 oldDescriptions = newDescriptions.slice();
                                                 oldBegins = newBegins.slice();
                                                 oldEnds = newEnds.slice();
                                                 oldData = newData.slice();
                                                 return;
                                             }
                                          
                                             /* Variablen für Meldungen Text */
                                             var MeldungNew = '';
                                             /* Variablen für Meldungen Sprache */
                                             var MeldungSpracheDWD = [];
                                             var MeldungNewSprache = '';
                                             var MeldungOldSprache = '';
                                             var AllEmailMsg = '';
                                             var AllEmailMsgDelete = '';
                                          
                                             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 < newDescriptions.length; i++) {
                                               description = oldDescriptions[i];
                                               headline = oldHeadlines[i];
                                                 if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
                                                     end = getFormatDate(oldEnds[i]);
                                          
                                                     let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben.";
                                                     pushmsg += ' Insgesamt '+(activeCount==1 ?'eine gültige Warnung.':activeCount+' gültige Warnungen.');
                                                     AllEmailMsgDelete+=pushmsg+'\n\n';
                                                     sendMessage(pushdienst&PUSH,'Wetterentwarnung',pushmsg,'','');
                                          
                                                     /* Sprache: Verknüpfen aller aufgehobenen Wetterwarnungen */
                                                     MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
                                                     MeldungSpracheDWD.push(MeldungOldSprache);
                                                 }
                                             }
                                             let gefahr = false;
                                             /* Bereich für 'Neue Amtliche Wetterwarnung' */
                                             for(i = 0; i < newDescriptions.length; i++) {
                                                 headline = newHeadlines[i];
                                                 description = newDescriptions[i];
                                                 let level = newData[i].level;
                                                 var instruction = newInstruction[i];
                                                 if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
                                                     begin = getFormatDate(new Date(newBegins[i]));
                                                     end = getFormatDate(new Date(newEnds[i]));
                                                     MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                                                     if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
                                                     if (activeCount>1) MeldungNew += ' Insgesamt '+activeCount+' gültige Warnungen.'
                                                     /* ab Level 4 zusätzlicher Hinweis */
                                                     if (!gefahr) gefahr=level>3;
                                                     let topic = (level>3)?'Wichtige Wetterwarnung':'Wetterwarnung';
                                          
                                                     sendMessage(pushdienst&PUSH,topic,MeldungNew,'','');
                                                     AllEmailMsg+=MeldungNew+'\n\n';
                                                     /* Sprache: Verknüpfen aller neuen Warnmeldungen */
                                          
                                                     var replaceDescription0 = entferneDatenpunkt(description);
                                                     MeldungNewSprache = (level>3)?'Achtung Unwetter ':'' + headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
                                                     if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
                                                     MeldungSpracheDWD.push(MeldungNewSprache);
                                                 }
                                             }
                                             /* Bereich für Sprachausgabe */
                                             if (onClickCheckRun) {
                                                 if (MeldungSpracheDWD.length==0) MeldungSpracheDWD.push('Es liegen keine Warnmeldungen des DWD vor.');
                                             }
                                             if (MeldungSpracheDWD.length>0 && (forceSpeak || compareTime(START, ENDE, 'between')) && (pushdienst & (HOMETWO+SAYIT+ALEXA))!=0 ) {
                                                 let a=1000;
                                                 let b = a;
                                                 let c = a;
                                                 while (MeldungSpracheDWD.length>0)
                                                 {
                                                     let b = 60000;
                                                     let msgAppend = '';
                                                     if (MeldungSpracheDWD.length > 1) {
                                                         if (MeldungSpracheDWD.length-1==1) {
                                                             msgAppend = ' Eine weitere neue Warnung.';
                                                         } else {
                                                             msgAppend = MeldungSpracheDWD.length-1+' weitere neue Warnungen.';
                                                         }
                                                     } else {
                                                         if (activeCount==0) msgAppend = ' keine weitere Warnung.';
                                                         else {
                                                             if (activeCount==1) msgAppend = ' Ingesamt eine aktive Warnung.';
                                                             else msgAppend = ' Insgesamt '+activeCount+ 'aktive Warnungen.';
                                                         }
                                                     }
                                                     if((pushdienst & HOMETWO)!=0 ){
                                                         setTimeout(function(msg,msg2){
                                                           sendMessage(HOMETWO,'','',msg+msg2,'');
                                                         },a,MeldungSpracheDWD[0], msgAppend);
                                                     }
                                                     /* Bereich für Sprachausgabe über SayIt + Alexa */
                                                     if ((pushdienst & SAYIT)!=0) {
                                                         setTimeout(function(msg,msg2){
                                                           sendMessage(SAYIT,'','',msg+msg2,'');
                                                         },b,MeldungSpracheDWD[0], msgAppend);
                                                     }
                                                     if ((pushdienst & ALEXA)!=0) {
                                                         setTimeout(function(msg,msg2){
                                                           sendMessage(ALEXA,'','',msg+msg2,'');
                                                         },c,MeldungSpracheDWD[0], msgAppend);
                                                     }
                                                     a+=60000;
                                                     b+=45000;
                                                     c+=30000;
                                                     MeldungSpracheDWD.shift();
                                                 }
                                             }
                                          
                                             AllEmailMsg+=AllEmailMsgDelete;
                                             if ((pushdienst & ALLMSG)!=0 && AllEmailMsg != '') {
                                                 //sendEmail(gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",AllEmailMsg);
                                                 sendMessage(pushdienst&ALLMSG,gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",'','',AllEmailMsg);
                                             }
                                          
                                             /* Neue Werte sichern */
                                             oldHeadlines = newHeadlines.slice();
                                             oldDescriptions = newDescriptions.slice();
                                             oldBegins = newBegins.slice();
                                             oldEnds = newEnds.slice();
                                             oldData = newData.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");
                                                 if (!WindForceDetailsSpeak) {
                                                     rueckgabe = rueckgabe.replace(/[0-9]+.m\/s..[0-9]+kn..Bft.[0-9]+/g, "");
                                                 } else {
                                                     rueckgabe = rueckgabe.replace(/kn/g, " Knoten");
                                                     rueckgabe = rueckgabe.replace(/Bft/g, " Windstärke");
                                                     rueckgabe = rueckgabe.replace(/m\/s/g, " Meter pro Sekunde");
                                                 }
                                             }
                                             catch(e) {log(e,'warn');}
                                             return rueckgabe;
                                          }
                                          
                                          on(/^dwd\.0\..*\.object$/, function(dp) {
                                             let i = getIdIndex(dp.id);
                                             var warn = null;
                                             if (dp.state.val != '') warn = JSON.parse(dp.state.val);
                                             warn = convertJsonDWD(warn);
                                             newDescriptions[i] = warn.description ;
                                             newHeadlines[i] = warn.headline;
                                             newBegins[i] = warn.start;
                                             newEnds[i] = warn.end;
                                             newInstruction[i] = warn.instruction;
                                             newData[i].level = warn.level;
                                             newData[i].type = warn.type;
                                             if(timer) clearTimeout(timer);
                                             if (autoMode) timer = setTimeout(check, 10000);
                                          });
                                          
                                          function convertJsonDWD(warn) {
                                             warn = (!warn || warn === ''? {} : warn);
                                             if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
                                             let a = warn.description === undefined ? '' : warn.description;
                                             let b = warn.headline === undefined ? '' : warn.headline;
                                             let c = warn.start === undefined ? null : warn.start||null;
                                             let d = warn.end === undefined ? null : warn.end||null;
                                             let e = warn.instruction === undefined ? '' : warn.instruction;
                                             let f = warn.type === undefined ? -1 : warn.type;
                                             let g = warn.level === undefined ? -1 : warn.level;
                                             return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
                                          }
                                          
                                          function getIdIndex(a) {
                                             a = a.split('.');
                                             if (a[2].length == 7) return 0
                                             return a[2][7];
                                          }
                                          function getFormatDate(a) {
                                             if (!a || a === '') return '';
                                             return formatDate(a.getTime(), formatierungString);
                                          }
                                          // @PARAM Rückgabe von getFormatDate
                                          function getFormatDateSpeak(a) {
                                             if (!a || a === '') return '';
                                             let b = a.split('.');
                                             let 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
                                             let c = b[2].split(' ');
                                             c[0]='';
                                             b[2] = c.join(' ');
                                             return b.join(' ');
                                          }
                                          
                                          function SetAlertState(){
                                             let stateAlertid = onClickMessageState+'alert.';
                                             for (let b=0;b<warningTypesString.length;b++)
                                             {
                                                 let stateAlertIdFull = stateAlertid+warningTypesString[b]+'.';
                                                 let AlertLevel = -1;
                                                 let AlertType = -1;
                                                 let AlertStart = null;
                                                 let AlertEnd = null;
                                                 let AlertIndex = -1;
                                                 for (let c=0;c<newData.length;c++) {
                                                     if (newData[c].type == b && newData[c].level > AlertLevel) {
                                                         AlertLevel=newData[c].level;
                                                         AlertIndex=c;
                                                     }
                                                 }
                                                 if (getState(stateAlertIdFull+stateAlert[0].name).val!=AlertIndex) {
                                                     setState(stateAlertIdFull+stateAlert[0].name,AlertLevel);
                                                     setState(stateAlertIdFull+stateAlert[1].name,b);
                                                     setState(stateAlertIdFull+stateAlert[2].name,(AlertIndex>-1)?formatDate(new Date(newBegins[AlertIndex])):'');
                                                     setState(stateAlertIdFull+stateAlert[3].name,(AlertIndex>-1)?formatDate(new Date(newEnds[AlertIndex])):'');
                                                 }
                                             }
                                          }
                                          
                                          function sendMessage(pushdienst, topic, msgsingle, msgspeak, msgall) {
                                           if (msgsingle) {
                                             if ((pushdienst & TELEGRAM)!=0) {
                                               if (telegramUser.length>0) {
                                                 for (let a=0;a<telegramUser.length;a++) {
                                                   sendTo ("telegram.0", {user: telegramUser[a], text: msgsingle});
                                                 }
                                               } else {
                                                 sendTo ("telegram.0", msgsingle);
                                               }
                                             }
                                             if ((pushdienst & PUSHOVER)!=0) {
                                               sendTo("pushover.0", msgsingle);
                                             }
                                             if ((pushdienst & IOGO)!=0) {
                                               if (ioGoUser.length>0) {
                                                 for (let a=0;a<ioGoUser.length;a++) {
                                                   sendTo('iogo.0', "send", {
                                                     user:                   ioGoUser[a],
                                                     text:                   topic,
                                                     title:                  msgsingle
                                                   });
                                                 }
                                               } else {
                                                 sendTo('iogo.0', "send", {
                                                   text:                   topic,
                                                   title:                  msgsingle
                                                 });
                                               }
                                             }
                                             if ((pushdienst & STATE)!=0 ) {
                                               setState(mirrorMessageState,msgsingle,true);
                                             }
                                           }
                                           if(msgspeak){
                                             if((pushdienst & HOMETWO)!=0 ){
                                               for(let a=0;a<idMediaplayer.length;a++) {
                                                 var Url2 = "http://" + idMediaplayer[a] + "/track=4fachgong.mp3|tts=" + msgspeak;
                                                 log('Url2 :' + Url2);
                                                 request(Url2);
                                               }
                                             }
                                             if ((pushdienst & SAYIT)!=0) {
                                               for(let a=0;a<idSayIt.length;a++) {
                                                 setState(idSayIt[a], lautstaerke[a] + ";" + msgspeak);
                                               }
                                             }
                                             if ((pushdienst & ALEXA)!=0) {
                                          
                                                for(let a=0;a<idAlexaSerial.length;a++) {
                                                         // Wenn auf Gruppe keine Lautstärken regelung möglich
                                                         if (existsState(getFullId(idAlexaVolumen,idAlexaSerial[a]))) setState(getFullId(idAlexaVolumen,idAlexaSerial[a]), alexaVolumen[a]);
                                                         setState(getFullId(idAlexa,idAlexaSerial[a]), msgspeak);
                                               }
                                             }
                                           }
                                           if (msgall &&(pushdienst & EMAIL)!=0) {
                                             if (empfaengerEmailID.length>0) {
                                               for (let a=0;a<empfaengerEmailID.length;a++) {
                                                 sendTo("email", senderEmailID[0]?{from: senderEmailID[0], to: empfaengerEmailID[a], subject: topic, text: msgall}:{to: empfaengerEmailID[a], subject: topic, text: msgall});
                                               }
                                             } else {
                                               sendTo("email", senderEmailID[0]?{from: senderEmailID[0], subject: topic, text: msgall}:{subject: topic, text: msgall});
                                             }
                                           }
                                          }
                                          
                                          
                                          

                                          sigi234S Online
                                          sigi234S Online
                                          sigi234
                                          Forum Testing Most Active
                                          schrieb am zuletzt editiert von sigi234
                                          #71

                                          @ticaki

                                          09:20:01.568	info	javascript.0 (7676) Start javascript script.js.Alexa.Ansage_DWD_16
                                          09:20:01.568	error	javascript.0 (7676) script.js.Alexa.Ansage_DWD_16 compile failed: at script.js.Alexa.Ansage_DWD_16:71
                                          09:20:32.692	info	javascript.0 (7676) Stop script script.js.Alexa.Ansage_DWD_16
                                          09:20:32.697	info	javascript.0 (7676) Start javascript script.js.Alexa.Ansage_DWD_16
                                          09:20:32.697	error	javascript.0 (7676) script.js.Alexa.Ansage_DWD_16 compile failed: at script.js.Alexa.Ansage_DWD_16:71
                                          

                                          var ioGoUser = [xxxxxx@liwest.at]; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];

                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at process._tickCallback (internal/process/next_tick.js:68:7)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at promise.then (C:\Program Files\iobroker\Test\node_modules\standard-as-callback\built\index.js:19:49)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at tryCatcher (C:\Program Files\iobroker\Test\node_modules\standard-as-callback\built\utils.js:11:23)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at client.get (C:\Program Files\iobroker\Test\node_modules\iobroker.js-controller\lib\states\statesInRedis.js:580:17)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at adapter.getForeignState (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1055:17)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at createProblemObject (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1464:17)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at prepareScript (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1411:37)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at compile (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1188:28)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at Object.createScript (vm.js:277:10)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) at new Script (vm.js:83:7)
                                          javascript.0	2020-03-02 09:31:08.165	error	(7676) SyntaxError: Invalid or unexpected token
                                          

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

                                          T 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          852

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe