NEWS
Datenpunkte einfach erstellen
-
Hallo,
ich bin auf der Suche nach einer Möglichkeit, einfach Datenpunkte anzulegen und zwar mit folgender Struktur:
Ordner 1
-Unterordner 1
--Datenpunkt 1
--Datenpunkt 2
-Unterordner 2
--Datenpunkt 1
--Datenpunkt 2
usw...Die Datenpunkte sind quasi alle immer gleich, nur der Unterordner ändert seinen Namen. Gibt es hier eine Möglichkeit, ohne diese alle mit Hand zu erstellen?
Danke schon mal
-
@mosel-1992 said in Datenpunkte einfach erstellen:
Hallo,
ich bin auf der Suche nach einer Möglichkeit, einfach Datenpunkte anzulegen und zwar mit folgender Struktur:
Ordner 1
-Unterordner 1
--Datenpunkt 1
--Datenpunkt 2
-Unterordner 2
--Datenpunkt 1
--Datenpunkt 2
usw...Die Datenpunkte sind quasi alle immer gleich, nur der Unterordner ändert seinen Namen. Gibt es hier eine Möglichkeit, ohne diese alle mit Hand zu erstellen?
Danke schon mal
Du kannst dir einmal das Grundgerüst erstellen.
Danach diesen teil des Objektbaumes exportieren.
Die export-Datei kannst du dann mit einem Editor (z.B. vscode) bearbeiten und um deine neuen Teile ergänzen. Funktioniert mit Suche und Ersetze einfach. Danach die Datei wieder Importieren
Alternativ kannst du dir auch ein Script im ioBroker dafür erstellen. -
@mosel-1992 Mit einem Script (JavaScript oder Blockly, geht beides)
-
@ahnungsbefreit
könntest du mir erklären, wie ich das anstelle? -
@mosel-1992 Ich habe mir dafür eine Funktion
createBaseFolder
gemacht:/** * Erstellt Basisfolder und stellt den richtigen Typ ein * @param {string} ID ID des Folders * @param {any} type Typ des Folders * @param {string} [name] (optional) Name des Folders */ function createBaseFolder(ID, type, name) { createState(ID, function() { let obj=getObject(ID); obj.type=type; if(name != undefined) obj.common.name=name; obj.common.role=''; setObject(ID, obj); }); }
Damit kannst Du die Ordner erstellen, z. B.
createBaseFolder('0_userdata.0.Testfolder', 'folder', 'Das ist ein Testfolder);
und darunter mitcreateState
die Datenpunkte, z. B.
createState('0_userdata.0.Testfolder.Datenpunkt1', {type: 'number', name:'Datenpunkt 1', unit: '%', min: 0, max: 100});
-
@mosel-1992 Wenn Du NodeRed nutzt geht das automatisch.
-
// 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); }
-
@mickym said in Datenpunkte einfach erstellen:
@mosel-1992 Wenn Du NodeRed nutzt geht das automatisch.
Ich nutze es zwar, aber hier in der Anwendung geht es um Blockly
-
@mosel-1992 sagte: in der Anwendung geht es um Blockly
Mit Blockly ist es nicht möglich, Datenpunkte mit konstruierter ID zu erstellen.
Im folgenden Skript sind für jeden Unterordner nur die ersten beiden Zeilen anzupassen nachdem das Skript an deine Datenpunkte angepasst wurde:
const idFolder = '0_userdata.0.Ordner1.Unterordner1'; const Name = 'Ordnername'; const obj = { type: 'channel', common: {name: Name}, native: {} }; if(!existsObject(idFolder)) { setObject(idFolder, obj, function() { createState(idFolder + '.Datenpunkt1', 0, {type: 'number', name: 'Datenpunkt 1 ' + Name, read: true, write: true, role: 'level', def: 0}); createState(idFolder + '.Datenpunkt2', 0, {type: 'number', name: 'Datenpunkt 2 ' + Name, read: true, write: true, role: 'level', def: 0}); // usw. }); } else log('Ordner existiert bereits: ' + idFolder, 'warn');