Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Lichter zählen Script läuft nicht

    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

    [gelöst] Lichter zählen Script läuft nicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • htrecksler
      htrecksler Forum Testing @mech last edited by

      @mech haben die Shelly denn einen Datenpunkt STATE, level, oder POWER?
      Ich hatte mal einen und ich meine mich zu erinnern das der einen Datenpunkt "Switch" (true/false) hat

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

        Hey , für mich sieht es nach "switch" aus.

        objects - ioBroker 2019-05-30 19-49-07.png

        htrecksler paul53 2 Replies Last reply Reply Quote 0
        • htrecksler
          htrecksler Forum Testing @mech last edited by

          @mech genau, aber den (Groß- /Kleinschreibung beachten) berücksichtigt das Script ja nicht. Das Script schaut ja nur auf STATE, level und POWER

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

            Hey,

            so wäre es dann ja richtig oder?

             var cacheSelectorState = $('channelstate.id=.Switch'); // Gewerk Licht
            
            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @mech last edited by paul53

              @mech Versuche es mal so

              const cacheSelectorState = $('state[id=*.Switch](functions=light)');
              
              1 Reply Last reply Reply Quote 0
              • M
                mech last edited by

                Prima vielen Dank. Das hat wohl zu Erfolg geführt.

                20:00:45.499	info	javascript.0 Stop script script.js.Lichter_EIN
                20:00:46.651	info	javascript.0 Start javascript script.js.Lichter_EIN
                20:00:46.652	info	javascript.0 script.js.Lichter_EIN: registered 3 subscriptions and 0 schedules
                20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Auslöser Skriptstart
                20:00:48.652	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### DIMMER #####
                20:00:48.652	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                20:00:48.652	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Text: ,
                20:00:48.652	info	javascript.0 script.js.Lichter_EIN: Anzahl Lichter: 2 # davon Lichter an: 2
                20:00:54.155	info	javascript.0 script.js.Lichter_EIN: Auslösender Schalter: shelly.0.SHSW-PM#B1D869#1.Relay0.Switch: false
                20:00:54.155	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### DIMMER #####
                20:00:54.155	info	javascript.0 script.js.Lichter_EIN: ++++++ Lichter Anzahl ++++
                20:00:54.155	info	javascript.0 script.js.Lichter_EIN: #### SCHALTER #####
                20:00:54.155	info	javascript.0 script.js.Lichter_EIN: Text:
                20:00:54.156	info	javascript.0 script.js.Lichter_EIN: Anzahl Lichter: 2 # davon Lichter an: 1
                

                Wie könnte ich den nun noch die Homematic "aktoren" abfragen? Dort habe ich leider bedingt durch eine Wechselschaltung noch 2 von laufen?

                Hast du da ggf. auch eine Lösung für mich?

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

                  habe es so, für Mi-Light, Shelly, Sonoff...

                  /* Status Zahl Lichter
                  
                  zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                  Daten kommen vom Gewerk "licht"
                  
                  erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                  23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                  Log Ausgabe auskommentiert
                  05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
                  24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                  06.05.2016 Datenpunkt für Ansagen zugefügt
                  02.07.2016 abgeschaltet, da Fehler
                  03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                  search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                  27.11.2016 Verschoben in Status
                  Code optimiert
                  23.12.2016 Räume eingebaut
                  */
                  var logging = true;
                  
                  var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                  idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                  idText = 'javascript.0.Status.Lichter.Text',
                  idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                  idAnsage = 'javascript.0.Status.Lichter.Ansage';
                  
                  // Ab hier nix mehr ändern
                  createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                  type: 'number',
                  name: 'Anzahl aller Lichter',
                  min: 0,
                  def: 0,
                  role: 'value'
                  });
                  createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                  type: 'number',
                  name: 'Anzahl der eingeschalteten Lichter',
                  min: 0,
                  def: 0,
                  role: 'value'
                  });
                  createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                  type: 'string',
                  name: 'Eingeschaltete Lichter',
                  desc: 'Namen der eingeschalteten Lichter',
                  def: ' ',
                  role: 'value'
                  });
                  createState(idAnsage, {
                  type: 'string',
                  name: 'Eingeschaltete Lichter (Ansage)',
                  desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                  def: ' ',
                  role: 'value'
                  });
                  createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                  type: 'string',
                  name: 'Räume mit eingeschalteten Lichter',
                  desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                  def: ' ',
                  role: 'value'
                  });
                  
                  var cacheSelectorState = $('channel[state.id=*.STATE](functions="licht")'); // Gewerk licht
                  var cacheSelectorLevel = $('channel[state.id=*.level](functions="licht")');
                  var cacheSelectorPOWER = $('state[id=*.POWER](functions="licht")'); // Sonoff
                  var cacheSelectorSwitch = $('state[id=*.Switch](functions="licht")'); // Shelly
                  var cacheSelectorMi = $('state[id=*.state](functions=licht)'); //Mi-Light
                  
                  function checkDevices(obj) {
                  // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
                  var anzahlLichterAn = 0;
                  var anzahlLichter = 0;
                  var textLichterAn = [];
                  var textRaum = [];
                  
                  if (logging) {
                  log('++++++ Lichter Anzahl ++++ ');
                  log('#### SCHALTER ##### ');
                  }
                  cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
                  
                  
                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                  /*
                  if (logging) {
                  log('-------');
                  log('Kanal: ' + name);
                  log('Status: ' + status); 
                  }
                  */
                  
                  if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                  ++anzahlLichterAn; 
                  textLichterAn.push(devicename); // Zu Array hinzufügen
                  textRaum.push(raumname.enumNames); // <---- NEU
                  }
                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                  // } // ENDE VK-Abfrage
                  
                  });
                  
                  
                  if (logging) log('#### DIMMER ##### ');
                  cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
                  
                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                  /*
                  if (logging) {
                  log('-------');
                  log('Kanal: ' + name);
                  log('Status: ' + status + '%'); 
                  }
                  */
                  
                  if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                  ++anzahlLichterAn; 
                  textLichterAn.push(devicename); // Zu Array hinzufügen
                  textRaum.push(raumname.enumNames); // <---- NEU
                  }
                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                  // } // Ende Abfrage VK 
                  
                  }); 
                  
                  if (logging) {
                  log('++++++ Lichter Anzahl ++++ ');
                  log('#### SCHALTER ##### ');
                  }
                  cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
                  
                  
                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                  /*
                  if (logging) {
                  log('-------');
                  log('Kanal: ' + name);
                  log('Status: ' + status); 
                  }
                  */
                  
                  if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                  ++anzahlLichterAn; 
                  textLichterAn.push(devicename); // Zu Array hinzufügen
                  textRaum.push(raumname.enumNames); // <---- NEU
                  }
                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                  // } // ENDE VK-Abfrage
                  
                  });
                  
                  if (logging) {
                  log('++++++ Lichter Anzahl ++++ ');
                  log('#### SCHALTER ##### ');
                  }
                  cacheSelectorSwitch.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                  var devicename = name;
                  var raumname = getObject(id, "rooms"); // <---- NEU
                  
                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                  /*
                  if (logging) {
                  log('-------');
                  log('Kanal: ' + name);
                  log('Status: ' + status); 
                  }
                  */
                  
                  if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                  ++anzahlLichterAn; 
                  textLichterAn.push(devicename); // Zu Array hinzufügen
                  textRaum.push(raumname.enumNames); // <---- NEU
                  }
                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                  // } // ENDE VK-Abfrage
                  });
                  
                  
                  
                  if (logging) {
                  log('++++++ Lichter Anzahl ++++ ');
                  log('#### SCHALTER ##### ');
                  }
                  cacheSelectorMi.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                  var obj = getObject(id);
                  var name = getObject(id).common.name;
                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                  var devicename = name.substring(0, name.indexOf(" Switch ON/OFF")); //.state aus Text entfernen
                  var raumname = getObject(id, "rooms"); // <---- NEU
                  
                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                  /*
                  if (logging) {
                  log('-------');
                  log('Kanal: ' + name);
                  log('Status: ' + status); 
                  }
                  */
                  
                  if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                  ++anzahlLichterAn; 
                  textLichterAn.push(devicename); // Zu Array hinzufügen
                  textRaum.push(raumname.enumNames); // <---- NEU
                  }
                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                  // } // ENDE VK-Abfrage
                  });
                  
                  // Array mit Lichternamen sortieren
                  textLichterAn.sort();
                  textRaum.sort(); // <---- NEU
                  // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                  if (logging) log("Text: " + textLichterAn);
                  if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                  // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                  setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                  setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                  setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                  // setState(idRaum, textRaum.join(',<br>')); // Räume, in denen Licht brennt // <---- NEU
                  setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                  }
                  
                  // Trigger
                  cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                  checkDevices();
                  });
                  cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht
                  if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                  checkDevices();
                  });
                  cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                  checkDevices();
                  });
                  cacheSelectorSwitch.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                  checkDevices();
                  });
                  cacheSelectorMi.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                  checkDevices();
                  });
                  function main() {
                  setTimeout(function(){
                  if (logging) log('Auslöser Skriptstart');
                  checkDevices();
                  }, 2000);
                  }
                  
                  main(); // Skriptstart-Auslöser
                  
                  // Aufbereitung für Ansage
                  function strip_tags(data) {
                  var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
                  return(rueckgabe);
                  }
                  
                  on(idText, function (obj) {
                  var text = obj.state.val;
                  text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter ausgeschaltet';
                  setState(idAnsage, text);
                  });
                  
                  1 Reply Last reply Reply Quote 1
                  • paul53
                    paul53 @mech last edited by paul53

                    @mech sagte:

                    Wie könnte ich den nun noch die Homematic "aktoren" abfragen?

                    Wenn die Kanäle dem Gewerk "Licht" zugeordnet sind:

                    const cacheSelectorSTATE = $('channel[state.id=*.STATE](functions=light)');
                    
                    M 1 Reply Last reply Reply Quote 0
                    • M
                      mech last edited by

                      Wow, danke für eure Hilfe 🙂 Das hat mir echt geholfen.

                      Jetzt habe ich in diesem Beitrag ein Widget dafür gefunden: https://forum.iobroker.net/topic/3884/licht-skript-liefert-falsche-gerätenamen/2

                      Besteht hier die Möglichkeit das ich mir die angeschalteten Lichter anzeigen lassen kann? Und diese dann direkt auch ausschalten kann, bisher sieht mein Widget so aus:

                      vis 2019-05-30 20-21-45.png

                      1 Reply Last reply Reply Quote 0
                      • M
                        mech @paul53 last edited by

                        @paul53

                        Hm, die Homematic findet er nicht. Die Objekte sehen so aus:

                        objects - ioBroker 2019-05-30 20-54-46.png

                        Jemand eine Idee dazu?

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

                          @mech sagte:

                          Die Objekte sehen so aus:

                          const cacheSelectorOn = $('state[id=*.on](functions=light)');
                          
                          1 Reply Last reply Reply Quote 0
                          • M
                            mech last edited by

                            @paul53 said in [gelöst] Lichter zählen Script läuft nicht:

                            const cacheSelectorOn = $('stateid=*.on');

                            Danke das du noch antwortest 🙂

                            Ich habe das so zugefügt, bekomme dann aber an anderer Stelle einen JS Fehler:

                            21:42:11.798	error	javascript.0 script.js.Verbraucher: script.js.Verbraucher:538
                            21:42:11.799	error	javascript.0 at script.js.Verbraucher:538:1
                            
                            

                            Das ist die betroffene Zeile 538

                            cacheSelectorON.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                            
                            1 Reply Last reply Reply Quote 0
                            • M
                              mech last edited by mech

                              Okay fehler selbst gesehen.

                              ON = On

                              Das habe ich unter Trigger noch zugefügt.

                              cacheSelectorOn.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                              
                              if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                              
                              checkDevices();
                              
                              });
                              

                              Aber leider zeigt er mir bisher nur die Shellys an =/

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

                                Update: Es scheint auf jedenfall den HM Schalter zu triggern:

                                21:48:40.204	info	javascript.0 script.js.Verbraucher: Auslösender Schalter: hmip.0.devices.3014F711A0000858A9919754.channels.1.on: false
                                

                                Nur dieser wird wohl nicht in die Variable für die Lampen geschrieben.

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

                                  Hier mal das ganze Script:

                                  /* Status Zahl Lichter
                                  
                                  {1}
                                  
                                  zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                                  
                                  Daten kommen vom Gewerk "licht"
                                  
                                  {1}
                                  
                                  erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                                  
                                  23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                                  
                                  Log Ausgabe auskommentiert
                                  
                                  05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
                                  
                                  24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                                  
                                  06.05.2016 Datenpunkt für Ansagen zugefügt
                                  
                                  02.07.2016 abgeschaltet, da Fehler
                                  
                                  03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                                  
                                  search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                                  
                                  27.11.2016 Verschoben in Status
                                  
                                  Code optimiert
                                  
                                  23.12.2016 Räume eingebaut
                                  
                                  */
                                  
                                  var logging = true;
                                  
                                   
                                  
                                  var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                                  
                                  idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                                  
                                  idText = 'javascript.0.Status.Lichter.Text',
                                  
                                  idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                                  
                                  idAnsage = 'javascript.0.Status.Lichter.Ansage';
                                  
                                   
                                  
                                  // Ab hier nix mehr ändern
                                  
                                  createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                                  
                                  type: 'number',
                                  
                                  name: 'Anzahl aller Lichter',
                                  
                                  min: 0,
                                  
                                  def: 0,
                                  
                                  role: 'value'
                                  
                                  });
                                  
                                  createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                                  
                                  type: 'number',
                                  
                                  name: 'Anzahl der eingeschalteten Lichter',
                                  
                                  min: 0,
                                  
                                  def: 0,
                                  
                                  role: 'value'
                                  
                                  });
                                  
                                  createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                                  
                                  type: 'string',
                                  
                                  name: 'Eingeschaltete Lichter',
                                  
                                  desc: 'Namen der eingeschalteten Lichter',
                                  
                                  def: ' ',
                                  
                                  role: 'value'
                                  
                                  });
                                  
                                  createState(idAnsage, {
                                  
                                  type: 'string',
                                  
                                  name: 'Eingeschaltete Lichter (Ansage)',
                                  
                                  desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                                  
                                  def: ' ',
                                  
                                  role: 'value'
                                  
                                  });
                                  
                                  createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                                  
                                  type: 'string',
                                  
                                  name: 'Räume mit eingeschalteten Lichter',
                                  
                                  desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                                  
                                  def: ' ',
                                  
                                  role: 'value'
                                  
                                  });
                                  
                                  //var cacheSelectorHM = $('state[id=*.switch](functions=light)');
                                  
                                  var cacheSelectorState = $('channel[state.id=*.STATE](functions="light")'); // Gewerk licht
                                  
                                  var cacheSelectorLevel = $('channel[state.id=*.level](functions="light")');
                                  
                                  var cacheSelectorPOWER = $('state[id=*.POWER](functions="light")'); // Sonoff
                                  
                                  var cacheSelectorSwitch = $('state[id=*.Switch](functions="light")'); // Shelly
                                  
                                  var cacheSelectorMi = $('state[id=*.state](functions=light)'); //Mi-Light
                                  
                                  //var cacheSelectorON = $('switch[id=*.switch](functions=light)'); //Homematic
                                  
                                  const cacheSelectorOn = $('state[id=*.on](functions=light)');
                                  
                                  function checkDevices(obj) {
                                  
                                  // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
                                  
                                  var anzahlLichterAn = 0;
                                  
                                  var anzahlLichter = 0;
                                  
                                  var textLichterAn = [];
                                  
                                  var textRaum = [];
                                  
                                   
                                  
                                  if (logging) {
                                  
                                  log('++++++ Lichter Anzahl ++++ ');
                                  
                                  log('#### SCHALTER ##### ');
                                  
                                  }
                                  
                                  cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                  
                                  var obj = getObject(id);
                                  
                                  var name = getObject(id).common.name;
                                  
                                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                  
                                  var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                                  
                                  var raumname = getObject(id, "rooms"); // <---- NEU
                                  
                                   
                                  
                                   
                                  
                                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                  
                                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                                  
                                  
                                  /*
                                  if (logging) {
                                  
                                  log('-------');
                                  
                                  log('Kanal: ' + name);
                                  
                                  log('Status: ' + status); 
                                  
                                  }}
                                  */
                                  
                                  
                                  
                                  
                                   
                                  
                                  if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                  
                                  ++anzahlLichterAn; 
                                  
                                  textLichterAn.push(devicename); // Zu Array hinzufügen
                                  
                                  textRaum.push(raumname.enumNames); // <---- NEU
                                  
                                  }
                                  
                                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                  
                                  // } // ENDE VK-Abfrage
                                  
                                   
                                  
                                  });
                                  
                                   
                                  
                                   
                                  
                                  if (logging) log('#### DIMMER ##### ');
                                  
                                  cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                                  
                                  var obj = getObject(id);
                                  
                                  var name = getObject(id).common.name;
                                  
                                  var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
                                  
                                  var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                                  
                                  var raumname = getObject(id, "rooms"); // <---- NEU
                                  
                                   
                                  
                                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                  
                                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                                  
                                  /*
                                  
                                  if (logging) {
                                  
                                  log('-------');
                                  
                                  log('Kanal: ' + name);
                                  
                                  log('Status: ' + status + '%'); 
                                  
                                  }
                                  
                                  */
                                  
                                   
                                  
                                  if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                                  
                                  ++anzahlLichterAn; 
                                  
                                  textLichterAn.push(devicename); // Zu Array hinzufügen
                                  
                                  textRaum.push(raumname.enumNames); // <---- NEU
                                  
                                  }
                                  
                                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                  
                                  // } // Ende Abfrage VK 
                                  
                                   
                                  
                                  }); 
                                  
                                   
                                  
                                  if (logging) {
                                  
                                  log('++++++ Lichter Anzahl ++++ ');
                                  
                                  log('#### SCHALTER ##### ');
                                  
                                  }
                                  
                                  cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                                  
                                  var obj = getObject(id);
                                  
                                  var name = getObject(id).common.name;
                                  
                                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                  
                                  var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen
                                  
                                  var raumname = getObject(id, "rooms"); // <---- NEU
                                  
                                   
                                  
                                   
                                  
                                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                  
                                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                                  
                                  /*
                                  
                                  if (logging) {
                                  
                                  log('-------');
                                  
                                  log('Kanal: ' + name);
                                  
                                  log('Status: ' + status); 
                                  
                                  }
                                  
                                  */
                                  
                                   
                                  
                                  if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                  
                                  ++anzahlLichterAn; 
                                  
                                  textLichterAn.push(devicename); // Zu Array hinzufügen
                                  
                                  //textRaum.push(raumname.enumNames); // <---- NEU
                                  textRaum.push(raumname.enumRooms); // <---- NEU
                                  
                                  }
                                  
                                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                  
                                  // } // ENDE VK-Abfrage
                                  
                                   
                                  
                                  });
                                  
                                   
                                  
                                  if (logging) {
                                  
                                  log('++++++ Lichter Anzahl ++++ ');
                                  
                                  log('#### SCHALTER ##### ');
                                  
                                  }
                                  
                                  cacheSelectorSwitch.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                                  
                                  var obj = getObject(id);
                                  
                                  var name = getObject(id).common.name;
                                  
                                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                  
                                  var devicename = name;
                                  
                                  var raumname = getObject(id, "rooms"); // <---- NEU
                                  
                                   
                                  
                                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                  
                                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                                  
                                  /*
                                  
                                  if (logging) {
                                  
                                  log('-------');
                                  
                                  log('Kanal: ' + name);
                                  
                                  log('Status: ' + status); 
                                  
                                  }
                                  
                                  */
                                  
                                   
                                  
                                  if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                  
                                  ++anzahlLichterAn; 
                                  
                                  textLichterAn.push(devicename); // Zu Array hinzufügen
                                  
                                  textRaum.push(raumname.enumNames); // <---- NEU
                                  
                                  }
                                  
                                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                  
                                  // } // ENDE VK-Abfrage
                                  
                                  });
                                  
                                   
                                  
                                   
                                  
                                   
                                  
                                  if (logging) {
                                  
                                  log('++++++ Lichter Anzahl ++++ ');
                                  
                                  log('#### SCHALTER ##### ');
                                  
                                  }
                                  
                                  cacheSelectorMi.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                                  
                                  var obj = getObject(id);
                                  
                                  var name = getObject(id).common.name;
                                  
                                  var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                  
                                  var devicename = name.substring(0, name.indexOf(" Switch ON/OFF")); //.state aus Text entfernen
                                  
                                  var raumname = getObject(id, "rooms"); // <---- NEU
                                  
                                   
                                  
                                  // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                  
                                  // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
                                  
                                  /*
                                  
                                  if (logging) {
                                  
                                  log('-------');
                                  
                                  log('Kanal: ' + name);
                                  
                                  log('Status: ' + status); 
                                  
                                  }
                                  
                                  */
                                  
                                   
                                  
                                  if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                  
                                  ++anzahlLichterAn; 
                                  
                                  textLichterAn.push(devicename); // Zu Array hinzufügen
                                  
                                  textRaum.push(raumname.enumNames); // <---- NEU
                                  
                                  }
                                  
                                  ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                  
                                  // } // ENDE VK-Abfrage
                                  
                                  });
                                  
                                   
                                  
                                  // Array mit Lichternamen sortieren
                                  
                                  textLichterAn.sort();
                                  
                                  textRaum.sort(); // <---- NEU
                                  
                                  // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                  
                                  if (logging) log("Text: " + textLichterAn);
                                  
                                  if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                                  
                                  // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                  
                                  setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                                  
                                  setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                                  
                                  setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                                  
                                  // setState(idRaum, textRaum.join(',<br>')); // Räume, in denen Licht brennt // <---- NEU
                                  
                                  setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                                  
                                  }
                                  
                                   
                                  
                                  // Trigger
                                  
                                  cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                  
                                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                  
                                  checkDevices();
                                  
                                  });
                                  
                                  cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht
                                  
                                  if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                  
                                  checkDevices();
                                  
                                  });
                                  
                                  cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                  
                                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                  
                                  checkDevices();
                                  
                                  });
                                  
                                  cacheSelectorSwitch.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                  
                                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                  
                                  checkDevices();
                                  
                                  });
                                  
                                  cacheSelectorMi.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                  
                                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                  
                                  checkDevices();
                                  
                                  });
                                  
                                  cacheSelectorOn.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                  
                                  if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                  
                                  checkDevices();
                                  
                                  });
                                  
                                  function main() {
                                  
                                  setTimeout(function(){
                                  
                                  if (logging) log('Auslöser Skriptstart');
                                  
                                  checkDevices();
                                  
                                  }, 2000);
                                  
                                  }
                                  
                                   
                                  
                                  main(); // Skriptstart-Auslöser
                                  
                                   
                                  
                                  // Aufbereitung für Ansage
                                  
                                  function strip_tags(data) {
                                  
                                  var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
                                  
                                  return(rueckgabe);
                                  
                                  }
                                  
                                   
                                  
                                  on(idText, function (obj) {
                                  
                                  var text = obj.state.val;
                                  
                                  text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter ausgeschaltet';
                                  
                                  setState(idAnsage, text);
                                  
                                  });
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    mech last edited by

                                    okay gelöst 🙂

                                    Man muss den Log Part auf für den selector anlegen. Hier der Code falls mal jemand ähnlich unbegabt im JS ist.

                                    f (logging) {
                                    
                                    log('++++++ Lichter Anzahl ++++ ');
                                    
                                    log('#### SCHALTER ##### ');
                                    
                                    }
                                    
                                    cacheSelectorOn.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • H
                                      hannoi last edited by

                                      Moin moin,

                                      ich habe nach einem Systemumzug ein Problem mit meinem "Lichter zählen" Skript.

                                      Das Skript läuft auch soweit wie es soll, nur 2 Lampen aus dem identischen Gewerk licht werden mit falschem Raumnamen aufgelistet: mit [object Object]:
                                      Bildschirmfoto 2019-07-04 um 13.02.57.png

                                      Hier das Skript:

                                      /* Status Zahl Lichter
                                      
                                      zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                                      Daten kommen vom Gewerk "Licht"
                                      */
                                      const logging = true;
                                      
                                      const idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                                            idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                                            idText = 'javascript.0.Status.Lichter.Text',
                                            idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                                            idAnsage = 'javascript.0.Status.Lichter.Ansage';
                                      
                                      // Ab hier nix mehr ändern
                                      createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                                          type: 'number',
                                          name: 'Anzahl aller Lichter',
                                          min: 0,
                                          def: 0,
                                          role: 'value'
                                      });
                                      createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                                          type: 'number',
                                          name: 'Anzahl der eingeschalteten Lichter',
                                          min: 0,
                                          def: 0,
                                          role: 'value'
                                      });
                                      createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                                          type: 'string',
                                          name: 'Eingeschaltete Lichter',
                                          desc: 'Namen der eingeschalteten Lichter',
                                          def: ' ',
                                          role: 'value'
                                      });
                                      createState(idAnsage, {
                                          type: 'string',
                                          name: 'Eingeschaltete Lichter (Ansage)',
                                          desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                                          def: ' ',
                                          role: 'value'
                                      });
                                      createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                                          type: 'string',
                                          name: 'Räume mit eingeschalteten Lichter',
                                          desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                                          def: ' ',
                                          role: 'value'
                                      });
                                      
                                      // HM Schalter, HM Dimmer und Hue Schalter im Gewerk Licht
                                      const hmSTATE = $('channel[state.id=*.state](functions=licht)');
                                      const hmLEVEL = $('channel[state.id=*.LEVEL](functions=licht)');
                                      const hueon   = $('state[id=*.on](functions=licht)');
                                      
                                      var anzahlLichterAn,
                                          anzahlLichter,
                                          textLichterAn,
                                          textRaum;
                                      
                                      function checkLicht(id, vorn, hinten) {
                                          var name = getObject(id).common.name;
                                          var devicename = name.substring(vorn, name.indexOf(hinten)); //Zeichen vorn, State hinten aus Text entfernen
                                          var raum = getObject(id, "rooms").enumNames[0]; 
                                          if (getState(id).val) { // wenn Zustand != false / 0, dann wird die Anzahl der Lichter hochgezählt
                                              ++anzahlLichterAn;
                                              textLichterAn.push(devicename); // Zu Array hinzufügen
                                              if(textRaum.indexOf(raum) == -1) textRaum.push(raum); // zu Array hinzu, wenn noch nicht vorhanden
                                          }
                                          ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                      }
                                      
                                      function checkDevices() {
                                          // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                                          anzahlLichterAn = 0;
                                          anzahlLichter = 0;
                                          textLichterAn = [];
                                          textRaum = [];
                                          hmSTATE.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                      	    checkLicht(id, 0, '.state');
                                          });
                                      
                                          hueon.each(function(id, i) { // Schleife für jedes gefundenen Element *.on im Gewerk Licht
                                      	    checkLicht(id, 6, '.on');
                                          });
                                      
                                          hmLEVEL.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                                      	    checkLicht(id, 0, '.LEVEL');
                                          });
                                      
                                          // Array mit Lichternamen sortieren
                                          textLichterAn.sort();
                                          textRaum.sort(); // <---- NEU
                                          // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                          if (logging) log("Text: " + textLichterAn);
                                          if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                                          // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                          //setState(idText, textLichterAn.join(',')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                                          setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                                          setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                                          setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                                          setState(idRaum, textRaum.join(',')); // Räume, in denen Licht brennt // <---- NEU
                                      }
                                      // Trigger
                                      hmSTATE.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht
                                          if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                          checkDevices();
                                      });
                                      hueon.on(function(obj) { // bei Zustandänderung *.on von HUE Lampen im Gewerk Licht
                                          if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                          checkDevices();
                                      });
                                      hmLEVEL.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
                                          if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                          checkDevices();
                                      });
                                      
                                      // Skriptstart
                                      setTimeout(function() {
                                          if (logging) log('Auslöser Skriptstart');
                                          checkDevices();
                                      }, 500);
                                      
                                      // Aufbereitung für Ansage
                                      function strip_tags(data) {
                                          var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                                          return (rueckgabe);
                                      }
                                      
                                      on(idText, function(obj) {
                                          var text = obj.state.val;
                                          text = (getState(idAnzahl).val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
                                          setState(idAnsage, text);
                                      });
                                      

                                      Das Skript findet alle Lichter aus dem Gewerk, das passt nur eben die Anzeige des Raumes nicht.
                                      Hat noch jemand eine Idee?

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

                                        @hannoi sagte:

                                        Das Skript findet alle Lichter aus dem Gewerk

                                        Wirklich ? Bei HomeMatic-Geräten wird "state" groß geschrieben:

                                        const hmSTATE = $('channel[state.id=*.STATE](functions=licht)');
                                        

                                        und

                                        	    checkLicht(id, 0, '.STATE');
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • H
                                          hannoi last edited by

                                          Sorry hatte ich nicht erwähnt, nutze die Tradfri Lampen. Dort wird der "state" kleingeschrieben.
                                          Bildschirmfoto 2019-07-05 um 11.28.52.png

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

                                            @hannoi
                                            Mit dem Namen "on/off" kann das Skript nichts anfangen !

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            892
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            33
                                            156
                                            23229
                                            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