NEWS
[Vorlage] Alias per Skript erzeugen
-
@marty56 said in [Vorlage] Alias per Skript erzeugen:
Man kann auch nicht alle Aliases auf einmal löschen.
?nein?
-
wenn ich den erstellten Alias DP lösche und ich ihn dann neu erstellen möchte bekomme ich.
javascript.0 2021-02-13 09:47:11.248 warn (1231) script.js.common.Alias_erstellen_paul53: alias.0.Batterien_Prozent.SwitchButton schon vorhanden !
wo muss ich den rauslöschen?
Der DP ist nicht mehr vorhanden im Objectbaum -
@bishop sagte in [Vorlage] Alias per Skript erzeugen:
wenn ich den erstellten Alias DP lösche und ich ihn dann neu erstellen möchte bekomme ich.
einmal admin neu starten (nicht stoppen, nur neu starten mit dem Pfeilkreis)
-
@marty56 sagte: Wäre es möglich, dass man per Script einen Alias löscht und dann wieder neu anlegt?
Man kann das Script durch Auskommentieren von 3 Zeilen so ändern, dass es überschreibt: Im Orginal Zeilen 29, 30 und 73.
Anschließend nicht vergessen, die Änderung rückgängig zu machen! -
@bishop sagte: Der DP ist nicht mehr vorhanden im Objectbaum
Die Javascript-Instanz neu starten, damit der Datenpunkt auch im Instanz-Puffer gelöscht wird.
-
@paul53
danke geht -
@paul53 da ich neugierig bin (auskommentieren der 3 zeilen), hab ich das script nochmal kopiert und neu unter scripte eingefügt (firefox). daraufhin haben die zeilen zahlen überhaupt nicht mehr gestimmt. es wurde einfach überall eine leerzeile eingefügt (153 zeilen). das ganze mit chrome am selben PC (Win10) und siehe da, nur mehr 76 zeilen!
ist nur als warnung gedacht, falls jemand da was bemängelt... -
@da_woody sagte: es wurde einfach überall eine leerzeile eingefügt
Das passiert nur mit Firefox.
-
@paul53 hab ich ja geschrieben... seltsam ist das allemal...
-
@paul53 Danke funktioniert super.
-
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.
-
-
-
-
@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.
-
@bishop
du hast ja auch das Script von CruziX benutzt wenn ich das richtig sehe, hatte eben die gleichen Fehler hab dann
Zeile 172obj.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ürGruß Michael
-
Danke, funktioniert
-
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();
-
@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? -
@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.