Da der Thread noch nicht so lange abgeschlossen ist, hänge ich mich einmal kurz daran und möchte eine kurze Lösung vorstellen, die ich bei mir laufen habe. Ist in NodeRed implementiert, sollte sich aber auch einfach in Blockly umsetzen lassen.
Und zwar ist es für mich wichtig, dass eine Szene nur auf "true" steht, wenn sie komplett zutrifft. Und wenn nicht alle Parameter zutreffen, soll die Szene immer "false" sein. Ich nutze die Szenen oft mit den gleichen Lampen, aber verschiedenen Farben / Helligkeiten. Damit habe ich eigentlich immer 2-x Szenen im Raum dann auf "uncertain" stehen.
In dem Script ersetze ich dann "uncertain" immer durch "false", wobei beim setzen die "ack" flag auf TRUE stehen muss (sonst würde der Adapter oder andere Scripte) ja wieder darauf reagieren (in Blockly glaube "setzen" und nicht "steuern"). Wenn man das entgegengesetzte Verhalten möchte (wie der Thread Ersteller wenn ich es richtig gelesen habe), dann "uncertain" immer durch "true" ersetzen.
Dadurch werden in Visualisierungen nur Szenen, die zu 100% zutreffen als aktiv angezeigt, und ich kann mich an allen anderen Stellen darauf verlassen, dass ich immer mit boolean Werten arbeite.
Vielleicht hilft es ja jemandem, der in der Zukunft mal in der Suche über den Tread stolpert.
[
{
"id": "37a819661a802676",
"type": "tab",
"label": "Szenen",
"disabled": false,
"info": "",
"env": []
},
{
"id": "5afecc8e369d8b73",
"type": "ioBroker in",
"z": "37a819661a802676",
"name": "",
"attrname": "payload",
"topic": "scene.0.*",
"payloadType": "value",
"onlyack": "",
"func": "all",
"gap": "",
"fireOnStart": "false",
"outFormat": "ioBroker",
"x": 260,
"y": 100,
"wires": [
[
"34475eda69ecaa8c"
]
]
},
{
"id": "128c113f803512b9",
"type": "ioBroker out",
"z": "37a819661a802676",
"name": "Korrigiere \"uncertain\"",
"topic": "",
"ack": "true",
"autoCreate": "false",
"stateName": "",
"role": "",
"payloadType": "",
"readonly": "",
"stateUnit": "",
"stateMin": "",
"stateMax": "",
"x": 1120,
"y": 100,
"wires": []
},
{
"id": "34475eda69ecaa8c",
"type": "switch",
"z": "37a819661a802676",
"name": "is uncertain",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "uncertain",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 530,
"y": 100,
"wires": [
[
"f3670e9b1b166b9e"
]
]
},
{
"id": "f3670e9b1b166b9e",
"type": "change",
"z": "37a819661a802676",
"name": "FALSE",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "false",
"tot": "bool"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 800,
"y": 100,
"wires": [
[
"128c113f803512b9"
]
]
}
]