Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Hue Szenen nicht mehr verfügbar (iConnectHue)

    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

    Hue Szenen nicht mehr verfügbar (iConnectHue)

    This topic has been deleted. Only users with topic management privileges can see it.
    • Zefau
      Zefau @aleks-83 last edited by

      @aleks-83 Du nutzt das Skript, um Szenen aus der Hue Bridge zu laden und zu triggern? Darf ich dich auf den hue-extended Adapter hinweisen? Habe dort auch die Szenen implementiert, vielleicht ist der Adapter ja interessant für dich.

      A 1 Reply Last reply Reply Quote 1
      • A
        aleks-83 @Zefau last edited by

        @Zefau
        Werde ich mir mal ansehen. Danke

        1 Reply Last reply Reply Quote 0
        • J
          JoergK last edited by

          Moin,
          ich habe auch seit ein paar Tagen Probleme mit der Kommunikation mit der Hue.
          Welche Schnittstelle nutzt du?
          Ich habe zwar auch den normalen Hue-Adapter, dieser bietet mir aber durch das Pollen des Hue Gateways keine schnelle Reaktionszeiten. Das Auslesen des Dimmers war nicht akzeptabel.
          In einem Forum hatte ich "node-hue-api" gefunden. Dieses nutze ich um in Skripten direkt auf die Hue zuzugreifen. Hier hatte mich die schnelle Reaktionszeit der API überzeugt. Die Kommunikation wird wahrscheinlich nicht per pollen gelöst.
          Nur leider läuft die Schnittstelle jetzt nicht mehr.
          Hierzu hatte ich einen extra Post geöffnet.
          Post

          Ist das Problem bei dir ähnlich?

          Gruß
          Jörg

          J A 2 Replies Last reply Reply Quote 0
          • J
            JoergK @JoergK last edited by

            @JoergK
            Habe gerade in deinem Skript gesehen, das du auch die API nutzt.
            Hast was gemacht, damit es wieder läuft?
            ??

            1 Reply Last reply Reply Quote 0
            • A
              aleks-83 @JoergK last edited by aleks-83

              @JoergK
              Ich habe das Problem jetzt doch wieder. Trotz installierter Node-hue-api.

              @Zefau
              Ich habe deinen hue extended Adapter installiert.
              Sieht sehr vielversprechend aus.
              Meine Lampen, Gruppen und Szenen werden alle synchronisiert.
              Viele Szenen tauchen zwar mehrfach auf (dann mit anderem kryptischen Buchstaben Anhang der offenbar auch die Gruppen Nr enthält), aber sie sind vollständig.
              Allerdings kann ich die Szenen nicht triggern.
              Im log steht dann

              LightScene currently not supported!
              
              Zefau 1 Reply Last reply Reply Quote 0
              • J
                JoergK last edited by

                Hi,
                so wie ich es sehe gibt es bei der HUE-API gleich zwei Probleme.

                1. Phillips hat was an der FW der Bridge geändert. Deswegen war ein Update der API notwendig.
                2. Der Entwickler der "node-hue-api" hat gerade beim letzten Versionssprung die API signifikant geändert, sodass die alten Skripte bei mir nicht mehr laufen.

                Hier im Forum hatte ich folgendes Skript gefunden und es lief immer sehr gut.
                https://forum.iobroker.net/topic/5773/skript-philips-hue-dynamische-szenen-update/15

                var HueApi = require("node-hue-api").HueApi;
                
                // Replace IP and username!!!
                var host = "192.168.11.11",
                    username = "BLABLABLABLABLABLABLA",
                    api = new HueApi(host, username);
                    
                var groups_ = [],
                    lights_ = [],
                    objects_ = [];
                
                // Log JSON results
                var displayResults = function(result) {
                    console.log('Reponse: '+JSON.stringify(result, null, 2));
                };
                
                // Parse Light Group 0 (All Lights)
                var parseGroup0 = function(result) {
                    if (!result.lights){return} // Empty group
                    
                    var id = result.id,
                        lights = result.lights,
                        name = "All Lights";
                    console.debug('group: '+name+', lights: '+lights);
                    groups_[lights] = name;
                };
                
                // Parse Light Groups
                var parseGroups = function(result) {
                    for (var i = 0; i < result.length; i++) {
                        if (!result[i].lights){continue} // Empty group
                        
                        var id = result[i].id,
                            lights = result[i].lights,
                            name = result[i].name;
                        console.debug('group: '+name+', lights: '+lights);
                        groups_[lights] = name;
                    }
                };
                
                // Parse Lights
                var parseLights = function(result) {
                    for (var i = 0; i < result.length; i++) {
                        var id = result[i].id,
                            name = result[i].name;
                        console.debug('light: '+name+', id: '+id);
                        lights_[id] = name;
                    } 
                };
                
                // Create States in ioBroker
                var createStates = function(result) {
                    // Resync button
                    createState('PhilipsHue.Scenes.Resync', false, {role: "button", name: 'Resync Philips Hue Groups, Lights and Scenes'});
                
                    for (var i = 0; i < result.length; i++) {
                        if (!result[i].appdata.data){continue} // skip internal szenes
                
                        var id = result[i].id,
                            lights = result[i].lights,
                            name = result[i].name.replace(/"/g,''),
                            pathname = name.replace(/ /g,'_');
                        
                        // Get light names
                        var light_names = [];
                        for (var j = 0; j < lights.length; j++) {
                            var light_name = lights_[lights[j]];
                            light_names.push(light_name);
                        }
                
                        // Room, group or lights linked with scene
                        var group = 'Group: '+groups_[lights] || 'Lights: '+light_names.join(", ");
                        
                        // Create States and skip duplicates
                        if (!objects_[lights+pathname]){
                            console.debug('scene: '+name+', '+group);
                            createState('PhilipsHue.Scenes.'+pathname+'.'+id, false, {role: "button", name: 'Scene: '+name+' ('+group+')'});
                            objects_[lights+pathname] = true;
                        }
                    }
                };
                
                // Delete States
                function deleteStates(){
                    console.log('Deleting current objects for scenes...');
                    objects_ = [];
                    $('javascript.0.PhilipsHue.Scenes.*').each(function (id) {
                        deleteState(id);
                    });
                }
                
                // Fetch data from Hue API
                function init(){
                    api.getGroup(0, function(err, group0) {
                        if (err) throw err;
                        console.log('Processing group 0...');
                        //displayResults(group0);
                        parseGroup0(group0);
                    });
                    api.groups(function(err, groups) {
                        if (err) throw err;
                        console.log('Processing ' + groups.length + ' groups...');
                        //displayResults(groups);
                        parseGroups(groups);
                    });
                
                    api.lights(function(err, lights) {
                        if (err) throw err;
                        console.log('Processing ' + lights.lights.length + ' lights...');
                        //displayResults(lights);
                        parseLights(lights.lights);
                    });
                
                    api.scenes(function(err, scenes) {
                        if (err) throw err;
                        console.log('Processing ' + scenes.length + ' scenes...');
                        //displayResults(scenes);
                        createStates(scenes);
                    });
                }
                
                // Init on start
                init();
                
                // Activate scene
                on({id: /^javascript\.0\.PhilipsHue.Scenes\./, val: true}, function (obj) {
                    if (obj.id == 'javascript.0.PhilipsHue.Scenes.Resync'){return}
                    sceneId = obj.id.split('.').pop();
                    console.log('Activating '+obj.name);
                    api.activateScene(sceneId, function(err, result) {
                        if (err) throw err;
                        displayResults(result);
                    });
                    setState(obj.id, false);
                });
                
                // Resync
                on({id: 'javascript.0.PhilipsHue.Scenes.Resync', val: true}, function (obj) {
                    console.log('Resync triggered...');
                    groups_ = [];
                    lights_ = [];
                    deleteStates();
                    init();
                });
                
                schedule("0 3 * * *", function () {
                    console.log('Resync triggered...');
                    groups_ = [];
                    lights_ = [];
                    deleteStates();
                    init();
                });
                

                Wie gesagt, die API-Schnittstelle hat sich von Version 2 auf Version 3 geändert.
                Die Testskripte der Version 3 laufen bei mir.
                github node-hue-api
                Leider blicke ich nicht so richtig durch die Programmierung.
                Wo genau liegt der Unterschied zwischen der V2 zu V3?
                Was muss geändert werden, damit es wieder läuft.
                Gibt es hier Profiprogrammierer, die da durchblicken und "mal eben schnell" ne Lösung haben? 😜

                Gruß
                Jörg

                Zefau 1 Reply Last reply Reply Quote 0
                • Zefau
                  Zefau @JoergK last edited by

                  @JoergK Bei mir funktioniert's. Du hast das Skript schon länger im Einsatz und jetzt geht es auf einmal nicht mehr? Was geht denn konkret nicht mehr?

                  A J 2 Replies Last reply Reply Quote 0
                  • Zefau
                    Zefau @aleks-83 last edited by

                    @aleks-83 sagte in Hue Szenen nicht mehr verfügbar (iConnectHue):

                    Allerdings kann ich die Szenen nicht triggern.

                    Das gilt nur für LightScenes. GroupScenes kannst du triggern. Ich weiß leider technisch nicht, wie ich eine LightScene triggern kann. Das Skript von @JoergK lädt die LightScenes gar nicht aus der Bridge, sondern nur GroupScenes ( if (!result[i].appdata.data){continue} // skip internal szenes).

                    1 Reply Last reply Reply Quote 0
                    • A
                      aleks-83 last edited by aleks-83

                      @Zefau
                      Bevor dieses Update gemacht wurde, konnte ich die Szenen alle per Datenpunkt triggern welche durch das Skript erstellt wurden.
                      Auch wenn diese nicht als Light- oder GoupScenes gekennzeichnet waren.

                      Oder ist genau das in dem Update passiert?
                      Die Trennung von Group- und LightScenes?

                      1 Reply Last reply Reply Quote 0
                      • A
                        aleks-83 @Zefau last edited by

                        @Zefau
                        Was funktioniert denn bei dir noch?`
                        Du nutzt also das Skript was Jörg erwähnt, und bei dir werden die Lampen und Szenen geladen, und du kannst sie auch schalten?

                        Oder nutzt du deinen hue-extended Adapter?

                        Zefau 1 Reply Last reply Reply Quote 0
                        • Zefau
                          Zefau @aleks-83 last edited by

                          @aleks-83 ich nutze natürlich meinen Adapter 😉 hatte das Skript nur gestern kurz eingebunden, um es mir mal anzugucken.

                          A 1 Reply Last reply Reply Quote 0
                          • A
                            aleks-83 @Zefau last edited by aleks-83

                            @Zefau
                            OK.
                            Dann muss ich wohl abwarten bis die LightScenes auch gesteuert werden können, oder bis die API mit dem Skript wieder steuerbar ist.

                            In der Zwischenzeit habe ich mir das Skript nochmal angeschaut...
                            Ich spreche kein Javascript, aber ist dieses ^ in der 2. Zeile korrekt?

                            // Activate scene
                            on({id: /^javascript\.0\.PhilipsHue.Scenes\./, val: true}, function (obj) {
                                if (obj.id == 'javascript.0.PhilipsHue.Scenes.Resync'){return}
                                sceneId = obj.id.split('.').pop();
                                console.log('Activating '+obj.name);
                                api.activateScene(sceneId, function(err, result) {
                                    if (err) throw err;
                                    displayResults(result);
                                });
                                setState(obj.id, false);
                            });
                            
                            

                            Ich habe es testweise mal entfernt und bei mir wurden die Datenpunkte wieder erstellt.
                            Nach dem Ausführen des Resync Triggers werden aber keine neuen mehr erstellt.

                            Keine Ahnung wie das ^ da rein gekommen ist, aber in dem zitierten Skript und Beitrag von @JoergK ist es ja auch vorhanden.
                            Und es hat ja auch mal so funktioniert!?
                            Merkwürdig

                            J 1 Reply Last reply Reply Quote 0
                            • A
                              aleks-83 last edited by

                              Zur Info:
                              Der neue Hue-Extended Adapter v0.8.6 kann jetzt LightScenes steuern.
                              Beitrag von Zefau

                              1 Reply Last reply Reply Quote 0
                              • J
                                JoergK @Zefau last edited by

                                @Zefau Echt? Wieso läuft es denn bei dir?Da muss ich nochmal auf Suche gehen.
                                Also bei mir kommt keine Fehlermeldung und die Datenpunkte in JavaSkript.0 werden aber nicht aktualisiert. Nach dem manuellen Löschen der Datenpunkte wurden sie auch nicht wieder neu angelegt.

                                Deinen Adapter habe ich in der Zwischenzeit auch installiert und er macht einen guten Eindruck. Wenn ich damit auch ein zügiges Auslesen des Hue Dimmers hinbekomme ohne große Systemlast, dann kann ich auch umschwenken. 😊
                                Ich hatte für den Dimmer folgendes abgewandelte Skript (Auch hier aus dem Forum Link), mit dem ich eine Reaktionszeit von 1s auf einen Tastendruck hinbekommen hatte.

                                var hue = require('node-hue-api');
                                var HueApi = hue.HueApi;
                                var api;
                                 
                                var request = require('request');
                                 
                                var presenceID=0;
                                var laststatechanged='';
                                 
                                var bridge='[IP-DER-HUE-Bridge]';
                                var user='[USER-AUF-DER-HUE-Bridge]';
                                var port=80;
                                 
                                var displayResult = function(result) {
                                    console.log(JSON.stringify(result, null, 2));
                                };
                                 
                                api = new HueApi(bridge, user, 0, port);
                                 
                                schedule("*/1 * * * * *", readAllHueSensors); 
                                createHueSensors();
                                
                                function createHueSensors() {
                                    api.sensors(function(err, config) {
                                        if (err) throw err;
                                        var sensors = config.sensors;
                                        console.log('sensors create');
                                        for (var sid in sensors) {
                                            var sensor = sensors[sid];
                                 
                                            if (sensor.type=='ZLLSwitch') {
                                 
                                                var sensorName =  sensor.name.replace(/\s/g, '');
                                                if (getState('hueSensors.'+sensorName).notExist===true) {
                                                    console.log('hueSensors.'+sensorName +' wird erstellt.')
                                                    createState('hueSensors.'+sensorName, sensorName, true, {
                                                        read: true, 
                                                       write: true, 
                                                        name: sensorName, 
                                                        type: "string", 
                                                        role: "channel",
                                                        def: false
                                                    });
                                 
                                                    if (sensor.type=='ZLLSwitch') {
                                                        createState('hueSensors.'+sensorName+'.buttonevent', sensor.state.buttonevent, true, {
                                                            read: true, 
                                                           write: true, 
                                                            name: "buttonevent", 
                                                            type: "number", 
                                                            role: "state",
                                                            def: 0
                                                        });
                                                        createState('hueSensors.'+sensorName+'.lastupdated', sensor.state.lastupdated, true, {
                                                            read: true, 
                                                           write: true, 
                                                            name: "lastupdated", 
                                                            type: "string", 
                                                            role: "date",
                                                            def: false
                                                        });
                                                        //Config
                                                        createState('hueSensors.'+sensorName+'.on', sensor.config.on, true, {
                                                            read: true, 
                                                           write: true, 
                                                            name: "on", 
                                                            type: "boolean", 
                                                            role: "config",
                                                            def: false
                                                        });
                                                        createState('hueSensors.'+sensorName+'.battery', sensor.config.battery, true, {
                                                            read: true, 
                                                           write: true, 
                                                            name: "battery", 
                                                            type: "number", 
                                                            role: "config",
                                                            def: 0
                                                        });
                                                        createState('hueSensors.'+sensorName+'.reachable', sensor.config.reachable, true, {
                                                            read: true, 
                                                           write: true, 
                                                            name: "reachable", 
                                                            type: "boolean", 
                                                            role: "config",
                                                            def: false
                                                        });
                                                        createState('hueSensors.'+sensorName+'.pending', sensor.config.pending, true, {
                                                            read: true, 
                                                           write: true, 
                                                            name: "pending", 
                                                            type: "number", 
                                                            role: "config",
                                                            def: 0
                                                        });
                                                    }
                                 
                                                }
                                            }
                                        }
                                    });
                                }
                                 
                                 
                                function readAllHueSensors() {
                                    //console.log('sensors refresh');
                                    api.sensors(function(err, config) {
                                        if (err) throw err;
                                        var sensors = config.sensors;
                                        for (var sid in sensors) {
                                            var sensor = sensors[sid];
                                            if (sensor.type=='ZLLSwitch') {
                                                var sensorName =  sensor.name.replace(/\s/g, '');
                                                //console.log(sensorName)
                                 
                                                if (sensor.type=='ZLLSwitch') {
                                                    // Hue Dimmer Switch
                                                    
                                                    if (sensor.state.lastupdated != getState('hueSensors.'+sensorName+'.lastupdated').val) {
                                                        // console.log('UPDATE HueSwitch');
                                                        //console.log(sensor.state.buttonevent);
                                                        // console.log(getState('hueSensors.'+sensorName+'.lastupdated').val);                   
                                                        setState('hueSensors.'+sensorName+'.buttonevent', sensor.state.buttonevent);
                                                        setState('hueSensors.'+sensorName+'.lastupdated', sensor.state.lastupdated);
                                                        setState('hueSensors.'+sensorName+'.reachable', sensor.config.reachable);
                                                        setState('hueSensors.'+sensorName+'.on', sensor.config.on);
                                                        setState('hueSensors.'+sensorName+'.battery', parseFloat(sensor.config.battery));
                                                        //setState('hueSensors.'+sensorName+'.pending', sensor.config.pending);
                                                        switch (sensor.state.buttonevent) {
                                                        case 1000:
                                                        setState('hueSensors.'+sensorName+'.button0','initial_press');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 1001:
                                                        setState('hueSensors.'+sensorName+'.button0','repeat');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 1002:
                                                        setState('hueSensors.'+sensorName+'.button0','short_release');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 1003:
                                                        setState('hueSensors.'+sensorName+'.button0','long_release');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 2000:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','initial_press');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 2001:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','repeat');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 2002:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','short_release');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 2003:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','long_release');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 3000:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','initial_press');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 3001:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','repeat');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 3002:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','short_release');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 3003:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','long_release');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        break;
                                                        case 4000:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','initial_press');
                                                        break;
                                                        case 4001:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','repeat');
                                                        break;
                                                        case 4002:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','short_release');
                                                        break;
                                                        case 4003:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','long_release');
                                                        break;
                                                        
                                                        default:
                                                        setState('hueSensors.'+sensorName+'.button0','');
                                                        setState('hueSensors.'+sensorName+'.button1','');
                                                        setState('hueSensors.'+sensorName+'.button2','');
                                                        setState('hueSensors.'+sensorName+'.button3','');
                                                        }
                                                        //
                                                    }
                                                }                    
                                            }
                                        }
                                    });
                                }
                                
                                1 Reply Last reply Reply Quote 0
                                • J
                                  JoergK @aleks-83 last edited by

                                  @aleks-83 das /^ lief bei mir auch.
                                  Ich hatte es auch mal entfernt, weil es mir komisch aussah 😉
                                  Die Syntax von JavaScript kenn ich leider nicht so gut.

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    aleks-83 last edited by

                                    Also ich weiß nicht was passier ist, aber das Skript aus Post #1 funktioniert bei mir seit 2 Tagen wieder.
                                    Die Datenpunkte sind alle wieder da und ich kann auch die Szenen steuern.

                                    Aber ich bleibe jetzt bei dem hue-extended Adapter.
                                    Ich teste auch mal die Reaktionszeit auf Dimmer-Befehle. Das wäre für mich auch noch ein Punkt den ich gerne realisiern würde, es aber bisher an zu langsamer Reaktion des Skriptes gescheitert ist.
                                    Aber eine PayPal Spende wirst du von mir unabhängig davon auch bekommen @Zefau

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    436
                                    Online

                                    31.9k
                                    Users

                                    80.2k
                                    Topics

                                    1.3m
                                    Posts

                                    javascript
                                    3
                                    18
                                    1031
                                    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