Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Script] DWD/UWZ/NINA Warnungen als Push/Sprachnachrichten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      ticaki Developer @wendy2702 last edited by ticaki

      @wendy2702
      Kann mir das nicht erklären, außer dass die Meldung 2. mal rein kam, hab auch zuviel geändert und mit der Versionsverwaltung erst nach 13.2 angefangen. Aber ich hab gestern abend noch etwas eingebaut, dass doppelte Meldungen ausschließen sollte. Wollte das noch bis heute abend oder morgen testen bevor ich es poste, aber ihr könnte ja gerne mit schauen:

      Änderungen:

      • Meldungen die gleichen Typ aber niedrigeres level (oder doppelt) und kleiner oder gleich lange Andauern, werden gefiltert. (konifguierbar SkipDuplicates)
      • Neuer State hinzugefügt (.alertlevel) zeigt die höchste Aktuelle Warnstufe an (kann in anderen Scripts verwendet werden. Ich hab vor damit bei level 4-5 "roten Alarm" auszulösen. Da Sturm ab 4 in meiner Wohnlage tatsächlich Aktionen erfordert.
      • Bei aufgehoben wird auch auf undefined getestet
      • code etwas mehr aufgeräumt
      • default bei der Option forcedSpeak geändert

      Nicht verwenden, letzt änderung funktioniert nicht wie gedacht

      1 Reply Last reply Reply Quote 0
      • wendy2702
        wendy2702 last edited by

        Muss mal am PC schauen, nicht das der DWD zweimal das gleiche gemeldet hat.

        Hast du denn wegen dem ‚undefined ‚ noch etwas gefunden?

        T 1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer @wendy2702 last edited by ticaki

          @wendy2702
          Im Code selbst wird die Beschreibung auf undefined geprüft aber die Headline gesendet. Beides sollte eigentlich immer definiert oder undefiniert sein. Prüfe jetzt zusätzlich auch die Headline auf undefiniert. Hatte selbst die diesen Fehler noch nicht, ich filtere aber die ergenisse auf höhe und level 2

          1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer last edited by 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
                       });
                   }
               }
            }
            
            
            

            crunchip 1 Reply Last reply Reply Quote 0
            • crunchip
              crunchip Forum Testing Most Active last edited by

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

              1 Reply Last reply Reply Quote 0
              • crunchip
                crunchip Forum Testing Most Active @ticaki last edited by

                @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 1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @crunchip last edited by 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?

                  crunchip 1 Reply Last reply Reply Quote 0
                  • crunchip
                    crunchip Forum Testing Most Active @ticaki last edited by

                    @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 1 Reply Last reply Reply Quote 0
                    • T
                      ticaki Developer @crunchip last edited by

                      @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.

                      1 Reply Last reply Reply Quote 0
                      • T
                        ticaki Developer last edited by

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

                        crunchip 1 Reply Last reply Reply Quote 0
                        • crunchip
                          crunchip Forum Testing Most Active @ticaki last edited by 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 1 Reply Last reply Reply Quote 0
                          • T
                            ticaki Developer @crunchip last edited by

                            @crunchip
                            😁

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

                            crunchip 1 Reply Last reply Reply Quote 0
                            • crunchip
                              crunchip Forum Testing Most Active @ticaki last edited by

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

                              1 Reply Last reply Reply Quote 0
                              • T
                                ticaki Developer last edited by

                                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.
                                sigi234 1 Reply Last reply Reply Quote 1
                                • sigi234
                                  sigi234 Forum Testing Most Active @ticaki last edited by

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

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

                                  👍

                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    ticaki Developer last edited by

                                    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 1 Reply Last reply Reply Quote 0
                                    • T
                                      ticaki Developer @ticaki last edited by

                                      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.

                                      crunchip 1 Reply Last reply Reply Quote 0
                                      • crunchip
                                        crunchip Forum Testing Most Active @ticaki last edited by

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

                                        T 1 Reply Last reply Reply Quote 0
                                        • T
                                          ticaki Developer @crunchip last edited by

                                          @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 🙂

                                          1 Reply Last reply Reply Quote 0
                                          • T
                                            ticaki Developer last edited by

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

                                            crunchip 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            947
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            53
                                            1521
                                            489990
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo