NEWS
Frage zu type: 'folder' und createState() + setObject()
-
Gibt soweit ich weiß keine Möglichkeit etwas anderes als einen
type: 'state'
zu erzeugen, deshalb frage ich mich ob der folgende Code zum Erstellen einestype: 'folder'
keine Probleme bereitet.async function init() { try { if (!existsObject(path)) await createStateAsync(path) let o = await getObjectAsync(path) if (o.type !== 'hier soll folder stehen') { o.type = 'folder' o.common.name = 'Geräteüberwachung' delete o.common.type delete o.common.role await setObjectAsync(path,o) } //work() } catch(e) {log(e)} return Promise.resolve(true); }
-
@ticaki sagte: keine Möglichkeit etwas anderes als einen type: 'state' zu erzeugen
Mit setObject(id, obj) kann man beliebige (zulässige) Objekt-Typen erzeugen. setObject() überschreibt bestehende Objekte. Einzelne Objekt-Eigenschaften kann man mit extendObject() ändern.
Zeile 3 ist macht keinen Sinn. -
@paul53 sagte in Frage zu type: 'folder' und createState() + setObject():
@ticaki sagte: keine Möglichkeit etwas anderes als einen type: 'state' zu erzeugen
Mit setObject(id, obj) kann man beliebige (zulässige) Objekt-Typen erzeugen. setObject() überschreibt bestehende Objekte. Einzelne Objekt-Eigenschaften kann man mit extendObject() ändern.
Danke, da ich gerade nen vollseitige Fehlermeldung bekommen habe, was sind die Mindestangabe zum erzeugen eines objectes?
Zeile 3 ist macht keinen Sinn.
war am rumprobieren
-
@ticaki sagte: was sind die Mindestangabe zum erzeugen eines objectes?
Das sind type (string), common (object) und native (object). Eine (globale) Funktion könnte z.B. so aussehen:
function createFolder(id, name) { if(existsObject(id)) log('Objekt: ' + id + ' existiert bereits!', 'warn'); else { const obj = { type: 'folder', common: { name: name }, native: {} }; setObject(id, obj); } }
-
@paul53
DankeUnd falls es jemand gebrauchen kann, die fertigen Funktionen nach Pauls Beispiel:
// id muß ein gültiger String sein, alles weitere is optional async function createFolderAsync(id, name='', desc='') { return Promise.resolve(await _createObject(id, 'folder', name, desc)) } async function createChannelAsync(id, name='', desc='') { return Promise.resolve(await _createObject(id, 'channel', name, desc)) } async function createDeviceAsync(id, name='', desc='') { return Promise.resolve(await _createObject(id, 'device', name, desc)) } async function _createObject(id, typ, name='', desc='') { try { if(existsObject(id)) log('Objekt: ' + id + ' existiert bereits!', 'warn'); else { const obj = { type: typ, common: { name: name, desc: desc }, native: {} } if (!id || typeof id !== 'string') { throw new Error('Fehler in _createObject Parameter 1 ist kein string') } if (!(id.startsWith('alias.0') || id.startsWith('0_userdata.0') || id.startsWith('mqtt'))) { throw new Error('Fehler in _createObject Parameter 1: ' + id.split('.').slice(0,2).join('.') + ' nicht erlaubt') } await setObjectAsync(id, obj); } return Promise.resolve(true); } catch (error) { log(error + '!', 'error') } return Promise.resolve(false); }
-
@ticaki
Da setObject() von sich aus keine Einschränkungen hat, sollte man vielleicht Zeile 26 ergänzen:if(id.startsWith('alias.0') || id.startsWith('0_userdata.0') || id.startsWith('mqtt')) await setObjectAsync(id, obj); else log('ID ist ungültig!', 'warn');
-
ergänzt
// id muß ein gültiger String sein und mit 0_userdata.0, alias.0 oder mqtt anfangen, alles weitere is optional async function createFolderAsync(id, name='', desc='') { return Promise.resolve(await _createObject(id, 'folder', name, desc)) } async function createChannelAsync(id, name='', desc='') { return Promise.resolve(await _createObject(id, 'channel', name, desc)) } async function createDeviceAsync(id, name='', desc='') { return Promise.resolve(await _createObject(id, 'device', name, desc)) } async function _createObject(id, typ, name='', desc='') { try { if(existsObject(id)) log('Objekt: ' + id + ' existiert bereits!', 'warn'); else { const obj = { type: typ, common: { name: name, desc: desc }, native: {} } if (!id || typeof id !== 'string') { throw new Error('Fehler in _createObject Parameter 1 ist kein string') } if (!(id.startsWith('alias.0') || id.startsWith('0_userdata.0') || id.startsWith('mqtt'))) { throw new Error('Fehler in _createObject Parameter 1: ' + id.split('.').slice(0,2).join('.') + ' nicht erlaubt') } await setObjectAsync(id, obj); } return Promise.resolve(true); } catch (error) { log(error + '!', 'error') } return Promise.resolve(false); }