Instantly share code, notes, and snippets.
Created
October 15, 2021 05:22
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save spraot/3891d4e9f314ec661fc9b276650e114b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[{"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