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

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

Community Forum

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

NEWS

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

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

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

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

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

    Habs gefunden :)

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    sigi234S 1 Antwort Letzte Antwort
    0
    • T ticaki

      Habs gefunden :)

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

      @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'
          });
        }
      });
      

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

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

        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

        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

        Spenden

        sigi234S 1 Antwort Letzte Antwort
        0
        • T 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

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

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

          ioGo hinzugefügt (ungetestet)

          Danke, funktioniert! :+1:

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

          1 Antwort Letzte Antwort
          0
          • wendy2702W Offline
            wendy2702W Offline
            wendy2702
            schrieb am zuletzt editiert von
            #46

            Junge, junge.... da habe ich was angestoßen :blush:

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

            Bitte keine Fragen per PN, die gehören ins Forum!

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            T 1 Antwort Letzte Antwort
            0
            • wendy2702W wendy2702

              Junge, junge.... da habe ich was angestoßen :blush:

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

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

              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. :)

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              1 Antwort Letzte Antwort
              0
              • wendy2702W Offline
                wendy2702W Offline
                wendy2702
                schrieb am zuletzt editiert von
                #48

                Mit Version 13.1 heute Morgen leider so:

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

                Meldung doppelt und beim Aufheben wieder das ‚undefined‘

                Bitte keine Fragen per PN, die gehören ins Forum!

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                T 1 Antwort Letzte Antwort
                0
                • wendy2702W wendy2702

                  Mit Version 13.1 heute Morgen leider so:

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

                  Meldung doppelt und beim Aufheben wieder das ‚undefined‘

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

                  @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

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  1 Antwort Letzte Antwort
                  0
                  • wendy2702W Offline
                    wendy2702W Offline
                    wendy2702
                    schrieb am zuletzt editiert von
                    #50

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

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

                    Bitte keine Fragen per PN, die gehören ins Forum!

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    T 1 Antwort Letzte Antwort
                    0
                    • wendy2702W wendy2702

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

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

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

                      @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

                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                      Spenden

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

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

                        • Hab zuviel rausgefiltert

                        v13.6

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

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

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

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

                          umgestiegen von Proxmox auf Unraid

                          1 Antwort Letzte Antwort
                          0
                          • T ticaki

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

                            • Hab zuviel rausgefiltert

                            v13.6

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

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

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

                            dwd.0.warning.description

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

                            im log steht

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

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

                            umgestiegen von Proxmox auf Unraid

                            T 1 Antwort Letzte Antwort
                            0
                            • crunchipC crunchip

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

                              dwd.0.warning.description

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

                              im log steht

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

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

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

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

                              • Alexa
                              • SayIt
                              • Home24

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

                              Sind die Handlungsanweisungen eigentlich ok. Oder nervt das?

                              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                              Spenden

                              crunchipC 1 Antwort Letzte Antwort
                              0
                              • T ticaki

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

                                • Alexa
                                • SayIt
                                • Home24

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

                                Sind die Handlungsanweisungen eigentlich ok. Oder nervt das?

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

                                @ticaki ich benutze beides

                                • Alexa
                                • Sayit
                                  hatte aber zur Zeit nur letzteres akiviert

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

                                Handlungsanweisungen

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

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

                                "Achtung ." und sonst nix fehler gefunden

                                das klingt schon mal positiv

                                umgestiegen von Proxmox auf Unraid

                                T 1 Antwort Letzte Antwort
                                0
                                • crunchipC crunchip

                                  @ticaki ich benutze beides

                                  • Alexa
                                  • Sayit
                                    hatte aber zur Zeit nur letzteres akiviert

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

                                  Handlungsanweisungen

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

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

                                  "Achtung ." und sonst nix fehler gefunden

                                  das klingt schon mal positiv

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

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

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

                                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                  Spenden

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

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

                                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                    Spenden

                                    crunchipC 1 Antwort Letzte Antwort
                                    0
                                    • T ticaki

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

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

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

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

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

                                      umgestiegen von Proxmox auf Unraid

                                      T 1 Antwort Letzte Antwort
                                      0
                                      • crunchipC crunchip

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

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

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

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

                                        @crunchip
                                        :grin:

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

                                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                        Spenden

                                        crunchipC 1 Antwort Letzte Antwort
                                        0
                                        • T ticaki

                                          @crunchip
                                          :grin:

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

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

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

                                          umgestiegen von Proxmox auf Unraid

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          810

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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