Skip to content

Instantly share code, notes, and snippets.

@spraot
Created October 15, 2021 05:22
Show Gist options
  • Save spraot/3891d4e9f314ec661fc9b276650e114b to your computer and use it in GitHub Desktop.
Save spraot/3891d4e9f314ec661fc9b276650e114b to your computer and use it in GitHub Desktop.
[{"id":"a7ba6e67.ccedc","type":"subflow","name":"Single button dimmer","info":"","category":"","in":[{"x":70,"y":200,"wires":[{"id":"5717df0d.29bba"}]}],"out":[{"x":920,"y":240,"wires":[{"id":"e63b29ee.444f28","port":0},{"id":"b67cbb7a.350538","port":0},{"id":"8ab292a7.183eb","port":0},{"id":"dc412dbd.75514","port":0},{"id":"3ba13c57.9377d4","port":0},{"id":"cc879535.1b7b28","port":0}]},{"x":920,"y":320,"wires":[{"id":"de96cf75.3eec3","port":0}]}],"env":[{"name":"ButtonPressed","type":"str","value":"down","ui":{"label":{"en-US":"Input when button pressed"}}},{"name":"ButtonReleased","type":"str","value":"up","ui":{"label":{"en-US":"Input when button released"}}},{"name":"LongPressDelay","type":"num","value":"400","ui":{"label":{"en-US":"Long press delay"}}},{"name":"LongPressMode","type":"str","value":"brightness","ui":{"label":{"en-US":"Long press mode"},"type":"select","opts":{"opts":[{"l":{"en-US":"Brightness"},"v":"brightness"},{"l":{"en-US":"Output 2"},"v":"output2"}]}}},{"name":"TransitionSpeed","type":"num","value":"150","ui":{"label":{"en-US":"Transition speed (50-200)"},"type":"input","opts":{"types":["num"]}}},{"name":"OnState","type":"str","value":"Resume","ui":{"label":{"en-US":"Brightness when turning on light"},"type":"select","opts":{"opts":[{"l":{"en-US":"Resume"},"v":"Resume"},{"l":{"en-US":"Full brightness"},"v":"Full brightness"}]}}}],"color":"#E6E0F8","inputLabels":["from button and state payload from zigbee2mqtt"],"outputLabels":["to zigbee2mqtt light",""],"icon":"node-red/light.svg","status":{"x":920,"y":580,"wires":[{"id":"359e0e80.d300e2","port":0}]}},{"id":"14e235b2.f51e4a","type":"comment","z":"a7ba6e67.ccedc","name":"instructions","info":"Original version of this flow can be found at \nhttps://flows.nodered.org/flow/1949af43de3db8133b039dac706372bd/in/YsSoz9IDM4Z_\n\nto the input add:\n1) button sending different pressed/released commands\n2) input from zigbee2mqtt for light state topic\n\nto the output add:\n1) output to zigbee2mqtt set state topic","x":300,"y":40,"wires":[]},{"id":"c5b5ebe6.f11908","type":"change","z":"a7ba6e67.ccedc","name":"save snapshot","rules":[{"t":"set","p":"lightState","pt":"flow","to":"payload.state","tot":"msg"},{"t":"set","p":"oldBrightness","pt":"flow","to":"payload.brightness","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":580,"wires":[["359e0e80.d300e2"]]},{"id":"5717df0d.29bba","type":"switch","z":"a7ba6e67.ccedc","name":"Input filter","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"ButtonPressed","vt":"env"},{"t":"eq","v":"ButtonReleased","vt":"env"},{"t":"else"}],"checkall":"true","repair":false,"outputs":3,"x":170,"y":200,"wires":[["e0c4f93a.c41348","5d30cbd.0329134"],["631fdd1f.ad4fa4","dc412dbd.75514","93b9f9ab.aa8f18","38618033.4ae8f"],["c536598.c8936a8"]]},{"id":"e6c32ca6.a352a","type":"switch","z":"a7ba6e67.ccedc","name":"toggle","property":"lightState","propertyType":"flow","rules":[{"t":"regex","v":"on","vt":"str","case":true},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":530,"y":230,"wires":[["e63b29ee.444f28"],["885b7776.702998"]]},{"id":"e63b29ee.444f28","type":"change","z":"a7ba6e67.ccedc","name":"Off","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"state\": \"OFF\"}","tot":"json"},{"t":"set","p":"lightState","pt":"flow","to":"OFF","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":220,"wires":[[]]},{"id":"b67cbb7a.350538","type":"change","z":"a7ba6e67.ccedc","name":"Full brightness","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"state\": \"ON\", \"brightness\": 255}","tot":"json"},{"t":"set","p":"lightState","pt":"flow","to":"ON","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":260,"wires":[[]]},{"id":"71c5ce43.9323e","type":"switch","z":"a7ba6e67.ccedc","name":"LightTurnedOn?","property":"lightState","propertyType":"flow","rules":[{"t":"regex","v":"on","vt":"str","case":true},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":140,"y":440,"wires":[["27faa121.90b4be"],["4e3b4772.ecefc8"]]},{"id":"c536598.c8936a8","type":"switch","z":"a7ba6e67.ccedc","name":"light state?","property":"payload","propertyType":"msg","rules":[{"t":"hask","v":"state","vt":"str"},{"t":"regex","v":"on|off","vt":"str","case":true}],"checkall":"true","repair":false,"outputs":2,"x":390,"y":580,"wires":[["c5b5ebe6.f11908"],["6823fc5a.67d7f4"]]},{"id":"e0c4f93a.c41348","type":"change","z":"a7ba6e67.ccedc","name":"","rules":[{"t":"set","p":"PressedTime","pt":"flow","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":100,"wires":[[]]},{"id":"631fdd1f.ad4fa4","type":"change","z":"a7ba6e67.ccedc","name":"","rules":[{"t":"set","p":"ReleasedTime","pt":"flow","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":180,"wires":[["51b8f1a5.756ff"]]},{"id":"51b8f1a5.756ff","type":"function","z":"a7ba6e67.ccedc","name":"Short press?","func":"if (flow.get(\"ReleasedTime\") - flow.get(\"PressedTime\") < env.get(\"LongPressDelay\"))\n{\n msg.payload = \"Short press\";\n return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":390,"y":230,"wires":[["e6c32ca6.a352a"]]},{"id":"885b7776.702998","type":"switch","z":"a7ba6e67.ccedc","name":"Resume or full brightness?","property":"OnState","propertyType":"env","rules":[{"t":"eq","v":"Full brightness","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":440,"y":280,"wires":[["b67cbb7a.350538"],["8ab292a7.183eb"]]},{"id":"8ab292a7.183eb","type":"change","z":"a7ba6e67.ccedc","name":"Resume","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"state\": \"ON\"}","tot":"json"},{"t":"set","p":"lightState","pt":"flow","to":"ON","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":300,"wires":[[]]},{"id":"dc412dbd.75514","type":"template","z":"a7ba6e67.ccedc","name":"Stop increasing/decreasing brightness","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\"brightness_move\":0}","output":"json","x":470,"y":140,"wires":[[]]},{"id":"cc879535.1b7b28","type":"function","z":"a7ba6e67.ccedc","name":"start increasing brightness","func":"flow.set(\"increased\", true);\n//msg.payload.state = 'ON';\nmsg.payload.brightness_move = env.get(\"TransitionSpeed\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":740,"y":440,"wires":[["39e74143.c9639e"]]},{"id":"3ba13c57.9377d4","type":"function","z":"a7ba6e67.ccedc","name":"start decreasing brightness","func":"flow.set(\"increased\",false);\n//msg.payload.state = 'ON';\nmsg.payload.brightness_move = -env.get(\"TransitionSpeed\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":740,"y":400,"wires":[["39e74143.c9639e"]]},{"id":"4e3b4772.ecefc8","type":"change","z":"a7ba6e67.ccedc","name":"Start from brightness = 1","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"brightness\":1}","tot":"json"},{"t":"set","p":"oldBrightness","pt":"flow","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":430,"y":460,"wires":[["cc879535.1b7b28"]]},{"id":"359e0e80.d300e2","type":"function","z":"a7ba6e67.ccedc","name":"share status","func":"msg.payload = flow.get(\"lightState\");\nif (env.get(\"LongPressMode\") == \"brightness\" && flow.get(\"oldBrightness\") != undefined) {\n msg.payload += ' ' + Math.round(flow.get(\"oldBrightness\")/2.55) + '%';\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":810,"y":580,"wires":[[]]},{"id":"5d30cbd.0329134","type":"change","z":"a7ba6e67.ccedc","name":"LongPressDelay","rules":[{"t":"set","p":"delay","pt":"msg","to":"LongPressDelay","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":120,"y":280,"wires":[["2d0e37e6.2fb438"]]},{"id":"8325f932.7c7a58","type":"switch","z":"a7ba6e67.ccedc","name":"Long press mode","property":"LongPressMode","propertyType":"env","rules":[{"t":"eq","v":"brightness","vt":"str"},{"t":"eq","v":"output2","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":130,"y":380,"wires":[["71c5ce43.9323e"],["de96cf75.3eec3"]]},{"id":"de96cf75.3eec3","type":"template","z":"a7ba6e67.ccedc","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\"state\": \"TOGGLE\"}","output":"json","x":380,"y":360,"wires":[[]]},{"id":"6823fc5a.67d7f4","type":"template","z":"a7ba6e67.ccedc","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"state\": \"{{payload}}\",\n \"brightness\": 255\n}","output":"json","x":400,"y":640,"wires":[["c5b5ebe6.f11908"]]},{"id":"27faa121.90b4be","type":"function","z":"a7ba6e67.ccedc","name":"Should decrease or increase?","func":"let bri = flow.get(\"oldBrightness\");\nif (bri == undefined || bri == null) {bri = 126;}\n\nmsg.payload = {};\nmsg.oldBrightness = bri;\n\nif (bri > 250 || (flow.get(\"increased\") && bri >= 5)) {\n return [msg, null];\n} else {\n return [null, msg];\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","x":450,"y":420,"wires":[["3ba13c57.9377d4"],["cc879535.1b7b28"]]},{"id":"39e74143.c9639e","type":"function","z":"a7ba6e67.ccedc","name":"Reverse delay","func":"const ts = msg.payload.brightness_move;\nbri = ts>0 ? 255 : 1;\nconst rem = bri - msg.oldBrightness;\n\nreturn {\n delay: rem/ts*1000+1500, \n payload: {},\n oldBrightness: bri\n};","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1000,"y":420,"wires":[["ecd80ac5.71cba8"]]},{"id":"a316776e.3f3d08","type":"switch","z":"a7ba6e67.ccedc","name":"Increase or decrease","property":"increased","propertyType":"flow","rules":[{"t":"true"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":1060,"y":500,"wires":[["3ba13c57.9377d4"],["cc879535.1b7b28"]]},{"id":"ecd80ac5.71cba8","type":"trigger","z":"a7ba6e67.ccedc","name":"Delay","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"400","extend":false,"overrideDelay":true,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":790,"y":500,"wires":[["dc412dbd.75514","49247f1e.0c8ff"]]},{"id":"2d0e37e6.2fb438","type":"trigger","z":"a7ba6e67.ccedc","name":"Delay","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"400","extend":true,"overrideDelay":true,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":190,"y":320,"wires":[["8325f932.7c7a58"]]},{"id":"93b9f9ab.aa8f18","type":"change","z":"a7ba6e67.ccedc","name":"Reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":70,"y":320,"wires":[["2d0e37e6.2fb438"]]},{"id":"38618033.4ae8f","type":"change","z":"a7ba6e67.ccedc","name":"Reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":650,"y":500,"wires":[["ecd80ac5.71cba8","49247f1e.0c8ff"]]},{"id":"49247f1e.0c8ff","type":"trigger","z":"a7ba6e67.ccedc","name":"Delay","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"100","extend":false,"overrideDelay":false,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":890,"y":540,"wires":[["a316776e.3f3d08"]]}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment