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
-
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. -
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 Mit einem Script (JavaScript oder Blockly, geht beides)
-
@mosel-1992 Mit einem Script (JavaScript oder Blockly, geht beides)
@ahnungsbefreit
könntest du mir erklären, wie ich das anstelle? -
@ahnungsbefreit
könntest du mir erklären, wie ich das anstelle?@mosel-1992 Ich habe mir dafür eine Funktion
createBaseFoldergemacht:/** * 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 mitcreateStatedie Datenpunkte, z. B.
createState('0_userdata.0.Testfolder.Datenpunkt1', {type: 'number', name:'Datenpunkt 1', unit: '%', min: 0, max: 100}); -
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 Wenn Du NodeRed nutzt geht das automatisch.
-
@mosel-1992 Ich habe mir dafür eine Funktion
createBaseFoldergemacht:/** * 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 mitcreateStatedie Datenpunkte, z. B.
createState('0_userdata.0.Testfolder.Datenpunkt1', {type: 'number', name:'Datenpunkt 1', unit: '%', min: 0, max: 100});// 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); } -
@mosel-1992 Wenn Du NodeRed nutzt geht das automatisch.
@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
-
@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');
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden