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}]