Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • crunchip
      crunchip Forum Testing Most Active @ticaki last edited by

      @ticaki das wurde vorhin noch so ausgesprochen (15m/s, 30kn, Bft 7)😁

      Es treten Windböen mit Geschwindigkeiten um 55 km/h (15m/s, 30kn, Bft 7) aus nordwestlicher Richtung auf.
      
      1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @sigi234 last edited by ticaki

        @sigi234
        Danke!

        @crunchip
        ok, hatte leider keine solche Warnung heute abend.... wir haben hier nur schnee.... unendlich viel schnee 😁
        Muß mal schauen was ich da verpeilt habe.

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

          @ticaki dito, deswegen kamen ja soviele Warnungen heute rein😁

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

            Änderung:

            • Push auslösen über State ignoriert eingestellte Sprachzeiten. konfigurierbar.

            Fehlerbehebung:

            • v12.5 nach Restart wird nur erste Warnung eingelesen (behoben)
            • v12.5 Handlungsanweisungen wurden bei mir mit "9" ausgegeben. (behoben)

            @crunchip
            Ich hab keine Ahnung wieso das nicht als Knoten ausgegeben wurde, alle meine Tests waren positiv.

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

              @ticaki

              Deine Serial ist noch drinnen.

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

                @sigi234
                Danke für den Hinweis, ist aber nicht meine 🙂 Hab die als Beispiel drin, weil ich denke das nicht jeder weiß was ich meine. Ist aber verwirrend hast recht. In der nächsten Version steht die als Beispiel in den Kommentaren.

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

                  @ticaki

                  Ok, kannst du auch ioGo als push mit einbauen? Einen sendto Baustein gibt es.

                  https://forum.iobroker.net/topic/29146/beta-test-android-app-iogo-2-1-x

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

                    @sigi234
                    Kein Thema.

                    Müsste aber ein Codebeispiel sehen, da ich kein Android habe kann ich es nicht testen und auch nicht auf gut Glück rumprobieren, ob es passt.

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

                      Habs gefunden 🙂

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

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

                        Habs gefunden 🙂

                        on({id: 'hue.0.Küche_Sensor.presence', change: "ne"}, function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          if (getState("hue.0.Küche_Sensor.presence").val == true) {
                            sendTo("iogo.0", "send", {
                               "text": 'Bewegung in der Küche erkannt!',
                               "title": 'Nachricht von ioGo'
                            });
                          }
                        });
                        
                        1 Reply Last reply Reply Quote 0
                        • T
                          ticaki Developer last edited by ticaki

                          v13

                          Änderungen

                          • ioGo hinzugefügt (ungetestet)
                          • Sortierung in der eMail umgedreht (alt/neu) -> (neu/alt)

                          Anmerkung: wenn neue Pushmöglichkeiten hinzukommen. Reagiert der State immer erst nach dem 2. Scriptstart

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

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

                            ioGo hinzugefügt (ungetestet)

                            Danke, funktioniert! 👍

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

                              Junge, junge.... da habe ich was angestoßen 😊

                              @ticaki : Vielen Dank für deinen unermüdlichen Einsatz!!!

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

                                V13.1
                                hab noch 2 Fehler gefunden

                                • Sprachzeiten wurden nicht neu gesetzt
                                • fehlendes ;

                                Ich glaube ich fange an Git zu nutzen, damit solche Fehler aus Unachtsamkeit seltener vorkommen. Der fehlende Funktionsaufruf zum Setzen der Zeiten wäre mir ganz sicher aufgefallen.

                                @wendy2702
                                Macht Spass. 🙂

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

                                  Mit Version 13.1 heute Morgen leider so:

                                  FDB97D25-82F0-4AF3-B361-5BB10B2DEA50.jpeg

                                  Meldung doppelt und beim Aufheben wieder das ‚undefined‘

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

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

                                    Änderungen:

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

                                    Nicht verwenden, letzt änderung funktioniert nicht wie gedacht

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

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

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

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

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

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

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

                                          • Hab zuviel rausgefiltert

                                          v13.6

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

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

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

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            813
                                            Online

                                            31.7k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

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