Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Skript "Lichter zählen": Kombination von z-Wave + Homematic

    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] Skript "Lichter zählen": Kombination von z-Wave + Homematic

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

      Hallo,

      kannst du einen Screenshot der Zuordnung posten?

      Hast du gesehen, dass in den functions nur Kanäle zugeordnete sind, nicht die Datenpunkte (zB State oder Level)?

      Gruß

      Pix

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

        So wie ich das verstehe, liegt es in der unterschiedlichen Namensgebung, also "Garagenlicht.State" bei Homematic, aber bei z-wave lediglich "switch". Hab schon versucht, händisch im Node ein Objekt anzulegen und darin die Namensstruktur von Homematic zu erzeugen, aber iwie haut es trotzdem nicht hin.

        So sieht das im Original ohne meine Veränderungen aus.
        483_screenshot_lichtzaehlen.png

        1 Reply Last reply Reply Quote 0
        • Dutchman
          Dutchman Developer Most Active Administrators last edited by

          @maloross:

          So wie ich das verstehe, liegt es in der unterschiedlichen Namensgebung, also "Garagenlicht.State" bei Homematic, aber bei z-wave lediglich "switch". Hab schon versucht, händisch im Node ein Objekt anzulegen und darin die Namensstruktur von Homematic zu erzeugen, aber iwie haut es trotzdem nicht hin.

          So sieht das im Original ohne meine Veränderungen aus.

          screenshot_lichtzaehlen.png `

          Welche skript benutzt du ? Ich vermute ma er triggert nur auf die waerte STATE, das skript muesste man dan fuer diesen teil anpassen damit er auch mit deinen objecten uerbeinstimmt.

          ~Dutch

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

            Dieses hier:

            ! /* System Zahl Lichter
            ! zaehlt die Lichter in allen Raeumen und meldet die Eingeschalteten namentlich
            ! Daten kommen vom Gewerk "Licht"
            ! */
            ! createState('zaehlen_Lichter.anzahlLichter', {
            ! def: 0,
            ! name: 'Anzahl der vorhandenen Lichter',
            ! desc: 'Anzahl aller Lichter im Gewerk',
            ! read: true,
            ! write: true,
            ! min: 0,
            ! type: 'number'
            ! });
            ! createState('zaehlen_Lichter.anzahlLichterAn', {
            ! def: 0,
            ! name: 'Anzahl eingeschaltete Lichter',
            ! desc: 'Anzahl aller eingeschalteten Lichter im Gewerk',
            ! read: true,
            ! write: true,
            ! min: 0,
            ! type: 'number'
            ! });
            ! createState('zaehlen_Lichter.textLichterAn', {
            ! def: "",
            ! name: 'Aufzaehlung eingeschaltete Lichter',
            ! desc: 'Namen aller eingeschalteten Lichter im Gewerk als Liste',
            ! read: true,
            ! write: true,
            ! type: 'string'
            ! });
            ! var cacheSelector = $('channelstate.id=*.STATE');
            ! var cacheSelectorState = $('channelstate.id=*.STATE');
            ! var cacheSelectorDimmer = $('channelstate.id=*.LEVEL');

            ! function countLamps(obj) {
            ! // Setzt die Zaehler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
            ! var anzahlLichterAn = 0;
            ! var anzahlLichter = 0;
            ! var textLichterAn = [];
            ! log('Ausloesender Aktor: ' + obj.id + ': ' + obj.newState.val); // Info im Log, welcher Zustand sich geaendert hat
            ! cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
            ! var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
            ! var obj = getObject(id);
            ! if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Lichter hochgezaehlt
            ! textLichterAn.push(obj.common.name); // Zu Array hinzufügen
            ! }
            ! log("Licht Nr. " + i + ": " + getObject(id).common.name + ": " + status);
            ! ++anzahlLichter; // Zaehlt die Anzahl der vorhandenen Lichter unabhaengig vom Status
            ! });
            ! cacheSelectorDimmer.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
            ! var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
            ! if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
            ! textLichterAn.push(obj.common.name); // Zu Array hinzufügen
            ! }
            ! log("Licht Nr. " + i + ": " + id + ": " + status); // gibt alle Elemente *.LEVEL im Gewerk Licht mit dem aktuelle Status im Log aus
            ! ++anzahlLichter; // Zaehlt die Anzahl der vorhandenen Lichter unabhaengig vom Status
            ! });
            ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
            ! log("Text: " + textLichterAn);
            ! 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("zaehlen_Lichter.textLichterAn", textLichterAn.join(',
            ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
            ! setState("zaehlen_Lichter.anzahlLichterAn", textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
            ! setState("zaehlen_Lichter.anzahlLichter", anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
            ! }
            ! cacheSelectorState.on(function(obj) { // bei Zustandaenderung *. STATE im Gewerk Fenster
            ! countLamps(obj);
            ! });
            ! cacheSelectorDimmer.on(function(obj) { // bei Zustandaenderung *. LEVEL im Gewerk Licht
            ! countLamps(obj);
            ! });

            Die Definition der Variablen hab ich im Skript rot markiert, da müsste noch der Double Switch rein, weiß aber nicht wie. Im Vergleich sind die Datenpunkte so definiert (links Homematic, rechts z-wave):

            483_vergleich.jpg

            1 Reply Last reply Reply Quote 0
            • Dutchman
              Dutchman Developer Most Active Administrators last edited by

              Auf den ersten schnellen Blick macht das Script was mir state.id.

              Bei den einen heißt die id so bei den anderen switch_xx, morgen Mal an pc Schaun…

              ~Dutch


              Send from mobile device

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

                @Dutchman:

                Auf den ersten schnellen Blick macht das Script was mir state.id.

                Bei den einen heißt die id so bei den anderen switch_xx, morgen Mal an pc Schaun…

                ~Dutch


                Send from mobile device `

                dachte ich mir auch, aber meine Kenntnisse reichen nicht aus, das umzusetzen. Das Erstellen eines neuen Datenpunktes für den Switch, wo ich die id angepasst hatte, war nicht erfolgreich.

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

                  Nachdem ich nun eine ganze Weile rumexperimentiert habe, bin ich noch nicht weiter. Hier ein Auszug aus meinem aktuellen Skript (eingeschränkt funktionsfähig).

                  ! [… Definition Variablen]
                  ! [… Anlegen Status]
                  ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht
                  ! var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
                  ! var cacheSelectorSwitch_1 = $('channelstate.id=*.Switch_1'); // Zwave Lampen (müssen im Gewerk Licht sein)
                  ! 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
                  ! });
                  ! ` > cacheSelectorSwitch_1.each(function(id, i) { // Schleife für jedes gefundenen Element *.Switch_1 im Gewerk Licht

                  var obj = getObject(id);

                  var name = getObject(id).common.name;

                  var status = getState(id).val; // Zustand *.ON abfragen (jedes Element)

                  var devicename = name.substring(0, name.indexOf(".Switch_1")); //.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

                  }); ! [… Dimmer] ! [… Array sortieren] ! // 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(); ! }); > CacheSelectorSwitch_1.on(function(obj) { // bei Zustandänderung *.Switch_1 von ZwaveLampen im Gewerk Licht

                  if (logging) log('Auslösende SWITCH: ' + 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();
                  ! });
                  ! 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(/( |<([^>]+)>)/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);
                  ! });

                  Auch ein manuell erstellter Datenpunkt im entsprechenden Node wird nicht erfasst. HM-Geräte werden hingegen einwandfrei erkannt und ausgewertet. Wo hab ich da noch einen Fehler drin?

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

                    Vielleicht hilft ja das Script für Lichter homematic + hue weiter.

                    Da wird irgendwie noch mit der role gearbeitet:

                    var cacheSelectorHue = $('state[id=*.on](functions=Licht)[role=switch]');   //var cacheSelectorHue = $('channel[state.id=*.ON](functions="Licht")'); // HUE Lampen (müssen im Gewerk Licht sein)
                    

                    Komplettes Script:

                    ! ````
                    /* 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
                    21.06.2017 HUE Lampen eingebaut
                    */
                    var logging = false;
                    ! 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 = $('channelstate.id=*.STATE'); // Gewerk Licht
                    var cacheSelectorLevel = $('channelstate.id=*.LEVEL');
                    var cacheSelectorHue = $('stateid=*.on[role=switch]'); //var cacheSelectorHue = $('channelstate.id=*.ON'); // HUE Lampen (müssen im Gewerk Licht sein)
                    ! 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
                    });

                    cacheSelectorHue.each(function(id, i) { // Schleife für jedes gefundenen Element *.ON im Gewerk Licht
                        var obj = getObject(id);
                        var name = getObject(id).common.name;
                        var status = getState(id).val; // Zustand *.ON abfragen (jedes Element)
                        var devicename = name.substring(0, name.indexOf(".on")); //.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
                    });
                    ! // 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(',
                    ')); // 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();
                    });
                    cacheSelectorHue.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();
                    });
                    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();
                    });
                    ! 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(/( |<([^>]+)>)/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);
                    });

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

                      Danke, genau dieses Skript habe ich versucht zu modifizieren.

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

                        Das Problem ist gelöst, das Skript modifiziert und lauffähig. Danke für die Unterstützung.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        641
                        Online

                        31.9k
                        Users

                        80.3k
                        Topics

                        1.3m
                        Posts

                        4
                        11
                        1607
                        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