[{"id":"a2c85577.56ac88","type":"subflow","name":"8-relay switch","info":"","category":"","in":[{"x":40,"y":80,"wires":[{"id":"efbeaf85.81def"}]}],"out":[{"x":620,"y":80,"wires":[{"id":"c9cbf280.bf4ac","port":0}]}],"env":[],"color":"#DDAA99"},{"id":"efbeaf85.81def","type":"i2c in","z":"a2c85577.56ac88","name":"read inport-reg-add","busno":"1","address":"63","command":"0","count":"1","x":170,"y":80,"wires":[["66319282.01d10c"]]},{"id":"66319282.01d10c","type":"function","z":"a2c85577.56ac88","name":"switch single relay","func":"var relayMaskRemap = [1,4,2,8,64,16,32,128];\n//var relayChRemap = [0,2,1,3,6,4,5,7];\n\nvar relay = msg.relay;\nvar value = msg.value;\nvar oldVal = msg.payload;\n\noldVal = IOToRelay(oldVal);\nif (value === 0){\n oldVal = oldVal & ( ~ (1 << (relay -1)));\n oldVal = relayToIO(oldVal);\n}\nelse{\n oldVal = oldVal | (1 << (relay - 1));\n oldVal = relayToIO(oldVal);\n}\n\nif( oldVal > 127){\n oldVal = oldVal - 256; \n}\nmsg.payload = oldVal;\nreturn msg;\n\n//-----------------------------------------------\n\nfunction relayToIO(relay){\n var val1 = 0;\n for (i = 0; i < 9; i++) {\n if ((relay & (1 << i)) !== 0){\n val1 = val1 + relayMaskRemap[i]; \n }\n }\n return val1;\n}\n\nfunction IOToRelay(iov){\n var val2 = 0;\n for (i = 0; i < 9; i++) {\n if ((iov & relayMaskRemap[i]) !== 0){\n val2 = val2 + (1 << i); \n }\n }\n return val2;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":370,"y":80,"wires":[["c9cbf280.bf4ac"]]},{"id":"c9cbf280.bf4ac","type":"i2c out","z":"a2c85577.56ac88","name":"","busno":"1","address":"63","command":"1","payload":"payload","payloadType":"msg","count":"1","x":530,"y":80,"wires":[[]]}]