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

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

Community Forum

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

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

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

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

    Hallo,

    ich hab das UWZ Skript auf Axios umgestellt, wäre nett wenn jemand testet, ob es Probleme gibt.

    // Version 1.04
    // 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.
    
    var intervalMinutes = 5;
    var debuglevel = 4;
    var debugchannel = 'info';
    
    const axios = require('axios');
    
    function dwmlog( message, level, channel) {
      if (typeof channel === 'undefined') {
          channel = debugchannel;
      }
      if ( typeof 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);
           }
       }
    }
    
    

    Danke

    Thomas BraunT Online
    Thomas BraunT Online
    Thomas Braun
    Most Active
    wrote on last edited by
    #607

    Ist es eigentlich normal, dass alle 5 Minuten die deutschlandweite Corona-Hinweismeldung im log erscheint? Einmal würde mir reichen.
    Oder hab ich da irgendwas übersehen?

    Linux-Werkzeugkasten:
    https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
    NodeJS Fixer Skript:
    https://forum.iobroker.net/topic/68035/iob-node-fix-skript
    iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

    T 1 Reply Last reply
    0
    • Thomas BraunT Thomas Braun

      Ist es eigentlich normal, dass alle 5 Minuten die deutschlandweite Corona-Hinweismeldung im log erscheint? Einmal würde mir reichen.
      Oder hab ich da irgendwas übersehen?

      T Do not disturb
      T Do not disturb
      ticaki
      wrote on last edited by ticaki
      #608

      @thomas-braun
      Ja es ist normal. Wenn du

      var uLogAusgabe=        false;
      

      auf false setzt werden die Logausgaben auf nahe 0 reduziert. Für die Ersteinrichtung möchte ich das aber nicht als default setzten.

      Etwas mehr Infos dazu: Nina erzeugt jedesmal "neue" States, wenn es aktualisiert wird. Wenn dein Adapter auf 5 Minuten steht, wird alle 5 Minuten eine neue Warnung gefunden und dazu gibt es dann Logausgaben (über das verändern der alten Warnung oder das hinzufügen einer neuen..)

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      1 Reply Last reply
      0
      • T ticaki

        Hallo,

        ich hab das UWZ Skript auf Axios umgestellt, wäre nett wenn jemand testet, ob es Probleme gibt.

        // Version 1.04
        // 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.
        
        var intervalMinutes = 5;
        var debuglevel = 4;
        var debugchannel = 'info';
        
        const axios = require('axios');
        
        function dwmlog( message, level, channel) {
          if (typeof channel === 'undefined') {
              channel = debugchannel;
          }
          if ( typeof 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);
               }
           }
        }
        
        

        Danke

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

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

        ich hab das UWZ Skript auf Axios umgestellt, wäre nett wenn jemand testet, ob es Probleme gibt.

        Danke, läuft soweit. Warte auf eine Warnung.

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

        T 1 Reply Last reply
        0
        • sigi234S sigi234

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

          ich hab das UWZ Skript auf Axios umgestellt, wäre nett wenn jemand testet, ob es Probleme gibt.

          Danke, läuft soweit. Warte auf eine Warnung.

          T Do not disturb
          T Do not disturb
          ticaki
          wrote on last edited by ticaki
          #610

          @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

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          1 Reply Last reply
          0
          • NashraN Offline
            NashraN Offline
            Nashra
            Most Active Forum Testing
            wrote on last edited by Nashra
            #611

            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
            

            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 Reply Last reply
            0
            • NashraN 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 Do not disturb
              T Do not disturb
              ticaki
              wrote on last edited by
              #612

              @nashra
              Welche Version?

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              NashraN 1 Reply Last reply
              0
              • T ticaki

                @nashra
                Welche Version?

                NashraN Offline
                NashraN Offline
                Nashra
                Most Active Forum Testing
                wrote on last edited by
                #613

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

                @nashra
                Welche Version?

                UWZ 1.05

                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 Reply Last reply
                0
                • NashraN Nashra

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

                  @nashra
                  Welche Version?

                  UWZ 1.05

                  T Do not disturb
                  T Do not disturb
                  ticaki
                  wrote on last edited by
                  #614

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

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  NashraN 1 Reply Last reply
                  1
                  • T ticaki

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

                    NashraN Offline
                    NashraN Offline
                    Nashra
                    Most Active Forum Testing
                    wrote on last edited by
                    #615

                    @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:

                    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 Reply Last reply
                    0
                    • crunchipC crunchip

                      @d4ve das mit der Meldung Nebel....wurde verlängert....hatte ich heute auch

                      T Do not disturb
                      T Do not disturb
                      ticaki
                      wrote on last edited by
                      #616

                      @crunchip
                      Ich denke ich hab den Fehler gefunden.

                      0.97.19.4

                      • DWD Spam hoffentlich behoben.
                      • unnötigen Code entfernt

                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                      Spenden

                      crunchipC 1 Reply Last reply
                      0
                      • T ticaki

                        @crunchip
                        Ich denke ich hab den Fehler gefunden.

                        0.97.19.4

                        • DWD Spam hoffentlich behoben.
                        • unnötigen Code entfernt
                        crunchipC Away
                        crunchipC Away
                        crunchip
                        Forum Testing Most Active
                        wrote on last edited by crunchip
                        #617

                        @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

                        umgestiegen von Proxmox auf Unraid

                        1 Reply Last reply
                        0
                        • Thomas BraunT Online
                          Thomas BraunT Online
                          Thomas Braun
                          Most Active
                          wrote on last edited by
                          #618

                          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?

                          Linux-Werkzeugkasten:
                          https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
                          NodeJS Fixer Skript:
                          https://forum.iobroker.net/topic/68035/iob-node-fix-skript
                          iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

                          P 1 Reply Last reply
                          0
                          • Thomas BraunT Thomas Braun

                            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 Offline
                            P Offline
                            patti_9000
                            wrote on last edited by
                            #619

                            @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
                            0
                            • T Do not disturb
                              T Do not disturb
                              ticaki
                              wrote on last edited by
                              #620

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

                              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                              Spenden

                              1 Reply Last reply
                              1
                              • wendy2702W Online
                                wendy2702W Online
                                wendy2702
                                wrote on last edited by
                                #621

                                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?

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

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

                                T 1 Reply Last reply
                                0
                                • crunchipC Away
                                  crunchipC Away
                                  crunchip
                                  Forum Testing Most Active
                                  wrote on last edited by crunchip
                                  #622

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

                                  umgestiegen von Proxmox auf Unraid

                                  wendy2702W 1 Reply Last reply
                                  0
                                  • crunchipC crunchip

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

                                    wendy2702W Online
                                    wendy2702W Online
                                    wendy2702
                                    wrote on last edited by
                                    #623

                                    @crunchip ok.

                                    Dann werde ich die mal testen.

                                    Danke

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

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

                                    1 Reply Last reply
                                    0
                                    • wendy2702W wendy2702

                                      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 Do not disturb
                                      T Do not disturb
                                      ticaki
                                      wrote on last edited by
                                      #624

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

                                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                      Spenden

                                      1 Reply Last reply
                                      0
                                      • T Do not disturb
                                        T Do not disturb
                                        ticaki
                                        wrote on last edited by ticaki
                                        #625

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

                                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                        Spenden

                                        1 Reply Last reply
                                        1
                                        • M Offline
                                          M Offline
                                          Megawaldi
                                          wrote on last edited by Megawaldi
                                          #626

                                          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
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          401

                                          Online

                                          32.5k

                                          Users

                                          81.7k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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