Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Vorlage] Alias per Skript erzeugen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

[Vorlage] Alias per Skript erzeugen

Scheduled Pinned Locked Moved JavaScript
314 Posts 38 Posters 62.3k Views 66 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Marty56

    @bishop mit

    custom = undefined
    

    funktioniert es.

    B Offline
    B Offline
    bishop
    wrote on last edited by
    #281

    @marty56

    gut zu wissen!

    Danke

    1 Reply Last reply
    0
    • M Marty56

      @paul53

      Beim Erzeugen für den alias eines Homematic Temperaturfühlers bekomme ich

      javascript.0	2021-02-16 09:34:13.603	warn	(6593) This object will not be created in future versions. Please report this to the developer.
      javascript.0	2021-02-16 09:34:13.603	warn	(6593) Object alias.0.AS_Thermo_TEMPERATURE is invalid: obj.common.custom has an invalid type! Expected "object", received "object"
      

      Bei allen meinen Datenpunkten ist
      custom = [];

      Mir ist nicht klar, was ich hier eintragen soll

      Dieselbe Ausgabe bekomme ich beim Strommessgerät.

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #282

      @marty56 sagte: is invalid: obj.common.custom has an invalid type! Expected "object", received "object"

      Ändere Zeile 23 in

      custom = {}; // verhindert doppelte Ausführung von history, ...
      

      Die neuen Versionen des js-controller unterscheiden zwischen array und und object, das kein Array ist.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      JoJo58J 1 Reply Last reply
      1
      • B bishop

        @paul53

        ich wollte gestern mal wieder paar Aliases anlegen lassen mit deinem Script hat auch immer wunderbar funktioniert!
        Jetzt ist es aber so dass ich ein Fehler bekomme..

        2021-02-10 21:30:11.239 - info: javascript.0 (1231) script.js.common.Aliases_erstellen_neu: Created Alias-State alias.0.Batterien_Prozent.JanRemote
        2021-02-10 21:30:11.239 - warn: javascript.0 (1231) Object alias.0.Batterien_Prozent.JanRemote is invalid: obj.common.custom has an invalid type! Expected "object", received "object"
        2021-02-10 21:30:11.240 - warn: javascript.0 (1231) This object will not be created in future versions. Please report this to the developer.
        
        

        kann gerade nicht den Teil des Scriptes liefern da ich nicht zu hause bin, werde ich nachreichen wenn es benötigt wird.
        Ich versteh den Fehler so das er "object" erwartet aber ein "object" bekommt also eigentlich doch richtig oder?

        Ist ein Zigbee DP der Prozent liefert, gleiche DP werden aber erstellt.

        M Offline
        M Offline
        Michi68
        wrote on last edited by
        #283

        @bishop
        du hast ja auch das Script von CruziX benutzt wenn ich das richtig sehe, hatte eben die gleichen Fehler hab dann
        Zeile 172

        obj.common.custom = []; // Damit die Zuordnung zu iQontrol, Sql etc. nicht übernommen wird
        

        in

        obj.common.custom = {}; // Damit die Zuordnung zu iQontrol, Sql etc. nicht übernommen wird
        

        also die [] gegen die {} getauscht
        dann sollte es wieder gehen, kannst du ja mal Testen, hab sonst von Javascript keine ahnung.
        einfach mal ausprobiert und es ging
        hat mich gerade @Paul53 drauf gebracht Danke dafür

        Gruß Michael

        B 1 Reply Last reply
        0
        • M Michi68

          @bishop
          du hast ja auch das Script von CruziX benutzt wenn ich das richtig sehe, hatte eben die gleichen Fehler hab dann
          Zeile 172

          obj.common.custom = []; // Damit die Zuordnung zu iQontrol, Sql etc. nicht übernommen wird
          

          in

          obj.common.custom = {}; // Damit die Zuordnung zu iQontrol, Sql etc. nicht übernommen wird
          

          also die [] gegen die {} getauscht
          dann sollte es wieder gehen, kannst du ja mal Testen, hab sonst von Javascript keine ahnung.
          einfach mal ausprobiert und es ging
          hat mich gerade @Paul53 drauf gebracht Danke dafür

          Gruß Michael

          B Offline
          B Offline
          bishop
          wrote on last edited by
          #284

          @michi68

          Danke, funktioniert 🙂

          lobomauL 1 Reply Last reply
          0
          • B bishop

            @michi68

            Danke, funktioniert 🙂

            lobomauL Offline
            lobomauL Offline
            lobomau
            wrote on last edited by
            #285

            Ich habe in meinen Alias folgenden Fehler. Im Script muss da wohl etwas angepasst werden. Weiß jemand was? Als Beispiel habe ich einen Alias error hingeschrieben. Ist bei fast allen anderen im Script auch so.

            Alias subscription error. Please check your alias definitions: sourceId=tesla-motors.0.LRW3E7EK4MC387xxx.charge_state.usable_battery_level, sourceObj={"type":"state","common":{"name":"usable_battery_level","role":"value","type":"number","write":false,"read":true},"native":{},"from":"system.adapter.tesla-motors.0","user":"system.user.admin","ts":1644763935883,"_id":"tesla-motors.0.LRW3E7EK4MC387xxx.charge_state.usable_battery_level","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
            

            Script:

            // Originalversion: User Paul53, https://forum.iobroker.net/topic/27295/vorlage-alias-per-skript-erzeugen
            // Angepasst an die asynchrone Eigenschaft von Javascript, kleine Ergänzungen.
            
            const vin = "LRW3E7EK4MC387xxx"; // VIN des Teslas eintragen 
            const prefix = 'alias.0.';
            const custhist = {
                 /* "history.0": {
                    "enabled": true,
                    "changesOnly": true,
                    "debounce": "200",
                    "maxLength": "960",
                    "retention": "1209600",
                    "changesRelogInterval": "0",
                    "changesMinDelta": 0,
                    "aliasId": ""
                  }, */
                  "influxdb.0": {
                    "enabled": true,
                    "changesOnly": true,
                    "debounce": "200",
                    "retention": "63072000", 
                    "changesRelogInterval": "0",
                    "changesMinDelta": 0,
                    "storageType": "",
                    "aliasId": ""
                  }
                };
             
            // Aliasdefinition als Array of Objects
            var aa = [
            /***
            {
                idOrigin : prefix + '',      // Orignal-Datenpunkt
                idRead : '',        // Status-Datenpunkt, wenn Status und Kommando getrennt. Leer wenn keine Trennung
                idAlias : prefix + '',       // Alias-Datenpunkt
                recreate : false,   // true: evtl. existierender Alias wird gelöscht - EXPERIMENTAL
                extend : true,      // true: evtl. existierender Alias wird ergänzt - EXPERIMENTAL: extendObject() statt setObject()
                typeAlias : '',     // Datentyp für Alias: number, boolean, mixed
                read : '',          // "val < 20 ? true : false" // Erkennung "Aus" --> false erfolgt automatisch
                write : '',         // "val ? 'Ein' : 'Aus'"
                nameAlias : '',     // Bezeichnung
                role : '',          // ioBroker Rolle
                desc : '',          // Beschreibung
                min : 0,            // Minimalwert, nur bei Datentyp number
                max : 100,          // Maximalwert, nur bei Datentyp number
                unit : '',          // Einheit bei Datentyp number: %, W, °C, usw.
                states : '',        // {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
                custom : [];        // leeres Array wird automatisch gesetzt, falls nichts angegeben. Verhindert doppelte Ausführung von
                history, ...
                raum : '',          // enum.room, Groß-/Kleinschreibung in der ID beachten
                gewerk : '',        // enum.function, Groß-/Kleinschreibung in der ID beachten
                owner : '',         // Owner, etwa system.user.admin
                group : '',         // Group, etwa system.group.familie
            },
            ***/
             
            // ---------------------------------------------------------------------------
            // Tesla charge
            // ----------------------------------------------------------------------------
            {
            	idAlias : prefix + 'Tesla.charge_state.charge_port_latch',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_port_latch',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla charge_port_latch',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.battery_heater_on',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.battery_heater_on',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla battery_heater_on',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.battery_level',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.battery_level',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla battery_level',
                unit : '%',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.battery_range_km',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.battery_range_km',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla battery_range',
                unit : 'km',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.charge_energy_added',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_energy_added',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla charge_energy_added',
                unit : 'kWh',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.charge_limit_soc',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_limit_soc',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla charge_limit_soc',
                unit : '%',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.charge_km_added_rated',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_miles_added_rated',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla charge_km_added_rated',
                unit : 'km',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.charge_rate',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_rate',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla charge_rate',
                //unit : 'km',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.charger_power',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charger_power',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla charger_power',
                //unit : 'km',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.charging_state',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charging_state',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla charging_state',
                //unit : 'km',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.est_battery_range_km',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.est_battery_range_km',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla est_battery_range_km',
                unit : 'km',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.fast_charger_present',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.fast_charger_present',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla fast_charger_present',
                //unit : 'km',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.ideal_battery_range_km',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.ideal_battery_range_km',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla ideal_battery_range_km',
                unit : 'km',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.minutes_to_full_charge',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.minutes_to_full_charge',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla minutes_to_full_charge',
                unit : 'min',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.preconditioning_enabled',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.preconditioning_enabled',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla preconditioning_enabled',
                //unit : 'min',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            {
            	idAlias : prefix + 'Tesla.charge_state.usable_battery_level',
            	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.usable_battery_level',
            	recreate : true,
            	extend : true,
            	nameAlias : 'Tesla usable_battery_level',
                unit : '%',
            	raum : 'tesla',
            	custom : custhist,
            	owner : "system.user.admin",
            	group : "system.group.user"
            },
            ];
             
             
            // ******************************
             
            // -------------------------------------------------
            // -------------------------------------------------
            function alias2enum(a, en, cb) {
                cb = (typeof(cb) === 'function') ? cb : function() {};
                if (en) {
                    var o = getObject(en); 
                    if(o) {
                        if (!o.common.members.includes(a)) {
                            o.common.members.push(a);
                            setObject(en, o, function(e, o) { cb(); });
                        } else cb();
                    } else {
                        log('alias2enum: ' + en + ' cannot get object', 'warn');
                        cb();
                    }
            	} else {
                    log('alias2enum: ' + en + ' is invalid', 'warn');
                    cb();
                }
            }    
             
             
            // ---------------------------------------------------
            // ---------------------------------------------------
            function createAlias(o, cb) {
                var obj = {};
                
                cb = (typeof(cb) === 'function') ? cb : function() {};
             
                if (!o || ! o.idOrigin || !o.idAlias) {
                    log(o, 'error');
                }
                
                if (!existsState(o.idOrigin)) {
                    log(o.idOrigin + ' existiert nicht', 'warn');
                    cb();
                    return;
                }
             
                if (existsState(o.idAlias)) {
                    if (o.recreate) {
                        log(o.idAlias + ' wird gelöscht', 'warn');    
                        // EXPERIMENTAL
                        // deleteObject() gibt keinen Fehler aus, löscht aber auch nicht.
                        // falsche Anwendung? --> Recherchieren... ;-)
                        // workaround: recreate auf false und extend auf true setzen.
                        deleteObject(o.idAlias, false, function(err, obj) {
                            o.recreate = false;
                            o.extend = true;
                            createAlias(o, cb);
                            return;
                        });
                    } else if (!o.extend) {
                        log(o.idAlias + ' schon vorhanden')
                        cb();
                        return;
                    } else {
                        log(o.idAlias + ' wird ergänzt');
                    }
                } else {
                    log(o.idAlias + ' wird angelegt');
                }
             
                obj.type = 'state';
                obj.common = getObject(o.idOrigin).common;
                obj.acl = getObject(o.idOrigin).acl;
                obj.common.alias = {};
             
                if(o.idRead) {
                    obj.common.alias.id = {};
                    obj.common.alias.id.read = o.idRead;
                    obj.common.alias.id.write = o.idOrigin;
                    obj.common.read = true;
                } else obj.common.alias.id = o.idOrigin;
                
                if(o.typeAlias) obj.common.type = o.typeAlias;
                if(obj.common.read !== false && o.read) obj.common.alias.read = o.read;
                if(obj.common.write !== false && o.write) obj.common.alias.write = o.write;
                if(o.nameAlias) obj.common.name = o.nameAlias;
                if(o.role) obj.common.role = o.role;
                if(o.desc) obj.common.desc = o.desc;
                if(o.min !== undefined) obj.common.min = o.min;
                if(o.max !== undefined) obj.common.max = o.max;
                if(o.unit) obj.common.unit = o.unit;
                if(o.states) obj.common.states = o.states;
                if(o.owner && obj.acl.owner) obj.acl.owner = o.owner;
                if(o.group && obj.acl.ownerGroup) obj.acl.ownerGroup = o.group;
              
                if(o.custom) {
                    obj.common.custom = o.custom;
                } else {
                    obj.common.custom = [];
                }
                
                obj.native = {};
            	
                // EXPERIMENTAL
                // Auswirkung von extendObject() auf Historydaten?
                extendObject(o.idAlias, obj, function(e, oa) {
                    if (e) {
                        log('Alias ' + o.idAlias + ' nicht angelegt - Fehler ' + e, 'error');
                        cb();
                        return;
                    }
                    log(o.idAlias + ' wird zum Raum ' + o.raum + ' hinzugefügt', 'info');
                    alias2enum(o.idAlias, 'enum.rooms.' + o.raum, function() {
                        if (o.gewerk) {
                            log(o.idAlias + ' wird zur Funktion ' + o.gewerk + ' hinzugefügt', 'info');
                            alias2enum(o.idAlias, 'enum.funtions.' + o.gewerk, cb);
                        } else cb();
                    });
                }); 
            }
             
             
            // ---------------------------------------------------
            // ---------------------------------------------------
            function createAliases() {
            	if (!aa) return;
            	if (!aa.length) return;
            	createAlias(aa.shift(), createAliases);
            }
             
             
            // *******************************
             
            createAliases();
            

            Host: NUC8i3 mit Proxmox:

            • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
            • Slave: Pi4
            GarfonsoG 1 Reply Last reply
            0
            • lobomauL lobomau

              Ich habe in meinen Alias folgenden Fehler. Im Script muss da wohl etwas angepasst werden. Weiß jemand was? Als Beispiel habe ich einen Alias error hingeschrieben. Ist bei fast allen anderen im Script auch so.

              Alias subscription error. Please check your alias definitions: sourceId=tesla-motors.0.LRW3E7EK4MC387xxx.charge_state.usable_battery_level, sourceObj={"type":"state","common":{"name":"usable_battery_level","role":"value","type":"number","write":false,"read":true},"native":{},"from":"system.adapter.tesla-motors.0","user":"system.user.admin","ts":1644763935883,"_id":"tesla-motors.0.LRW3E7EK4MC387xxx.charge_state.usable_battery_level","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
              

              Script:

              // Originalversion: User Paul53, https://forum.iobroker.net/topic/27295/vorlage-alias-per-skript-erzeugen
              // Angepasst an die asynchrone Eigenschaft von Javascript, kleine Ergänzungen.
              
              const vin = "LRW3E7EK4MC387xxx"; // VIN des Teslas eintragen 
              const prefix = 'alias.0.';
              const custhist = {
                   /* "history.0": {
                      "enabled": true,
                      "changesOnly": true,
                      "debounce": "200",
                      "maxLength": "960",
                      "retention": "1209600",
                      "changesRelogInterval": "0",
                      "changesMinDelta": 0,
                      "aliasId": ""
                    }, */
                    "influxdb.0": {
                      "enabled": true,
                      "changesOnly": true,
                      "debounce": "200",
                      "retention": "63072000", 
                      "changesRelogInterval": "0",
                      "changesMinDelta": 0,
                      "storageType": "",
                      "aliasId": ""
                    }
                  };
               
              // Aliasdefinition als Array of Objects
              var aa = [
              /***
              {
                  idOrigin : prefix + '',      // Orignal-Datenpunkt
                  idRead : '',        // Status-Datenpunkt, wenn Status und Kommando getrennt. Leer wenn keine Trennung
                  idAlias : prefix + '',       // Alias-Datenpunkt
                  recreate : false,   // true: evtl. existierender Alias wird gelöscht - EXPERIMENTAL
                  extend : true,      // true: evtl. existierender Alias wird ergänzt - EXPERIMENTAL: extendObject() statt setObject()
                  typeAlias : '',     // Datentyp für Alias: number, boolean, mixed
                  read : '',          // "val < 20 ? true : false" // Erkennung "Aus" --> false erfolgt automatisch
                  write : '',         // "val ? 'Ein' : 'Aus'"
                  nameAlias : '',     // Bezeichnung
                  role : '',          // ioBroker Rolle
                  desc : '',          // Beschreibung
                  min : 0,            // Minimalwert, nur bei Datentyp number
                  max : 100,          // Maximalwert, nur bei Datentyp number
                  unit : '',          // Einheit bei Datentyp number: %, W, °C, usw.
                  states : '',        // {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
                  custom : [];        // leeres Array wird automatisch gesetzt, falls nichts angegeben. Verhindert doppelte Ausführung von
                  history, ...
                  raum : '',          // enum.room, Groß-/Kleinschreibung in der ID beachten
                  gewerk : '',        // enum.function, Groß-/Kleinschreibung in der ID beachten
                  owner : '',         // Owner, etwa system.user.admin
                  group : '',         // Group, etwa system.group.familie
              },
              ***/
               
              // ---------------------------------------------------------------------------
              // Tesla charge
              // ----------------------------------------------------------------------------
              {
              	idAlias : prefix + 'Tesla.charge_state.charge_port_latch',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_port_latch',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla charge_port_latch',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.battery_heater_on',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.battery_heater_on',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla battery_heater_on',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.battery_level',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.battery_level',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla battery_level',
                  unit : '%',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.battery_range_km',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.battery_range_km',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla battery_range',
                  unit : 'km',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.charge_energy_added',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_energy_added',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla charge_energy_added',
                  unit : 'kWh',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.charge_limit_soc',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_limit_soc',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla charge_limit_soc',
                  unit : '%',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.charge_km_added_rated',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_miles_added_rated',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla charge_km_added_rated',
                  unit : 'km',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.charge_rate',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charge_rate',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla charge_rate',
                  //unit : 'km',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.charger_power',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charger_power',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla charger_power',
                  //unit : 'km',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.charging_state',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.charging_state',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla charging_state',
                  //unit : 'km',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.est_battery_range_km',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.est_battery_range_km',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla est_battery_range_km',
                  unit : 'km',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.fast_charger_present',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.fast_charger_present',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla fast_charger_present',
                  //unit : 'km',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.ideal_battery_range_km',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.ideal_battery_range_km',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla ideal_battery_range_km',
                  unit : 'km',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.minutes_to_full_charge',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.minutes_to_full_charge',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla minutes_to_full_charge',
                  unit : 'min',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.preconditioning_enabled',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.preconditioning_enabled',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla preconditioning_enabled',
                  //unit : 'min',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              {
              	idAlias : prefix + 'Tesla.charge_state.usable_battery_level',
              	idOrigin : 'tesla-motors.0.' + vin + '.charge_state.usable_battery_level',
              	recreate : true,
              	extend : true,
              	nameAlias : 'Tesla usable_battery_level',
                  unit : '%',
              	raum : 'tesla',
              	custom : custhist,
              	owner : "system.user.admin",
              	group : "system.group.user"
              },
              ];
               
               
              // ******************************
               
              // -------------------------------------------------
              // -------------------------------------------------
              function alias2enum(a, en, cb) {
                  cb = (typeof(cb) === 'function') ? cb : function() {};
                  if (en) {
                      var o = getObject(en); 
                      if(o) {
                          if (!o.common.members.includes(a)) {
                              o.common.members.push(a);
                              setObject(en, o, function(e, o) { cb(); });
                          } else cb();
                      } else {
                          log('alias2enum: ' + en + ' cannot get object', 'warn');
                          cb();
                      }
              	} else {
                      log('alias2enum: ' + en + ' is invalid', 'warn');
                      cb();
                  }
              }    
               
               
              // ---------------------------------------------------
              // ---------------------------------------------------
              function createAlias(o, cb) {
                  var obj = {};
                  
                  cb = (typeof(cb) === 'function') ? cb : function() {};
               
                  if (!o || ! o.idOrigin || !o.idAlias) {
                      log(o, 'error');
                  }
                  
                  if (!existsState(o.idOrigin)) {
                      log(o.idOrigin + ' existiert nicht', 'warn');
                      cb();
                      return;
                  }
               
                  if (existsState(o.idAlias)) {
                      if (o.recreate) {
                          log(o.idAlias + ' wird gelöscht', 'warn');    
                          // EXPERIMENTAL
                          // deleteObject() gibt keinen Fehler aus, löscht aber auch nicht.
                          // falsche Anwendung? --> Recherchieren... ;-)
                          // workaround: recreate auf false und extend auf true setzen.
                          deleteObject(o.idAlias, false, function(err, obj) {
                              o.recreate = false;
                              o.extend = true;
                              createAlias(o, cb);
                              return;
                          });
                      } else if (!o.extend) {
                          log(o.idAlias + ' schon vorhanden')
                          cb();
                          return;
                      } else {
                          log(o.idAlias + ' wird ergänzt');
                      }
                  } else {
                      log(o.idAlias + ' wird angelegt');
                  }
               
                  obj.type = 'state';
                  obj.common = getObject(o.idOrigin).common;
                  obj.acl = getObject(o.idOrigin).acl;
                  obj.common.alias = {};
               
                  if(o.idRead) {
                      obj.common.alias.id = {};
                      obj.common.alias.id.read = o.idRead;
                      obj.common.alias.id.write = o.idOrigin;
                      obj.common.read = true;
                  } else obj.common.alias.id = o.idOrigin;
                  
                  if(o.typeAlias) obj.common.type = o.typeAlias;
                  if(obj.common.read !== false && o.read) obj.common.alias.read = o.read;
                  if(obj.common.write !== false && o.write) obj.common.alias.write = o.write;
                  if(o.nameAlias) obj.common.name = o.nameAlias;
                  if(o.role) obj.common.role = o.role;
                  if(o.desc) obj.common.desc = o.desc;
                  if(o.min !== undefined) obj.common.min = o.min;
                  if(o.max !== undefined) obj.common.max = o.max;
                  if(o.unit) obj.common.unit = o.unit;
                  if(o.states) obj.common.states = o.states;
                  if(o.owner && obj.acl.owner) obj.acl.owner = o.owner;
                  if(o.group && obj.acl.ownerGroup) obj.acl.ownerGroup = o.group;
                
                  if(o.custom) {
                      obj.common.custom = o.custom;
                  } else {
                      obj.common.custom = [];
                  }
                  
                  obj.native = {};
              	
                  // EXPERIMENTAL
                  // Auswirkung von extendObject() auf Historydaten?
                  extendObject(o.idAlias, obj, function(e, oa) {
                      if (e) {
                          log('Alias ' + o.idAlias + ' nicht angelegt - Fehler ' + e, 'error');
                          cb();
                          return;
                      }
                      log(o.idAlias + ' wird zum Raum ' + o.raum + ' hinzugefügt', 'info');
                      alias2enum(o.idAlias, 'enum.rooms.' + o.raum, function() {
                          if (o.gewerk) {
                              log(o.idAlias + ' wird zur Funktion ' + o.gewerk + ' hinzugefügt', 'info');
                              alias2enum(o.idAlias, 'enum.funtions.' + o.gewerk, cb);
                          } else cb();
                      });
                  }); 
              }
               
               
              // ---------------------------------------------------
              // ---------------------------------------------------
              function createAliases() {
              	if (!aa) return;
              	if (!aa.length) return;
              	createAlias(aa.shift(), createAliases);
              }
               
               
              // *******************************
               
              createAliases();
              
              GarfonsoG Offline
              GarfonsoG Offline
              Garfonso
              Developer
              wrote on last edited by
              #286

              @lobomau said in [Vorlage] Alias per Skript erzeugen:

              tesla-motors.0.LRW3E7EK4MC387xxx.charge_state.usable_battery_level

              gibt es das Objekt tesla-motors.0.LRW3E7EK4MC387xxx.charge_state.usable_battery_level denn?

              Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

              Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

              lobomauL 1 Reply Last reply
              0
              • GarfonsoG Garfonso

                @lobomau said in [Vorlage] Alias per Skript erzeugen:

                tesla-motors.0.LRW3E7EK4MC387xxx.charge_state.usable_battery_level

                gibt es das Objekt tesla-motors.0.LRW3E7EK4MC387xxx.charge_state.usable_battery_level denn?

                lobomauL Offline
                lobomauL Offline
                lobomau
                wrote on last edited by
                #287

                @garfonso ja, nur die xxx habe ich hier anonymisiert. Die Aliase funktioneren ansonsten auch. Kommt halt nur dieser Fehler. Bzw. ich hab in log grad geschaut und heute war der Fehler noch nicht.

                Host: NUC8i3 mit Proxmox:

                • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                • Slave: Pi4
                H 1 Reply Last reply
                0
                • lobomauL lobomau

                  @garfonso ja, nur die xxx habe ich hier anonymisiert. Die Aliase funktioneren ansonsten auch. Kommt halt nur dieser Fehler. Bzw. ich hab in log grad geschaut und heute war der Fehler noch nicht.

                  H Offline
                  H Offline
                  homecineplexx
                  wrote on last edited by
                  #288

                  kann man zb unter einem Alias Ordner, wo von einem Device Alias-Datenpunkte liegen auch einen nicht Alias anlegen, dem ich einen Namen vergeben kann, den ich auch verwenden kann?

                  lobomauL 1 Reply Last reply
                  0
                  • H homecineplexx

                    kann man zb unter einem Alias Ordner, wo von einem Device Alias-Datenpunkte liegen auch einen nicht Alias anlegen, dem ich einen Namen vergeben kann, den ich auch verwenden kann?

                    lobomauL Offline
                    lobomauL Offline
                    lobomau
                    wrote on last edited by lobomau
                    #289

                    @homecineplexx kann man erstmal machen. Ob es funktioniert und welche Nachteile es hat kann ich nicht sagen. Eigentlich hat man dafür ja "0_userdata".

                    Mal testweise angelegt:
                    83aaa6ba-7ef9-490c-8bd5-06d9a79ee04a-image.png

                    admin warnt natürlich dass hier ein Alias ohne Ziel ist:

                    
                    admin.0
                    2022-02-18 10:00:46.889	warn	Alias alias.0.Neuer_Ordner.Test has no target 9
                    

                    Host: NUC8i3 mit Proxmox:

                    • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                    • Slave: Pi4
                    H 1 Reply Last reply
                    0
                    • lobomauL lobomau

                      @homecineplexx kann man erstmal machen. Ob es funktioniert und welche Nachteile es hat kann ich nicht sagen. Eigentlich hat man dafür ja "0_userdata".

                      Mal testweise angelegt:
                      83aaa6ba-7ef9-490c-8bd5-06d9a79ee04a-image.png

                      admin warnt natürlich dass hier ein Alias ohne Ziel ist:

                      
                      admin.0
                      2022-02-18 10:00:46.889	warn	Alias alias.0.Neuer_Ordner.Test has no target 9
                      
                      H Offline
                      H Offline
                      homecineplexx
                      wrote on last edited by
                      #290

                      @lobomau said in [Vorlage] Alias per Skript erzeugen:

                      "0_userdata".

                      ja mag schon sein, aber ich hab ehrlich gesagt keine lust, dass ich teile eines Devices im Alias habe und andere wiederrum im userdata, was aus meiner Sicht auch keinen Sinn ergibt, wenn ich was suche.

                      also per JavaScript konnte ich zwar so ein Objekt anlegen, aber keinen Wert zuweisen

                      paul53P da_WoodyD 2 Replies Last reply
                      0
                      • H homecineplexx

                        @lobomau said in [Vorlage] Alias per Skript erzeugen:

                        "0_userdata".

                        ja mag schon sein, aber ich hab ehrlich gesagt keine lust, dass ich teile eines Devices im Alias habe und andere wiederrum im userdata, was aus meiner Sicht auch keinen Sinn ergibt, wenn ich was suche.

                        also per JavaScript konnte ich zwar so ein Objekt anlegen, aber keinen Wert zuweisen

                        paul53P Offline
                        paul53P Offline
                        paul53
                        wrote on last edited by
                        #291

                        @homecineplexx sagte: keine lust, dass ich teile eines Devices im Alias habe und andere wiederrum im userdata,

                        Das lässt sich nicht vermeiden. Möglichst identische Ordner-Strukturen für beides verwenden.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Reply Last reply
                        0
                        • H homecineplexx

                          @lobomau said in [Vorlage] Alias per Skript erzeugen:

                          "0_userdata".

                          ja mag schon sein, aber ich hab ehrlich gesagt keine lust, dass ich teile eines Devices im Alias habe und andere wiederrum im userdata, was aus meiner Sicht auch keinen Sinn ergibt, wenn ich was suche.

                          also per JavaScript konnte ich zwar so ein Objekt anlegen, aber keinen Wert zuweisen

                          da_WoodyD Online
                          da_WoodyD Online
                          da_Woody
                          wrote on last edited by
                          #292

                          @homecineplexx sagte in [Vorlage] Alias per Skript erzeugen:

                          keine lust

                          ist mal keine gute einstellung...
                          aber, warum legst du den DP nicht in userdate.0 an und machst dann einen alias davon?

                          gruß vom Woody
                          HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

                          paul53P H 2 Replies Last reply
                          0
                          • da_WoodyD da_Woody

                            @homecineplexx sagte in [Vorlage] Alias per Skript erzeugen:

                            keine lust

                            ist mal keine gute einstellung...
                            aber, warum legst du den DP nicht in userdate.0 an und machst dann einen alias davon?

                            paul53P Offline
                            paul53P Offline
                            paul53
                            wrote on last edited by
                            #293

                            @da_woody sagte: machst dann einen alias davon?

                            Ist auch eine Variante, die allerdings Ressourcen verschwendet.

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            da_WoodyD 1 Reply Last reply
                            0
                            • paul53P paul53

                              @da_woody sagte: machst dann einen alias davon?

                              Ist auch eine Variante, die allerdings Ressourcen verschwendet.

                              da_WoodyD Online
                              da_WoodyD Online
                              da_Woody
                              wrote on last edited by
                              #294

                              @paul53 klar, aber wenn wer keine lust hat... 😉

                              gruß vom Woody
                              HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

                              1 Reply Last reply
                              0
                              • da_WoodyD da_Woody

                                @homecineplexx sagte in [Vorlage] Alias per Skript erzeugen:

                                keine lust

                                ist mal keine gute einstellung...
                                aber, warum legst du den DP nicht in userdate.0 an und machst dann einen alias davon?

                                H Offline
                                H Offline
                                homecineplexx
                                wrote on last edited by
                                #295

                                @da_woody said in [Vorlage] Alias per Skript erzeugen:

                                @homecineplexx sagte in [Vorlage] Alias per Skript erzeugen:

                                keine lust

                                ist mal keine gute einstellung...
                                aber, warum legst du den DP nicht in userdate.0 an und machst dann einen alias davon?

                                das ist vielleicht eine gute Idee....ab und zu ist man so verbissen in eine Idee, dass man das rundherum nicht sieht...danke

                                1 Reply Last reply
                                2
                                • paul53P paul53

                                  @Troya sagte:

                                  Kannst du dein Script damit erweitern?

                                  Versuche es bitte selbst mit folgenden Erweiterungen:

                                  var raum, gewerk; // Zeile 6 ergänzen
                                  
                                  // raum = 'EG_Flur'; // Zeile 18
                                  // gewerk = 'Licht'; // Zeile 19
                                  
                                  // am Ende der Funktion createAlias() ergänzen (hinter setObject())
                                        if(raum && getObject('enum.rooms.' + raum)) {
                                           let obj = getObject('enum.rooms.' + raum)
                                           obj.common.members.push(idDst);
                                           setObject('enum.rooms.' + raum, obj);
                                        }
                                        if(gewerk && getObject('enum.functions.' + gewerk)) {
                                           let obj = getObject('enum.functions.' + gewerk)
                                           obj.common.members.push(idDst);
                                           setObject('enum.functions.' + gewerk, obj);
                                        }
                                  
                                  C Offline
                                  C Offline
                                  CBMOD
                                  wrote on last edited by CBMOD
                                  #296

                                  @paul53

                                       let obj = getObject('enum.functions.' + gewerk)
                                       obj.common.members.push(idDst);
                                       setObject('enum.functions.' + gewerk, obj);
                                  

                                  das setzen des Gewerks (Function) mit setObject funktioniert ! - aber wie kann ich es via script wieder entfernen?
                                  bei dem Versuch mit delete object löscht es mir das komplette Gewerk

                                  da_WoodyD paul53P 2 Replies Last reply
                                  0
                                  • C CBMOD

                                    @paul53

                                         let obj = getObject('enum.functions.' + gewerk)
                                         obj.common.members.push(idDst);
                                         setObject('enum.functions.' + gewerk, obj);
                                    

                                    das setzen des Gewerks (Function) mit setObject funktioniert ! - aber wie kann ich es via script wieder entfernen?
                                    bei dem Versuch mit delete object löscht es mir das komplette Gewerk

                                    da_WoodyD Online
                                    da_WoodyD Online
                                    da_Woody
                                    wrote on last edited by
                                    #297

                                    @cbmod das script in allen ehren, aber warum verwendest du nicht den Alias Manager?

                                    gruß vom Woody
                                    HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

                                    F 1 Reply Last reply
                                    0
                                    • C CBMOD

                                      @paul53

                                           let obj = getObject('enum.functions.' + gewerk)
                                           obj.common.members.push(idDst);
                                           setObject('enum.functions.' + gewerk, obj);
                                      

                                      das setzen des Gewerks (Function) mit setObject funktioniert ! - aber wie kann ich es via script wieder entfernen?
                                      bei dem Versuch mit delete object löscht es mir das komplette Gewerk

                                      paul53P Offline
                                      paul53P Offline
                                      paul53
                                      wrote on last edited by paul53
                                      #298

                                      @cbmod sagte: wie kann ich es via script wieder entfernen?

                                      Objekt einlesen, Element im Array obj.common.members löschen und Objekt schreiben.

                                      @da_woody sagte in [Vorlage] Alias per Skript erzeugen:

                                      warum verwendest du nicht den Alias Manager?

                                      Ja, mittlerweile gibt es Adapter zum Alias erzeugen.

                                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                      da_WoodyD 1 Reply Last reply
                                      0
                                      • paul53P paul53

                                        @cbmod sagte: wie kann ich es via script wieder entfernen?

                                        Objekt einlesen, Element im Array obj.common.members löschen und Objekt schreiben.

                                        @da_woody sagte in [Vorlage] Alias per Skript erzeugen:

                                        warum verwendest du nicht den Alias Manager?

                                        Ja, mittlerweile gibt es Adapter zum Alias erzeugen.

                                        da_WoodyD Online
                                        da_WoodyD Online
                                        da_Woody
                                        wrote on last edited by
                                        #299

                                        @paul53 ich denke, du kannst damit leben. ich hab ja auch mit deinem script angefangen, darum "in allen ehren" 🙂
                                        mit dem adapter ist aber auch das bearbeiten der aliase viel einfacher...
                                        trotzdem danke für dein script damals!

                                        gruß vom Woody
                                        HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

                                        paul53P 1 Reply Last reply
                                        0
                                        • da_WoodyD da_Woody

                                          @paul53 ich denke, du kannst damit leben. ich hab ja auch mit deinem script angefangen, darum "in allen ehren" 🙂
                                          mit dem adapter ist aber auch das bearbeiten der aliase viel einfacher...
                                          trotzdem danke für dein script damals!

                                          paul53P Offline
                                          paul53P Offline
                                          paul53
                                          wrote on last edited by
                                          #300

                                          @da_woody sagte: ich denke, du kannst damit leben.

                                          Ja, natürlich. Ich verwende auch den Alias-Manager.

                                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                          1 Reply Last reply
                                          1
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          414

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe