2020-02-27, 07:09 PM
So to the first of my new PCBs
I have decided to use ESPeasy for general control, as its easy to flash and config is fast.
I had been pondering for a while how best to connect an esp8266 to a relay board. If you use the pins on the esp, you can get some chatter on the relays when the board is powered up. Also I wanted to get as much bang for my buck on the pcb board creation, so I have tried to make my boards multi use. This board uses an MCP23017 port expander for the main GPIO control, giving it plenty of IO.
So its first purpose is to be soldered directly to a 8 port relay board for control:
This provides a nice and simple means of joining these boards together.
Software is simple to setup, the esp8266 is flashed with espEasy and then you connect to its wifi and do the basic config. The MCP23017 is a standard part in this, so its easy to then control it via mqtt.
The other intended use of this board is for remote switch input, with LED feedback to the switches. I'll detail that when its up and running.
For now these are simply controlled using a Node red dashboard of buttons:
I have decided to use ESPeasy for general control, as its easy to flash and config is fast.
I had been pondering for a while how best to connect an esp8266 to a relay board. If you use the pins on the esp, you can get some chatter on the relays when the board is powered up. Also I wanted to get as much bang for my buck on the pcb board creation, so I have tried to make my boards multi use. This board uses an MCP23017 port expander for the main GPIO control, giving it plenty of IO.
So its first purpose is to be soldered directly to a 8 port relay board for control:
This provides a nice and simple means of joining these boards together.
Software is simple to setup, the esp8266 is flashed with espEasy and then you connect to its wifi and do the basic config. The MCP23017 is a standard part in this, so its easy to then control it via mqtt.
The other intended use of this board is for remote switch input, with LED feedback to the switches. I'll detail that when its up and running.
For now these are simply controlled using a Node red dashboard of buttons:
Code:
[{"id":"615cbe95.58533","type":"ui_button","z":"c9f6640b.fd0eb8","name":"Relay8","group":"c8b522c8.2b1f7","order":4,"width":0,"height":0,"passthru":false,"label":"{{msg.txt}}","tooltip":"","color":"","bgcolor":"{{msg.background}}","icon":"","payload":"","payloadType":"str","topic":"","x":1110,"y":980,"wires":[["31263838.b87a58"]]},{"id":"a95c8fa6.6af2d","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"green","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"8 On","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":910,"wires":[["615cbe95.58533"]]},{"id":"838e7297.98c0a","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"red","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"8 Off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1050,"wires":[["615cbe95.58533"]]},{"id":"31263838.b87a58","type":"function","z":"c9f6640b.fd0eb8","name":"","func":"context.set('state',context.get('state')||\"closed\");\n\nfunction updateNodeStatus(color, txt) {\n node.status({\n \tfill : color,\n \tshape : \"dot\",\n \ttext : txt\n });\n}\n\nvar state = context.get('state');\nvar color = '';\n\nswitch (state) {\n case 'OFF':\n state = 'ON';\n color = 'green';\n msg.payload = \"0\";\n break;\n case 'ON':\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n default:\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n}\n\ncontext.set('state',state);\nupdateNodeStatus(color,msg.payload);\nnode.send(msg);","outputs":"1","noerr":0,"x":1270,"y":980,"wires":[["c48eaa8c.8ec318"]]},{"id":"49315bcc.b4bde4","type":"switch","z":"c9f6640b.fd0eb8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":980,"wires":[["a95c8fa6.6af2d"],["838e7297.98c0a"]]},{"id":"4e3ffeee.fa75d","type":"mqtt in","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/8","qos":"2","datatype":"auto","broker":"320c126d.0259be","x":350,"y":980,"wires":[["49315bcc.b4bde4"]]},{"id":"c48eaa8c.8ec318","type":"mqtt out","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/8","qos":"","retain":"","broker":"320c126d.0259be","x":1500,"y":980,"wires":[]},{"id":"1f67032e.918ded","type":"ui_button","z":"c9f6640b.fd0eb8","name":"Relay7","group":"c8b522c8.2b1f7","order":4,"width":0,"height":0,"passthru":false,"label":"{{msg.txt}}","tooltip":"","color":"","bgcolor":"{{msg.background}}","icon":"","payload":"","payloadType":"str","topic":"","x":1110,"y":1210,"wires":[["89b9e7a8.b79578"]]},{"id":"fc00c87a.5412f8","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"green","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"7 On","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1140,"wires":[["1f67032e.918ded"]]},{"id":"a199a686.5a9f08","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"red","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"7 Off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1280,"wires":[["1f67032e.918ded"]]},{"id":"89b9e7a8.b79578","type":"function","z":"c9f6640b.fd0eb8","name":"","func":"context.set('state',context.get('state')||\"closed\");\n\nfunction updateNodeStatus(color, txt) {\n node.status({\n \tfill : color,\n \tshape : \"dot\",\n \ttext : txt\n });\n}\n\nvar state = context.get('state');\nvar color = '';\n\nswitch (state) {\n case 'OFF':\n state = 'ON';\n color = 'green';\n msg.payload = \"0\";\n break;\n case 'ON':\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n default:\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n}\n\ncontext.set('state',state);\nupdateNodeStatus(color,msg.payload);\nnode.send(msg);","outputs":"1","noerr":0,"x":1270,"y":1210,"wires":[["874d1e86.255d3"]]},{"id":"d49dd5f9.a663e8","type":"switch","z":"c9f6640b.fd0eb8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":1210,"wires":[["fc00c87a.5412f8"],["a199a686.5a9f08"]]},{"id":"1106fc99.34b9d3","type":"mqtt in","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/7","qos":"2","datatype":"auto","broker":"320c126d.0259be","x":350,"y":1210,"wires":[["d49dd5f9.a663e8"]]},{"id":"874d1e86.255d3","type":"mqtt out","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/7","qos":"","retain":"","broker":"320c126d.0259be","x":1500,"y":1210,"wires":[]},{"id":"f5a8d0ab.b1c0c","type":"ui_button","z":"c9f6640b.fd0eb8","name":"Relay6","group":"c8b522c8.2b1f7","order":4,"width":0,"height":0,"passthru":false,"label":"{{msg.txt}}","tooltip":"","color":"","bgcolor":"{{msg.background}}","icon":"","payload":"","payloadType":"str","topic":"","x":1110,"y":1460,"wires":[["f7984428.057f68"]]},{"id":"11e97dd6.2b3b92","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"green","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"6 On","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1390,"wires":[["f5a8d0ab.b1c0c"]]},{"id":"f58fc023.a6af3","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"red","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"6 Off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1530,"wires":[["f5a8d0ab.b1c0c"]]},{"id":"f7984428.057f68","type":"function","z":"c9f6640b.fd0eb8","name":"","func":"context.set('state',context.get('state')||\"closed\");\n\nfunction updateNodeStatus(color, txt) {\n node.status({\n \tfill : color,\n \tshape : \"dot\",\n \ttext : txt\n });\n}\n\nvar state = context.get('state');\nvar color = '';\n\nswitch (state) {\n case 'OFF':\n state = 'ON';\n color = 'green';\n msg.payload = \"0\";\n break;\n case 'ON':\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n default:\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n}\n\ncontext.set('state',state);\nupdateNodeStatus(color,msg.payload);\nnode.send(msg);","outputs":"1","noerr":0,"x":1270,"y":1460,"wires":[["4a54c242.39666c"]]},{"id":"c29b5581.570608","type":"switch","z":"c9f6640b.fd0eb8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":1460,"wires":[["11e97dd6.2b3b92"],["f58fc023.a6af3"]]},{"id":"a80e7f3a.72d9d","type":"mqtt in","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/6","qos":"2","datatype":"auto","broker":"320c126d.0259be","x":350,"y":1460,"wires":[["c29b5581.570608"]]},{"id":"4a54c242.39666c","type":"mqtt out","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/6","qos":"","retain":"","broker":"320c126d.0259be","x":1500,"y":1460,"wires":[]},{"id":"e77b2ef4.c7b74","type":"ui_button","z":"c9f6640b.fd0eb8","name":"Relay5","group":"c8b522c8.2b1f7","order":4,"width":0,"height":0,"passthru":false,"label":"{{msg.txt}}","tooltip":"","color":"","bgcolor":"{{msg.background}}","icon":"","payload":"","payloadType":"str","topic":"","x":1110,"y":1660,"wires":[["779c4c92.b651f4"]]},{"id":"6eb41f58.55d3a","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"green","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"5 On","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1590,"wires":[["e77b2ef4.c7b74"]]},{"id":"503ebbb4.935f14","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"red","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"5 Off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1730,"wires":[["e77b2ef4.c7b74"]]},{"id":"779c4c92.b651f4","type":"function","z":"c9f6640b.fd0eb8","name":"","func":"context.set('state',context.get('state')||\"closed\");\n\nfunction updateNodeStatus(color, txt) {\n node.status({\n \tfill : color,\n \tshape : \"dot\",\n \ttext : txt\n });\n}\n\nvar state = context.get('state');\nvar color = '';\n\nswitch (state) {\n case 'OFF':\n state = 'ON';\n color = 'green';\n msg.payload = \"0\";\n break;\n case 'ON':\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n default:\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n}\n\ncontext.set('state',state);\nupdateNodeStatus(color,msg.payload);\nnode.send(msg);","outputs":"1","noerr":0,"x":1270,"y":1660,"wires":[["d472d85.b539d28"]]},{"id":"d6acefe2.45692","type":"switch","z":"c9f6640b.fd0eb8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":1660,"wires":[["6eb41f58.55d3a"],["503ebbb4.935f14"]]},{"id":"198ae572.5aa26b","type":"mqtt in","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/5","qos":"2","datatype":"auto","broker":"320c126d.0259be","x":350,"y":1660,"wires":[["d6acefe2.45692"]]},{"id":"d472d85.b539d28","type":"mqtt out","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/5","qos":"","retain":"","broker":"320c126d.0259be","x":1500,"y":1660,"wires":[]},{"id":"3dadf747.f4d3e8","type":"ui_button","z":"c9f6640b.fd0eb8","name":"Relay4","group":"c8b522c8.2b1f7","order":4,"width":0,"height":0,"passthru":false,"label":"{{msg.txt}}","tooltip":"","color":"","bgcolor":"{{msg.background}}","icon":"","payload":"","payloadType":"str","topic":"","x":1110,"y":1880,"wires":[["2071a267.eef0fe"]]},{"id":"fbf296aa.5dd468","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"green","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"4 On","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1810,"wires":[["3dadf747.f4d3e8"]]},{"id":"e8048c5c.cf18b","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"red","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"4 Off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":1950,"wires":[["3dadf747.f4d3e8"]]},{"id":"2071a267.eef0fe","type":"function","z":"c9f6640b.fd0eb8","name":"","func":"context.set('state',context.get('state')||\"closed\");\n\nfunction updateNodeStatus(color, txt) {\n node.status({\n \tfill : color,\n \tshape : \"dot\",\n \ttext : txt\n });\n}\n\nvar state = context.get('state');\nvar color = '';\n\nswitch (state) {\n case 'OFF':\n state = 'ON';\n color = 'green';\n msg.payload = \"0\";\n break;\n case 'ON':\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n default:\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n}\n\ncontext.set('state',state);\nupdateNodeStatus(color,msg.payload);\nnode.send(msg);","outputs":"1","noerr":0,"x":1270,"y":1880,"wires":[["30f7b1d2.4137de"]]},{"id":"328303f6.ba10ec","type":"switch","z":"c9f6640b.fd0eb8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":1880,"wires":[["fbf296aa.5dd468"],["e8048c5c.cf18b"]]},{"id":"eacdc9f0.93f458","type":"mqtt in","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/4","qos":"2","datatype":"auto","broker":"320c126d.0259be","x":350,"y":1880,"wires":[["328303f6.ba10ec"]]},{"id":"30f7b1d2.4137de","type":"mqtt out","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/4","qos":"","retain":"","broker":"320c126d.0259be","x":1500,"y":1880,"wires":[]},{"id":"377719db.62a2b6","type":"ui_button","z":"c9f6640b.fd0eb8","name":"Relay3","group":"c8b522c8.2b1f7","order":4,"width":0,"height":0,"passthru":false,"label":"{{msg.txt}}","tooltip":"","color":"","bgcolor":"{{msg.background}}","icon":"","payload":"","payloadType":"str","topic":"","x":1110,"y":2080,"wires":[["957e12f4.6c2f"]]},{"id":"24cba247.71475e","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"green","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"3 On","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2010,"wires":[["377719db.62a2b6"]]},{"id":"cbb511b0.4792e","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"red","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"3 Off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2150,"wires":[["377719db.62a2b6"]]},{"id":"957e12f4.6c2f","type":"function","z":"c9f6640b.fd0eb8","name":"","func":"context.set('state',context.get('state')||\"closed\");\n\nfunction updateNodeStatus(color, txt) {\n node.status({\n \tfill : color,\n \tshape : \"dot\",\n \ttext : txt\n });\n}\n\nvar state = context.get('state');\nvar color = '';\n\nswitch (state) {\n case 'OFF':\n state = 'ON';\n color = 'green';\n msg.payload = \"0\";\n break;\n case 'ON':\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n default:\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n}\n\ncontext.set('state',state);\nupdateNodeStatus(color,msg.payload);\nnode.send(msg);","outputs":"1","noerr":0,"x":1270,"y":2080,"wires":[["c9c2773e.2a6ff8"]]},{"id":"52b49a19.acb794","type":"switch","z":"c9f6640b.fd0eb8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":2080,"wires":[["24cba247.71475e"],["cbb511b0.4792e"]]},{"id":"58cdf85.86dc508","type":"mqtt in","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/3","qos":"2","datatype":"auto","broker":"320c126d.0259be","x":350,"y":2080,"wires":[["52b49a19.acb794"]]},{"id":"c9c2773e.2a6ff8","type":"mqtt out","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/3","qos":"","retain":"","broker":"320c126d.0259be","x":1500,"y":2080,"wires":[]},{"id":"b6e8c6f5.9527e8","type":"ui_button","z":"c9f6640b.fd0eb8","name":"Relay2","group":"c8b522c8.2b1f7","order":4,"width":0,"height":0,"passthru":false,"label":"{{msg.txt}}","tooltip":"","color":"","bgcolor":"{{msg.background}}","icon":"","payload":"","payloadType":"str","topic":"","x":1110,"y":2280,"wires":[["93de750.887db88"]]},{"id":"9201dbda.c4a978","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"green","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"2 On","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2210,"wires":[["b6e8c6f5.9527e8"]]},{"id":"3cf4b630.fe7dda","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"red","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"2 Off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2350,"wires":[["b6e8c6f5.9527e8"]]},{"id":"93de750.887db88","type":"function","z":"c9f6640b.fd0eb8","name":"","func":"context.set('state',context.get('state')||\"closed\");\n\nfunction updateNodeStatus(color, txt) {\n node.status({\n \tfill : color,\n \tshape : \"dot\",\n \ttext : txt\n });\n}\n\nvar state = context.get('state');\nvar color = '';\n\nswitch (state) {\n case 'OFF':\n state = 'ON';\n color = 'green';\n msg.payload = \"0\";\n break;\n case 'ON':\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n default:\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n}\n\ncontext.set('state',state);\nupdateNodeStatus(color,msg.payload);\nnode.send(msg);","outputs":"1","noerr":0,"x":1270,"y":2280,"wires":[["eb91729e.f5a2c"]]},{"id":"ea22f5bf.ed5948","type":"switch","z":"c9f6640b.fd0eb8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":2280,"wires":[["9201dbda.c4a978"],["3cf4b630.fe7dda"]]},{"id":"4ec34f5c.6994e","type":"mqtt in","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/2","qos":"2","datatype":"auto","broker":"320c126d.0259be","x":350,"y":2280,"wires":[["ea22f5bf.ed5948"]]},{"id":"eb91729e.f5a2c","type":"mqtt out","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/2","qos":"","retain":"","broker":"320c126d.0259be","x":1500,"y":2280,"wires":[]},{"id":"f52ce2a1.07ef","type":"ui_button","z":"c9f6640b.fd0eb8","name":"Relay1","group":"c8b522c8.2b1f7","order":4,"width":0,"height":0,"passthru":false,"label":"{{msg.txt}}","tooltip":"","color":"","bgcolor":"{{msg.background}}","icon":"","payload":"","payloadType":"str","topic":"","x":1110,"y":2480,"wires":[["ca3e9140.bdcb4"]]},{"id":"deb78380.35823","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"green","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"1 On","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2410,"wires":[["f52ce2a1.07ef"]]},{"id":"b4cd233e.f7e2a","type":"change","z":"c9f6640b.fd0eb8","name":"","rules":[{"t":"set","p":"background","pt":"msg","to":"red","tot":"str"},{"t":"set","p":"txt","pt":"msg","to":"1 Off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2550,"wires":[["f52ce2a1.07ef"]]},{"id":"ca3e9140.bdcb4","type":"function","z":"c9f6640b.fd0eb8","name":"","func":"context.set('state',context.get('state')||\"closed\");\n\nfunction updateNodeStatus(color, txt) {\n node.status({\n \tfill : color,\n \tshape : \"dot\",\n \ttext : txt\n });\n}\n\nvar state = context.get('state');\nvar color = '';\n\nswitch (state) {\n case 'OFF':\n state = 'ON';\n color = 'green';\n msg.payload = \"0\";\n break;\n case 'ON':\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n default:\n state = 'OFF';\n color = 'red';\n msg.payload = \"1\";\n break;\n}\n\ncontext.set('state',state);\nupdateNodeStatus(color,msg.payload);\nnode.send(msg);","outputs":"1","noerr":0,"x":1270,"y":2480,"wires":[["fa376694.99eaa8"]]},{"id":"d8f3414c.28a5b","type":"switch","z":"c9f6640b.fd0eb8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":2480,"wires":[["deb78380.35823"],["b4cd233e.f7e2a"]]},{"id":"688e6ef5.1ee0e","type":"mqtt in","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/1","qos":"2","datatype":"auto","broker":"320c126d.0259be","x":350,"y":2480,"wires":[["d8f3414c.28a5b"]]},{"id":"fa376694.99eaa8","type":"mqtt out","z":"c9f6640b.fd0eb8","name":"","topic":"StarRelay/mcpgpio/1","qos":"","retain":"","broker":"320c126d.0259be","x":1500,"y":2480,"wires":[]},{"id":"c8b522c8.2b1f7","type":"ui_group","z":"","name":"Relays","tab":"21a6bafb.b2a3c6","order":1,"disp":true,"width":"6","collapse":false},{"id":"320c126d.0259be","type":"mqtt-broker","z":"","name":"OpenPlotter","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"21a6bafb.b2a3c6","type":"ui_tab","z":"","name":"Control","icon":"dashboard","order":2,"disabled":false,"hidden":false}]