NEWS
Szenen DP manipulieren mit extendObject
-
Hallo zusammen,
ich möchte gerne in einer Szene (iobroker Scenes Adapter) einzelne Zustände inaktiv machen:

Dies würde ich gern über Blockly oder JavaScript lösen.
Dazu habe ich den Ansatz über extendObject genutzt:
extendObject('scene.0.TEST', {native: {members: [{disabled: true}]}});So lange die Szene nur aus einem Zustand besteht, funktioniert das so. Ich habe aber mehrere Zustände und weiß nicht, wie ich nur das "disabled" einer bestimmten ID manipulieren kann, da sie ja hintereinander in members stehen. Wie bekomme ich Zugriff auf das "disabled" der jeweiligen ID?
{ "common": { "name": "TEST", "type": "mixed", "role": "scene.state", "desc": "", "enabled": true, "read": true, "write": true, "def": false, "engine": "system.adapter.scenes.0" }, "native": { "onTrue": { "trigger": {}, "cron": null, "astro": null }, "onFalse": { "enabled": true, "trigger": {}, "cron": null, "astro": null }, "easy": true, "burstInterval": 0, "members": [ { "id": "alias.0.Buttons.Button-WZ-St-Weinregal", "setIfTrue": true, "setIfFalse": false, "stopAllDelays": true, "desc": null, "disabled": true, "delay": 0 }, { "id": "alias.0.Buttons.Button-WZ-Bilderrahmen", "setIfTrue": true, "setIfFalse": false, "stopAllDelays": true, "desc": null, "disabled": false, "delay": 0 } ] }, "type": "state", "_id": "scene.0.TEST", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1715248145422, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }Danke euch,
viele Grüße -
Hallo zusammen,
ich möchte gerne in einer Szene (iobroker Scenes Adapter) einzelne Zustände inaktiv machen:

Dies würde ich gern über Blockly oder JavaScript lösen.
Dazu habe ich den Ansatz über extendObject genutzt:
extendObject('scene.0.TEST', {native: {members: [{disabled: true}]}});So lange die Szene nur aus einem Zustand besteht, funktioniert das so. Ich habe aber mehrere Zustände und weiß nicht, wie ich nur das "disabled" einer bestimmten ID manipulieren kann, da sie ja hintereinander in members stehen. Wie bekomme ich Zugriff auf das "disabled" der jeweiligen ID?
{ "common": { "name": "TEST", "type": "mixed", "role": "scene.state", "desc": "", "enabled": true, "read": true, "write": true, "def": false, "engine": "system.adapter.scenes.0" }, "native": { "onTrue": { "trigger": {}, "cron": null, "astro": null }, "onFalse": { "enabled": true, "trigger": {}, "cron": null, "astro": null }, "easy": true, "burstInterval": 0, "members": [ { "id": "alias.0.Buttons.Button-WZ-St-Weinregal", "setIfTrue": true, "setIfFalse": false, "stopAllDelays": true, "desc": null, "disabled": true, "delay": 0 }, { "id": "alias.0.Buttons.Button-WZ-Bilderrahmen", "setIfTrue": true, "setIfFalse": false, "stopAllDelays": true, "desc": null, "disabled": false, "delay": 0 } ] }, "type": "state", "_id": "scene.0.TEST", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1715248145422, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }Danke euch,
viele Grüße@sts85 sagte: Wie bekomme ich Zugriff auf das "disabled" der jeweiligen ID?
Verwende getObject(id). In einer for-Schleife über obj.native.members prüfe die ID und setze obj.native.members[i].disabled auf true oder false. Anschließend mit setObject(id, obj) schreiben.
-
@sts85 sagte: Wie bekomme ich Zugriff auf das "disabled" der jeweiligen ID?
Verwende getObject(id). In einer for-Schleife über obj.native.members prüfe die ID und setze obj.native.members[i].disabled auf true oder false. Anschließend mit setObject(id, obj) schreiben.
@paul53 Mega, danke für den Ansatz. Eigentlich logisch. Das ist dabei rausgekommen:
var SceneName = 'scene.0.TEST' var SceneObject = getObject('scene.0.TEST') var SceneID = "alias.0.Buttons.Button-WZ-Bilderrahmen"; var SceneData = SceneObject.native.members var index = SceneData.findIndex(obj => obj.id==SceneID); //console.log(index); SceneObject.native.members[index].disabled = true; //console.log(SceneObject.native.members); setObject(SceneName, SceneObject) -
@paul53 Mega, danke für den Ansatz. Eigentlich logisch. Das ist dabei rausgekommen:
var SceneName = 'scene.0.TEST' var SceneObject = getObject('scene.0.TEST') var SceneID = "alias.0.Buttons.Button-WZ-Bilderrahmen"; var SceneData = SceneObject.native.members var index = SceneData.findIndex(obj => obj.id==SceneID); //console.log(index); SceneObject.native.members[index].disabled = true; //console.log(SceneObject.native.members); setObject(SceneName, SceneObject) -
@sts85 sagte: Das ist dabei rausgekommen:
Die letzten beiden Befehle sollten nur bedingt ausgeführt werden:
if(index > -1) {
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