Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Parser Adapter liefert kein Ergebniss

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Parser Adapter liefert kein Ergebniss

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @dirk_1930 last edited by Homoran

      @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

      Also 4 X [^>]

      jepp, aber mit zusätzlichem + für beliebig viele Zeichen, die nicht > sind und dann ein >, da dieses Zeichen ja im Befehl davor ausgeschlossen ist

      die roten Markierungen betreffen aber die schließende Spitze Klammer, oder?

      dirk_1930 1 Reply Last reply Reply Quote 0
      • dirk_1930
        dirk_1930 @Homoran last edited by

        @homoran
        ich hatte mich an deiner Sequenz orientiert bis ich dann am p Tag ankomme. Die Farbe sollte nur die Anzahl der Schritte markieren

        Homoran 1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @dirk_1930 last edited by

          @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

          Die Farbe sollte nur die Anzahl der Schritte markieren

          dann passt es

          dirk_1930 1 Reply Last reply Reply Quote 0
          • dirk_1930
            dirk_1930 @Homoran last edited by

            @homoran
            Ich hoffe ich nerve nicht...

            Soweit konnte ich bisher mehrere zusätzliche Werte auslesen. Jetzt scheitere ich erneut an folgendem...

            <div class="times-rise-set">
            <div title="Sonnenaufgang">
            <span role="img" aria-label="Sonnenaufgang">▲</span> 06:55</div>
            <div title="Sonnenuntergang">
            <span role="img" aria-label="Sonnenuntergang">▼</span> 18:27</div>
            </div>
            </div>
            <div class="moon">
            <div class="moon-icon" title="Erstes Viertel (90.7°)">
            

            Ich möchte die Werte für Sonnenaufgang, -untergang und Mondphase auslesen.

            Mit dem Befehl

            aria-label="Sonnenaufgang">+[^>]+[^>]>+[^>]([\w\W]+)
            

            komme ich bis hinter das schließende span Tag, allerdings schaffe ich es nicht nur die 06:55 auszuwählen.

            Homoran OliverIO 2 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @dirk_1930 last edited by Homoran

              @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

              Ich hoffe ich nerve nicht...

              nööö, eigentlich nicht, habe nur gerade alles gelöscht 😞

              @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

              Ich möchte die Werte für Sonnenaufgang, -untergang und Mondphase auslesen.

              sollte bei dir in den Objekten stehen. Habe es gerade versucht zu finden und nur bei Shuttercontrol gefunden 😞

              stay tuned

              naufgang[^n]+n> ([\d:]+)

              nuntergang[^n]+n> ([\d:]+)

              Was genau wolltest du mit deinem RegEx erreichen?

              dirk_1930 2 Replies Last reply Reply Quote 0
              • dirk_1930
                dirk_1930 @Homoran last edited by

                @homoran

                habs hinbekommen

                aria-label="Sonnenaufgang">+[^>]+[^>]>+[^>]([^<]+)
                

                ohh mann 🤕

                Homoran 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @dirk_1930 last edited by OliverIO

                  der doppelpunkt ist kein \w zeichen
                  ein endetag zeichen und ein leerzeichen steht da auch noch
                  und ein plus als multiplier war zu viel. hat zwar nicht geschadet, da das in html nie vorkommen kann

                  aria-label="Sonnenaufgang">[^>]+>\s([\w\:]+)
                  
                  1 Reply Last reply Reply Quote 0
                  • dirk_1930
                    dirk_1930 @Homoran last edited by

                    @homoran said in Parser Adapter liefert kein Ergebniss:

                    @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                    Ich hoffe ich nerve nicht...

                    nööö, eigentlich nicht, habe nur gerade alles gelöscht 😞

                    @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                    Ich möchte die Werte für Sonnenaufgang, -untergang und Mondphase auslesen.

                    sollte bei dir in den Objekten stehen. Habe es gerade versucht zu finden und nur bei Shuttercontrol gefunden 😞

                    stay tuned

                    naufgang[^n]+n> ([\d:]+)

                    nuntergang[^n]+n> ([\d:]+)

                    Was genau wolltest du mit deinem RegEx erreichen?

                    Ich nutze die Meteoblue API und da fehlen halt noch ein paar zusätzliche Datenpunkte. Ich hatte, bzw. habe den Ehrgeiz mich da durchzuwühlen.
                    Meine Kenntnisse in HTML und JS sind noch nicht so dolle, aber dank Eurer tollen Hilfe, komme ich immer etwas weiter 👍

                    1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @dirk_1930 last edited by

                      @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                      habs hinbekommen

                      hab es oben editiert!
                      Ich persönlich mache es immer so kurz und eindeutig wie möglich
                      Der Sprung zu den > ist hier aufwändiger. Ich suche dann immer nach dem dichtesten eindeutigen Zeichen am Suchergebnis, hier das n von span
                      Dann hast du mit dem + hinter Sonnenaufgang"> nichts was sich vervielfältigen kann
                      Auch die Word/NoWord Befehle sind nicht eindeutig, es handelt sich nur um Ziffern \d und den Doppelpunkt

                      dirk_1930 1 Reply Last reply Reply Quote 0
                      • dirk_1930
                        dirk_1930 @Homoran last edited by

                        @liv-in-sky

                        Du hattest in einem vorherigen Post eine Lösung in cheerio geschrieben.
                        Würden meine daten sich auf diese Weise auch auslesen lassen, bzw. kann ich anhand des vollständigen XPath darauf zugreifen?

                        liv-in-sky 1 Reply Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky @dirk_1930 last edited by

                          @dirk_1930

                          teste mal dieses script - wird beim start einmal aufgerufen - du musst axios und cheerio im javascript instanz setting unter zusätzliche npm module einfügen

                          im log siehst du dann alle möglichen ausgaben

                          das ist die ausgabe eines arrays , das einfach hintereinander ausgegeben wird

                          wenn du mir dann sagst, was du genau haben willst - kann ich MORGEN das script weitermachen

                          
                          const cheerio = require('cheerio');
                          const request = require('request');
                          const axios=require('axios');
                          let jsonArr;
                          let myDPunkt="0_userdata.0.CONTROL-OWN.TABELLEN.Vilsbiburg"
                          
                          let mySchedule1="  33 */8 * * * "; // alle 8 stunden bei minute 33
                          holeDaten();
                          // schedule(mySchedule1,  function () {
                           let myVarVar=mathRandomInt(10, 300);
                          // log("startet ");
                           setTimeout(function() {
                             //  log("jetzt "+myVarVar);
                               holeDaten();
                          
                           }, myVarVar*1000);
                          // });
                          
                          
                          function mathRandomInt(a, b) {
                           if (a > b) {
                             // Swap a and b to ensure a is smaller.
                             var c = a;
                             a = b;
                             b = c;
                           }
                           return Math.floor(Math.random() * (b - a + 1) + a);
                          }
                          
                          async function holeDaten() { 
                             log("jetzt")
                             await axios.get(encodeURI('https://www.meteoblue.com/de/wetter/woche/köln_deutschland_2886242'), {
                                             headers: { 'User-Agent':`Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36` }
                          }).then((result) => {
                                  // log(result.data);log(result)
                                      const $ = cheerio.load(result.data)
                                                        const list5 = $('*')
                                                                           .find('.col-12')                 //find("[class*=re]")  //find('.table_wert_1a')
                                                                           .toArray()
                                                                           .map(element => { return $(element).text()}); log(list5.length +"---"+list5)
                                                                           for (let z=0;z<list5.length;z++){log(list5[z])}
                          
                                                        let dayArr=['Mo','Di','Mi','Do','Fr','Sa','So'];
                                                         jsonArr=[];
                                                         let i=0
                                                //        for(let i=0;i<5;i++) {//log(list5[i])
                                                           
                                                                                                            jsonArr.push({
                                                                                                                "temp":    list5[i],
                                                                                                                "min_temp_heute":  list5[i+1],
                                                                                                                "max_temp_heute": list5[i+2],
                                                                                                                "luftfeucht": list5[i+3],
                                                                                                                "min_luftfeucht_heute": list5[i+4]
                                                                                                            })
                                
                          //} 
                          //log(JSON.stringify(jsonArr))   //hier in dp schreiben
                          //log("jetzt "+myVarVar);
                          setState(myDPunkt,JSON.stringify(jsonArr))
                          
                                 }).catch((error) => {
                                     return error;
                                 })}
                          
                          
                          
                          
                          

                          dirk_1930 1 Reply Last reply Reply Quote 0
                          • dirk_1930
                            dirk_1930 @liv-in-sky last edited by

                            @liv-in-sky
                            Danke für dein Angebot das Script anzupassen.

                            Ich habe einen Screenshot von den Log gemacht und die gewünschten Daten markiert. Hoffe das ist OK so...
                            Zusätzlich habe ich einzelne Werte mit gelb unterstrichen. Können die jeweils einzeln extrahiert werden?

                            Freue mich auf deinen Vorschlag 🙂

                            cheerio_1.JPG

                            liv-in-sky 1 Reply Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @dirk_1930 last edited by

                              @dirk_1930

                              probiere mal das - datenpunkte unter 0_userdata - werden angelegt

                              dann müssen wir nur noch wegen dem abfrageinterval was machen - wie oft willst du das abfragen - nicht zu oft, manche seiten mögen das nicht, wenn dauernd solche fragen kommen

                              
                              const cheerio = require('cheerio');
                              const request = require('request');
                              const axios=require('axios');
                              let jsonArr;
                              let myDPunkt="0_userdata.0.CONTROL-OWN.TABELLEN.Vilsbiburg"
                              
                              let mySchedule1="  33 */8 * * * "; // alle 8 stunden bei minute 33
                              
                              doStuff()
                              holeDaten();
                              // schedule(mySchedule1,  function () {
                               let myVarVar=mathRandomInt(10, 300);
                              // log("startet ");
                               setTimeout(function() {
                                 //  log("jetzt "+myVarVar);
                                   holeDaten();
                              
                               }, myVarVar*1000);
                              // });
                              
                              
                              function mathRandomInt(a, b) {
                               if (a > b) {
                                 // Swap a and b to ensure a is smaller.
                                 var c = a;
                                 a = b;
                                 b = c;
                               }
                               return Math.floor(Math.random() * (b - a + 1) + a);
                              }
                              
                              async function holeDaten() { 
                                 log("jetzt")
                                 await axios.get(encodeURI('https://www.meteoblue.com/de/wetter/woche/köln_deutschland_2886242'), {
                                                 headers: { 'User-Agent':`Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36` }
                              }).then((result) => {
                                      // log(result.data);log(result)
                                          const $ = cheerio.load(result.data)
                                                            const list5 = $('*')
                                                                               .find('.col-12')                 //find("[class*=re]")  //find('.table_wert_1a')
                                                                               .toArray()
                                                                               .map(element => { return $(element).text()}); //log(list5.length +"---"+list5)
                                                                             //  for (let z=0;z<list5.length;z++){log(list5[z])}
                              
                                                      //  log(list5[5])
                                    
                              //} 
                              //log(JSON.stringify(jsonArr))   //hier in dp schreiben
                              //log("jetzt "+myVarVar);
                              //log(list5[5].replace(/ /gm,'').replace(/\n/gm,'').replace(/▲/g,'').replace(/▼/g,''))
                              let helpingHand=list5[5].replace(/ /gm,'').replace(/\n/gm,'').replace(/▲/g,'').replace(/▼/g,'')
                              setState("0_userdata.0.KoelnWetter.BerichtLang",list5[10])
                              setState("0_userdata.0.KoelnWetter.BerichtKurz",list5[4].replace('Wetterbericht für Köln ',''))
                              setState("0_userdata.0.KoelnWetter.UV2Start",helpingHand.replace(/^.*?([0-9][0-9]:[0-9][0-9]).*/,"$1"))
                              setState("0_userdata.0.KoelnWetter.UV2End",helpingHand.replace(/^.*?[0-9][0-9]:[0-9][0-9]([0-9][0-9]:[0-9][0-9]).*/gm,'$1')) //^UV2▲[0-9][0-9]:[0-9][0-9]▼([0-9][0-9]:[0-9][0-9])
                              setState("0_userdata.0.KoelnWetter.Mond2Start",helpingHand.replace(/^.*?\)([0-9][0-9]:[0-9][0-9]).*/gm,'$1'))
                              setState("0_userdata.0.KoelnWetter.Mond2End",helpingHand.replace(/^.*?\)[0-9][0-9]:[0-9][0-9]([0-9][0-9]:[0-9][0-9]).*/gm,'$1'))
                              setState("0_userdata.0.KoelnWetter.MondGrad",helpingHand.replace(/^.*?\((.*?)\).*/gm,'$1'))
                              
                                     }).catch((error) => {
                                         return error;
                                     })}
                              
                              async function doStuff() {
                                
                                 
                                  if (!(await existsStateAsync("0_userdata.0.KoelnWetter.BerichtLang"))) {
                                     await createStateAsync("0_userdata.0.KoelnWetter.BerichtLang",{type: "string", name: "Bericht ausführlich", role: "value", read: true, write: true, } ); }
                                  if (!(await existsStateAsync("0_userdata.0.KoelnWetter.BerichtKurz"))) {
                                     await createStateAsync("0_userdata.0.KoelnWetter.BerichtKurz",{type: "string", name: "Bericht ausführlich", role: "value", read: true, write: true, } ); }
                                  if (!(await existsStateAsync("0_userdata.0.KoelnWetter.UV2Start"))) {
                                     await createStateAsync("0_userdata.0.KoelnWetter.UV2Start",{type: "string", name: "UV2Start", role: "value", read: true, write: true, } ); } 
                                  if (!(await existsStateAsync("0_userdata.0.KoelnWetter.UV2End"))) {
                                     await createStateAsync("0_userdata.0.KoelnWetter.UV2End",{type: "string", name: "UV2End", role: "value", read: true, write: true, } ); }           
                                  if (!(await existsStateAsync("0_userdata.0.KoelnWetter.Mond2End"))) {
                                     await createStateAsync("0_userdata.0.KoelnWetter.Mond2End",{type: "string", name: "Mond2End", role: "value", read: true, write: true, } ); }
                                  if (!(await existsStateAsync("0_userdata.0.KoelnWetter.Mond2Start"))) {
                                     await createStateAsync("0_userdata.0.KoelnWetter.Mond2Start",{type: "string", name: "Mond2Start", role: "value", read: true, write: true, } ); }  
                                  if (!(await existsStateAsync("0_userdata.0.KoelnWetter.MondGrad"))) {
                                     await createStateAsync("0_userdata.0.KoelnWetter.MondGrad",{type: "string", name: "MondGrad", role: "value", read: true, write: true, } ); }      
                              
                              
                              
                              }
                              
                              ![Image 2.png](/assets/uploads/files/1646986580738-image-2.png) 
                              
                              
                              
                              
                              
                              
                              

                              Image 2.png

                              dirk_1930 1 Reply Last reply Reply Quote 0
                              • dirk_1930
                                dirk_1930 @liv-in-sky last edited by dirk_1930

                                @liv-in-sky
                                Das klappt... Habe noch in Zeile 53 - list5[11] gesetzt...

                                Ich habe noch ein paar technische Fragen, damit ich etwas dazu lerne 😉
                                Du hast in Zeile 52 Zeichen ersetzt. Wie hast du vorher gesehen, was im Original steht - damit die Ersetzung ersichtlich ist?
                                Zwischen Zeile 57 und 61 ergänzt du am ende "$1" bzw. gm, "$1". Was bedeutet das?

                                Das Abfrageintervall sollte alle 6 Stunden sein.

                                liv-in-sky 1 Reply Last reply Reply Quote 0
                                • liv-in-sky
                                  liv-in-sky @dirk_1930 last edited by

                                  @dirk_1930

                                  $1 bedeutet - das du in dem regex etwas in (...) setzt und das dann eine variable ist - die erste klammer ist $1 - bzw das gesuchte

                                  bei regex text(..)text(....)text hast du dann 2 variablen - also $1 und $2

                                  irgendwie sieht man das nicht richtig - was da ankommt - aber aus erfahrung nehme ich meistens die \n (neue zeile) raus . hier , bei dir, habe ich einfach alle leerzeichen eliminiert - damit ich mal eine zeile habe , damit ist es einfacher für mich, alles zu finden

                                  script alle 6 studen:

                                  
                                  const cheerio = require('cheerio');
                                  const request = require('request');
                                  const axios=require('axios');
                                  let jsonArr;
                                  let myDPunkt="0_userdata.0.CONTROL-OWN.TABELLEN.Vilsbiburg"
                                  
                                  let mySchedule1="  3 */6 * * * "; // alle 6 stunden bei minute 3
                                  
                                  doStuff()
                                  holeDaten();
                                   schedule(mySchedule1,  function () {
                                   let myVarVar=mathRandomInt(1, 30);
                                  // log("startet ");
                                   setTimeout(function() {          // variert die sekunden der abfrage, damit nicht immer die selbe ip zur absolut selben zeit eine abfrage stellt ))
                                    //   log("jetzt "+myVarVar);
                                       holeDaten();
                                  
                                   }, myVarVar*1000);
                                   });
                                  
                                  
                                  function mathRandomInt(a, b) {
                                   if (a > b) {
                                     // Swap a and b to ensure a is smaller.
                                     var c = a;
                                     a = b;
                                     b = c;
                                   }
                                   return Math.floor(Math.random() * (b - a + 1) + a);
                                  }
                                  
                                  async function holeDaten() { 
                                     log("Hole Wetterdaten aus Koeln")
                                     await axios.get(encodeURI('https://www.meteoblue.com/de/wetter/woche/köln_deutschland_2886242'), {
                                                     headers: { 'User-Agent':`Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36` }
                                  }).then((result) => {
                                          // log(result.data);log(result)
                                              const $ = cheerio.load(result.data)
                                                                const list5 = $('*')
                                                                                   .find('.col-12')                 //find("[class*=re]")  //find('.table_wert_1a')
                                                                                   .toArray()
                                                                                   .map(element => { return $(element).text()}); //log(list5.length +"---"+list5)
                                                                                 //  for (let z=0;z<list5.length;z++){log(list5[z])}
                                  
                                                          //  log(list5[5])
                                        
                                  //} 
                                  //log(JSON.stringify(jsonArr))   //hier in dp schreiben
                                  //log("jetzt "+myVarVar);
                                  //log(list5[5].replace(/ /gm,'').replace(/\n/gm,'').replace(/▲/g,'').replace(/▼/g,''))
                                  let helpingHand=list5[5].replace(/ /gm,'').replace(/\n/gm,'').replace(/▲/g,'').replace(/▼/g,'')
                                  setState("0_userdata.0.KoelnWetter.BerichtLang",list5[10])
                                  setState("0_userdata.0.KoelnWetter.BerichtKurz",list5[4].replace('Wetterbericht für Köln ',''))
                                  setState("0_userdata.0.KoelnWetter.UV2Start",helpingHand.replace(/^.*?([0-9][0-9]:[0-9][0-9]).*/,"$1"))
                                  setState("0_userdata.0.KoelnWetter.UV2End",helpingHand.replace(/^.*?[0-9][0-9]:[0-9][0-9]([0-9][0-9]:[0-9][0-9]).*/gm,'$1')) //^UV2▲[0-9][0-9]:[0-9][0-9]▼([0-9][0-9]:[0-9][0-9])
                                  setState("0_userdata.0.KoelnWetter.Mond2Start",helpingHand.replace(/^.*?\)([0-9][0-9]:[0-9][0-9]).*/gm,'$1'))
                                  setState("0_userdata.0.KoelnWetter.Mond2End",helpingHand.replace(/^.*?\)[0-9][0-9]:[0-9][0-9]([0-9][0-9]:[0-9][0-9]).*/gm,'$1'))
                                  setState("0_userdata.0.KoelnWetter.MondGrad",helpingHand.replace(/^.*?\((.*?)\).*/gm,'$1'))
                                  
                                         }).catch((error) => {
                                             return error;
                                         })}
                                  
                                  async function doStuff() {
                                    
                                     
                                      if (!(await existsStateAsync("0_userdata.0.KoelnWetter.BerichtLang"))) {
                                         await createStateAsync("0_userdata.0.KoelnWetter.BerichtLang",{type: "string", name: "Bericht ausführlich", role: "value", read: true, write: true, } ); }
                                      if (!(await existsStateAsync("0_userdata.0.KoelnWetter.BerichtKurz"))) {
                                         await createStateAsync("0_userdata.0.KoelnWetter.BerichtKurz",{type: "string", name: "Bericht ausführlich", role: "value", read: true, write: true, } ); }
                                      if (!(await existsStateAsync("0_userdata.0.KoelnWetter.UV2Start"))) {
                                         await createStateAsync("0_userdata.0.KoelnWetter.UV2Start",{type: "string", name: "UV2Start", role: "value", read: true, write: true, } ); } 
                                      if (!(await existsStateAsync("0_userdata.0.KoelnWetter.UV2End"))) {
                                         await createStateAsync("0_userdata.0.KoelnWetter.UV2End",{type: "string", name: "UV2End", role: "value", read: true, write: true, } ); }           
                                      if (!(await existsStateAsync("0_userdata.0.KoelnWetter.Mond2End"))) {
                                         await createStateAsync("0_userdata.0.KoelnWetter.Mond2End",{type: "string", name: "Mond2End", role: "value", read: true, write: true, } ); }
                                      if (!(await existsStateAsync("0_userdata.0.KoelnWetter.Mond2Start"))) {
                                         await createStateAsync("0_userdata.0.KoelnWetter.Mond2Start",{type: "string", name: "Mond2Start", role: "value", read: true, write: true, } ); }  
                                      if (!(await existsStateAsync("0_userdata.0.KoelnWetter.MondGrad"))) {
                                         await createStateAsync("0_userdata.0.KoelnWetter.MondGrad",{type: "string", name: "MondGrad", role: "value", read: true, write: true, } ); }      
                                  
                                  
                                  
                                  }
                                  
                                  
                                  
                                  
                                  
                                  
                                  

                                  dirk_1930 1 Reply Last reply Reply Quote 0
                                  • dirk_1930
                                    dirk_1930 @liv-in-sky last edited by dirk_1930

                                    @liv-in-sky
                                    Sehr cool das ganze mit den regular Expressions. Wenn man einmal verstanden hat, wie die aufgebaut sind ist das ja ganz schön mächtig.
                                    Nochmals danke für all eure verschiedenen Lösungsansätze.
                                    Werde jetzt mal alleine weiter machen bis zur nächsten Frage… 😊

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    943
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    4
                                    44
                                    1734
                                    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