Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

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

      @sigi234
      Da war noch ein geerbter Fehler in der Logausgabe... Oder der Fehler ist durch updates im Javascript-Adapter erst als solcher entstanden.

      // Version 1.05
      // Author: dwm
      // Änderungen ticaki
      // 1.01 debuglevel keine Ausgabe bei 1;
      // 1.02 let und variable "Fehler" behoben (wurde als Syntaxfehler angezeigt)
      // 1.03 logausgabe fehler bei keiner Verbindung behoben
      // 1.03 schedule gegen setInterval() getauscht.
      // 1.04 umgestellt auf Axios.
      // 1.05 Fehler in dwmlog behoben
      
      var intervalMinutes = 5;
      var debuglevel = 1;
      var debugchannel = 'info';
      
      const axios = require('axios');
      
      function dwmlog( message, level, channel) {
        if (channel === undefined) {
            channel = debugchannel;
        }
        if (level === undefined)
        {
            level = debuglevel;
        }
        if ( debuglevel >= level ) {
            log (message, channel );
        }
      }
      
      var AdapterId = "javascript."+instance;
      var ChannelId = "UWZ";
      
      var forceInitStates = false;
      var numOfWarnings = 7;
      
      var url='http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=de&areaID=XXXAREAXXX';
      
      
      /********************* Hier die Warnzellen-Id's eintragen *****************************/
      var warncellid = ['UWZxxxxxxx'];
      /**************************************************************************************/
      
      
      var UWZTypesArray=["n/a","unbekannt","Sturm/Orkan","Schneefall","Starkregen","Extremfrost","Waldbrandgefahr","Gewitter","Glätte","Hitze","Glatteisregen","Bodenfrost"];
      
      function createStates(n){
        var areaChannelId = null;
      
        for (var j=0; j<warncellid.length; j++) {
            areaChannelId=ChannelId+"."+warncellid[j];
            for (let i=0; i<n; i++) {
                createState(areaChannelId+".warning."+i+".ShortText","",forceInitStates,{type: 'string'});
                createState(areaChannelId+".warning."+i+".LongText","",forceInitStates,{type: 'string'});
                createState(areaChannelId+".warning."+i+".object","",forceInitStates,{type: 'string'});
                createState(areaChannelId+".warning."+i+".begin","",forceInitStates,{type: 'string'});
                createState(areaChannelId+".warning."+i+".end","",forceInitStates,{type: 'string'});
                createState(areaChannelId+".warning."+i+".severity",0,forceInitStates,{min:0, max:6, type: 'number'});
                createState(areaChannelId+".warning."+i+".type",0,forceInitStates,{min:0, max:11, type: 'number',states:UWZTypesArray});
                createState(areaChannelId+".warning."+i+".uwzLevel",0,forceInitStates,{min:0, max:5, type: 'number'});
                createState(areaChannelId+".warning."+i+".uwzColor",0,forceInitStates,{type:'number'});
                createState(areaChannelId+".warning."+i+".HTMLShort","",forceInitStates,{type: 'string'});
                createState(areaChannelId+".warning."+i+".HTMLLong","",forceInitStates,{type: 'string'});
            }
        }
      }
      
      function getUWZLevel (warnName){
        var result = -1; // -1 is an error!
        var alert = warnName.split("_");
        var colors = ["green","darkgreen","yellow","orange","red","violet"];
      
        if (alert[0]=="notice") { result = 1; }
        else if (alert[1] == "forewarn") { result = 2; }
        else {
            result = colors.indexOf(alert[2]);
        }
        return result;
      }
      
      function getUWZUrgency (warnName){
        var result = 0;
      
        var alert = warnName.split("_");
        if (alert[1] == "forewarn") {
            result = 1;
        }
        else {
            result = 2; // immediate;
        }
        return result;
      }
      
      function getLevelColor(uwzLevel) {
        var uwzColor = [
            0x00ff00, // 0 - Grün
            0x009b00, // 1 - Dunkelgrün
            0xffff00, // 2 - Gelb Wetterwarnungen (Stufe 1)
            0xffb400, // 3 - Orange Warnungen vor markantem Wetter (Stufe 2)
            0xff0000, // 4 - Rot Unwetterwarnungen (Stufe 3)
            0xff00ff, // 5 - Violett Warnungen vor extremem Unwetter (Stufe 4)
        ];
        if (uwzLevel>=0 && uwzLevel<=5)
            return uwzColor[uwzLevel];
        else
            return 0;
      }
      
      function createHTMLShort(w){
        var html = '<div style="background: #'+w.uwzColor.toString(16)+'" border:"10px">';
      
        var theData = JSON.parse(w.object);
      
        html += '<h3>';
        if (w.uwzUrgency==1) html+="Vorwarnung vor "; else html+="Warnung vor ";
        html += UWZTypesArray[w.type];
        html +="</h3>";
        html += "<p>Zeitraum von "+formatDate(new Date(theData.dtgStart*1000),"WW, DD. OO YYYY hh:mm")+" Uhr bis "+formatDate(new Date(theData.dtgEnd*1000),"WW, DD. OO YYYY hh:mm")+" Uhr </p>";
        html += '<p>'+w.ShortText+'</p>';
        html += "</div>";
        return html;
      }
      
      function createHTMLLong(w){
        var html = '<div style="background: #'+w.uwzColor.toString(16)+'" border:"10px">';
      
        var theData = JSON.parse(w.object);
      
        html += '<h3>';
        if (w.uwzUrgency==1) html+="Vorwarnung vor "; else html+="Warnung vor ";
        html += UWZTypesArray[w.type];
        html +="</h3>";
        html += "<p>Zeitraum von "+formatDate(new Date(theData.dtgStart*1000),"WW, DD. OO YYYY hh:mm")+" Uhr bis "+formatDate(new Date(theData.dtgEnd*1000),"WW, DD. OO YYYY hh:mm")+" Uhr </p>";
        html += '<p>'+w.LongText+'</p>';
        html += "</div>";
        return html;
      }
      
      function processResultEntry(w) {
        this.object = JSON.stringify(w);
      
        this.begin=formatDate(new Date(w.dtgStart*1000),"DD.MM.YYYY hh:mm");
        this.end=formatDate(new Date(w.dtgEnd*1000),"DD.MM.YYYY hh:mm");
      
        // dwmlog (formatDate(this.begin,"DD.MM.YYYY hh:mm"),4);
        // dwmlog (formatDate(this.end,"DD.MM.YYYY hh:mm"),4);
      
        this.LongText = w.payload.translationsLongText.DE;
        this.ShortText = w.payload.translationsShortText.DE;
      
        this.severity = w.severity;
        this.type = w.type;
        this.uwzLevel = getUWZLevel(w.payload.levelName);
        this.uwzUrgency = getUWZUrgency(w.payload.levelName);
        this.uwzColor = getLevelColor(this.uwzLevel);
        var x = this;
        this.HTMLShort = createHTMLShort(x);
        this.HTMLLong  = createHTMLLong(x);
      }
      
      function processData(Area, thedata) {
         if (!thedata) {
            return;
         }
      
         var warnings= [];
         if (thedata.results.length>0) {
             for (let i=0; i<thedata.results.length; i++) {
                 warnings.push(new processResultEntry(thedata.results[i]));
             }
         }
      
         warnings.sort(function(a,b){
             var asort = a.severity;
             var bsort = b.severity;
             return bsort-asort;
         });
      
         dwmlog(JSON.stringify(warnings),2);
         let areaChannelId=ChannelId+"."+Area;
         for (let i=0; i<numOfWarnings; i++) {
            if (i<warnings.length) {
                setState(areaChannelId+".warning."+i+".LongText",warnings[i].LongText);
                setState(areaChannelId+".warning."+i+".ShortText",warnings[i].ShortText);
                setState(areaChannelId+".warning."+i+".object",warnings[i].object);
                setState(areaChannelId+".warning."+i+".begin",warnings[i].begin);
                setState(areaChannelId+".warning."+i+".end",warnings[i].end);
                setState(areaChannelId+".warning."+i+".severity",warnings[i].severity);
                setState(areaChannelId+".warning."+i+".type",warnings[i].type);
                setState(areaChannelId+".warning."+i+".uwzLevel",warnings[i].uwzLevel);
                setState(areaChannelId+".warning."+i+".uwzColor",warnings[i].uwzColor);
                setState(areaChannelId+".warning."+i+".HTMLShort",warnings[i].HTMLShort);
                setState(areaChannelId+".warning."+i+".HTMLLong",warnings[i].HTMLLong);
            } else {
                setState(areaChannelId+".warning."+i+".LongText","");
                setState(areaChannelId+".warning."+i+".ShortText","");
                setState(areaChannelId+".warning."+i+".object","{}");
                setState(areaChannelId+".warning."+i+".begin","");
                setState(areaChannelId+".warning."+i+".end","");
                setState(areaChannelId+".warning."+i+".severity",0);
                setState(areaChannelId+".warning."+i+".type",0);
                setState(areaChannelId+".warning."+i+".uwzLevel",0);
                setState(areaChannelId+".warning."+i+".uwzColor",0);
                setState(areaChannelId+".warning."+i+".HTMLShort","");
                setState(areaChannelId+".warning."+i+".HTMLLong","");
          }
        }
      }
      
      function getAreaFromURI(uri) {
        var searchstr = "&areaID=";
        var n = uri.search(searchstr);
        var result = uri.slice(n+searchstr.length,uri.length);
        return result;
      }
      
      createStates(numOfWarnings);
      
      setInterval(work,intervalMinutes * 60 * 1000);
      work();
      
      async function work() {
         for (var i=0; i<warncellid.length; i++) {
             try {
                 const res = await axios.get(url.replace("XXXAREAXXX",warncellid[i]));
                 dwmlog("AREA: "+getAreaFromURI(res.config.url),4);
                 dwmlog("UWZ Body: " + JSON.stringify(res.data),4);
                 dwmlog("Status: " + res.status,4);
                 if (res.status == 200) {
                     processData(getAreaFromURI(res.config.url),res.data);
                 }
             } catch (error) {
                 // Error 😨
                 if (error.response) {
                     /*
                     * The request was made and the server responded with a
                     * status code that falls out of the range of 2xx
                     */
                     dwmlog(error.response.data, 1);
                     dwmlog(error.response.status, 1);
                     dwmlog(error.response.headers, 1);
                 } else if (error.request) {
                     /*
                     * The request was made but no response was received, `error.request`
                     * is an instance of XMLHttpRequest in the browser and an instance
                     * of http.ClientRequest in Node.js
                     */
                     dwmlog("Server antwortet nicht", 1);
                 } else {
                     // Something happened in setting up the request and triggered an Error
                     dwmlog(error.message, 1, 'warn');
                 }
                 dwmlog(error,1);
             }
         }
      }
      

      Änderungen:
      debuglevel auf 1 gesetzt

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

        Moin, ist die Ausgabe im Log so richtig wenn keine Warnungen vorliegen?

        javascript.0 496 2021-09-07 11:52:17.046 info script.js.Wetter.DWD-UWZ-NINA-2: []
        javascript.0 496 2021-09-07 11:52:17.046 info script.js.Wetter.DWD-UWZ-NINA-2: Status: 200
        javascript.0 496 2021-09-07 11:52:17.046 info script.js.Wetter.DWD-UWZ-NINA-2: UWZ Body: {"results":],"generator":"PHPjf"}
        javascript.0 496 2021-09-07 11:52:17.045 info script.js.Wetter.DWD-UWZ-NINA-2: AREA: UWZDExyz
        
        T 1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer @Nashra last edited by

          @nashra
          Welche Version?

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

            @ticaki sagte in [Script] DWD/UWZ/NINA Warnungen als Push/Sprachnachrichten:

            @nashra
            Welche Version?

            UWZ 1.05

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

              @nashra
              Danke!
              Stelle das debuglevel auf 1, werde ich nachher in der Vorlage ändern

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

                @ticaki sagte in [Script] DWD/UWZ/NINA Warnungen als Push/Sprachnachrichten:

                @nashra
                Danke!
                Stelle das debuglevel auf 1, werde ich nachher in der Vorlage ändern

                gemacht 👍

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

                  @crunchip
                  Ich denke ich hab den Fehler gefunden.

                  0.97.19.4

                  • DWD Spam hoffentlich behoben.
                  • unnötigen Code entfernt
                  crunchip 1 Reply Last reply Reply Quote 0
                  • crunchip
                    crunchip Forum Testing Most Active @ticaki last edited by crunchip

                    @ticaki ok, guck ich mal, dann muss ich das aber auch wieder zurückstellen

                    w.repeatCounter += w2.repeatCounter + 2;
                    
                    if (w.repeatCounter > 300 ) { 
                    

                    edit
                    brauch ich ja nicht ändern, wird ja überschrieben

                    1 Reply Last reply Reply Quote 0
                    • Thomas Braun
                      Thomas Braun Most Active last edited by

                      javascript.0 (7265) script.js.common.dwd_uwz_nina_warnungen: Alle Benachrichtigungen ausgeschaltet, bitte unter ioBroker - Objektansicht - Pfad des Skripts - config - UWZ und/oder DWD und/oder NINA auf true stellen.

                      Kapier ich nicht. Wo ist das einzustellen?

                      P 1 Reply Last reply Reply Quote 0
                      • P
                        patti_9000 @Thomas Braun last edited by

                        @thomas-braun
                        Das Skript legt automatisch Objekte/Datenpunkte an und dort gobt es, wie angegeben, jeweils einen Datenpunkt für UWZ, Nina und DWD. Dort musst du den gewünschten Dienst auf TRUE stellen.

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

                          Habe in dem Logeintrag "Pfad des Skripts" durch den Inhalt von mainStatePath ersetzt.

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

                            Hallo,

                            ich nutze Script Version 0.97.19.2

                            Und habe seit gestern das Problem das alle 20 minuten die exact gleiche Meldung gesendet und ausgegeben wird bis sich diese ändert:

                            c7514fc8-11df-497c-b3e2-c888c61c6596-image.png

                            Ist das noch ein Bug den ich mit einer neueren Version wegbekomme?

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

                              @wendy2702 siehe https://forum.iobroker.net/post/677331

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

                                @crunchip ok.

                                Dann werde ich die mal testen.

                                Danke

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

                                  @wendy2702
                                  Ich hatte den Fehler gestern auch, hab dann die aktuelle Version rüberkopiert und dann wars weg. Kann aber noch immer sein, war mir nicht sicher ob ich die aktuelle Version benutze 🙂

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

                                    Version 0.97.23

                                    • Restartfunktion überarbeitet (alive Datenpunkt ist jetzt ohne Funktion und kann gelöscht werden)
                                    • Unter .alert den Datenpunkt current angelegt, der auf true schaltet wenn der aktuelle Zeitpunkt zwischen start und ende der Warnung liegt.
                                    • kk

                                    Ich nutze current in Abwesenheit für meinen Rolladen an der Balkontür, die nicht immer zu ist.

                                    Beispiel:

                                    on ({id:['javascript.0.wetterwarnung.alert.dwd.Regen.current','javascript.0.wetterwarnung.alert.dwd.Sturm.current','javascript.0.wetterwarnung.alert.dwd.Hitzewarnungen.current'], change:'gt', ack:true}, 
                                    function(obj){
                                        let aId = obj.id.split('.');
                                        aId[aId.length-1] = 'level';
                                        let oId = aId.join('.');
                                        if (getState(oId).val > 1
                                        && !getState('0_userdata.0.Sensoren.Anwesenheit.Anyone').val
                                        ) {
                                            log('Rollladen geschlossen Aufgrund von Wetterwarnungen!');
                                            setState('shelly.0.SHSW-25#C45BBE5FC53F#1.Shutter.Close', true);
                                        }
                                    })
                                    
                                    1 Reply Last reply Reply Quote 1
                                    • M
                                      Megawaldi last edited by Megawaldi

                                      Ich habe das Problem das das Script keine doppelten Einträge erkennt und mir deswegen alle 5 min die selbe Email schickt...
                                      Das der DWD Adapter alles 5 min neustartet ist ja normal.
                                      Nur das mit jedem Neustart die Wetterwarung als neu betrachtet wird, wird mir jedes mal ne neue email geschickt...(hab den email Versand jetzt mal deaktiviert)

                                      javascript.0
                                      	2021-10-05 15:40:07.635	info	script.js.Warnungen.dwd_uwz_nina_script: Add DWD warning to database. headline: Amtliche WARNUNG vor WINDBÖEN
                                      javascript.0
                                      	2021-10-05 15:35:07.159	info	script.js.Warnungen.dwd_uwz_nina_script: Add DWD warning to database. headline: Amtliche WARNUNG vor WINDBÖEN
                                      

                                      Das war jetzt nur ein Beispiel...die Meldung kommt alle 5 Minuten...

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

                                        @megawaldi
                                        Welche Version?

                                        M 1 Reply Last reply Reply Quote 0
                                        • M
                                          Megawaldi @ticaki last edited by

                                          @ticaki
                                          Die von gestern auf github

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            Megawaldi last edited by

                                            Der iobroker hat auch ein Problem mit deiner Hashfunktion.
                                            Vieleicht hängt das mit dem doppelten Warnungen zusammen...
                                            Screenshot 2021-10-05 164532.jpg

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            498
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

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