NEWS
[gelöst] Zusammenführen von enum.functions
-
Moin Leute,
gibt es eine Möglichkeit, per Script, enum.functions zusammenzuführen?
Hintergrund, ich habe z.B. enum.functions.Licht (von Homematic) und enum.functions.light. Ich würde jetzt gerne alle Lampen (Objekte) in enum.functions.Licht schieben ohne alle händisch anzupassen, da es über 30 Stellen wären.
Habt ihr Ideen?
Gruß,
Mark -
@mark77
Hier ein Script, das 0_userdata.0.lampen.state_1 und _2 anlegt.
Schau dir mal addToEnum() an'use strict'; async function addToEnum(enumName, newStateId) { let myEnum = await getObjectAsync(enumName); if (myEnum) { let pos = myEnum.common.members.indexOf(newStateId); if (pos === -1) { myEnum.common.members.push(newStateId); myEnum.from = "system.adapter." + "0"; myEnum.ts = new Date().getTime(); setObjectAsync(enumName, myEnum); } } } async function CreateStates() { try { for (let i = 1; i < 3; i++) { const id = `0_userdata.0.lampen.state_${i}`; if (await existsStateAsync(id)) { log(`State ${id} already exists`, 'warn'); } else { await createStateAsync(id, { type: 'boolean', read: true, write: true, role: 'switch', def: false, smartName: { smartType: "LIGHT" } }); await addToEnum("enum.functions.light", id); await addToEnum("enum.rooms.living_room", id); const stateObject = await getStateAsync(id); if (stateObject && (stateObject.val || stateObject.val === false)) { log(`State '${id}' created, value: '${stateObject.val}'`) } else { log(`Unable to get state value of '${id}'.`, 'error'); } } } } catch (error) { log(`Unexpected error - ${error}`, 'error'); } } CreateStates(); -
Moin Leute,
gibt es eine Möglichkeit, per Script, enum.functions zusammenzuführen?
Hintergrund, ich habe z.B. enum.functions.Licht (von Homematic) und enum.functions.light. Ich würde jetzt gerne alle Lampen (Objekte) in enum.functions.Licht schieben ohne alle händisch anzupassen, da es über 30 Stellen wären.
Habt ihr Ideen?
Gruß,
Mark@mark77 sagte: alle Lampen (Objekte) in enum.functions.Licht schieben
Versuche es mal so (nicht getestet):
const idslight = getObject('enum.functions.light').common.members; const objLicht = getObject('enum.functions.Licht'); for(let i = 0; i < idslight.length; i++) { objLicht.common.members.push(idslight[i]); } setObject('enum.functions.Licht', objLicht); -
@mark77 sagte: alle Lampen (Objekte) in enum.functions.Licht schieben
Versuche es mal so (nicht getestet):
const idslight = getObject('enum.functions.light').common.members; const objLicht = getObject('enum.functions.Licht'); for(let i = 0; i < idslight.length; i++) { objLicht.common.members.push(idslight[i]); } setObject('enum.functions.Licht', objLicht);@paul53 deine Lösung könnte funktionieren, zumindest sieht es als Trockenlauf (als Log Ausgabe) gut aus.
Ich bin akllerdings den Weg gegangen, einfach in der Homematic Licht in lights umzubenennen.Wald, Büme, ich...
Danke für eure Bemühungen!
Gruß,
Mark -
@mark77 sagte: alle Lampen (Objekte) in enum.functions.Licht schieben
Versuche es mal so (nicht getestet):
const idslight = getObject('enum.functions.light').common.members; const objLicht = getObject('enum.functions.Licht'); for(let i = 0; i < idslight.length; i++) { objLicht.common.members.push(idslight[i]); } setObject('enum.functions.Licht', objLicht);@paul53 funktioniert bestens.
Habe das Script nur ein wenig angepasst, damit man nicht vergisst, die letzte Zeile zu ändern, sonst ist das Chaos groß

var oldNames = 'enum.rooms.kleiner_flur'; var newNames = 'enum.rooms.kleiner Flur'; const idslight = getObject(oldNames).common.members; const objLicht = getObject(newNames); for(let i = 0; i < idslight.length; i++) { objLicht.common.members.push(idslight[i]); } setObject(newNames, objLicht);DANKE!
-
@paul53 funktioniert bestens.
Habe das Script nur ein wenig angepasst, damit man nicht vergisst, die letzte Zeile zu ändern, sonst ist das Chaos groß

var oldNames = 'enum.rooms.kleiner_flur'; var newNames = 'enum.rooms.kleiner Flur'; const idslight = getObject(oldNames).common.members; const objLicht = getObject(newNames); for(let i = 0; i < idslight.length; i++) { objLicht.common.members.push(idslight[i]); } setObject(newNames, objLicht);DANKE!
@mark77 sagte: damit man nicht vergisst, die letzte Zeile zu ändern
Etwas allgemeiner gehalten:
const idSrc = 'enum.functions.light'; const idDst = 'enum.functions.Licht'; const membersSrc = getObject(idSrc).common.members; const objDst = getObject(idDst); for(let i = 0; i < membersSrc.length; i++) { objDst.common.members.push(membersSrc[i]); } setObject(idDst, objDst);
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