Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Vorlage] Alias per Skript erzeugen

    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

    [Vorlage] Alias per Skript erzeugen

    This topic has been deleted. Only users with topic management privileges can see it.
    • da_Woody
      da_Woody @paul53 last edited by

      @paul53 hab ich ja geschrieben... seltsam ist das allemal...

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

        @paul53 Danke funktioniert super.

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

          @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.

          B paul53 2 Replies Last reply Reply Quote 0
          • B
            bishop @Marty56 last edited by

            @marty56

            wie in meinem Post oben

            ist nicht das Script von hier!

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

              @bishop mit

              custom = undefined
              

              funktioniert es.

              B 1 Reply Last reply Reply Quote 0
              • B
                bishop @Marty56 last edited by

                @marty56

                gut zu wissen!

                Danke

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

                  @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.

                  JoJo58 1 Reply Last reply Reply Quote 1
                  • M
                    Michi68 @bishop last edited by

                    @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 Reply Quote 0
                    • B
                      bishop @Michi68 last edited by

                      @michi68

                      Danke, funktioniert 🙂

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

                        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();
                        
                        Garfonso 1 Reply Last reply Reply Quote 0
                        • Garfonso
                          Garfonso Developer @lobomau last edited by

                          @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?

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

                            @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 1 Reply Last reply Reply Quote 0
                            • H
                              homecineplexx @lobomau last edited by

                              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?

                              lobomau 1 Reply Last reply Reply Quote 0
                              • lobomau
                                lobomau @homecineplexx last edited by 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 1 Reply Last reply Reply Quote 0
                                • H
                                  homecineplexx @lobomau last edited by

                                  @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

                                  paul53 da_Woody 2 Replies Last reply Reply Quote 0
                                  • paul53
                                    paul53 @homecineplexx last edited by

                                    @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.

                                    1 Reply Last reply Reply Quote 0
                                    • da_Woody
                                      da_Woody @homecineplexx last edited by

                                      @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?

                                      paul53 H 2 Replies Last reply Reply Quote 0
                                      • paul53
                                        paul53 @da_Woody last edited by

                                        @da_woody sagte: machst dann einen alias davon?

                                        Ist auch eine Variante, die allerdings Ressourcen verschwendet.

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

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

                                          1 Reply Last reply Reply Quote 0
                                          • H
                                            homecineplexx @da_Woody last edited by

                                            @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 Reply Quote 2
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            775
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            38
                                            314
                                            48498
                                            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