Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Unwetterwarnung für Österreich bzw. Europa ?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Unwetterwarnung für Österreich bzw. Europa ?

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Alveran last edited by

      @Alveran:

      Ich muss mich hier leider mal einreihen. Ich habe versucht meine ID für den Ort Gera in Deutschland zu generieren. Aber das Script kommt nicht damit klar. Was habe ich falsch gemacht?

      Sowohl "UWZDE07548" (Postleitzahl) also auch "116052000" funktioniert nicht. `

      Darf ich nochmal nachfragen, ist irgendwie untergegangen. Wieso funktioniert der Ort Gera nicht?

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

        @dwm:

        Das wird im schedule festgelegt.

        Jede Stunde wäre z.B.:

        schedule ("3 * * * *", function(){
        
        

        dann wird das script zu jeder vollen Stunde in der dritten Minute ausgeführt, also 00:03, 01:03 usw.

        Die "CRON" Taste beim Script Editor oben rechts erzeugt solche Schedule strings für Dich …

        D `

        Ich bekomme das irgendwie nicht hin, sorry Anfänger.

        Wenn ichschedule ("3 * * * *", function(){an den Anfang vom Script setze, muß ich am Ende davon doch noch dies````
        }(;

        
        Wie gesagt, wo liegt der Fehler von mir.
        1 Reply Last reply Reply Quote 0
        • H
          homecineplexx last edited by

          der fehler liegt daran, dass es so gehört

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

            @homecineplexx:

            der fehler liegt daran, dass es so gehört

            });
            
            ```` `  
            

            Sorry das war hier ein Tipfehler, ist natürlich````
            });

            1 Reply Last reply Reply Quote 0
            • H
              homecineplexx last edited by

              dann hast vermutlich ein anderes problem…vielleicht solltest den code mal posten

              1 Reply Last reply Reply Quote 0
              • Negalein
                Negalein Global Moderator last edited by

                @Nashra:

                [~~[code]~~schedule ("3 * * * *", function(){ `

                schedule ("3 * * * *", function(){ musst du nicht neu ins Script schreiben.

                Dies ist in diesem Script schon vorhanden.

                Steht ziemlich weit unten im Script!

                Such danach und editier es dir passend.

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

                  @Negalein:

                  @Nashra:

                  [~~[code]~~schedule ("3 * * * *", function(){ `

                  schedule ("3 * * * *", function(){ musst du nicht neu ins Script schreiben.

                  Dies ist in diesem Script schon vorhanden.

                  Steht ziemlich weit unten im Script!

                  Such danach und editier es dir passend. `
                  Sorry blutiger Anfänger bin :lol:

                  Stimmt, steht ganz am Ende was mit Schedule. Jetzt kapier ich das, zuerst hat er gewartet und wenn er dann

                  einmal gestartet ist, hat er durch den anderen es wieder auf eine Minute gesetzt. :oops:

                  Man lernt immer dazu, vielen Dank.

                  1 Reply Last reply Reply Quote 0
                  • S
                    sectorchan @dwm last edited by sectorchan

                    @dwm said in Unwetterwarnung für Österreich bzw. Europa ?:

                    Die Zahlen bei begin und end sind der Anfangs- und Endzeitpunkt in ms seit dem 1.1.1970.

                    Hm, ja. Könnte man noch "human readable" gestalten :D.

                    Was severity und type bei der Unwetterzentrale jetzt heissen … keine Ahnung. Wie Hormoran schrieb, beim DWD ist das gut dokumentiert.

                    type=7 ist wohl "Gewitter"... aber das ist mit der Stange im Nebel stochern. Mal sehen, ob sich da nicht im Netz eine Doku findet...

                    Ein Bug ist auch noch drin ... das "object" sollte eigentlich das JSON der Warnung zeigen.

                    ! ```
                    var AdapterId = "javascript.0"; var ChannelId = "UWZ"; ! var forceInitStates = true; var numOfWarnings = 3; ! var warncellid = 'UWZDE92540'; // HIER DIE EIGENE AREA ID eintragen! ! //============================================================== var url='http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=de&areaID=XXXAREAXXX'; ! url=url.replace("XXXAREAXXX",warncellid); ! function createStates(n){ for (var i=0; i<n; i++)/{/createstate(channelid+".warning."+i+".name","",forceinitstates,{type:/'string'});/createstate(channelid+".warning."+i+".text","",forceinitstates,{type:/createstate(channelid+".warning."+i+".shorttext","",forceinitstates,{type:/createstate(channelid+".warning."+i+".longtext","",forceinitstates,{type:/createstate(channelid+".warning."+i+".object","",forceinitstates,{type:/createstate(channelid+".warning."+i+".begin",0,forceinitstates,{type:/createstate(channelid+".warning."+i+".end",0,forceinitstates,{type:/createstate(channelid+".warning."+i+".severity",0,forceinitstates,{type:/'number'});/createstate(channelid+".warning."+i+".type",0,forceinitstates,{type:/}/function/processresultentry(w)/this.object="JSON.stringify(w);" this.begin="formatDate(new" date(w.dtgstart),"dd.mm.yyyy/hh:mm");/this.end="formatDate(new" date(w.dtgend),"dd.mm.yyyy/this.longtext="w.payload.translationsLongText.DE;" this.shorttext="w.payload.translationsShortText.DE;" this.severity="w.severity;" this.type="w.type;" processdata(data)/if/(!data)/return;/var/thedata="JSON.parse(data);" warnings="[];" (thedata.results.length="">0) { for (i=0; i<thedata.results.length; 3/10/i++)/{/warnings.push(new/processresultentry(thedata.results[i]));/}/*/warnings.sort(function(a,b){/var/asort="a.urgency*1000+a.category*100+a.severity;" bsort="b.urgency*1000+b.category*100+b.severity;" return/bsort-asort;/});/for/(i="0;" i<numofwarnings;/if/(i<warnings.length)/setstate(channelid+".warning."+i+".longtext",warnings[i].longtext);/setstate(channelid+".warning."+i+".shorttext",warnings[i].shorttext);/setstate(channelid+".warning."+i+".object","{}");/setstate(channelid+".warning."+i+".begin",warnings[i].begin);/setstate(channelid+".warning."+i+".end",warnings[i].end);/setstate(channelid+".warning."+i+".severity",warnings[i].severity);/setstate(channelid+".warning."+i+".type",warnings[i].type);/else/setstate(channelid+".warning."+i+".longtext","");/setstate(channelid+".warning."+i+".shorttext","");/setstate(channelid+".warning."+i+".begin",0);/setstate(channelid+".warning."+i+".end",0);/setstate(channelid+".warning."+i+".severity",0);/setstate(channelid+".warning."+i+".type",0);/createstates(numofwarnings);/request="require('request');" schedule/("*/*",/function(){/request({/uri:/url,/method:/"get",/timeout:/10000,/followredirect:/true,/maxredirects:/},/function(error,/response,/body)/(response.statuscode="=" 200)/processdata(body);/<e=""></thedata.results.length;></n;>
                    ! ... object drin und begin und end sind lesbar.
                    ! Bitte aus der Zeile
                    ~~[code]~~var forceInitStates = true; [/code]
                    nach dem ersten Mal laufenlassen wieder ein
                    ~~[code]~~var forceInitStates = false; [/code]
                    ! machen - dient dazu, das Neuanlegen der Datenpunkte für begin und end zu erzwingen, da sich ja der Typ geändert hat.
                    ! CU
                    ! Werner[/i][/i][/i][/i][/i][/i][/i]

                    Werden die Javascript topics automatisch angelegt wenn das Script erstmal läuft?

                    Ganz dumme frage, weil ich Javascript nicht kann, sondern mich eher mit c# besser zurecht finde und die syntax auch mit Google nicht deuten kann.

                    Ich versteh die Ausrufezeichen als kommentar, aber nach recherche ist es das nicht.
                    Die Syntax stimmt doch ganz und gar nicht, oder stell ich mich nur dumm an?
                    Woher kommen die ganzen "/" Die werden mir bei einem Javascript checker als Fehler angezeigt.
                    den unteren Teil entfernt habe, werden mir Error mit Compile failed angezeigt.

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

                      @dwm Meinst du du könntest das Script für die UWZ bitte nochmal posten? Hier scheint das Forum das Format verhaut zu haben.

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

                        Seit einiger Zeit wird mir vom UWZ-Script nichts mehr angezeigt. DWD und andere geben Unwetterwarnungen raus
                        aber hier bei mir tut sich gar nichts. Hat das sonst noch jemand hier.

                        sigi234 Negalein 2 Replies Last reply Reply Quote 0
                        • Negalein
                          Negalein Global Moderator @jackblackson last edited by

                          @jackblackson sagte in Unwetterwarnung für Österreich bzw. Europa ?:

                          @dwm Meinst du du könntest das Script für die UWZ bitte nochmal posten? Hier scheint das Forum das Format verhaut zu haben.

                          hier ist es!

                          var debuglevel = 4;
                          var debugchannel = 'info';
                          
                          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 = 3;
                          
                          var url='http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=de&areaID=XXXAREAXXX';
                          
                          
                          /********************* Hier die Warnzellen-Id's eintragen *****************************/
                          var warncellid = ['UWZAT00928'];
                          /**************************************************************************************/
                          
                          
                          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 (var 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,{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,data) {
                              if (!data) {
                                 return;
                              }
                              var AreaChannelId=ChannelId+"."+Area;
                              
                              var thedata = JSON.parse(data);
                              var warnings= [];
                              
                              if (thedata.results.length>0) {
                                  for (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));
                              
                              for (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);
                          // processData(jsond2);
                          
                          var request = require('request');
                          schedule ("3 * * * *", function(){
                              for (var i=0; i<warncellid.length; i++) {
                                      request({  
                                          uri: url.replace("XXXAREAXXX",warncellid[i]),
                                          method: "GET",
                                          timeout: 10000,
                                          followRedirect: true,
                                          maxRedirects: 10
                                      }, function(error, response, body) {
                                          // dwmlog("UWZ Error" + error,2);
                                          // dwmlog("UWZ Response: " + JSON.stringify(response),4);
                                          dwmlog("AREA: "+getAreaFromURI(response.request.uri.href),4);
                                          dwmlog("UWZ Body: " + body,4);
                                          if (response.statusCode == 200) {
                                              processData(getAreaFromURI(response.request.uri.href),body);
                                          }
                                      });    
                              }
                          });
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • sigi234
                            sigi234 Forum Testing Most Active @Nashra last edited by

                            @Nashra sagte in Unwetterwarnung für Österreich bzw. Europa ?:

                            Seit einiger Zeit wird mir vom UWZ-Script nichts mehr angezeigt. DWD und andere geben Unwetterwarnungen raus
                            aber hier bei mir tut sich gar nichts. Hat das sonst noch jemand hier.

                            Warnzellen-Id im Skript Richtig?

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

                              @sigi234 sagte in Unwetterwarnung für Österreich bzw. Europa ?:

                              @Nashra sagte in Unwetterwarnung für Österreich bzw. Europa ?:

                              Seit einiger Zeit wird mir vom UWZ-Script nichts mehr angezeigt. DWD und andere geben Unwetterwarnungen raus
                              aber hier bei mir tut sich gar nichts. Hat das sonst noch jemand hier.

                              Warnzellen-Id im Skript Richtig?

                              Ja alles korrekt, hat ja auch vor einigen Wochen mal Warnungen angezeigt.
                              Momentan geht hier richtig was ab mit Wind uns so und die anderen zeigen es ja auch an,
                              aber leider nicht nicht das Script obwohl alle 15 Minuten aktualisiert wird.

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

                                @Nashra
                                Hast du mal eine andere ID dazu gefügt zum testen........

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

                                  @sigi234 sagte in Unwetterwarnung für Österreich bzw. Europa ?:

                                  @Nashra
                                  Hast du mal eine andere ID dazu gefügt zum testen........

                                  Ja mehrere, aber es kommen keine Daten, seltsam 😕

                                  Nachtrag: Datenpunkte sind alle vorhanden.

                                  1 Reply Last reply Reply Quote 0
                                  • Negalein
                                    Negalein Global Moderator @Nashra last edited by

                                    @Nashra sagte in Unwetterwarnung für Österreich bzw. Europa ?:

                                    Seit einiger Zeit wird mir vom UWZ-Script nichts mehr angezeigt. DWD und andere geben Unwetterwarnungen raus
                                    aber hier bei mir tut sich gar nichts. Hat das sonst noch jemand hier.

                                    Ja, ist bei mir auch so!

                                    DWD zeigt eine Warnung an.
                                    UWZ-Script zeigt nichts an.

                                    Aber DWD verhunzt das Datum.
                                    objects - ioBroker (3).png objects - ioBroker (2).png

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

                                      Juhu i am not alone 😂
                                      Irgendwie werde ich das Gefühl nicht los, das Die überhaupt keine Daten mehr zur Verfügung stellen 🤔

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

                                        @Nashra
                                        Das kann sein............

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

                                          Hm, habe jetzt einfach mal im Browser die URL eingegeben mit der ID und das wird angezeigt:

                                          {"results":[],"generator":"PHPjf"}
                                          

                                          Das war es dann wohl...

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

                                            eher weil kein unwetter naht. 😉

                                            Negalein Nashra 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            934
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

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