Fading - cflurin/node-red-contrib-dsm GitHub Wiki
Purpose: brightness fade-in and fade-out
Settings:
- step: increasing/decreasing value
- delay: time interval in milliseconds between steps
Configuration
{
"currentState": "stopped",
"states": {
"stopped": {
"fade-in": "increasing",
"fade-out": "decreasing"
},
"increasing": {
"increasing": "increasing",
"fade-out": "decreasing",
"stop": "stopped"
},
"decreasing": {
"decreasing": "decreasing",
"fade-in": "increasing",
"stop": "stopped"
}
},
"data": {
"brightness": 0,
"target": 0,
"step": 5,
"delay": 1000
},
"methods": {
"target": [
"sm.data.target = msg.payload;",
"msg.payload = sm.data.brightness;",
"if (sm.data.target >= sm.data.brightness) {",
" sm.vector = 'increasing';",
"} else if (sm.data.target < sm.data.brightness) {",
" sm.vector = 'decreasing';",
"}",
"if (timeout.id) {",
" clearTimeout(timeout.id);",
"}",
"sm.currentState = sm.vector;",
"resume(sm.vector, msg);"
],
"increasing": [
"if (msg.payload < sm.data.target) {",
" if (msg.payload > sm.data.target) msg.payload = sm.data.target;",
" sm.data.brightness = msg.payload;",
" timeout.id = setTimeout(function() {",
" msg.payload = msg.payload + sm.data.step;",
" node.send(msg);",
" resume('increasing', msg);",
" }, sm.data.delay);",
"} else {",
" sm.currentState = 'stopped';",
"}"
],
"decreasing": [
"if (msg.payload > sm.data.target) {",
" if (msg.payload < sm.data.target) msg.payload = sm.data.target;",
" sm.data.brightness = msg.payload;",
" timeout.id = setTimeout(function() {",
" msg.payload = msg.payload - sm.data.step;",
" node.send(msg);",
" resume('decreasing', msg);",
" }, sm.data.delay);",
"} else {",
" sm.currentState = 'stopped';",
"}"
],
"stop": [
"clearTimeout(timeout.id);"
],
"onAfterTransition": "output = false;",
"status": {
"fill": {
"get": "sm.currentState==='increasing'?'yellow':sm.currentState==='decreasing'?'blue':'grey'"
},
"shape": "dot",
"text": {
"get": "sm.currentState"
}
}
}
}
Flow
[{"id":"f4ba4e74.0dc6f","type":"inject","z":"6ff0723.8c6b78c","name":"","topic":"target","payload":"0","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":1760,"wires":["2439b007.ff019"](/cflurin/node-red-contrib-dsm/wiki/"2439b007.ff019")},{"id":"d3127034.1ae32","type":"debug","z":"6ff0723.8c6b78c","name":"","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","x":510,"y":1760,"wires":[]},{"id":"2439b007.ff019","type":"dsm","z":"6ff0723.8c6b78c","name":"fading","sm_config":"{\n \"currentState\": \"stopped\",\n \"states\": {\n \"stopped\": {\n \"fade-in\": \"increasing\",\n \"fade-out\": \"decreasing\"\n },\n \"increasing\": {\n \"increasing\": \"increasing\",\n \"fade-out\": \"decreasing\",\n \"stop\": \"stopped\"\n },\n \"decreasing\": {\n \"decreasing\": \"decreasing\",\n \"fade-in\": \"increasing\",\n \"stop\": \"stopped\"\n }\n },\n \"data\": {\n \"brightness\": 0,\n \"target\": 0,\n \"step\": 5,\n \"delay\": 1000\n },\n \"methods\": {\n \"target\": [\n \"sm.data.target = msg.payload;\",\n \"msg.payload = sm.data.brightness;\",\n \"if (sm.data.target >= sm.data.brightness) {\",\n \" sm.vector = 'increasing';\",\n \"} else if (sm.data.target < sm.data.brightness) {\",\n \" sm.vector = 'decreasing';\",\n \"}\",\n \"if (timeout.id) {\",\n \" clearTimeout(timeout.id);\",\n \"}\",\n \"sm.currentState = sm.vector;\",\n \"resume(sm.vector, msg);\"\n ],\n \"increasing\": [\n \"if (msg.payload < sm.data.target) {\",\n \" if (msg.payload > sm.data.target) msg.payload = sm.data.target;\",\n \" sm.data.brightness = msg.payload;\",\n \" timeout.id = setTimeout(function() {\",\n \" msg.payload = msg.payload + sm.data.step;\",\n \" node.send(msg);\",\n \" resume('increasing', msg);\",\n \" }, sm.data.delay);\",\n \"} else {\",\n \" sm.currentState = 'stopped';\",\n \"}\"\n ],\n \"decreasing\": [\n \"if (msg.payload > sm.data.target) {\",\n \" if (msg.payload < sm.data.target) msg.payload = sm.data.target;\",\n \" sm.data.brightness = msg.payload;\",\n \" timeout.id = setTimeout(function() {\",\n \" msg.payload = msg.payload - sm.data.step;\",\n \" node.send(msg);\",\n \" resume('decreasing', msg);\",\n \" }, sm.data.delay);\",\n \"} else {\",\n \" sm.currentState = 'stopped';\",\n \"}\"\n ],\n \"stop\": [\n \"clearTimeout(timeout.id);\"\n ],\n \"onAfterTransition\": \"output = false;\",\n \"status\": {\n \"fill\": {\n \"get\": \"sm.currentState==='increasing'?'yellow':sm.currentState==='decreasing'?'blue':'grey'\"\n },\n \"shape\": \"dot\",\n \"text\": {\n \"get\": \"sm.currentState\"\n }\n }\n }\n}","x":360,"y":1760,"wires":["d3127034.1ae32"](/cflurin/node-red-contrib-dsm/wiki/"d3127034.1ae32")},{"id":"94ca40c8.2f2c9","type":"inject","z":"6ff0723.8c6b78c","name":"","topic":"target","payload":"50","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":1800,"wires":["2439b007.ff019"](/cflurin/node-red-contrib-dsm/wiki/"2439b007.ff019")},{"id":"15aea14b.a464ff","type":"inject","z":"6ff0723.8c6b78c","name":"","topic":"target","payload":"80","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":1840,"wires":["2439b007.ff019"](/cflurin/node-red-contrib-dsm/wiki/"2439b007.ff019")},{"id":"1c05093b.a74af7","type":"ui_slider","z":"6ff0723.8c6b78c","name":"brightness","label":"{{ value }}","group":"f0e5c847.caf348","order":1,"width":0,"height":0,"passthru":true,"topic":"target","min":0,"max":"100","step":"5","x":150,"y":1700,"wires":["758444f8.ea4c6c"](/cflurin/node-red-contrib-dsm/wiki/"758444f8.ea4c6c")},{"id":"758444f8.ea4c6c","type":"dsm","z":"6ff0723.8c6b78c","name":"filter","sm_config":"{\n \"methods\": {\n \"onTransition\": {\n \"name\": \"watchdog\",\n \"param\": 1000,\n \"do\": \"node.status({}); node.send(msg);\"\n },\n \"status\": {\n \"fill\": \"blue\",\n \"shape\": \"dot\",\n \"text\": {\n \"get\": \"msg.payload\"\n }\n }\n }\n}","x":350,"y":1700,"wires":["2439b007.ff019"](/cflurin/node-red-contrib-dsm/wiki/"2439b007.ff019")},{"id":"7347af1e.01361","type":"inject","z":"6ff0723.8c6b78c","name":"","topic":"stop","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":1900,"wires":["2439b007.ff019"](/cflurin/node-red-contrib-dsm/wiki/"2439b007.ff019")},{"id":"f0e5c847.caf348","type":"ui_group","z":"","name":"Fading","tab":"3e5ea1c1.bf3bde","disp":true,"width":"6","collapse":false},{"id":"3e5ea1c1.bf3bde","type":"ui_tab","z":"","name":"Light","icon":"dashboard","order":3}]