I finally constructed the solution with node-red. I find it very nice because it gives a lot of controls for a one button device: you could toggle the light, switch between scenes and dim the lights.
You will need to configure get_device_id node, event_type node and several helpers in home assistant:
- timer (2s) for switching between light toggle and scene selection
- dim switch boolean to switch dimming up/down
- input select to select scenes
Here is the flow:
[
{
"id": "4cb2d8d4.f1ff18",
"type": "tab",
"label": "living_room",
"disabled": false,
"info": ""
},
{
"id": "cfeb8db3.53c14",
"type": "server-events",
"z": "4cb2d8d4.f1ff18",
"name": "event",
"server": "10991ca8.1f1c03",
"event_type": "deconz_event",
"exposeToHomeAssistant": false,
"haConfig": [
{
"property": "name",
"value": ""
},
{
"property": "icon",
"value": ""
}
],
"waitForRunning": true,
"x": 90,
"y": 160,
"wires": [
[
"425b6f10.008f3"
]
]
},
{
"id": "425b6f10.008f3",
"type": "switch",
"z": "4cb2d8d4.f1ff18",
"name": "get_device_id",
"property": "payload.event.unique_id",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "00:17:88:01:06:05:c1:f2",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 260,
"y": 160,
"wires": [
[
"2b31e17a.901bfe"
]
]
},
{
"id": "2b31e17a.901bfe",
"type": "switch",
"z": "4cb2d8d4.f1ff18",
"name": "event_type",
"property": "payload.event.event",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "1001",
"vt": "str"
},
{
"t": "eq",
"v": "1002",
"vt": "str"
},
{
"t": "eq",
"v": "1003",
"vt": "str"
},
{
"t": "eq",
"v": "1004",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 4,
"x": 450,
"y": 160,
"wires": [
[
"fd750856.f7f64"
],
[
"c9b4bd65.7776e8"
],
[
"5434c17c.c69228"
],
[]
]
},
{
"id": "c9b4bd65.7776e8",
"type": "api-current-state",
"z": "4cb2d8d4.f1ff18",
"name": "check_timer",
"server": "10991ca8.1f1c03",
"version": 1,
"outputs": 2,
"halt_if": "active",
"halt_if_type": "str",
"halt_if_compare": "is",
"override_topic": false,
"entity_id": "timer.living_room_switch_timer",
"state_type": "str",
"state_location": "payload",
"override_payload": "msg",
"entity_location": "data",
"override_data": "msg",
"blockInputOverrides": false,
"x": 650,
"y": 120,
"wires": [
[
"4617b194.abe3a8",
"7f57714e.ee038"
],
[
"e8b86bd4.b806a",
"7f57714e.ee038"
]
]
},
{
"id": "e8b86bd4.b806a",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "toggle_lights",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": true,
"service_domain": "light",
"service": "toggle",
"entityId": "light.living_room",
"data": "",
"dataType": "json",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 930,
"y": 180,
"wires": [
[
"f43007b7.d74288"
]
]
},
{
"id": "7f57714e.ee038",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "restart_timer",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": false,
"service_domain": "timer",
"service": "start",
"entityId": "timer.living_room_switch_timer",
"data": "",
"dataType": "jsonata",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 930,
"y": 120,
"wires": [
[]
]
},
{
"id": "51e9c79c.e1fb4",
"type": "link in",
"z": "4cb2d8d4.f1ff18",
"name": "toggle_scenes",
"links": [
"4617b194.abe3a8"
],
"x": 55,
"y": 340,
"wires": [
[
"f511d989.bb014"
]
]
},
{
"id": "4617b194.abe3a8",
"type": "link out",
"z": "4cb2d8d4.f1ff18",
"name": "toggle_scenes",
"links": [
"51e9c79c.e1fb4"
],
"x": 875,
"y": 80,
"wires": []
},
{
"id": "d494dea5.d271d8",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "max",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": false,
"service_domain": "scene",
"service": "turn_on",
"entityId": "scene.living_room_all_max",
"data": "",
"dataType": "jsonata",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 550,
"y": 280,
"wires": [
[
"b15c5603.4c50a"
]
]
},
{
"id": "98b4635f.5ecf7",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "dimmed",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": false,
"service_domain": "scene",
"service": "turn_on",
"entityId": "scene.living_room_all_dimmed",
"data": "",
"dataType": "jsonata",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 560,
"y": 340,
"wires": [
[
"b15c5603.4c50a"
]
]
},
{
"id": "f511d989.bb014",
"type": "api-current-state",
"z": "4cb2d8d4.f1ff18",
"name": "scene_selected",
"server": "10991ca8.1f1c03",
"version": 1,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"override_topic": false,
"entity_id": "input_select.living_room_scenes",
"state_type": "str",
"state_location": "payload",
"override_payload": "msg",
"entity_location": "data",
"override_data": "msg",
"blockInputOverrides": false,
"x": 180,
"y": 340,
"wires": [
[
"887e2a2a.721e88"
]
]
},
{
"id": "887e2a2a.721e88",
"type": "switch",
"z": "4cb2d8d4.f1ff18",
"name": "",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "max",
"vt": "str"
},
{
"t": "eq",
"v": "dimmed",
"vt": "str"
},
{
"t": "eq",
"v": "stand_lamp_only",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 3,
"x": 350,
"y": 340,
"wires": [
[
"d494dea5.d271d8"
],
[
"98b4635f.5ecf7"
],
[
"27063e72.6abbfa"
]
]
},
{
"id": "27063e72.6abbfa",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "table_lamp_only",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": false,
"service_domain": "scene",
"service": "turn_on",
"entityId": "scene.living_room_table_lamp_only",
"data": "",
"dataType": "jsonata",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 580,
"y": 400,
"wires": [
[
"b15c5603.4c50a"
]
]
},
{
"id": "b15c5603.4c50a",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "input_select_next",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": false,
"service_domain": "input_select",
"service": "select_next",
"entityId": "input_select.living_room_scenes",
"data": "",
"dataType": "jsonata",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 830,
"y": 340,
"wires": [
[]
]
},
{
"id": "56232653.5918d",
"type": "function",
"z": "4cb2d8d4.f1ff18",
"name": "brightness_up",
"func": "'var bright_pct = flow.get(\"bright_pct\");'\nvar new_msg = {};\nvar bright_pct = msg.data.attributes.brightness;\n\nif(bright_pct > 254){\n bright_pct = 255\n}\nelse{\n bright_pct = bright_pct + 30;\n}\n\n\n\n\nflow.set('bright_pct', bright_pct);\nnew_msg = {\"payload\": {\"data\" : {\"brightness\" : Number(bright_pct)}}};\nreturn new_msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 760,
"y": 520,
"wires": [
[
"ec1b742e.48b47"
]
]
},
{
"id": "3a35850e.2009b2",
"type": "link in",
"z": "4cb2d8d4.f1ff18",
"name": "dim",
"links": [
"fd750856.f7f64"
],
"x": 55,
"y": 560,
"wires": [
[
"b04e95a8.04cd78"
]
]
},
{
"id": "fd750856.f7f64",
"type": "link out",
"z": "4cb2d8d4.f1ff18",
"name": "dim",
"links": [
"3a35850e.2009b2"
],
"x": 595,
"y": 80,
"wires": []
},
{
"id": "ec1b742e.48b47",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": false,
"service_domain": "light",
"service": "turn_on",
"entityId": "light.living_room",
"data": "",
"dataType": "json",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 990,
"y": 560,
"wires": [
[]
]
},
{
"id": "763f78ed.ace38",
"type": "function",
"z": "4cb2d8d4.f1ff18",
"name": "brightness_down",
"func": "'var bright_pct = flow.get(\"bright_pct\");'\nvar new_msg = {};\nvar bright_pct = msg.data.attributes.brightness;\n\nif (bright_pct > 0){\n bright_pct = bright_pct - 30;\n}\nelse {\n bright_pct = 0\n}\n\n\nflow.set('bright_pct', bright_pct);\nnew_msg = {\"payload\": {\"data\" : {\"brightness\" : Number(bright_pct)}}};\nreturn new_msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 770,
"y": 600,
"wires": [
[
"ec1b742e.48b47"
]
]
},
{
"id": "b04e95a8.04cd78",
"type": "api-current-state",
"z": "4cb2d8d4.f1ff18",
"name": "check_dim_switch",
"server": "10991ca8.1f1c03",
"version": 1,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"override_topic": false,
"entity_id": "input_boolean.living_room_dimming_up",
"state_type": "habool",
"state_location": "payload",
"override_payload": "msg",
"entity_location": "data",
"override_data": "msg",
"blockInputOverrides": false,
"x": 190,
"y": 560,
"wires": [
[
"e885e47b.c75148"
]
]
},
{
"id": "5434c17c.c69228",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "toggle_dimming",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": false,
"service_domain": "input_boolean",
"service": "toggle",
"entityId": "input_boolean.living_room_dimming_up",
"data": "",
"dataType": "jsonata",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 660,
"y": 200,
"wires": [
[]
]
},
{
"id": "f43007b7.d74288",
"type": "api-call-service",
"z": "4cb2d8d4.f1ff18",
"name": "input_select_reset",
"server": "10991ca8.1f1c03",
"version": 1,
"debugenabled": true,
"service_domain": "input_select",
"service": "select_first",
"entityId": "input_select.living_room_scenes",
"data": "",
"dataType": "json",
"mergecontext": "",
"output_location": "",
"output_location_type": "none",
"mustacheAltTags": false,
"x": 1150,
"y": 180,
"wires": [
[]
]
},
{
"id": "e885e47b.c75148",
"type": "switch",
"z": "4cb2d8d4.f1ff18",
"name": "",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "true"
},
{
"t": "false"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 370,
"y": 560,
"wires": [
[
"d6551564.9d24"
],
[
"b05509cc.bd6b08"
]
]
},
{
"id": "d6551564.9d24",
"type": "api-current-state",
"z": "4cb2d8d4.f1ff18",
"name": "living_room",
"server": "10991ca8.1f1c03",
"version": 1,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"override_topic": false,
"entity_id": "light.living_room",
"state_type": "str",
"state_location": "payload",
"override_payload": "msg",
"entity_location": "data",
"override_data": "msg",
"blockInputOverrides": false,
"x": 570,
"y": 520,
"wires": [
[
"56232653.5918d"
]
]
},
{
"id": "b05509cc.bd6b08",
"type": "api-current-state",
"z": "4cb2d8d4.f1ff18",
"name": "living_room",
"server": "10991ca8.1f1c03",
"version": 1,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"override_topic": false,
"entity_id": "light.living_room",
"state_type": "str",
"state_location": "payload",
"override_payload": "msg",
"entity_location": "data",
"override_data": "msg",
"blockInputOverrides": false,
"x": 570,
"y": 600,
"wires": [
[
"763f78ed.ace38"
]
]
},
{
"id": "dc875720.1f3b08",
"type": "comment",
"z": "4cb2d8d4.f1ff18",
"name": "Set timer",
"info": "Use ",
"x": 680,
"y": 80,
"wires": []
},
{
"id": "8dfc18f5.b50c4",
"type": "comment",
"z": "4cb2d8d4.f1ff18",
"name": "Set scene input select",
"info": "Use ",
"x": 180,
"y": 300,
"wires": []
},
{
"id": "b3182803.8135f8",
"type": "comment",
"z": "4cb2d8d4.f1ff18",
"name": "Set dim boolean switch",
"info": "Use ",
"x": 180,
"y": 520,
"wires": []
},
{
"id": "1186c478.5e5914",
"type": "comment",
"z": "4cb2d8d4.f1ff18",
"name": "Edit scenes here",
"info": "Use ",
"x": 420,
"y": 260,
"wires": []
},
{
"id": "10991ca8.1f1c03",
"type": "server",
"name": "Home Assistant",
"addon": true
}
]