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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

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

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

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

Scheduled Pinned Locked Moved JavaScript
1.5k Posts 53 Posters 592.4k Views 52 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    ticaki
    wrote on last edited by
    #64

    v1.15.0 noch nicht installieren hat noch eine Fehler

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

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    T 1 Reply Last reply
    0
    • T ticaki

      v1.15.0 noch nicht installieren hat noch eine Fehler

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

      T Offline
      T Offline
      ticaki
      wrote on last edited by
      #65

      v1.15.1
      Sprachausgabe hat keine Zeit genannt, behoben.

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

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      crunchipC 1 Reply Last reply
      0
      • T ticaki

        v1.15.1
        Sprachausgabe hat keine Zeit genannt, behoben.

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

        crunchipC Away
        crunchipC Away
        crunchip
        Forum Testing Most Active
        wrote on last edited by
        #66

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

        umgestiegen von Proxmox auf Unraid

        T 1 Reply Last reply
        0
        • crunchipC crunchip

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

          T Offline
          T Offline
          ticaki
          wrote on last edited by
          #67

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

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          1 Reply Last reply
          0
          • T Offline
            T Offline
            ticaki
            wrote on last edited by
            #68

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

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

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

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

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            crunchipC 1 Reply Last reply
            0
            • T ticaki

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

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

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

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

              crunchipC Away
              crunchipC Away
              crunchip
              Forum Testing Most Active
              wrote on last edited by
              #69

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

              Das Script kommt jetzt auch mit Gruppen klar,

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

              umgestiegen von Proxmox auf Unraid

              T 1 Reply Last reply
              0
              • crunchipC crunchip

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

                Das Script kommt jetzt auch mit Gruppen klar,

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

                T Offline
                T Offline
                ticaki
                wrote on last edited by ticaki
                #70

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

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

                Fehlerbehebung:

                • Einzelne Wetterentwarnung wurde nicht gesendet.

                v1.15.6

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

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

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                sigi234S 1 Reply Last reply
                0
                • T ticaki

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

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

                  Fehlerbehebung:

                  • Einzelne Wetterentwarnung wurde nicht gesendet.

                  v1.15.6

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

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

                  sigi234S Online
                  sigi234S Online
                  sigi234
                  Forum Testing Most Active
                  wrote on last edited by sigi234
                  #71

                  @ticaki

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

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

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

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

                  T 1 Reply Last reply
                  0
                  • sigi234S sigi234

                    @ticaki

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

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

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

                    @sigi234
                    Das ist ein Array mit Strings: ['']

                    var ioGoUser = ['xxxxxx@liwest.at'];
                    

                    ich ändere die Vorgabe im nächsten Update in [''] aktuell würde [''] zu einem Verhalten führen das ich nicht kenne

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    M 1 Reply Last reply
                    0
                    • T ticaki

                      @sigi234
                      Das ist ein Array mit Strings: ['']

                      var ioGoUser = ['xxxxxx@liwest.at'];
                      

                      ich ändere die Vorgabe im nächsten Update in [''] aktuell würde [''] zu einem Verhalten führen das ich nicht kenne

                      M Offline
                      M Offline
                      MartyBr
                      wrote on last edited by
                      #73

                      @ticaki
                      Ich muss bei telegram.0 die folgende Syntax einhalten:

                      const MyChatId = "126373828";
                      sendTo ("telegram.0", {text: pushmsg, ChatId: MyChatId});

                      Du hast ja nun die Variable User bei telegram eingefügt. Kannst du bitte auch die ChatId aufnehmen?

                      Gruß
                      Martin


                      Intel NUCs mit Proxmox / Iobroker als VM unter Debian
                      Raspeberry mit USB Leseköpfen für Smartmeter
                      Homematic und Homematic IP

                      T 1 Reply Last reply
                      0
                      • M MartyBr

                        @ticaki
                        Ich muss bei telegram.0 die folgende Syntax einhalten:

                        const MyChatId = "126373828";
                        sendTo ("telegram.0", {text: pushmsg, ChatId: MyChatId});

                        Du hast ja nun die Variable User bei telegram eingefügt. Kannst du bitte auch die ChatId aufnehmen?

                        T Offline
                        T Offline
                        ticaki
                        wrote on last edited by ticaki
                        #74

                        @MartyBr
                        sind davon mehrfache möglich?

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

                        1 Reply Last reply
                        0
                        • T Offline
                          T Offline
                          ticaki
                          wrote on last edited by
                          #75

                          ChatID ist im Script enthalten (ungetestet)

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          M 1 Reply Last reply
                          0
                          • T ticaki

                            ChatID ist im Script enthalten (ungetestet)

                            M Offline
                            M Offline
                            MartyBr
                            wrote on last edited by
                            #76

                            @ticaki
                            Danke, werde ich testen.

                            Gruß
                            Martin


                            Intel NUCs mit Proxmox / Iobroker als VM unter Debian
                            Raspeberry mit USB Leseköpfen für Smartmeter
                            Homematic und Homematic IP

                            1 Reply Last reply
                            0
                            • T Offline
                              T Offline
                              ticaki
                              wrote on last edited by ticaki
                              #77

                              @sigi234
                              Ich hab auf Github im Test Ordner eine Betascript das aktuell DWD leicht getestet und UWZ leicht getestet unterstützt. Hab die Datenstruktur komplett umgebaut. Der Datenpath zu DWD oder UWZ ist noch nicht konfigurierbar.
                              über MODE stellt man ein was man will. Für DWD & UWZ Script 2 mal anlegen.

                              Bezogen auf das Script unter Test

                              • maxhoehe: Warnung wird gefiltert, wenn die Warnung erst bei höheren Lagen starte.
                              • minhoehe: Warnung wird gefiltert, wenn die Warnung bei niedrigeren Lagen endet.
                              • MODE Wert: 'DWD' oder 'UWZ'
                              • warnlevel: Meldungen mit zusätzlichen Hinweisen versehen z.B. eMail-Betreff "Wichtige Wetterwarnung" / UWZ und DWD benutzen nicht die gleiche Level bedeutung. DWD lvl 4-5 ist schlimm-Weltuntergang. UWZ hab ich welche mit 11-13 für starken Schneefall gesehen.
                              • Alle UWZ *.object Datenpunkte werden überwacht egal wieviele Regionen angelegt sind. Muß da in Zukunft noch eine Ausgabe für die Region einbauen.

                              Zu diesen "Höhenlagen": In jeder Warnung ist der Wert für von X Meter bis Y Meter vorgesehen. Die werden nicht grundlos mitgeschickt. Gerade wenn es große Höhenunterschiede in der Region gibt, ist es sinnvoll diese so zu setzen das es passt. Wobei Maxhoehe etwas höher und minhoehe etwas niedriger zu setzen ist.

                              Bei UWZ gibt es keine Schlagzeile wie z.B. Amtliche Warnung vor Windboen die baue ich im Code, falls eine davon falsch ist, bitte melden.

                              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                              Spenden

                              sigi234S 1 Reply Last reply
                              0
                              • T ticaki

                                @sigi234
                                Ich hab auf Github im Test Ordner eine Betascript das aktuell DWD leicht getestet und UWZ leicht getestet unterstützt. Hab die Datenstruktur komplett umgebaut. Der Datenpath zu DWD oder UWZ ist noch nicht konfigurierbar.
                                über MODE stellt man ein was man will. Für DWD & UWZ Script 2 mal anlegen.

                                Bezogen auf das Script unter Test

                                • maxhoehe: Warnung wird gefiltert, wenn die Warnung erst bei höheren Lagen starte.
                                • minhoehe: Warnung wird gefiltert, wenn die Warnung bei niedrigeren Lagen endet.
                                • MODE Wert: 'DWD' oder 'UWZ'
                                • warnlevel: Meldungen mit zusätzlichen Hinweisen versehen z.B. eMail-Betreff "Wichtige Wetterwarnung" / UWZ und DWD benutzen nicht die gleiche Level bedeutung. DWD lvl 4-5 ist schlimm-Weltuntergang. UWZ hab ich welche mit 11-13 für starken Schneefall gesehen.
                                • Alle UWZ *.object Datenpunkte werden überwacht egal wieviele Regionen angelegt sind. Muß da in Zukunft noch eine Ausgabe für die Region einbauen.

                                Zu diesen "Höhenlagen": In jeder Warnung ist der Wert für von X Meter bis Y Meter vorgesehen. Die werden nicht grundlos mitgeschickt. Gerade wenn es große Höhenunterschiede in der Region gibt, ist es sinnvoll diese so zu setzen das es passt. Wobei Maxhoehe etwas höher und minhoehe etwas niedriger zu setzen ist.

                                Bei UWZ gibt es keine Schlagzeile wie z.B. Amtliche Warnung vor Windboen die baue ich im Code, falls eine davon falsch ist, bitte melden.

                                sigi234S Online
                                sigi234S Online
                                sigi234
                                Forum Testing Most Active
                                wrote on last edited by sigi234
                                #78

                                @ticaki

                                Super, teste jetzt. Altes Skript und Objekte löschen? Oder ist es ein eigenständiges Skript?
                                Fragen Erledigt.

                                javascript.0	2020-03-03 16:34:47.310	error	(19128) at Script.runInContext (vm.js:133:20)
                                javascript.0	2020-03-03 16:34:47.310	error	(19128) at script.js.Alexa.Ansage_UWZ:241:9
                                javascript.0	2020-03-03 16:34:47.310	error	(19128) ReferenceError: getFullId is not defined
                                javascript.0	2020-03-03 16:34:47.310	error	(19128) ^
                                javascript.0	2020-03-03 16:34:47.310	error	(19128) if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                                javascript.0	2020-03-03 16:34:47.309	error	(19128) script.js.Alexa.Ansage_UWZ: script.js.Alexa.Ansage_UWZ:241
                                
                                    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();
                                        }
                                    }
                                }
                                

                                2= 241

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

                                T 1 Reply Last reply
                                0
                                • T Offline
                                  T Offline
                                  ticaki
                                  wrote on last edited by
                                  #79

                                  Oh hab ich nach dem Test noch nen Fehler eingebaut. Guck ich mir heute Abend an

                                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                  Spenden

                                  sigi234S 1 Reply Last reply
                                  0
                                  • T ticaki

                                    Oh hab ich nach dem Test noch nen Fehler eingebaut. Guck ich mir heute Abend an

                                    sigi234S Online
                                    sigi234S Online
                                    sigi234
                                    Forum Testing Most Active
                                    wrote on last edited by
                                    #80

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

                                    Oh hab ich nach dem Test noch nen Fehler eingebaut. Guck ich mir heute Abend an

                                    Danke dir.

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

                                    1 Reply Last reply
                                    0
                                    • sigi234S sigi234

                                      @ticaki

                                      Super, teste jetzt. Altes Skript und Objekte löschen? Oder ist es ein eigenständiges Skript?
                                      Fragen Erledigt.

                                      javascript.0	2020-03-03 16:34:47.310	error	(19128) at Script.runInContext (vm.js:133:20)
                                      javascript.0	2020-03-03 16:34:47.310	error	(19128) at script.js.Alexa.Ansage_UWZ:241:9
                                      javascript.0	2020-03-03 16:34:47.310	error	(19128) ReferenceError: getFullId is not defined
                                      javascript.0	2020-03-03 16:34:47.310	error	(19128) ^
                                      javascript.0	2020-03-03 16:34:47.310	error	(19128) if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                                      javascript.0	2020-03-03 16:34:47.309	error	(19128) script.js.Alexa.Ansage_UWZ: script.js.Alexa.Ansage_UWZ:241
                                      
                                          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();
                                              }
                                          }
                                      }
                                      

                                      2= 241

                                      T Offline
                                      T Offline
                                      ticaki
                                      wrote on last edited by ticaki
                                      #81

                                      @sigi234

                                      Fehler gefunden, haben nur rund 200 Zeilen code gefehlt... hust :grin:
                                      Sorry war wohl unaufmerksam beim copy&paste

                                      @all
                                      Multi-Echoausgabe mit Alexa funktioniert mit Echo ab 2gen und Echo dot ab 3gen. Hab jetzt einen 3er in der Küche :)

                                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                      Spenden

                                      sigi234S LatziL 2 Replies Last reply
                                      0
                                      • T ticaki

                                        @sigi234

                                        Fehler gefunden, haben nur rund 200 Zeilen code gefehlt... hust :grin:
                                        Sorry war wohl unaufmerksam beim copy&paste

                                        @all
                                        Multi-Echoausgabe mit Alexa funktioniert mit Echo ab 2gen und Echo dot ab 3gen. Hab jetzt einen 3er in der Küche :)

                                        sigi234S Online
                                        sigi234S Online
                                        sigi234
                                        Forum Testing Most Active
                                        wrote on last edited by
                                        #82

                                        @ticaki

                                        Schaut gut aus.

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

                                        1 Reply Last reply
                                        0
                                        • T ticaki

                                          @sigi234

                                          Fehler gefunden, haben nur rund 200 Zeilen code gefehlt... hust :grin:
                                          Sorry war wohl unaufmerksam beim copy&paste

                                          @all
                                          Multi-Echoausgabe mit Alexa funktioniert mit Echo ab 2gen und Echo dot ab 3gen. Hab jetzt einen 3er in der Küche :)

                                          LatziL Online
                                          LatziL Online
                                          Latzi
                                          wrote on last edited by
                                          #83

                                          @ticaki ich verwende UWZ, bei mir kommt nichts über telegram (weder User noch ChatID ändern das Verhalten), alexa funktioniert wenn ich den DP javascript.0.UWZ_Script_alpha.Commands.alexa ansteuere.
                                          Sollte doch bei telegram auch so laufen, oder muss ein Text im DP javascript.0.UWZ_Script_alpha.message stehen?
                                          Was mache ich falsch???

                                          T 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          287

                                          Online

                                          32.6k

                                          Users

                                          82.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe