IKEA Trådfri Remote in Home Assistant with deCONZ

IKEA Trådfri Remote integration

This is my version of integrating the IKEA Trådfri remote
with Home Assistant using deCONZ in Node-RED.

Follow the instructions in the comment nodes in the RX-flow.

[{"id":"696f8303.5ee06c","type":"tab","label":"IKEA Trådfri Remote TX Flow","disabled":false,"info":""},{"id":"cf618ef8.844bf8","type":"server-events","z":"696f8303.5ee06c","name":"Deconz Event","server":"45ad3b77.ab7904","event_type":"deconz_event","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"x":170,"y":60,"wires":[["d9858808.7dde48"]]},{"id":"43681600.5ea2cc","type":"link out","z":"696f8303.5ee06c","name":"IKEA Trådfri Remote TX","links":["d3d13f86.8b0a6"],"x":955,"y":80,"wires":[]},{"id":"1d456ea8.9edc71","type":"change","z":"696f8303.5ee06c","name":"Kök Köksö","rules":[{"t":"set","p":"payload.private.name","pt":"msg","to":"kok_tak_kokso_kontroll","tot":"str"},{"t":"set","p":"payload.entity_id","pt":"msg","to":"light.kok_tak_kokso","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":60,"wires":[["43681600.5ea2cc"]]},{"id":"edf76bc5.5ae028","type":"change","z":"696f8303.5ee06c","name":"Kök Diskbänk","rules":[{"t":"set","p":"payload.private.name","pt":"msg","to":"kok_tak_diskbank_kontroll","tot":"str"},{"t":"set","p":"payload.entity_id","pt":"msg","to":"light.kok_tak_diskbank","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":100,"wires":[["43681600.5ea2cc"]]},{"id":"d9858808.7dde48","type":"switch","z":"696f8303.5ee06c","name":"IKEA Trådfri Remote Switch","property":"payload.event.id","propertyType":"msg","rules":[{"t":"eq","v":"kok_tak_kokso_kontroll","vt":"str"},{"t":"eq","v":"kok_tak_diskbank_kontroll","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":440,"y":60,"wires":[["1d456ea8.9edc71"],["edf76bc5.5ae028"]]},{"id":"da3443c2.640db","type":"comment","z":"696f8303.5ee06c","name":"ReadME 1st","info":"Set the name of the remote from the msg.payload.event.id property in the switch node, each remote as it's own output.","x":410,"y":140,"wires":[]},{"id":"3f3bf5aa.8df94a","type":"comment","z":"696f8303.5ee06c","name":"ReadME 2nd","info":"Use one change node for every remote that you whant to use.\nThis is where you pair the remote with the intended light.\n - Enter the name of the remote as string for msg.payload.private.name\n - Enter the name of the light as string for msg.payload.entity_id","x":690,"y":160,"wires":[]},{"id":"1653ecda.1e9bd3","type":"tab","label":"IKEA Trådfri Remote RX Flow","disabled":false,"info":""},{"id":"13593ff8.a6556","type":"api-call-service","z":"1653ecda.1e9bd3","name":"Toggle lights","server":"45ad3b77.ab7904","version":1,"debugenabled":false,"service_domain":"light","service":"toggle","entityId":"","data":"","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1330,"y":160,"wires":[[]]},{"id":"7167f74f.dd6528","type":"api-call-service","z":"1653ecda.1e9bd3","name":"Set Brightness","server":"45ad3b77.ab7904","version":1,"debugenabled":false,"service_domain":"light","service":"turn_on","entityId":"","data":"{\"transition\":1}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1340,"y":280,"wires":[[]]},{"id":"e50d284f.2b1808","type":"api-call-service","z":"1653ecda.1e9bd3","name":"Reset","server":"45ad3b77.ab7904","version":1,"debugenabled":false,"service_domain":"light","service":"turn_on","entityId":"","data":"","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1310,"y":220,"wires":[[]]},{"id":"36d000de.1e9de","type":"function","z":"1653ecda.1e9bd3","name":"Toggle","func":"info = {\n    payload:\n    {\n        data: \n        {\n            entity_id: msg.payload.entity_id,\n         }\n    }\n}\nreturn (info)","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1010,"y":180,"wires":[["13593ff8.a6556"]]},{"id":"4329573e.348038","type":"function","z":"1653ecda.1e9bd3","name":"Reset","func":"info = {\n    payload:\n    {\n        data: msg.payload\n    }\n}\nreturn (info)","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1010,"y":220,"wires":[["e50d284f.2b1808"]]},{"id":"91404c18.dfcf2","type":"function","z":"1653ecda.1e9bd3","name":"Brightness Step %","func":"info = {\n    payload:\n    {\n        data: msg.payload\n    }\n}\nreturn (info)","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1050,"y":280,"wires":[["7167f74f.dd6528"]]},{"id":"c7b7b3c8.f2c","type":"api-call-service","z":"1653ecda.1e9bd3","name":"Set Brightness %","server":"45ad3b77.ab7904","version":1,"debugenabled":false,"service_domain":"light","service":"turn_on","entityId":"","data":"{\"transition\":1}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1350,"y":360,"wires":[[]]},{"id":"fa7ba4f1.2ef2e8","type":"function","z":"1653ecda.1e9bd3","name":"Brightness %","func":"info = {\n    payload:\n    {\n        data: \n        {\n            entity_id: msg.payload.entity_id,\n            brightness_pct: msg.payload.brightness_pct\n         }\n    }\n}\nreturn (info)","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1030,"y":360,"wires":[["c7b7b3c8.f2c"]]},{"id":"64dbfc05.d6fa54","type":"api-call-service","z":"1653ecda.1e9bd3","name":"Set Light Temperature","server":"45ad3b77.ab7904","version":1,"debugenabled":false,"service_domain":"light","service":"turn_on","entityId":"","data":"{\"transition\":1}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1360,"y":440,"wires":[[]]},{"id":"6155b5e8.227acc","type":"function","z":"1653ecda.1e9bd3","name":"Rotate Light Temperature Left","func":"var kelvin = flow.get(\"kelvin\") || 4000;\nvar new_msg = new Object();\n\nswitch(kelvin){\n    case 1780:\n    {\n        kelvin = 6000;\n        break;\n    }\n    case 6000:\n    {\n        kelvin = 5000;\n        break;\n    }\n    case 5000:\n    {\n        kelvin = 4000;\n        break;\n    }\n    case 4000:\n    {\n        kelvin = 3000;\n        break;\n    }\n    case 3000:\n    {\n        kelvin = 2700;\n        break;\n    }\n    case 2700:\n    {\n        kelvin = 2200;\n        break;\n    }\n    case 2200:\n    {\n        kelvin = 1780;\n        break;\n    }\n    default:\n    {\n        kelvin = 4000;\n        break;\n    }\n}\n\nflow.set('kelvin', kelvin);\nnew_msg = {\n            \"payload\": {\n                \"data\" : {\n                    entity_id: msg.payload.entity_id,\n                    \"kelvin\" : String(kelvin),\n                    }\n            }\n        };\nreturn new_msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1090,"y":420,"wires":[["64dbfc05.d6fa54"]]},{"id":"51209b4b.fffcb4","type":"function","z":"1653ecda.1e9bd3","name":"Rotate Light Temperature Right","func":"var kelvin = flow.get(\"kelvin\") || 4000;\nvar new_msg = new Object();\n\nswitch(kelvin){\n    case 6000:\n    {\n        kelvin = 1780;\n        break;\n    }\n    case 1780:\n    {\n        kelvin = 2200;\n        break;\n    }\n    case 2200:\n    {\n        kelvin = 2700;\n        break;\n    }\n    case 2700:\n    {\n        kelvin = 3000;\n        break;\n    }\n    case 3000:\n    {\n        kelvin = 4000;\n        break;\n    }\n    case 4000:\n    {\n        kelvin = 5000;\n        break;\n    }\n    case 5000:\n    {\n        kelvin = 6000;\n        break;\n    }\n    default:\n    {\n        kelvin = 4000;\n        break;\n    }\n}\n\nflow.set('kelvin', kelvin);\nnew_msg = {\n            \"payload\": {\n                \"data\" : {\n                    entity_id: msg.payload.entity_id,\n                    \"kelvin\" : String(kelvin),\n                    }\n            }\n        };\nreturn new_msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1090,"y":460,"wires":[["64dbfc05.d6fa54"]]},{"id":"f22a3cf2.74a67","type":"function","z":"1653ecda.1e9bd3","name":"IKEA Trådfri remote decoder","func":"var name = msg.payload.private.name;\nvar device_id = msg.payload.private.device_id;\nvar payload = msg.payload.event.event;\nvar device = msg.payload.event.id;\nmsg.payload.entity_id;\ndelete msg.payload.private;\ndelete msg.payload.event;\ndelete msg.payload.event_type;\ndelete msg.payload.time_fired;\ndelete msg.payload.context;\ndelete msg.payload.origin;\n\n\nif (device  == name){\n    if(payload == \"1001\"){\n        msg.payload.button = \"power_button_hold\";\n        return [msg];\n    }\n    if(payload == \"1002\"){\n        msg.payload.button = \"power_button\";\n        return [msg];\n    }\n    if(payload == \"2001\"){\n        msg.payload.button = \"up_button_hold\";\n        return [msg];\n    }\n    if(payload == \"2002\"){\n        msg.payload.button = \"up_button\";\n        return [msg];\n    }\n    if(payload == \"2003\"){\n        msg.payload.button = \"up_button_release\";\n        return [msg];\n    }\n    if(payload == \"3001\"){\n        msg.payload.button = \"down_button_hold\";\n        return [msg];\n    }\n    if(payload == \"3002\"){\n        msg.payload.button = \"down_button\";\n        return [msg];\n    }\n    if(payload == \"3003\"){\n        msg.payload.button = \"down_button_release\";\n        return [msg];\n    }\n    if(payload == \"4002\"){\n        msg.payload.button = \"left_button\";\n        return [msg];\n    }\n    if(payload == \"5002\"){\n        msg.payload.button = \"right_button\";\n        return [msg];\n    }\n   \n}else{\n    return;\n}\nreturn;\n\n\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":280,"y":320,"wires":[["76c03b07.eadcf4"]]},{"id":"76c03b07.eadcf4","type":"switch","z":"1653ecda.1e9bd3","name":"Button Routing ","property":"payload.button","propertyType":"msg","rules":[{"t":"eq","v":"power_button","vt":"str"},{"t":"eq","v":"power_button_hold","vt":"str"},{"t":"eq","v":"up_button","vt":"str"},{"t":"eq","v":"up_button_hold","vt":"str"},{"t":"eq","v":"up_button_release","vt":"str"},{"t":"eq","v":"down_button","vt":"str"},{"t":"eq","v":"down_button_hold","vt":"str"},{"t":"eq","v":"down_button_release","vt":"str"},{"t":"eq","v":"left_button","vt":"str"},{"t":"eq","v":"right_button","vt":"str"}],"checkall":"true","repair":false,"outputs":10,"x":520,"y":320,"wires":[["2a4d835e.253ffc"],["85455b64.5b2bb8"],["544511ca.02f6a"],["20ab9bf4.beec64"],[],["8d012ab8.750fd8"],["4b6bf5ce.36b8bc"],[],["686a0807.ec3d88"],["4450f8cf.5dd838"]],"inputLabels":["Command In"],"outputLabels":["Power Button","Power Buton Hold","Up Button","Up Button Hold","Up Button Release","Down Button","Down Button Hold","Down Button Release","Left","Right"]},{"id":"2a4d835e.253ffc","type":"change","z":"1653ecda.1e9bd3","name":"Toggle","rules":[{"t":"delete","p":"payload.button","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":180,"wires":[["36d000de.1e9de"]]},{"id":"85455b64.5b2bb8","type":"change","z":"1653ecda.1e9bd3","name":"Reset","rules":[{"t":"set","p":"payload.transition","pt":"msg","to":"2","tot":"str"},{"t":"set","p":"payload.brightness_pct","pt":"msg","to":"60","tot":"str"},{"t":"set","p":"payload.kelvin","pt":"msg","to":"2700","tot":"str"},{"t":"delete","p":"payload.button","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":220,"wires":[["4329573e.348038"]]},{"id":"544511ca.02f6a","type":"change","z":"1653ecda.1e9bd3","name":"Brightness Up","rules":[{"t":"set","p":"payload.brightness_step_pct","pt":"msg","to":"+5","tot":"str"},{"t":"delete","p":"payload.button","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":260,"wires":[["91404c18.dfcf2"]]},{"id":"8d012ab8.750fd8","type":"change","z":"1653ecda.1e9bd3","name":"Brightness Down","rules":[{"t":"set","p":"payload.brightness_step_pct","pt":"msg","to":"-5","tot":"str"},{"t":"delete","p":"payload.button","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":300,"wires":[["91404c18.dfcf2"]]},{"id":"20ab9bf4.beec64","type":"change","z":"1653ecda.1e9bd3","name":"Brightness 100%","rules":[{"t":"set","p":"payload.brightness_pct","pt":"msg","to":"100","tot":"str"},{"t":"delete","p":"payload.button","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":340,"wires":[["fa7ba4f1.2ef2e8"]]},{"id":"4b6bf5ce.36b8bc","type":"change","z":"1653ecda.1e9bd3","name":"Brightness 5%","rules":[{"t":"set","p":"payload.brightness_pct","pt":"msg","to":"5","tot":"str"},{"t":"delete","p":"payload.button","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":380,"wires":[["fa7ba4f1.2ef2e8"]]},{"id":"686a0807.ec3d88","type":"change","z":"1653ecda.1e9bd3","name":"Rotate Light Temperature Left","rules":[{"t":"delete","p":"payload.button","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":790,"y":420,"wires":[["6155b5e8.227acc"]]},{"id":"4450f8cf.5dd838","type":"change","z":"1653ecda.1e9bd3","name":"Rotate Light Temperature Right","rules":[{"t":"delete","p":"payload.button","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":790,"y":460,"wires":[["51209b4b.fffcb4"]]},{"id":"d3d13f86.8b0a6","type":"link in","z":"1653ecda.1e9bd3","name":"IKEA Trådfri Remote RX","links":["43681600.5ea2cc"],"x":115,"y":320,"wires":[["f22a3cf2.74a67"]]},{"id":"45ad3b77.ab7904","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Flow Info

Created 4 years, 5 months ago
Rating: 4 3

Owner

Actions

Rate:

Node Types

Core
  • change (x10)
  • comment (x2)
  • function (x7)
  • link in (x1)
  • link out (x1)
  • switch (x2)
Other

Tags

  • IKEA
  • Trådfri
  • Tradfri
  • Remote
  • deCONZ
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option