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.5k

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

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

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
1.5k Beiträge 53 Kommentatoren 571.6k 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 ticaki

    @megawaldi
    Hab vergessen auf push zu dücken.

    NashraN Offline
    NashraN Offline
    Nashra
    Most Active Forum Testing
    schrieb am zuletzt editiert von
    #677

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

    @megawaldi
    Hab vergessen auf push zu dücken.

    Ups noch ein Update, alles wieder ab 123456 tauschen oder ist wo anders noch was

    Gruß Ralf
    Mir egal, wer Dein Vater ist! Wenn ich hier angel, wird nicht übers Wasser gelaufen!!

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

    T 1 Antwort Letzte Antwort
    0
    • NashraN Nashra

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

      @megawaldi
      Hab vergessen auf push zu dücken.

      Ups noch ein Update, alles wieder ab 123456 tauschen oder ist wo anders noch was

      T Offline
      T Offline
      ticaki
      schrieb am zuletzt editiert von
      #678

      @nashra
      Jo. Damit sind dann alle Fehler die ich durch die jüngsten Änderungen eingebaut habe behoben. :)

      Aktuell ist: Version 0.97.24.3

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      M 1 Antwort Letzte Antwort
      1
      • NashraN Offline
        NashraN Offline
        Nashra
        Most Active Forum Testing
        schrieb am zuletzt editiert von
        #679

        Ups Fehler beim Start

        10:21:53.556	error	javascript.0 (25794) script.js.Wetter.DWD-UWZ-NINA-1: TypeError: Cannot read property 'levelName' of undefined
        10:21:53.556	error	javascript.0 (25794) at addDatabaseData (script.js.Wetter.DWD-UWZ-NINA-1:1685:27)
        10:21:53.556	error	javascript.0 (25794) at _helper (script.js.Wetter.DWD-UWZ-NINA-1:1654:13)
        10:21:53.556	error	javascript.0 (25794) at InitDatabase (script.js.Wetter.DWD-UWZ-NINA-1:1637:9)
        10:21:53.556	error	javascript.0 (25794) at changeMode (script.js.Wetter.DWD-UWZ-NINA-1:566:9)
        10:21:53.556	error	javascript.0 (25794) at script.js.Wetter.DWD-UWZ-NINA-1:640:19
        10:21:53.556	error	javascript.0 (25794) at script.js.Wetter.DWD-UWZ-NINA-1:2425:3
        

        Gruß Ralf
        Mir egal, wer Dein Vater ist! Wenn ich hier angel, wird nicht übers Wasser gelaufen!!

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

        1 Antwort Letzte Antwort
        0
        • T ticaki

          @nashra
          Jo. Damit sind dann alle Fehler die ich durch die jüngsten Änderungen eingebaut habe behoben. :)

          Aktuell ist: Version 0.97.24.3

          M Offline
          M Offline
          Megawaldi
          schrieb am zuletzt editiert von
          #680

          @ticaki
          Bekomme nen error beim Start:

          javascript.0
          	2021-10-20 10:23:26.363	error	at Script.runInContext (vm.js:130:18)
          javascript.0
          	2021-10-20 10:23:26.363	error	at script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:2427:3
          javascript.0
          	2021-10-20 10:23:26.363	error	at script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:643:19
          javascript.0
          	2021-10-20 10:23:26.363	error	at changeMode (script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:569:9)
          javascript.0
          	2021-10-20 10:23:26.357	error	at InitDatabase (script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:1640:9)
          javascript.0
          	2021-10-20 10:23:26.357	error	at _helper (script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:1657:13)
          javascript.0
          	2021-10-20 10:23:26.357	error	at addDatabaseData (script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:1688:27)
          javascript.0
          	2021-10-20 10:23:26.356	error	script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script: TypeError: Cannot read property 'levelName' of undefined
          
          T 1 Antwort Letzte Antwort
          0
          • M Megawaldi

            @ticaki
            Bekomme nen error beim Start:

            javascript.0
            	2021-10-20 10:23:26.363	error	at Script.runInContext (vm.js:130:18)
            javascript.0
            	2021-10-20 10:23:26.363	error	at script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:2427:3
            javascript.0
            	2021-10-20 10:23:26.363	error	at script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:643:19
            javascript.0
            	2021-10-20 10:23:26.363	error	at changeMode (script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:569:9)
            javascript.0
            	2021-10-20 10:23:26.357	error	at InitDatabase (script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:1640:9)
            javascript.0
            	2021-10-20 10:23:26.357	error	at _helper (script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:1657:13)
            javascript.0
            	2021-10-20 10:23:26.357	error	at addDatabaseData (script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script:1688:27)
            javascript.0
            	2021-10-20 10:23:26.356	error	script.js.Ausgaben.Wetterwarnungen.dwd_uwz_nina_script: TypeError: Cannot read property 'levelName' of undefined
            
            T Offline
            T Offline
            ticaki
            schrieb am zuletzt editiert von
            #681

            @megawaldi
            .04 ist aktuell. Habs dieses mal getestet.

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            NashraN 1 Antwort Letzte Antwort
            1
            • T ticaki

              @megawaldi
              .04 ist aktuell. Habs dieses mal getestet.

              NashraN Offline
              NashraN Offline
              Nashra
              Most Active Forum Testing
              schrieb am zuletzt editiert von
              #682

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

              @megawaldi
              .04 ist aktuell. Habs dieses mal getestet.

              Beim Start keine Fehler mehr:+1:

              Gruß Ralf
              Mir egal, wer Dein Vater ist! Wenn ich hier angel, wird nicht übers Wasser gelaufen!!

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

              T sigi234S 2 Antworten Letzte Antwort
              1
              • NashraN Nashra

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

                @megawaldi
                .04 ist aktuell. Habs dieses mal getestet.

                Beim Start keine Fehler mehr:+1:

                T Offline
                T Offline
                ticaki
                schrieb am zuletzt editiert von
                #683

                @nashra
                Danke fürs Testen ohne meckern.

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                M 1 Antwort Letzte Antwort
                0
                • NashraN Nashra

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

                  @megawaldi
                  .04 ist aktuell. Habs dieses mal getestet.

                  Beim Start keine Fehler mehr:+1:

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

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

                  Beim Start keine Fehler mehr

                  Dito :+1:

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

                  1 Antwort Letzte Antwort
                  0
                  • T ticaki

                    @nashra
                    Danke fürs Testen ohne meckern.

                    M Offline
                    M Offline
                    Megawaldi
                    schrieb am zuletzt editiert von
                    #685

                    @ticaki
                    Bei mir läuft es auch so wie es soll 👍

                    T 1 Antwort Letzte Antwort
                    0
                    • M Megawaldi

                      @ticaki
                      Bei mir läuft es auch so wie es soll 👍

                      T Offline
                      T Offline
                      ticaki
                      schrieb am zuletzt editiert von
                      #686

                      @megawaldi
                      Werden die Warnungen auch erfasst?

                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                      Spenden

                      M 1 Antwort Letzte Antwort
                      0
                      • T ticaki

                        @megawaldi
                        Werden die Warnungen auch erfasst?

                        M Offline
                        M Offline
                        Megawaldi
                        schrieb am zuletzt editiert von
                        #687

                        @ticaki
                        Ja sieht gut aus bis jetzt

                        1 Antwort Letzte Antwort
                        0
                        • NashraN Offline
                          NashraN Offline
                          Nashra
                          Most Active Forum Testing
                          schrieb am zuletzt editiert von
                          #688

                          Da sind wir wieder. Jetzt wieder alle halbe Stunde die gleiche Nachricht von DWD und UWZ.
                          Was machen die Pappköppe da :thinking_face:

                          Gruß Ralf
                          Mir egal, wer Dein Vater ist! Wenn ich hier angel, wird nicht übers Wasser gelaufen!!

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

                          T 1 Antwort Letzte Antwort
                          0
                          • NashraN Nashra

                            Da sind wir wieder. Jetzt wieder alle halbe Stunde die gleiche Nachricht von DWD und UWZ.
                            Was machen die Pappköppe da :thinking_face:

                            T Offline
                            T Offline
                            ticaki
                            schrieb am zuletzt editiert von
                            #689

                            @nashra
                            Ich benötige das log von 2 Wiederholungen mit DEBUG true

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            1 Antwort Letzte Antwort
                            0
                            • T Offline
                              T Offline
                              ticaki
                              schrieb am zuletzt editiert von ticaki
                              #690

                              Mein DWD Adapter steht auf 10 Minuten und ich habe keine Wiederholungen. Aktuell fällt mir halt nur ein das du tatsächlich 2 mal die exakt gleiche Warnung drin stehen hast. Ich denke dann kommt das Skript durcheinander. Ich hab meinen DWD Datenbaum mal komplett gelöscht (wird beim nächsten Lauf wiedererstellt)und danach hatte ich einige Probleme weniger. Mußt aber natürlich das Skript neustarten wenn der Baum erstellt ist.

                              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                              Spenden

                              M 1 Antwort Letzte Antwort
                              0
                              • T ticaki

                                Mein DWD Adapter steht auf 10 Minuten und ich habe keine Wiederholungen. Aktuell fällt mir halt nur ein das du tatsächlich 2 mal die exakt gleiche Warnung drin stehen hast. Ich denke dann kommt das Skript durcheinander. Ich hab meinen DWD Datenbaum mal komplett gelöscht (wird beim nächsten Lauf wiedererstellt)und danach hatte ich einige Probleme weniger. Mußt aber natürlich das Skript neustarten wenn der Baum erstellt ist.

                                M Offline
                                M Offline
                                Megawaldi
                                schrieb am zuletzt editiert von
                                #691

                                @ticaki
                                Ich bin vom dwd Adapter weg, da mich der Restart im log gestört hat und mir das zu unübersichtlich wurde.
                                Daher habe ich mir ein Script geschrieben, das das selbe aber die Datenstruktur vom dwd Adapter nachahmt macht.
                                Auch das uwz script habe ich heute mal neu geschrieben.
                                Wenn dich das interessiert, kann ich die zwei scripte gerne zur Verfügung stellen.

                                T 1 Antwort Letzte Antwort
                                0
                                • M Megawaldi

                                  @ticaki
                                  Ich bin vom dwd Adapter weg, da mich der Restart im log gestört hat und mir das zu unübersichtlich wurde.
                                  Daher habe ich mir ein Script geschrieben, das das selbe aber die Datenstruktur vom dwd Adapter nachahmt macht.
                                  Auch das uwz script habe ich heute mal neu geschrieben.
                                  Wenn dich das interessiert, kann ich die zwei scripte gerne zur Verfügung stellen.

                                  T Offline
                                  T Offline
                                  ticaki
                                  schrieb am zuletzt editiert von ticaki
                                  #692

                                  @megawaldi
                                  Poste sie und wenn du Github benutzt gib mir den Link und ich setzte sie ins erste Posting. Hoffe du benutzt Interval und nicht schedule :)

                                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                  Spenden

                                  M 1 Antwort Letzte Antwort
                                  0
                                  • T ticaki

                                    @megawaldi
                                    Poste sie und wenn du Github benutzt gib mir den Link und ich setzte sie ins erste Posting. Hoffe du benutzt Interval und nicht schedule :)

                                    M Offline
                                    M Offline
                                    Megawaldi
                                    schrieb am zuletzt editiert von
                                    #693

                                    @ticaki
                                    Ich hab mich eigendlich für schedule entschieden 😉. Gibt es aus deiner sicht nen Grund warum interval bessser ist?

                                    T 1 Antwort Letzte Antwort
                                    0
                                    • M Megawaldi

                                      @ticaki
                                      Ich hab mich eigendlich für schedule entschieden 😉. Gibt es aus deiner sicht nen Grund warum interval bessser ist?

                                      T Offline
                                      T Offline
                                      ticaki
                                      schrieb am zuletzt editiert von ticaki
                                      #694

                                      @megawaldi
                                      Wenn alle Leute die bei DWD Daten abrufen schedule verwenden, freut sich der Server sicherlich zu jeder vollen Stunde ganz doll über das hohe Interesse. :) Intervall richtet sich nach dem Startzeitpunkt des Skriptes und damit werden die Zugriffe mehr verteilt und es gibt nicht diese Peaks wie mit schedule.

                                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                      Spenden

                                      M 1 Antwort Letzte Antwort
                                      0
                                      • T ticaki

                                        @megawaldi
                                        Wenn alle Leute die bei DWD Daten abrufen schedule verwenden, freut sich der Server sicherlich zu jeder vollen Stunde ganz doll über das hohe Interesse. :) Intervall richtet sich nach dem Startzeitpunkt des Skriptes und damit werden die Zugriffe mehr verteilt und es gibt nicht diese Peaks wie mit schedule.

                                        M Offline
                                        M Offline
                                        Megawaldi
                                        schrieb am zuletzt editiert von
                                        #695

                                        @ticaki
                                        Hier mal zum testen: Habs auf Intervall geändert 😉

                                        const axios = require('axios'); 
                                        
                                        var debuglevel = 1;
                                        var debugchannel = 'info';
                                        
                                        var channelId = "0_userdata.0.UWZ";
                                        
                                        var intervalMinutes = 5; 
                                        var forceInitStates = false;
                                        var numOfWarnings = 5;
                                        
                                        var url='http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=de&areaID=XXXAREAXXX';
                                        
                                        
                                        /********************* Hier die Warnzellen-Id's eintragen *****************************/
                                        var warncellid = ['UWZDE53879'];
                                        /**************************************************************************************/
                                        
                                        createStates(numOfWarnings);
                                        
                                        setInterval(work,intervalMinutes * 60 * 1000);
                                        work();
                                        
                                        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: 'object'});
                                                 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:10, type: 'number'});
                                                 createState(areaChannelId+".warning."+i+".type",0,forceInitStates,{min:0, max:11, type: 'number',states:{0:"n/a",1:"unbekannt",2:"Sturm/Orkan",3:"Schneefall",4:"Starkregen",5:"Extremfrost",6:"Waldbrandgefahr",7:"Gewitter",8:"Glätte",9:"Hitze",10:"Glatteisregen",11:"Bodenfrost"}});
                                                 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){
                                           if(warnName != undefined){
                                               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;
                                           } else {
                                               return 0;
                                           }
                                        }
                                        
                                        function getUWZUrgency (warnName){
                                           if(warnName != undefined){
                                               var result = 0;
                                               
                                               var alert = warnName.split("_");
                                               if (alert[1] == "forewarn") {
                                                   result = 1;
                                               }
                                               else {
                                                   result = 2; // immediate;
                                               }
                                               return result;
                                           } else {
                                               return 0;
                                           }
                                        }
                                        
                                        function getLevelColor(uwzLevel,levelName) {
                                           if(levelName != undefined){
                                               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;
                                               }
                                           } else {
                                               return 0;
                                           }
                                        }
                                        
                                        function createHTMLShort(theData,uwzColor,uwzUrgency,shortText){
                                           if(theData.type != undefined){
                                               var html = '<div style="background: #'+uwzColor.toString(16)+'" border:"10px">';
                                               html += '<h3>';
                                               if (uwzUrgency==1) html+="Vorwarnung vor "; else html+="Warnung vor ";
                                               html += UWZTypesArray[theData.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>'+shortText+'</p>';
                                               html += "</div>";
                                               return html;
                                           } else {
                                               return '';
                                           }
                                        }
                                        
                                        function createHTMLLong(theData,uwzColor,uwzUrgency,longText){
                                           if(theData.type != undefined){
                                               var html = '<div style="background: #'+uwzColor.toString(16)+'" border:"10px">';
                                               html += '<h3>';
                                               if (uwzUrgency==1) html+="Vorwarnung vor "; else html+="Warnung vor ";
                                               html += UWZTypesArray[theData.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>'+longText+'</p>';
                                               html += "</div>";
                                               return html;
                                           } else {
                                               return '';
                                           }
                                        }
                                        
                                        async function writeResultEntry(_warnObj,_i,_area) {
                                           let areaChannelId=channelId+"."+_area+".warning."+_i;
                                           
                                           var warnObjSting = JSON.stringify(_warnObj)|| '{}';
                                           var warnObj = JSON.parse(warnObjSting);
                                           
                                           var object = _warnObj != undefined ? _warnObj : Object({});
                                           var begin = _warnObj != undefined ? formatDate(new Date(warnObj.dtgStart*1000),"DD.MM.YYYY hh:mm") : "";
                                           var end = _warnObj != undefined ? formatDate(new Date(warnObj.dtgEnd*1000),"DD.MM.YYYY hh:mm") : "";
                                           var longText = _warnObj != undefined ? warnObj.payload.translationsLongText.DE : "";
                                           var shortText = _warnObj != undefined ? warnObj.payload.translationsShortText.DE : ""; 
                                           var severity = warnObj.severity || 0;
                                           var type = warnObj.type || 0;
                                           var uwzLevel = _warnObj != undefined ? getUWZLevel(warnObj.payload.levelName) : getUWZLevel(undefined);
                                           var uwzUrgency = _warnObj != undefined ? getUWZUrgency(warnObj.payload.levelName) : getUWZUrgency(undefined);
                                           var uwzColor = _warnObj != undefined ? getLevelColor(uwzLevel,warnObj.payload.levelName):  getLevelColor(uwzLevel,undefined) ;
                                           var htmlShort = createHTMLShort(warnObj,uwzColor,uwzUrgency,shortText);
                                           var htmlLong  = createHTMLLong(warnObj,uwzColor,uwzUrgency,longText);
                                        
                                           var oldObject = (await getStateAsync(areaChannelId+".object")).val;
                                        
                                           if(JSON.stringify(object) != JSON.stringify(oldObject)){
                                               setState(areaChannelId+".LongText",longText);
                                               setState(areaChannelId+".ShortText",shortText);
                                               setState(areaChannelId+".object",object);
                                               setState(areaChannelId+".begin",begin)
                                               setState(areaChannelId+".end",end);
                                               setState(areaChannelId+".severity",severity);
                                               setState(areaChannelId+".type",type);
                                               setState(areaChannelId+".uwzLevel",uwzLevel);
                                               setState(areaChannelId+".uwzColor",uwzColor);
                                               setState(areaChannelId+".HTMLShort",htmlShort);
                                               setState(areaChannelId+".HTMLLong",htmlLong);
                                           } else {
                                               dwmlog('Datensatz '+_i+' ist schon vorhanden',4);
                                           }
                                           
                                        }
                                        
                                        function processData(area, thedata) {
                                           if (!thedata) {
                                               return;
                                           }
                                        
                                           var jsonResults= [];
                                           if (thedata.results.length>0) {
                                               for (let i=0; i<thedata.results.length; i++) {
                                                   jsonResults.push(thedata.results[i]);
                                               }
                                           }
                                        
                                           jsonResults.sort(function(a,b){
                                               var asort = a.severity;
                                               var bsort = b.severity;
                                               return bsort-asort;
                                           });
                                        
                                           dwmlog(JSON.stringify(jsonResults),2);
                                           for (let i=0; i<numOfWarnings; i++) {
                                               if (i<jsonResults.length) {
                                                   //console.log(i+' -> mit Result'); 
                                                   writeResultEntry(jsonResults[i],i,area);
                                               } else {
                                                   //console.log(i+' -> ohne Result'); 
                                                   writeResultEntry(undefined,i,area);
                                               }
                                           }
                                        }
                                        
                                        function getAreaFromURI(uri) {
                                         var searchstr = "&areaID=";
                                         var n = uri.search(searchstr);
                                         var result = uri.slice(n+searchstr.length,uri.length);
                                         return result;
                                        }
                                        
                                        async function work() {
                                           for (var i=0; i<warncellid.length; i++) {
                                               await axios.get(url.replace("XXXAREAXXX",warncellid[i]))
                                               .then(results => {
                                                   dwmlog("AREA: "+warncellid[i],4);
                                                   dwmlog("UWZ Body: " + JSON.stringify(results.data),4);
                                                   dwmlog("Status: " + results.status,4);
                                                   if (results.status == 200) {
                                                       processData(getAreaFromURI(results.config.url),results.data);
                                                   } else {
                                                       dwmlog('Keine Daten empfangen',1);
                                                   }
                                               })
                                               .catch(error => {
                                                   if (error.response.status == 404){
                                                       dwmlog(error.message, 1);
                                                   } else {
                                                       dwmlog(error.response.data, 1);
                                                       dwmlog(error.response.status, 1);
                                                       dwmlog(error.response.headers, 1);
                                                   }
                                               })            
                                           }
                                        }
                                        
                                        function dwmlog( message, level, channel) {
                                         if (channel === undefined) {
                                             channel = debugchannel;
                                         }
                                         if (level === undefined)
                                         {
                                             level = debuglevel;
                                         }
                                         if ( debuglevel >= level ) {
                                             log (message, channel );
                                         }
                                        }
                                        

                                        const axios = require('axios');
                                        
                                        var debuglevel = 1;
                                        var debugchannel = 'info';
                                        
                                        var channelId = '0_userdata.0.DWD.'+instance+'.warning';
                                        
                                        var intervalMinutes = 5;
                                        var forceInitStates = false;
                                        var numOfWarnings = 5;
                                        
                                        var url='https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json';
                                        
                                        /********************* Hier die Warnzellen-Id's eintragen *****************************/
                                        const warncellid = ['105366000'];
                                        const land = 'nrw';
                                        /**************************************************************************************/
                                        
                                        createStates(numOfWarnings);
                                        
                                        setInterval(work,intervalMinutes * 60 * 1000);
                                        work();
                                        
                                        
                                        
                                        function createStates(anz){
                                           for (let i=0; i<anz; i++) {
                                                   if(i==0){
                                                       var baseChannelId = channelId;
                                                   } else {
                                                       var baseChannelId = channelId+i;
                                                   } 
                                                   createState(baseChannelId+".begin","",forceInitStates,{name: "Warning begin",type: "number",role: "value.time",read: true,write: true});
                                                   createState(baseChannelId+".description","",forceInitStates,{name: "Warning description",type: "string",role: "weather.state",read: true,write: true});
                                                   createState(baseChannelId+".end","",forceInitStates,{name: "Warning end",type: "number",role: "value.time",read: true,write: true});
                                                   createState(baseChannelId+".headline","",forceInitStates,{name: "Warning description",type: "string",role: "weather.state",read: true,write: true});
                                                   createState(baseChannelId+".level",0,forceInitStates,{name: "Warning level",type: "number",role: "value.warning",read: true,write: true,states: {1: "Preliminary info",2: "Minor",3: "Moderate",4: "Severe",5: "Extreme"}});
                                                   createState(baseChannelId+".map","",forceInitStates,{name: "Link to chart",type: "string",role: "weather.chart.url",read: true,write: true});
                                                   createState(baseChannelId+".object","",forceInitStates,{name: "JSON object with warning",type: "object",role: "weather.json",read: true,write: true});
                                                   createState(baseChannelId+".severity",0,forceInitStates,{name: "Warning severity",type: "number",role: "value.severity",read: true,write: true,states: {0: "None",1: "Minor",2: "Moderate",3: "Severe",4: "Extreme",9: "Heat Warning",11: "No Warning",19: "UV Warning",49: "Strong Heat",50: "Extreme Heat"}});
                                                   createState(baseChannelId+".text","",forceInitStates,{name: "Warning text",type: "string",role: "weather.title.short",read: true,write: true});
                                                   createState(baseChannelId+".type",0,forceInitStates,{name: "Warning type",type: "number",role: "weather.type",read: true,write: true,states: {0: "Thunderstorm",1: "Wind/Storm",2: "Rain",3: "Snow",4: "Fog",5: "Frost",6: "Ice",7: "Thawing",8: "Heat",9: "UV warning"}});  
                                           }
                                         
                                        }
                                        
                                        async function writeResultEntry(_warnObj,_i) {
                                           
                                           if(_i==0){
                                               var baseChannelId = channelId;
                                           } else {
                                               var baseChannelId = channelId+_i;
                                           }
                                            
                                           const maps = ['gewitter', 'sturm', 'regen', 'schnee', 'nebel', 'frost', 'glatteis', 'tauwetter', 'hitze', 'uv'];
                                           var warnObj = _warnObj || '{}';
                                           
                                           warnObj = JSON.parse(warnObj);
                                           var begin=warnObj.start || Number("");
                                           var description=warnObj.description || '';
                                           var end=warnObj.end || Number("");
                                           var headline=warnObj.headline || '';
                                           var level = warnObj.level === undefined || warnObj.level === null ? null : parseInt(warnObj.level, 10);
                                           var object = warnObj;
                                           var severity = warnObj.level > 1 ? warnObj.level - 1 : 0;
                                           var text=warnObj.event || '';
                                           var type = warnObj.type  === undefined || warnObj.type  === null ? null : parseInt(warnObj.type, 10);
                                           if (warnObj.type !== undefined && warnObj.type !== null) {
                                               var map = 'https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/json/warnungen_gemeinde_map_'+land+'_'+maps[warnObj.type]+'.png';
                                           } else {
                                               var map ='';
                                           }
                                           
                                           var oldObject = (await getStateAsync(baseChannelId+".object")).val;
                                        
                                           if(JSON.stringify(object) != JSON.stringify(oldObject)){
                                               setState(baseChannelId+".begin",begin);
                                               setState(baseChannelId+".description",description);
                                               setState(baseChannelId+".end",end);
                                               setState(baseChannelId+".headline",headline);
                                               setState(baseChannelId+".level",Number(level));
                                               setState(baseChannelId+".map",map);
                                               setState(baseChannelId+".object",object);
                                               setState(baseChannelId+".severity",severity);
                                               setState(baseChannelId+".text",text);
                                               setState(baseChannelId+".type",Number(type));
                                           } else {
                                               dwmlog('Datensatz '+_i+' ist schon vorhanden',4);
                                           }
                                        }
                                        
                                        function processData(area, thedata) {
                                           if (!thedata) {
                                               return;
                                           }
                                           var jsonString = String(thedata);
                                           var newString = jsonString.replace('warnWetter.loadWarnings(','');
                                           newString = newString.replace(');','');
                                           var newJSON = JSON.parse(newString);
                                           
                                           var jsonResults = [];
                                           if (newJSON.warnings.hasOwnProperty(area)) {
                                               var anz = newJSON.warnings[area].length;
                                               for(var i=0;i<anz;i++){
                                                   jsonResults.push(JSON.stringify(newJSON.warnings[area][i]));
                                               }
                                           } 
                                        
                                           dwmlog(JSON.stringify(jsonResults),2);
                                           for (let i=0; i<numOfWarnings; i++) {
                                               if (i<jsonResults.length) {
                                                   //console.log(i+' -> mit Result'); 
                                                   writeResultEntry(jsonResults[i],i);
                                               } else {
                                                   //console.log(i+' -> ohne Result'); 
                                                   writeResultEntry(undefined,i);
                                               }
                                           }
                                           
                                        }
                                          
                                        async function work() {
                                           for (var i=0; i<warncellid.length; i++) {
                                               await axios.get(url)
                                               .then(results => {
                                                   dwmlog("AREA: "+warncellid[i],4);
                                                   dwmlog("UWZ Body: " + JSON.stringify(results.data),4);
                                                   dwmlog("Status: " + results.status,4);
                                                   if (results.status == 200) {
                                                       processData(+warncellid[i],results.data);
                                                   } else {
                                                       dwmlog('Keine Daten empfangen',1);
                                                   }
                                               })
                                               .catch(error => {
                                                   if (error.response.status == 404){
                                                       dwmlog(error.message, 1);
                                                   } else {
                                                       dwmlog(error.response.data, 1);
                                                       dwmlog(error.response.status, 1);
                                                       dwmlog(error.response.headers, 1);
                                                   }
                                               })            
                                           }
                                        }
                                        
                                        function dwmlog( message, level, channel) {
                                           if (channel === undefined) {
                                               channel = debugchannel;
                                           }
                                           if (level === undefined) {
                                               level = debuglevel;
                                           }
                                           if ( debuglevel >= level ) {
                                               log (message, channel );
                                           }
                                        }
                                        

                                        T 1 Antwort Letzte Antwort
                                        0
                                        • M Megawaldi

                                          @ticaki
                                          Hier mal zum testen: Habs auf Intervall geändert 😉

                                          const axios = require('axios'); 
                                          
                                          var debuglevel = 1;
                                          var debugchannel = 'info';
                                          
                                          var channelId = "0_userdata.0.UWZ";
                                          
                                          var intervalMinutes = 5; 
                                          var forceInitStates = false;
                                          var numOfWarnings = 5;
                                          
                                          var url='http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=de&areaID=XXXAREAXXX';
                                          
                                          
                                          /********************* Hier die Warnzellen-Id's eintragen *****************************/
                                          var warncellid = ['UWZDE53879'];
                                          /**************************************************************************************/
                                          
                                          createStates(numOfWarnings);
                                          
                                          setInterval(work,intervalMinutes * 60 * 1000);
                                          work();
                                          
                                          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: 'object'});
                                                   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:10, type: 'number'});
                                                   createState(areaChannelId+".warning."+i+".type",0,forceInitStates,{min:0, max:11, type: 'number',states:{0:"n/a",1:"unbekannt",2:"Sturm/Orkan",3:"Schneefall",4:"Starkregen",5:"Extremfrost",6:"Waldbrandgefahr",7:"Gewitter",8:"Glätte",9:"Hitze",10:"Glatteisregen",11:"Bodenfrost"}});
                                                   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){
                                             if(warnName != undefined){
                                                 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;
                                             } else {
                                                 return 0;
                                             }
                                          }
                                          
                                          function getUWZUrgency (warnName){
                                             if(warnName != undefined){
                                                 var result = 0;
                                                 
                                                 var alert = warnName.split("_");
                                                 if (alert[1] == "forewarn") {
                                                     result = 1;
                                                 }
                                                 else {
                                                     result = 2; // immediate;
                                                 }
                                                 return result;
                                             } else {
                                                 return 0;
                                             }
                                          }
                                          
                                          function getLevelColor(uwzLevel,levelName) {
                                             if(levelName != undefined){
                                                 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;
                                                 }
                                             } else {
                                                 return 0;
                                             }
                                          }
                                          
                                          function createHTMLShort(theData,uwzColor,uwzUrgency,shortText){
                                             if(theData.type != undefined){
                                                 var html = '<div style="background: #'+uwzColor.toString(16)+'" border:"10px">';
                                                 html += '<h3>';
                                                 if (uwzUrgency==1) html+="Vorwarnung vor "; else html+="Warnung vor ";
                                                 html += UWZTypesArray[theData.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>'+shortText+'</p>';
                                                 html += "</div>";
                                                 return html;
                                             } else {
                                                 return '';
                                             }
                                          }
                                          
                                          function createHTMLLong(theData,uwzColor,uwzUrgency,longText){
                                             if(theData.type != undefined){
                                                 var html = '<div style="background: #'+uwzColor.toString(16)+'" border:"10px">';
                                                 html += '<h3>';
                                                 if (uwzUrgency==1) html+="Vorwarnung vor "; else html+="Warnung vor ";
                                                 html += UWZTypesArray[theData.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>'+longText+'</p>';
                                                 html += "</div>";
                                                 return html;
                                             } else {
                                                 return '';
                                             }
                                          }
                                          
                                          async function writeResultEntry(_warnObj,_i,_area) {
                                             let areaChannelId=channelId+"."+_area+".warning."+_i;
                                             
                                             var warnObjSting = JSON.stringify(_warnObj)|| '{}';
                                             var warnObj = JSON.parse(warnObjSting);
                                             
                                             var object = _warnObj != undefined ? _warnObj : Object({});
                                             var begin = _warnObj != undefined ? formatDate(new Date(warnObj.dtgStart*1000),"DD.MM.YYYY hh:mm") : "";
                                             var end = _warnObj != undefined ? formatDate(new Date(warnObj.dtgEnd*1000),"DD.MM.YYYY hh:mm") : "";
                                             var longText = _warnObj != undefined ? warnObj.payload.translationsLongText.DE : "";
                                             var shortText = _warnObj != undefined ? warnObj.payload.translationsShortText.DE : ""; 
                                             var severity = warnObj.severity || 0;
                                             var type = warnObj.type || 0;
                                             var uwzLevel = _warnObj != undefined ? getUWZLevel(warnObj.payload.levelName) : getUWZLevel(undefined);
                                             var uwzUrgency = _warnObj != undefined ? getUWZUrgency(warnObj.payload.levelName) : getUWZUrgency(undefined);
                                             var uwzColor = _warnObj != undefined ? getLevelColor(uwzLevel,warnObj.payload.levelName):  getLevelColor(uwzLevel,undefined) ;
                                             var htmlShort = createHTMLShort(warnObj,uwzColor,uwzUrgency,shortText);
                                             var htmlLong  = createHTMLLong(warnObj,uwzColor,uwzUrgency,longText);
                                          
                                             var oldObject = (await getStateAsync(areaChannelId+".object")).val;
                                          
                                             if(JSON.stringify(object) != JSON.stringify(oldObject)){
                                                 setState(areaChannelId+".LongText",longText);
                                                 setState(areaChannelId+".ShortText",shortText);
                                                 setState(areaChannelId+".object",object);
                                                 setState(areaChannelId+".begin",begin)
                                                 setState(areaChannelId+".end",end);
                                                 setState(areaChannelId+".severity",severity);
                                                 setState(areaChannelId+".type",type);
                                                 setState(areaChannelId+".uwzLevel",uwzLevel);
                                                 setState(areaChannelId+".uwzColor",uwzColor);
                                                 setState(areaChannelId+".HTMLShort",htmlShort);
                                                 setState(areaChannelId+".HTMLLong",htmlLong);
                                             } else {
                                                 dwmlog('Datensatz '+_i+' ist schon vorhanden',4);
                                             }
                                             
                                          }
                                          
                                          function processData(area, thedata) {
                                             if (!thedata) {
                                                 return;
                                             }
                                          
                                             var jsonResults= [];
                                             if (thedata.results.length>0) {
                                                 for (let i=0; i<thedata.results.length; i++) {
                                                     jsonResults.push(thedata.results[i]);
                                                 }
                                             }
                                          
                                             jsonResults.sort(function(a,b){
                                                 var asort = a.severity;
                                                 var bsort = b.severity;
                                                 return bsort-asort;
                                             });
                                          
                                             dwmlog(JSON.stringify(jsonResults),2);
                                             for (let i=0; i<numOfWarnings; i++) {
                                                 if (i<jsonResults.length) {
                                                     //console.log(i+' -> mit Result'); 
                                                     writeResultEntry(jsonResults[i],i,area);
                                                 } else {
                                                     //console.log(i+' -> ohne Result'); 
                                                     writeResultEntry(undefined,i,area);
                                                 }
                                             }
                                          }
                                          
                                          function getAreaFromURI(uri) {
                                           var searchstr = "&areaID=";
                                           var n = uri.search(searchstr);
                                           var result = uri.slice(n+searchstr.length,uri.length);
                                           return result;
                                          }
                                          
                                          async function work() {
                                             for (var i=0; i<warncellid.length; i++) {
                                                 await axios.get(url.replace("XXXAREAXXX",warncellid[i]))
                                                 .then(results => {
                                                     dwmlog("AREA: "+warncellid[i],4);
                                                     dwmlog("UWZ Body: " + JSON.stringify(results.data),4);
                                                     dwmlog("Status: " + results.status,4);
                                                     if (results.status == 200) {
                                                         processData(getAreaFromURI(results.config.url),results.data);
                                                     } else {
                                                         dwmlog('Keine Daten empfangen',1);
                                                     }
                                                 })
                                                 .catch(error => {
                                                     if (error.response.status == 404){
                                                         dwmlog(error.message, 1);
                                                     } else {
                                                         dwmlog(error.response.data, 1);
                                                         dwmlog(error.response.status, 1);
                                                         dwmlog(error.response.headers, 1);
                                                     }
                                                 })            
                                             }
                                          }
                                          
                                          function dwmlog( message, level, channel) {
                                           if (channel === undefined) {
                                               channel = debugchannel;
                                           }
                                           if (level === undefined)
                                           {
                                               level = debuglevel;
                                           }
                                           if ( debuglevel >= level ) {
                                               log (message, channel );
                                           }
                                          }
                                          

                                          const axios = require('axios');
                                          
                                          var debuglevel = 1;
                                          var debugchannel = 'info';
                                          
                                          var channelId = '0_userdata.0.DWD.'+instance+'.warning';
                                          
                                          var intervalMinutes = 5;
                                          var forceInitStates = false;
                                          var numOfWarnings = 5;
                                          
                                          var url='https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json';
                                          
                                          /********************* Hier die Warnzellen-Id's eintragen *****************************/
                                          const warncellid = ['105366000'];
                                          const land = 'nrw';
                                          /**************************************************************************************/
                                          
                                          createStates(numOfWarnings);
                                          
                                          setInterval(work,intervalMinutes * 60 * 1000);
                                          work();
                                          
                                          
                                          
                                          function createStates(anz){
                                             for (let i=0; i<anz; i++) {
                                                     if(i==0){
                                                         var baseChannelId = channelId;
                                                     } else {
                                                         var baseChannelId = channelId+i;
                                                     } 
                                                     createState(baseChannelId+".begin","",forceInitStates,{name: "Warning begin",type: "number",role: "value.time",read: true,write: true});
                                                     createState(baseChannelId+".description","",forceInitStates,{name: "Warning description",type: "string",role: "weather.state",read: true,write: true});
                                                     createState(baseChannelId+".end","",forceInitStates,{name: "Warning end",type: "number",role: "value.time",read: true,write: true});
                                                     createState(baseChannelId+".headline","",forceInitStates,{name: "Warning description",type: "string",role: "weather.state",read: true,write: true});
                                                     createState(baseChannelId+".level",0,forceInitStates,{name: "Warning level",type: "number",role: "value.warning",read: true,write: true,states: {1: "Preliminary info",2: "Minor",3: "Moderate",4: "Severe",5: "Extreme"}});
                                                     createState(baseChannelId+".map","",forceInitStates,{name: "Link to chart",type: "string",role: "weather.chart.url",read: true,write: true});
                                                     createState(baseChannelId+".object","",forceInitStates,{name: "JSON object with warning",type: "object",role: "weather.json",read: true,write: true});
                                                     createState(baseChannelId+".severity",0,forceInitStates,{name: "Warning severity",type: "number",role: "value.severity",read: true,write: true,states: {0: "None",1: "Minor",2: "Moderate",3: "Severe",4: "Extreme",9: "Heat Warning",11: "No Warning",19: "UV Warning",49: "Strong Heat",50: "Extreme Heat"}});
                                                     createState(baseChannelId+".text","",forceInitStates,{name: "Warning text",type: "string",role: "weather.title.short",read: true,write: true});
                                                     createState(baseChannelId+".type",0,forceInitStates,{name: "Warning type",type: "number",role: "weather.type",read: true,write: true,states: {0: "Thunderstorm",1: "Wind/Storm",2: "Rain",3: "Snow",4: "Fog",5: "Frost",6: "Ice",7: "Thawing",8: "Heat",9: "UV warning"}});  
                                             }
                                           
                                          }
                                          
                                          async function writeResultEntry(_warnObj,_i) {
                                             
                                             if(_i==0){
                                                 var baseChannelId = channelId;
                                             } else {
                                                 var baseChannelId = channelId+_i;
                                             }
                                              
                                             const maps = ['gewitter', 'sturm', 'regen', 'schnee', 'nebel', 'frost', 'glatteis', 'tauwetter', 'hitze', 'uv'];
                                             var warnObj = _warnObj || '{}';
                                             
                                             warnObj = JSON.parse(warnObj);
                                             var begin=warnObj.start || Number("");
                                             var description=warnObj.description || '';
                                             var end=warnObj.end || Number("");
                                             var headline=warnObj.headline || '';
                                             var level = warnObj.level === undefined || warnObj.level === null ? null : parseInt(warnObj.level, 10);
                                             var object = warnObj;
                                             var severity = warnObj.level > 1 ? warnObj.level - 1 : 0;
                                             var text=warnObj.event || '';
                                             var type = warnObj.type  === undefined || warnObj.type  === null ? null : parseInt(warnObj.type, 10);
                                             if (warnObj.type !== undefined && warnObj.type !== null) {
                                                 var map = 'https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/json/warnungen_gemeinde_map_'+land+'_'+maps[warnObj.type]+'.png';
                                             } else {
                                                 var map ='';
                                             }
                                             
                                             var oldObject = (await getStateAsync(baseChannelId+".object")).val;
                                          
                                             if(JSON.stringify(object) != JSON.stringify(oldObject)){
                                                 setState(baseChannelId+".begin",begin);
                                                 setState(baseChannelId+".description",description);
                                                 setState(baseChannelId+".end",end);
                                                 setState(baseChannelId+".headline",headline);
                                                 setState(baseChannelId+".level",Number(level));
                                                 setState(baseChannelId+".map",map);
                                                 setState(baseChannelId+".object",object);
                                                 setState(baseChannelId+".severity",severity);
                                                 setState(baseChannelId+".text",text);
                                                 setState(baseChannelId+".type",Number(type));
                                             } else {
                                                 dwmlog('Datensatz '+_i+' ist schon vorhanden',4);
                                             }
                                          }
                                          
                                          function processData(area, thedata) {
                                             if (!thedata) {
                                                 return;
                                             }
                                             var jsonString = String(thedata);
                                             var newString = jsonString.replace('warnWetter.loadWarnings(','');
                                             newString = newString.replace(');','');
                                             var newJSON = JSON.parse(newString);
                                             
                                             var jsonResults = [];
                                             if (newJSON.warnings.hasOwnProperty(area)) {
                                                 var anz = newJSON.warnings[area].length;
                                                 for(var i=0;i<anz;i++){
                                                     jsonResults.push(JSON.stringify(newJSON.warnings[area][i]));
                                                 }
                                             } 
                                          
                                             dwmlog(JSON.stringify(jsonResults),2);
                                             for (let i=0; i<numOfWarnings; i++) {
                                                 if (i<jsonResults.length) {
                                                     //console.log(i+' -> mit Result'); 
                                                     writeResultEntry(jsonResults[i],i);
                                                 } else {
                                                     //console.log(i+' -> ohne Result'); 
                                                     writeResultEntry(undefined,i);
                                                 }
                                             }
                                             
                                          }
                                            
                                          async function work() {
                                             for (var i=0; i<warncellid.length; i++) {
                                                 await axios.get(url)
                                                 .then(results => {
                                                     dwmlog("AREA: "+warncellid[i],4);
                                                     dwmlog("UWZ Body: " + JSON.stringify(results.data),4);
                                                     dwmlog("Status: " + results.status,4);
                                                     if (results.status == 200) {
                                                         processData(+warncellid[i],results.data);
                                                     } else {
                                                         dwmlog('Keine Daten empfangen',1);
                                                     }
                                                 })
                                                 .catch(error => {
                                                     if (error.response.status == 404){
                                                         dwmlog(error.message, 1);
                                                     } else {
                                                         dwmlog(error.response.data, 1);
                                                         dwmlog(error.response.status, 1);
                                                         dwmlog(error.response.headers, 1);
                                                     }
                                                 })            
                                             }
                                          }
                                          
                                          function dwmlog( message, level, channel) {
                                             if (channel === undefined) {
                                                 channel = debugchannel;
                                             }
                                             if (level === undefined) {
                                                 level = debuglevel;
                                             }
                                             if ( debuglevel >= level ) {
                                                 log (message, channel );
                                             }
                                          }
                                          

                                          T Offline
                                          T Offline
                                          ticaki
                                          schrieb am zuletzt editiert von
                                          #696

                                          @megawaldi
                                          Das DWD Script schaue ich mir an, aber das UWZ ist im Grunde das selbe wie meines.

                                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                          Spenden

                                          M 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

                                          718

                                          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