Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Mehrere Daten an "eine" Funktion übergeben

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Mehrere Daten an "eine" Funktion übergeben

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

      so, jetzt versteh ich nur noch Bahnhof.

      Wie soll das gehen mit Abspeichern arrays?

      Kannst Du mir mal das an Deinem Beispiel

      function auswerten(index, dp) {
        var new = dp.state.val;
        var old = dp.oldState.val;
        // Auswertung
      }
      on('TestA', function (obj) {
         auswerten(0, obj);
      });
      on('TestB', function (obj) {
         auswerten(1, obj;
      });
      on('TestC', function (obj) {
         auswerten(2, obj);
      
      

      erklären?

      Wenn ich Deines als Testscript laufen lasse

          createState("javascript.1.TEST-DWD.warning.description");
          createState("javascript.1.TEST-DWD.warning1.description");
          createState("javascript.1.TEST-DWD.warning2.description");
      
          var idDescription0 = "javascript.1.TEST-DWD.warning.description";
          var idDescription1 = "javascript.1.TEST-DWD.warning1.description";
          var idDescription2 = "javascript.1.TEST-DWD.warning2.description";
      
      function auswerten(index, dp) {
        var neu = dp.state.val;
        var alt = dp.oldState.val;
        	log('new :' + neu);
      	log('old :' + alt);
       // Auswertung
      }
      on(idDescription0, function (obj) {
      	log('idDescription0 :' + obj);
         auswerten(0, obj);
      });
      on(idDescription1, function (obj) {
      	log('idDescription1 :' + obj);
         auswerten(1, obj);
      });
      on(idDescription2, function (obj) {
      	log('idDescription2 :' + obj);
         auswerten(2, obj);
      });
      
      

      Wenn ich dann die Datenpunkte befülle

      erhalte ich im log folgendes

      javascript.1	2017-01-25 14:51:17.556	info	script.js.Skript1: old :
      javascript.1	2017-01-25 14:51:17.554	info	script.js.Skript1: new :Es tritt mäßiger Schneefall auf .
      javascript.1	2017-01-25 14:51:17.553	info	script.js.Skript1: idDescription2 :[object Object]
      javascript.1	2017-01-25 14:51:17.549	info	script.js.Skript1: old :Es tritt mäßiger Schneefall auf .
      javascript.1	2017-01-25 14:51:17.547	info	script.js.Skript1: new :Es tritt starke Glaette auf .
      javascript.1	2017-01-25 14:51:17.546	info	script.js.Skript1: idDescription1 :[object Object]
      javascript.1	2017-01-25 14:51:17.541	info	script.js.Skript1: old :Es tritt mäßiger Frost zwischen -2 °C und -6 °C auf.
      javascript.1	2017-01-25 14:51:17.539	info	script.js.Skript1: new :Es tritt mäßiger Frost zwischen -2 °C und -6 °C auf .
      javascript.1	2017-01-25 14:51:17.536	info	script.js.Skript1: idDescription0 :[object Object]
      
      

      Wie kann ich jetzt da Werte abspeichern ohne sie in einem Datenpunkt abzuspeichern?

      1 Reply Last reply Reply Quote 0
      • ldittmar
        ldittmar Developer last edited by

        Es müsste so funktionieren:

        var schritte;
        on(idDescription0 oder idDescription1 oder idDescription2, function (){
           var obj = das este Objekt description0
           schritte = false;
           if(obj.oldState.val == '' && obj.newState.val == ''){
              //ist nichts passiert
           }else if(obj.oldState.val == '' && obj.newState.val != ''){
              //Neue Meldung senden
              check1(obj.newState.val);
           }else if(obj.oldState.val == obj.newState.val){
              //ist nichts passiert
              check1(obj.newState.val);
           }else if(obj.oldState.val != obj.newState.val){
              //Letzte Meldung obj.oldState.val ist nicht mehr aktuell
              check1(obj.newState.val);
              schritte = true;
           }    
        });
        
        function check1(checkValueBySchritte){
           var obj = die nächste description (description1)
        
           if(!schritte && obj.oldState.val == '' && obj.newState.val == ''){
              //ist nichts passiert
           }else if(!schritte && obj.oldState.val == '' && obj.newState.val != ''){
              //Neue Meldung senden
              check2(obj.newState.val);
           }else if(!schritte && obj.oldState.val == obj.newState.val){
              //ist nichts passiert
              check2(obj.newState.val);
           }else if(!schritte && obj.oldState.val != obj.newState.val){
              //Letzte Meldung obj.oldState.val ist nicht mehr aktuell
              if(obj.newState.val != ''){
                 check2(obj.newState.val);
                 schritte = true;
              }
           }else if(schritte && obj.oldState.val == checkValueBySchritte){
              //ist nichts passiert
              if(obj.newState.val != ''){
                 check2(obj.newState.val);
                 schritte = true;
              }
           }else if(schritte && obj.oldState.val != checkValueBySchritte){
              //Letzte Meldung obj.oldState.val ist nicht mehr aktuell
              if(obj.newState.val != ''){
                 check2(checkValueBySchritte);
                 schritte = true;
              }
           } 
        }
        
        function check2(checkValueBySchritte){
           var obj = die nächste description (description2)
        
           if(!schritte && obj.oldState.val == '' && obj.newState.val == ''){
              //ist nichts passiert
           }else if(!schritte && obj.oldState.val == '' && obj.newState.val != ''){
              //Neue Meldung senden
           }else if(!schritte && obj.oldState.val == obj.newState.val){
              //ist nichts passiert
           }else if(!schritte && obj.oldState.val != obj.newState.val){
              //Letzte Meldung obj.oldState.val ist nicht mehr aktuell
              //Es gibt eine neue Meldung
           }else if(schritte && obj.oldState.val == checkValueBySchritte){
              //ist nichts passiert      
           }else if(schritte && obj.oldState.val != checkValueBySchritte){
              //Letzte Meldung obj.oldState.val ist nicht mehr aktuell      
           } 
        }
        
        

        Also… du schaust ob sich irgendwas irgendwo verändert hat, dann gehst du alles durch um zu sehen was sich verändert hat... natürlich kann man mein Skript schöner mit Arrays oder Objekte machen, aber ich denke so ist es verständlicher... also Schritt für Schritt. 😉

        EDIT: Da ich ein ioBroker-Skript Anfänger bin, ist mein Code nicht Sprachlich richtig... es geht hier eher um das wie.

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

          @PrinzEisenherz1:

          javascript.1   2017-01-25 14:51:17.541   info   script.js.Skript1: old :Es tritt mäßiger Frost zwischen -2 °C und -6 °C auf.
          javascript.1   2017-01-25 14:51:17.539   info   script.js.Skript1: new :Es tritt mäßiger Frost zwischen -2 °C und -6 °C auf .
          
          ```` `  
          

          Kann so etwas passieren ? Die Beschreibung ändert sich zwar inhaltlich nicht, aber vor den abschließenden Punkt ist ein Leerzeichen gelangt, weshalb überhaupt auf Änderung getriggert wurde. Dann wird es kompliziert, weil einfache Textvergleiche nicht mehr funktionieren.

          1 Reply Last reply Reply Quote 0
          • P
            PrinzEisenherz1 last edited by

            Das ist mir schon klar.

            Hab ich ja bewusst gemacht um zu sehen was mit deinem Script passiert.

            Hab dann an der Testmeldung nur ne Leerstelle angefügt.

            Meine Frage war ja auf das zwischenspeichern bzw selektieren der Meldungen bzgl array gemeint.

            Woher weiß ich welches obj von welcher index-Nr kommt

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

              @PrinzEisenherz1:

              Woher weiß ich welches obj von welcher index-Nr kommt `
              Der Index des Auslösers (0…2) wird an die aufgerufende Funktion übergeben. Das Speichern im Array kann dann so erfolgen:

              function auswerten(index, dp) {
                var new = dp.state.val;
                var old = dp.oldState.val;
                var warn = 'dwd.0.warning';
                if(index) warn = warn + index
                headlines[index] = getState(warn + '.headline').val;
                gueltig[index] = '\ngültig vom ' + getState(warn + '.begin').val + ' Uhr bis ' + getState(warn + '.end').val + ' Uhr\n';
                // Auswertung
              }
              
              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                Gibt es einen Grund, dass Du die Description als Auslöser verwendest ? Ich würde die Headline bevorzugen oder kann die gleiche Headline zur gleichen Zeit mehrfach vorkommen ?

                Außerdem würde ich 2 Arrays (oldHeadlines, newHeadlines) anlegen, und die einzelnen Positionen testen, ob sie im jeweils anderen Array vorkommen. Zum Schluss aller Test dann oldHeadlines = newHeadlines. Da die Auslöser zwar hintereinander aber nicht gleichzeitig kommen und die Reihenfolge vermutlich nicht definiert ist, würde ich eine Verzögerung für die Auswertung der beiden Arrays einbauen.

                Nur prinzipiell:

                `var oldHeadlines = [3];
                var newHeadlines = [3];
                var timer = null;
                
                function check() {
                    if(newHeadlines[0] == "") {
                        // Alle Warnungen beendet
                        oldHeadlines = newHeadlines;
                        return;
                    }
                    for(var i = 0; i < 3; i++) {
                        var headline = oldHeadlines[i];
                        if(newHeadline.indexOf(headline) == -1 && headline != "") {
                            // Warnung headline ist beendet
                        }
                    }
                    for(var i = 0; i < 3; i++) {
                        headline = newHeadlines[i];
                        if(oldHeadline.indexOf(headline) == -1 && headline != "") {
                            // Warnung headline ist neue Warnung
                            // Hier kann der Index i zur Bildung der ID für Description und Begin und End benutzt werden
                        }
                    }
                    oldHeadlines = newHeadlines;
                }
                
                on('dwd.0.warning.headline', function(dp) {
                    newHeadlines[0] = dp.state.val;
                    if(timer) clearTimout(timer);
                    timer = setTimeout(check, 5000);
                });
                on('dwd.0.warning1.headline', function(dp) {
                    newHeadlines[1] = dp.state.val;
                    if(timer) clearTimout(timer);
                    timer = setTimeout(check, 5000);
                });
                on('dwd.0.warning2.headline', function(dp) {
                    newHeadlines[2] = dp.state.val;
                    if(timer) clearTimout(timer);
                    timer = setTimeout(check, 5000);
                });` [/i][/i]
                
                1 Reply Last reply Reply Quote 0
                • P
                  PrinzEisenherz1 last edited by

                  Erstmal vielen Dank für deine Beiträge und Erklärungen.

                  Bei headline ist das Problem das die auch mehrmals vorkommen können, zumindest hatte ich das schonmal bloß mit unterschiedlicher Beschreibung bzw Uhrzeit.

                  Deswegen hab ich dann auf die Beschreibung getriggert.

                  Dein Beispiel müsste aber mit der Beschreibung auch gehen, oder?

                  Kann es heute leider nicht mehr testen. Ich teste das morgen mal.

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

                    @PrinzEisenherz1:

                    Dein Beispiel müsste aber mit der Beschreibung auch gehen, oder? `
                    Ja.

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

                      Anbei ein Skript, das die gewünschte Funktion ohne das Versenden von Telegrammen erfüllen sollte:

                      `var idDescription0 = "dwd.0.warning.description";
                      var idDescription1 = "dwd.0.warning1.description";
                      var idDescription2 = "dwd.0.warning2.description";
                      var newDescriptions = new Array(3);
                      var oldDescriptions = new Array(3);
                      var newHeadlines = new Array(3);
                      var oldHeadlines = new Array(3);
                      var newBegins = new Array(3);
                      var oldBegins = new Array(3);
                      var newEnds = new Array(3);
                      var oldEnds = new Array(3);
                      var timer = null;
                      
                      function check() {
                          if(newDescriptions[0] === "") {
                              log('ALLE Warnungen beendet');
                      
                              oldHeadlines = newHeadlines.slice();
                              oldDescriptions = newDescriptions.slice();
                              oldBegins = newBegins.slice();
                              oldEnds = newEnds.slice();
                              return;
                          }
                      
                          var headline;
                          var description;
                          var begin;
                          var end;
                          var i;
                          var warn;
                          var Meldung;
                      
                          for(i = 0; i < 3; i++) {
                              warn = 'dwd.0.warning';
                              if(i) warn = warn + i;
                              headline = oldHeadlines[i];
                              description = oldDescriptions[i];
                              begin = oldBegins[i];
                              end = oldEnds[i];
                      
                              if(newDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) {
                                  Meldung = headline + ' gültig bis ' + end + ' Uhr wurde aufgehoben';
                                  log('Meldung '+ i + ': ' + Meldung);
                              }
                          }
                      
                          for(i = 0; i < 3; i++) {
                              warn = 'dwd.0.warning';
                              if(i) warn = warn + i;
                              headline = newHeadlines[i];
                              description = newDescriptions[i];
                              begin = newBegins[i];
                              end = newEnds[i];
                              if(oldDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) {
                                  Meldung = 'Neue ' + headline + ' gültig vom ' + begin + ' Uhr bis ' + end + ' Uhr: ' + description;
                                  log('Meldung '+ i + ': ' + Meldung);
                              }
                          }
                          oldHeadlines = newHeadlines.slice();
                          oldDescriptions = newDescriptions.slice();
                          oldBegins = newBegins.slice();
                          oldEnds = newEnds.slice();
                      }
                      
                      function newWarning(i) {
                          var warn = 'dwd.0.warning';
                          if(i) warn = warn + i;
                          newHeadlines[i] = getState(warn + '.headline').val;
                          newBegins[i] = getState(warn + '.begin').val;
                          newEnds[i] = getState(warn + '.end').val;
                          if(timer) clearTimeout(timer);
                          timer = setTimeout(check, 5000);
                      
                      }
                      
                      on(idDescription0, function(dp) {
                          newDescriptions[0] = dp.state.val;
                          newWarning(0);
                      });
                      
                      on(idDescription1, function(dp) {
                          newDescriptions[1] = dp.state.val;
                          newWarning(1);
                      });
                      
                      on(idDescription2, function(dp) {
                          newDescriptions[2] = dp.state.val;
                          newWarning(2);
                      });` [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
                      
                      1 Reply Last reply Reply Quote 0
                      • P
                        podruzjasne last edited by

                        K

                        Gesendet von meinem SM-J700H mit Tapatalk

                        1 Reply Last reply Reply Quote 0
                        • P
                          PrinzEisenherz1 last edited by

                          Hi Paul,

                          Sorry das ich mich jetzt erst melde.

                          Tausend Dank nochmal, jetzt klappt es und langsam steig ich auch dahinter.

                          Hier mal mein fertiges Produkt

                          `/* ************************************************************************* */
                          /*             Script zum Übertragen der DWD-Wetterwarnungen über            */
                          /*             Telegram, Pushover, Home24-Mediaplayer oder SayIt             */
                          /*  	mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals)    */
                          /*                    Stand: 070022017    PrinzEisenherz1					 */
                          /* ************************************************************************* */
                          
                              var request = require('request');
                          
                          	/* Nachrichten-Dienst festlegen */
                          /* aus=0 ; alle=1 ; Pushover=2 ; Telegram=3 */
                              var pushdienst = 3;			// Auswahl Nachrichtendienst
                          
                          /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
                              var idSprachausgabe = false;	// Wenn zusätzlich eine Sprachausgabe erfolgen soll dann auf true
                              var idMediaplayer = "192.168.178.70:50000"; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer
                          
                          /* Konfiguration Sprachausgabe über SayIt */
                              var idSprachausgabeSayIt = false;	// Wenn zusätzlich eine Sprachausgabe über SayIt erfolgen soll dann auf true
                          	var idSayIt = "sayit.0.tts.text";
                          	var lautstaerke = 100;
                          
                          /* Trigger für Wetterwarnungen */
                              var idDescription0 = "dwd.0.warning.description";
                              var idDescription1 = "dwd.0.warning1.description";
                              var idDescription2 = "dwd.0.warning2.description";
                          /* Arrays festlegen */
                              var newDescriptions = [3];
                              var oldDescriptions = [3];
                              var newHeadlines = [3];
                              var oldHeadlines = [3];
                              var newBegins = [3];
                              var oldBegins = [3];
                              var newEnds = [3];
                              var oldEnds = [3];
                              var timer = null;
                          
                          function check() {
                          /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
                              if(newDescriptions[0] === "") {
                          		if ((pushdienst === 3) || (pushdienst === 1) ) {
                          			setTimeout((sendTo ("telegram.0", 'Alle Warnmeldungen des DWD wurden aufgehoben')), 3 * 1000);
                          		}
                          		if ((pushdienst === 2) || (pushdienst === 1) ) {
                          			sendTo("pushover.0", 'Alle Warnmeldungen des DWD wurden aufgehoben');
                          		}
                          
                          /* alle Sicherungen Wetterwarnung löschen */
                                  oldHeadlines = newHeadlines.slice();
                                  oldDescriptions = newDescriptions.slice();
                                  oldBegins = newBegins.slice();
                                  oldEnds = newEnds.slice();
                                  return;
                              }
                          
                              var headline;
                              var description;
                              var begin;
                              var end;
                              var i;
                              var warn;
                          /* Variablen für Meldungen Text */
                              var MeldungOld;
                              var MeldungNew;
                          /* Variablen für Meldungen Sprache */
                              var MeldungSpracheDWD = '';
                              var MeldungNewSprache = '';
                              var MeldungOldSprache = '';
                          
                          /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */
                              for(i = 0; i < 3; i++) {
                          		warn = 'dwd.0.warning';
                          		if(i) warn = warn + i;
                          		headline = oldHeadlines[i];
                          		description = oldDescriptions[i];
                          		begin = oldBegins[i];
                          		end = oldEnds[i];
                          			if(newDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) {
                          				MeldungOld = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben';
                          				MeldungOldSprache = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben' + '  .  ';
                          					if ((pushdienst === 3) || (pushdienst === 1) ) {
                          						setTimeout((sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben")), 3 * 1000);
                          					}
                          					if ((pushdienst === 2) || (pushdienst === 1) ) {
                          						sendTo("pushover.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben");
                          					}
                          			}
                          /* Verknüpfen aller aufgehobenen Wetterwarnungen */
                          		MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache;
                              }
                          /* Bereich für 'Neue Amtliche Wetterwarnung' */
                              for(i = 0; i < 3; i++) {
                          		warn = 'dwd.0.warning';
                          		if(i) warn = warn + i;
                          		headline = newHeadlines[i];
                          		description = newDescriptions[i];
                          		begin = newBegins[i];
                          		end = newEnds[i];
                          			if(oldDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) {
                          				MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                          /* Entfernen °C für Sprachausgabe */
                          				var replaceDescription0 = entferneDatenpunkt(description);
                          				MeldungNewSprache = headline + " gültig vom " + begin + " Uhr, bis " + end + " Uhr. " + replaceDescription0 + '  .  ';
                          					if ((pushdienst === 3) || (pushdienst === 1) ) {
                          						setTimeout((sendTo ("telegram.0", MeldungNew)), 3 * 1000);
                          					}
                          					if ((pushdienst === 2) || (pushdienst === 1) ) {
                          						sendTo("pushover.0", MeldungNew);
                          					}
                          			}
                          /* Verknüpfen aller neuen Warnmeldungen */
                          		MeldungSpracheDWD = MeldungSpracheDWD + MeldungNewSprache;
                              }
                          /* Verknüpfen aller neuen und abgelaufenen Warnmeldungen */
                          		MeldungSpracheDWD = 'Achtung   .  ' + MeldungSpracheDWD;
                          
                          /* Bereich für Sprachausgabe über Home24-Mediaplayer */
                              if((idSprachausgabe === true) && (MeldungSpracheDWD !== "")){
                              	var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD;
                                  log('Url :' + Url);
                                  request(Url);
                          }
                          /* Bereich für Sprachausgabe über SayIt */
                              if((idSprachausgabeSayIt === true) && (MeldungSpracheDWD !== "")){
                                  setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD);
                          }
                          
                          /* Neue Werte sichern */
                              oldHeadlines = newHeadlines.slice();
                              oldDescriptions = newDescriptions.slice();
                              oldBegins = newBegins.slice();
                              oldEnds = newEnds.slice();
                          }
                          
                          /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */
                          function entferneDatenpunkt(beschreibung) {
                              var rueckgabe;
                              rueckgabe = beschreibung;
                              try {rueckgabe = rueckgabe.replace(/\°C/g, "Grad");}
                              catch(e) {}
                              return rueckgabe;
                          }
                          
                          on(idDescription0, function(dp) {
                              newDescriptions[0] = dp.state.val;
                              var warn = 'dwd.0.warning';
                          		setTimeout(function() {
                          			newHeadlines[0] = getState(warn + '.headline').val;
                          			newBegins[0] = getState(warn + '.begin').val;
                          			newEnds[0] = getState(warn + '.end').val;
                                  }, 3000);
                              if(timer) clearTimeout(timer);
                              timer = setTimeout(check, 7000);
                          });
                          
                          on(idDescription1, function(dp) {
                              newDescriptions[1] = dp.state.val;
                              var warn = 'dwd.0.warning1';
                          		setTimeout(function() {
                          			newHeadlines[1] = getState(warn + '.headline').val;
                          			newBegins[1] = getState(warn + '.begin').val;
                          			newEnds[1] = getState(warn + '.end').val;
                          		}, 3000);
                              if(timer) clearTimeout(timer);
                              timer = setTimeout(check, 7000);
                          });
                          
                          on(idDescription2, function(dp) {
                              newDescriptions[2] = dp.state.val;
                              var warn = 'dwd.0.warning2';
                          		setTimeout(function() {
                          			newHeadlines[2] = getState(warn + '.headline').val;
                          			newBegins[2] = getState(warn + '.begin').val;
                          			newEnds[2] = getState(warn + '.end').val;
                          		}, 3000);
                              if(timer) clearTimeout(timer);
                              timer = setTimeout(check, 7000);
                          });` 
                          
                          Also nochmal Tausend Dank
                          
                          Johnny[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
                          
                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          1.0k
                          Online

                          31.7k
                          Users

                          79.8k
                          Topics

                          1.3m
                          Posts

                          5
                          28
                          2981
                          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