Node-HIU controls and monitoring documentation

Node-HIU Bluetooth

Android App

HeatwebConnect

Node-RED Flow

[{"id":"74add188.62b63","type":"tab","label":"Bluetooth","disabled":false,"info":""},{"id":"47b901ed.e80e7","type":"inject","z":"74add188.62b63","name":"Read","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":740,"wires":[["190291bf.702f6e"]]},{"id":"ae4e0f4f.d663f","type":"exec","z":"74add188.62b63","command":"cat /dev/rfcomm0","addpay":false,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":750,"y":740,"wires":[["d0c069af.a39f38","f3b6bcb4.97d0e8"],[],["9b12ab73.5c457"]]},{"id":"56dda7ed.d4a3c8","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1430,"y":680,"wires":[]},{"id":"70b699d0.3b3518","type":"exec","z":"74add188.62b63","command":"sudo hciconfig hci0 piscan","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":380,"y":320,"wires":[["8e10cba0.4ea6d"],[],["1221674e.510d59"]]},{"id":"1221674e.510d59","type":"exec","z":"74add188.62b63","command":"sudo sdptool add --channel=22 SP","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":400,"y":400,"wires":[["ae7f5541.f364a"],[],["6637446e.959bcc"]]},{"id":"6637446e.959bcc","type":"exec","z":"74add188.62b63","command":"sdptool browse local","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":360,"y":480,"wires":[["4ca6d199.e5b768"],[],["e33a6196.e47c5"]]},{"id":"8a2f3c4c.90c468","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"30","topic":"","payload":"","payloadType":"date","x":150,"y":220,"wires":[["fb2dd2fa.0017f8"]]},{"id":"590bd2f5.1781fc","type":"comment","z":"74add188.62b63","name":"","info":"https://puravidaapps.com/btchat.php\n\nhttps://raspberrypi.stackexchange.com/questions/41776/failed-to-connect-to-sdp-server-on-ffffff000000-no-such-file-or-directory\n\nExploring Beaglebone Page 373\n\n> sudo nano /etc/systemd/system/dbus-org.bluez.service\n> \n> Change \tExecStart=/usr/lib/bluetooth/bluetoothd\n> \n> \n> To \tExecStart=/usr/lib/bluetooth/bluetoothd --compat\n> \t\tExecStartPost=/usr/bin/sdptool add --channel=22 SP\n> ","x":1480,"y":200,"wires":[]},{"id":"fb2dd2fa.0017f8","type":"exec","z":"74add188.62b63","command":"sudo chmod 777 /var/run/sdp","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":390,"y":240,"wires":[["a874f33b.cba018"],[],["70b699d0.3b3518"]]},{"id":"a874f33b.cba018","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":240,"wires":[]},{"id":"8e10cba0.4ea6d","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":320,"wires":[]},{"id":"ae7f5541.f364a","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":400,"wires":[]},{"id":"4ca6d199.e5b768","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":480,"wires":[]},{"id":"6852d701.f17b","type":"daemon","z":"74add188.62b63","name":"rfcomm listen","command":"sudo","args":"rfcomm watch /dev/rfcomm0 22","autorun":false,"cr":false,"redo":false,"op":"string","closer":"SIGKILL","x":330,"y":640,"wires":[["a2efed4.24c3f9"],[],["9371abbb.e766e"]]},{"id":"e33a6196.e47c5","type":"change","z":"74add188.62b63","name":"","rules":[{"t":"set","p":"start","pt":"msg","to":"1","tot":"str"},{"t":"set","p":"connected","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":560,"wires":[["6852d701.f17b"]]},{"id":"a2efed4.24c3f9","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":540,"wires":[]},{"id":"aa2f487d.79a3e8","type":"change","z":"74add188.62b63","name":"connected=1","rules":[{"t":"set","p":"connected","pt":"flow","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":740,"wires":[["ae4e0f4f.d663f"]]},{"id":"9b12ab73.5c457","type":"change","z":"74add188.62b63","name":"connected=0","rules":[{"t":"set","p":"connected","pt":"flow","to":"0","tot":"str"},{"t":"set","p":"repeat","pt":"flow","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":970,"y":760,"wires":[[]]},{"id":"190291bf.702f6e","type":"switch","z":"74add188.62b63","name":"","property":"connected","propertyType":"flow","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":4,"x":310,"y":740,"wires":[["aa2f487d.79a3e8"],["36c9d1da.09acbe"],["c0d8ddb1.9a288"],[]]},{"id":"f3b6bcb4.97d0e8","type":"debug","z":"74add188.62b63","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":970,"y":640,"wires":[]},{"id":"36c9d1da.09acbe","type":"change","z":"74add188.62b63","name":"connected=2","rules":[{"t":"set","p":"connected","pt":"flow","to":"2","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":800,"wires":[["698db04f.589fb8"]]},{"id":"b375de6c.70656","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1","payloadType":"str","x":130,"y":520,"wires":[["e33a6196.e47c5"]]},{"id":"af5d1436.c598","type":"exec","z":"74add188.62b63","command":"sdptool browse local","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1560,"y":420,"wires":[["75c5fb80.4d9d24"],[],[]]},{"id":"55050f92.e16518","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1520,"y":360,"wires":[["af5d1436.c598"]]},{"id":"c730e859.3790f8","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1610,"y":520,"wires":[]},{"id":"75c5fb80.4d9d24","type":"split","z":"74add188.62b63","name":"","splt":"Service Name:","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":1560,"y":480,"wires":[["c730e859.3790f8"]]},{"id":"915c11f8.9395f","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"kill","v":"SIGINT","vt":"str"},{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"SIGINT","payloadType":"str","x":130,"y":640,"wires":[["6852d701.f17b"]]},{"id":"2401109b.e2049","type":"switch","z":"74add188.62b63","name":"connected=3 ?","property":"connected","propertyType":"flow","rules":[{"t":"eq","v":"3","vt":"str"}],"checkall":"false","repair":false,"outputs":1,"x":1180,"y":720,"wires":[["56dda7ed.d4a3c8","c7cbe9e8.4d1d6"]]},{"id":"be0352e2.29879","type":"file","z":"74add188.62b63","name":"","filename":"/dev/rfcomm0","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":2140,"y":1300,"wires":[[]]},{"id":"698db04f.589fb8","type":"function","z":"74add188.62b63","name":"Hello","func":"msg.payload = "Connecting.";\n\nflow.set("conecttime",new Date().getTime());\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":670,"y":900,"wires":[["3e1f1a74.132ebe"]]},{"id":"3e1f1a74.132ebe","type":"change","z":"74add188.62b63","name":"connected=3","rules":[{"t":"set","p":"connected","pt":"flow","to":"3","tot":"str"},{"t":"set","p":"setup","pt":"flow","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":900,"wires":[["44c44d00.381f7c"]]},{"id":"9f20e6e4.8fa428","type":"link in","z":"74add188.62b63","name":"","links":["44c44d00.381f7c","6e596ef3.307ab8","a1f7d58.a629428","75cc36af.d62dd"],"x":955,"y":980,"wires":[["10a2a8e4.41cf8f"]]},{"id":"44c44d00.381f7c","type":"link out","z":"74add188.62b63","name":"","links":["9f20e6e4.8fa428","c28ee7d6.c232c8","d0c2949f.5c0b78"],"x":945,"y":900,"wires":[]},{"id":"df5f5f1.9d3262","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":500,"y":880,"wires":[["698db04f.589fb8"]]},{"id":"f1e95ce5.d85ed","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1490,"y":60,"wires":[["127d816b.0e71cf"]]},{"id":"199cabb9.fdbcc4","type":"change","z":"74add188.62b63","name":"","rules":[{"t":"set","p":"buttons","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1500,"y":140,"wires":[[]]},{"id":"127d816b.0e71cf","type":"template","z":"74add188.62b63","name":"Buttons","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"","output":"str","x":1480,"y":100,"wires":[["199cabb9.fdbcc4"]]},{"id":"c7cbe9e8.4d1d6","type":"link out","z":"74add188.62b63","name":"","links":["67c98df1.21364c"],"x":1375,"y":720,"wires":[]},{"id":"67c98df1.21364c","type":"link in","z":"74add188.62b63","name":"","links":["c7cbe9e8.4d1d6"],"x":275,"y":120,"wires":[["69c55245.3ce22c"]]},{"id":"4a200708.4d64e8","type":"comment","z":"74add188.62b63","name":"User Input","info":"","x":140,"y":100,"wires":[]},{"id":"a1f7d58.a629428","type":"link out","z":"74add188.62b63","name":"","links":["9f20e6e4.8fa428","52ce1bce.f094ac"],"x":1155,"y":80,"wires":[]},{"id":"3fdfc6ae.2b1a82","type":"comment","z":"74add188.62b63","name":"User Output","info":"","x":1270,"y":80,"wires":[]},{"id":"69c55245.3ce22c","type":"function","z":"74add188.62b63","name":"User Interface","func":"\nvar incP = msg.payload;\nvar incT = msg.topic;\n\n\nif (msg.payload.split(":")[0]!=="1234") {\n \n msg.payload = "Connection refused."\n return [msg,null];\n}\n\n\nvar userReq = msg.payload.substr(msg.payload.indexOf(":")+1);\n\nif (userReq.substr(0,8)=="readings") {\n \n \n return [null,null,msg];\n}\n\n// MQTT JSON\nelse if (userReq.substr(0,6)=="MQTT:{") {\n \n \n var oot = {};\n var mqttobj = JSON.parse(userReq.substr(5));\n if(mqttobj["set"]) {\n for(var ss in mqttobj["set"]) {\n oot["set" + "/" + ss] = mqttobj["set"][ss];\n }\n }\n msg.payload = oot;\n return [null,msg];\n}\n\nelse if (userReq.substr(0,5)=="MQTT:") {\n \n var topc = userReq.substr(5);\n var vv = topc.split("=")[1];\n topc = topc.split("=")[0];\n \n msg.payload = {};\n msg.payload[topc] = vv;\n return [null,msg];\n}\n\n\n\nvar readings = global.get("readings.local." + global.get("node"));\n\nvar btns = "";\nfor (var g in readings) {\n \n btns += '<button class="button" onclick="myFunction(' + "'" + g + "/#'" + ')">' + g +'';\n \n}\n\nmsg.delay="";\nmsg.payload = "";\nvar filter = "";\n\n\n\nif (userReq=="cmd") {\n \n var cmds = JSON.parse(readings.json.commands.value) || [];\n var cbtns="";\n\n //msg.payload="" + global.get("node") + "/" + grp + "/#


";\n msg.payload += "
Standard Commands
";\n //}\n \n for (var k in cmds) {\n \n cbtns += '<button class="button cmd" onclick="myFunction(' + "'MQTT:" + cmds[k]["topic"] + "=" + cmds[k]["default"] + "'" + ')">' + cmds[k]["title"] +'';\n \n\n }\n \n msg.payload += cbtns; \n msg.payload += flow.get("buttons"); \n flow.set("repeat",""); \n msg.delay=0; \n \n}\n\n\n\nelse if (userReq.indexOf("/")>0) {\n \n var grp = userReq.split("/")[0];\n if(userReq.split("/").length==3) { \n \n grp = userReq.split("/")[1]; \n \n if (userReq.split("/")[2]!=="#") { filter=userReq.split("/")[2]; }\n }\n \n \n \n\n //msg.payload="" + global.get("node") + "/" + grp + "/#
";\n msg.payload += "
" + global.get("node") + " / " + grp + " / " + (filter || "#") + "
";\n //}\n \n for (var k in readings[grp]) {\n \n \n if (filter!=="" && filter!==k) { continue; }\n \n var units = readings[grp][k].units || "";\n if (units!=="") { units = "" + units + ""; }\n //if (readings[grp][k].title) {\n \n msg.payload += '<div onclick="myFunction(' + "'" + global.get("node") + "/" + grp + "/" + k + "'" + ')">' ;\n \n \n msg.payload += "" + units + "
" + (readings[grp][k].title || k) + "" + readings[grp][k].value + "

";\n \n msg.payload += '';\n \n if (filter!=="" && grp=="settings") { \n \n var opt = global.get("settings");\n if (opt[k] && opt[k]["options"]) {\n var opts = opt[k]["options"].split(",");\n for (var optss in opts) {\n msg.payload += '<button class="button cmd" onclick="myFunction(' + "'MQTT:" + global.get("node") + "/set/" + k + "=" + opts[optss].split(":")[0] + "'" + ')">' + (opts[optss].split(":")[1] || opts[optss]) +'';\n } \n }\n else if (opt[k] && (opt[k]["min"]||opt[k]["min"]===0) && opt[k]["max"]) {\n \n for (var rc = parseInt(opt[k]["min"]); rc<=parseInt(opt[k]["max"]); rc++) {\n msg.payload += '<button class="button cmd" onclick="myFunction(' + "'MQTT:" + global.get("node") + "/set/" + k + "=" + rc + "'" + ')">' + rc + (opt[k]["units"]||"") +'';\n } \n }\n \n }\n \n // else if (filter!=="" && !isNaN(readings[grp][k].value)) { \n \n // msg.payload += flow.get("chartjs");\n \n // }\n //}\n }\n \n msg.payload += flow.get("buttons"); \n \n if (grp=="ana"||grp=="dat"||grp=="stat"||grp=="system") { msg.delay=10000; }\n else { msg.delay=55000; }\n \n}\n\n\n\n\nelse {\n \n \n //var readings = global.get("readings.local." + global.get("node"));\n\n msg.payload="
";\n \n for (var k in readings["system"]) {\n \n if (readings["system"][k].title) {\n msg.payload += "
" + readings["system"][k].title + "" + readings["system"][k].value + "

";\n }\n }\n \n \n msg.payload += "
Local IP Address" + readings["cpu"]["net_1_ip4"].value + "

";\n \n msg.payload += "
Current State" + readings["stat"]["state"].value + "

";\n \n msg.payload += btns; //'<button onclick="myFunction(' + "'ana/#'" + ')">Analogue';\n msg.payload += flow.get("buttons"); \n \n \n}\n\nif (msg.delay>0) { \n \n flow.set("repeat",10000); \n flow.set("incP",incP); \n flow.set("incT",incT); \n \n} else {\n flow.set("repeat",""); \n}\n\nmsg.payload = '<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">\n' + msg.payload;\n\nreturn [msg,null];","outputs":3,"noerr":0,"initialize":"","finalize":"","x":660,"y":120,"wires":[["a55b38c7.d3b","79e52dd1.d4d794"],["d3ed1299.d7be1","2abce841.81225"],["7602a5b6.22f734"]]},{"id":"4e57cf57.b228","type":"link in","z":"74add188.62b63","name":"","links":[],"x":555,"y":920,"wires":[["698db04f.589fb8"]]},{"id":"b2c433c5.1cbce","type":"comment","z":"74add188.62b63","name":"Output to Serial Port","info":"","x":1090,"y":940,"wires":[]},{"id":"781603f.957e5fc","type":"exec","z":"74add188.62b63","command":"sudo rfkill unblock bluetooth","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1860,"y":860,"wires":[["40dbafa3.25e04"],[],[]]},{"id":"adbfcd31.7ef5c","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1800,"y":820,"wires":[["781603f.957e5fc"]]},{"id":"40dbafa3.25e04","type":"change","z":"74add188.62b63","name":"","rules":[{"t":"set","p":"connected","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1830,"y":920,"wires":[[]]},{"id":"4aa3a91d.5d5698","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":240,"y":1660,"wires":[["f17da264.01033"]]},{"id":"f17da264.01033","type":"exec","z":"74add188.62b63","command":"pidof rfcomm","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":400,"y":1660,"wires":[["70b674f2.dbfeb4"],[],[]]},{"id":"3688d1eb.8d983e","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":750,"y":1660,"wires":[]},{"id":"70b674f2.dbfeb4","type":"exec","z":"74add188.62b63","command":"kill","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":560,"y":1660,"wires":[["3688d1eb.8d983e"],[],["8206f2bb.0d6228"]]},{"id":"9371abbb.e766e","type":"change","z":"74add188.62b63","name":"connected=0","rules":[{"t":"set","p":"connected","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":660,"wires":[[]]},{"id":"8fc2280f.1ad9d","type":"trigger","z":"74add188.62b63","name":"","op1":"","op2":"1","op1type":"nul","op2type":"str","duration":"90","extend":true,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":1570,"y":820,"wires":[["781603f.957e5fc"]]},{"id":"4ce9e5a2.22b10c","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"timin","v":"","vt":"date"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"str","x":310,"y":180,"wires":[["a4aee903.e852b8"]]},{"id":"a4aee903.e852b8","type":"function","z":"74add188.62b63","name":"repeat","func":"\nif ((flow.get("repeat")||"")!=="") {\n \n var lastrun = flow.get("lastrun")|| 0;\n \n if (lastrun==0) { \n flow.set("lastrun",msg.timin);\n return null;\n }\n \n if ((msg.timin - lastrun) > parseInt(flow.get("repeat"))) {\n \n flow.set("lastrun",msg.timin);\n \n msg.payload = flow.get("incP"); \n \n if (msg.payload.indexOf(":Authenticate")>0) { return null; }\n msg.topic = flow.get("incT"); \n return msg;\n }\n \n \n}\n\nreturn null;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":450,"y":180,"wires":[["eda4d71.647a4a8","69c55245.3ce22c"]]},{"id":"eda4d71.647a4a8","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":180,"wires":[]},{"id":"dadedae1.fd2528","type":"template","z":"74add188.62b63","name":"Buttons","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"\n<link rel="stylesheet" href="editor.css">\n\n\n\n\n<p id="demo">

\n\n","output":"str","x":1500,"y":280,"wires":[[]]},{"id":"10a2a8e4.41cf8f","type":"function","z":"74add188.62b63","name":"","func":"msg.payload = ""+ msg.payload +""\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1070,"y":980,"wires":[["95a89d75.20f638"]]},{"id":"d3ed1299.d7be1","type":"split","z":"74add188.62b63","name":"","splt":"\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"topic","x":930,"y":140,"wires":[["6560e4e4.eb2004","75c65d8.a7965a4"]]},{"id":"6560e4e4.eb2004","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1210,"y":200,"wires":[]},{"id":"75c65d8.a7965a4","type":"link out","z":"74add188.62b63","name":"","links":["b172c8c3.95bbb8"],"x":1155,"y":140,"wires":[]},{"id":"e39b2d16.2e1778","type":"comment","z":"74add188.62b63","name":"Handler","info":"","x":1250,"y":140,"wires":[]},{"id":"446e9a84.6a8dc4","type":"debug","z":"74add188.62b63","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1550,"y":1020,"wires":[]},{"id":"a55b38c7.d3b","type":"debug","z":"74add188.62b63","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":870,"y":40,"wires":[]},{"id":"d0c069af.a39f38","type":"switch","z":"74add188.62b63","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"heatweb>","vt":"str"},{"t":"cont","v":"<heatweb","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":3,"x":950,"y":700,"wires":[[],[],["2401109b.e2049","d7011e21.fedb"]]},{"id":"d7011e21.fedb","type":"debug","z":"74add188.62b63","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1170,"y":680,"wires":[]},{"id":"79e52dd1.d4d794","type":"trigger","z":"74add188.62b63","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"1","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":940,"y":80,"wires":[["a1f7d58.a629428"]]},{"id":"b75cbcf6.dc9fd","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":1340,"wires":[["80e40106.c9c5d8"]]},{"id":"c1eba1c0.14386","type":"json","z":"74add188.62b63","name":"","property":"payload","action":"","pretty":false,"x":590,"y":1340,"wires":[["64a9e7e3.f8f3b"]]},{"id":"80e40106.c9c5d8","type":"function","z":"74add188.62b63","name":"readings","func":"msg.payload={"readings":{"local": global.get("readings.local")}};\nflow.set("conecttime",new Date().getTime() - 15000); // pause mqtt stream\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":440,"y":1340,"wires":[["c1eba1c0.14386"]]},{"id":"41b50379.2d479c","type":"exec","z":"74add188.62b63","command":"sudo hciconfig hci0 piscan","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1100,"y":300,"wires":[["3eabe389.a5ba54"],[],[]]},{"id":"3eabe389.a5ba54","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1350,"y":300,"wires":[]},{"id":"e59dbbbd.0021f8","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":870,"y":300,"wires":[["41b50379.2d479c"]]},{"id":"8d5b6f42.0e8918","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":400,"wires":[["1221674e.510d59"]]},{"id":"34476aa2.5c20ce","type":"exec","z":"74add188.62b63","command":"hcitool scan","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1050,"y":380,"wires":[["833b552f.5ba6d"],[],[]]},{"id":"833b552f.5ba6d","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1350,"y":380,"wires":[]},{"id":"fdbd39b2.aee888","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":870,"y":380,"wires":[["34476aa2.5c20ce"]]},{"id":"a65d5b29.1d3398","type":"template","z":"74add188.62b63","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"\n ","output":"str","x":580,"y":1520,"wires":[["75cc36af.d62dd"]]},{"id":"75cc36af.d62dd","type":"link out","z":"74add188.62b63","name":"","links":["9f20e6e4.8fa428","52ce1bce.f094ac"],"x":695,"y":1520,"wires":[]},{"id":"bb97a79.19b4fd8","type":"exec","z":"74add188.62b63","command":"lsusb","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1030,"y":460,"wires":[["65c3d668.e79a5"],[],[]]},{"id":"65c3d668.e79a5","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1350,"y":460,"wires":[]},{"id":"a5942a16.594df8","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":870,"y":460,"wires":[["bb97a79.19b4fd8"]]},{"id":"24c9cd04.ec885a","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":1520,"wires":[["39bb2866.6d6518"]]},{"id":"39bb2866.6d6518","type":"function","z":"74add188.62b63","name":"heatweb link","func":"\n \n flow.set("repeat",""); // stop current feeds\n msg.payload = "https://heatweb.co.uk";\n return msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":370,"y":1520,"wires":[["a65d5b29.1d3398"]]},{"id":"95a89d75.20f638","type":"switch","z":"74add188.62b63","name":"connected=3 ?","property":"connected","propertyType":"flow","rules":[{"t":"eq","v":"3","vt":"str"}],"checkall":"false","repair":false,"outputs":1,"x":1220,"y":1060,"wires":[["446e9a84.6a8dc4","d6ba9efe.cabb78"]]},{"id":"69fbaadd.d42ba4","type":"link in","z":"74add188.62b63","name":"","links":["4b86eab9.b898e4","db1e35c5.dc7b4","2d24025.c774efe","f6ff0a4a.80eb28","81244a41.981c3"],"x":955,"y":1060,"wires":[["95a89d75.20f638"]]},{"id":"db1e35c5.dc7b4","type":"link out","z":"74add188.62b63","name":"","links":["69fbaadd.d42ba4"],"x":875,"y":1340,"wires":[]},{"id":"d0c2949f.5c0b78","type":"link in","z":"74add188.62b63","name":"chkngrok","links":["44c44d00.381f7c","f0582338.0aaab8","7602a5b6.22f734"],"x":95,"y":1380,"wires":[["bc188aa6.11ed38"]]},{"id":"fbabcdbc.effeb8","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1234:BBR00002/dat/tH","payloadType":"str","x":430,"y":60,"wires":[["69c55245.3ce22c"]]},{"id":"8ec4bf46.c03c","type":"function","z":"74add188.62b63","name":"","func":"flow.set("lastrun",1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":960,"y":220,"wires":[[]]},{"id":"2abce841.81225","type":"trigger","z":"74add188.62b63","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"1","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":940,"y":180,"wires":[["8ec4bf46.c03c"]]},{"id":"b845d8f1.c39608","type":"link in","z":"74add188.62b63","name":"","links":["4245d99b.369e68"],"x":195,"y":1040,"wires":[["966e3363.16d47"]]},{"id":"ca807372.f2c678","type":"function","z":"74add188.62b63","name":"SEND","func":"\nvar sd = flow.get("sendData");\nflow.set("sendData",{});\nflow.set("sendJSON",{});\nfor (var topic in sd) {\n \n var tops = topic.split("/");\n if (!tops[4]) { continue; }\n \n var read = global.get("readings."+tops[0]+"."+tops[2]+"."+tops[3]+"."+tops[4]) || {};\n flow.set("sendJSON.readings."+tops[0]+"."+tops[2]+"."+tops[3]+"."+tops[4], read);\n \n}\n\nmsg.payload = flow.get("sendJSON") || {};\nif (msg.payload =={}) { return null; }\n\nmsg.payload = JSON.stringify(msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":730,"y":1180,"wires":[["f6ff0a4a.80eb28"]]},{"id":"966e3363.16d47","type":"function","z":"74add188.62b63","name":"SAVE for sending is connected over 30s","func":"\nif (flow.get("connected")!=="3") { return null; }\n\nvar timin = new Date().getTime();\n\n\n\n\n\nflow.set("sendData." + msg.topic,msg.payload);\n\nif (timin - (flow.get("conecttime")||timin) < 30000) { return null; }\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":420,"y":1040,"wires":[["b6c951d7.40a0d8"]]},{"id":"c2d35e62.950f1","type":"trigger","z":"74add188.62b63","name":"","op1":"1","op2":"","op1type":"str","op2type":"nul","duration":"10","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":350,"y":1180,"wires":[["4659643b.77d4b4"]]},{"id":"f6ff0a4a.80eb28","type":"link out","z":"74add188.62b63","name":"","links":["69fbaadd.d42ba4"],"x":855,"y":1180,"wires":[]},{"id":"4659643b.77d4b4","type":"trigger","z":"74add188.62b63","name":"","op1":"","op2":"1","op1type":"nul","op2type":"str","duration":"250","extend":false,"overrideDelay":false,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":580,"y":1180,"wires":[["ca807372.f2c678"]]},{"id":"860ba03d.c61c18","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":560,"y":620,"wires":[["9371abbb.e766e"]]},{"id":"bc188aa6.11ed38","type":"trigger","z":"74add188.62b63","name":"","op1":"","op2":"0","op1type":"nul","op2type":"str","duration":"3","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":200,"y":1380,"wires":[["e9c89e7e.42ab8"]]},{"id":"e9c89e7e.42ab8","type":"trigger","z":"74add188.62b63","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"10","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":270,"y":1420,"wires":[["80e40106.c9c5d8"]]},{"id":"b6c951d7.40a0d8","type":"switch","z":"74add188.62b63","name":"","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"/settings/","vt":"str"},{"t":"cont","v":"/system/","vt":"str"},{"t":"cont","v":"/xpVSet","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":4,"x":310,"y":1100,"wires":[["4659643b.77d4b4"],["4659643b.77d4b4"],["4659643b.77d4b4"],["c2d35e62.950f1"]]},{"id":"262c2547.d4cd3a","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1750,"y":60,"wires":[["ab8ddc31.58755"]]},{"id":"45d3dfd2.663298","type":"change","z":"74add188.62b63","name":"","rules":[{"t":"set","p":"chartjs","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1760,"y":140,"wires":[[]]},{"id":"ab8ddc31.58755","type":"template","z":"74add188.62b63","name":"Chart","field":"payload","fieldType":"msg","format":"html","syntax":"plain","template":"\nGraph:\n\n<script src="Chart.min.js">\n<script src="utils.js">\n\n\n\n\n\n\n\n\n\n<div id="canvas-holder" style="width:90%;">\n <canvas id="chart-area">\n\n\n\n\n\n\n\n\n\n\n","output":"str","x":1730,"y":100,"wires":[["45d3dfd2.663298"]]},{"id":"a88954e2.21647","type":"template","z":"74add188.62b63","name":"Chart","field":"payload.body","fieldType":"msg","format":"html","syntax":"plain","template":"\n<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript">\n\n\n\n\n\n\n\n\n<script type="text/javascript">\n\nvar a = new Date();\n \t\t\n// Create a client instance\n//client = new Paho.MQTT.Client("hw3.ddns.net", Number(8083), "cl"+a.getTime());\nclient = new Paho.MQTT.Client("broker.hivemq.com", Number(8000), "cl"+a.getTime());\n\n// set callback handlers\nclient.onConnectionLost = onConnectionLost;\nclient.onMessageArrived = onMessageArrived;\n\n///client.username_pw_set(username="oop7zooR",password="oop7zooRoop7zooR")\n// now can connect\n\n// connect the client\n///client.connect({onSuccess:onConnect, useSSL:true});\n\n// Connect the client, with a Username and Password\n//client.connect({onSuccess:onConnect, userName:'oop7zooR', password:'oop7zooRoop7zooR', useSSL:true});\nclient.connect({onSuccess:onConnect, useSSL:false});\n\n// called when the client connects\nfunction onConnect() {\n // Once a connection has been made, make a subscription and send a message.\n console.log("onConnect");\n client.subscribe("hw/diversitydemo/+/+/fC"); // hw/diversitydemo/+/+/fC // ihiu/oop7zooR/#\n message = new Paho.MQTT.Message("1");\n message.destinationName = "hw/diversitydemo/start"; // ihiu/oop7zooR/oop7zooR/test/test\n client.send(message);\n}\n\n// called when the client loses its connection\nfunction onConnectionLost(responseObject) {\n if (responseObject.errorCode !== 0) {\n console.log("onConnectionLost:"+responseObject.errorMessage);\n}\n}\n\n// called when a message arrives\nfunction onMessageArrived(message) {\n console.log("onMessageArrived:"+message.payloadString);\n \n //document.getElementById("mqlist").innerHTML = mql + message.destinationName + ": " + message.payloadString + "
";\n\n \n if(!readings[message.destinationName]) { // if new system add to plot\n\n\n if (config.data.datasets.length > 0) {\n config.data.labels.push('HIU' + (config.data.labels.length + 1));\n config.data.datasets.forEach(function(dataset) {\n var colorName = colorNames[config.data.labels.length % colorNames.length];\n dataset.backgroundColor.push(window.chartColors[colorName]);\n dataset.data.push(parseFloat(message.payloadString));\n });\n window.myPolarArea.update();\n }\n\n readings[message.destinationName] = { "topic":message.destinationName, "payload":message.payloadString, "id": config.data.labels.length - 1};\n \n } else {\n\n readings[message.destinationName].payload = message.payloadString ;\n \n\n }\n\n readings[message.destinationName].payload = parseFloat(readings[message.destinationName].payload);\n if (readings[message.destinationName].payload < 0.1) { readings[message.destinationName].payload = 0;}\n //config.data.datasets[i].data[j] = randomScalingFactor();\n\n config.data.datasets[0].data[readings[message.destinationName]["id"]] = parseFloat(readings[message.destinationName]["payload"]);\n //config.data.labels[readings[message.destinationName]["id"]] = "HIU" +readings[message.destinationName]["id"] + ": " + parseFloat(readings[message.destinationName]["payload"]);\n window.myPolarArea.update();\n\n\n \n// var sortable = [];\n// \tfor (var mqt in readings) {\n// \t\tsortable.push([mqt]);\n// \t}\n\n// \tsortable.sort(function(a, b) {\n// \t\treturn a[0] > b[0];\n// \t});\n \n \n \n// \tvar mql = '<table class="tt"><th align="left">TopicData';\n\t\n// \tfor (var kk in sortable) {\n// \t\tvar k = sortable[kk][0];\n// \t\tmql += "" + k.replace(/\//g," / ") + "" + readings[k].payload + "";\n// \t}\n// \tmql += "";\n\t\n\t\n// \tdocument.getElementById("mqlist").innerHTML = mql;\n \n}\n\n\n\n\n\n\n\n\n<script src="/includes/chart.js/Chart.min.js">\n<script src="/includes/chart.js/utils.js">\n\n\n\n\n\n\n\n\n<div id="canvas-holder" style="width:80%;">\n <canvas id="chart-area">\n\n\n\n\n\n\n\n\n\n\n","output":"str","x":1950,"y":100,"wires":[[]]},{"id":"25a2ddc2.91648a","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1220,"y":1200,"wires":[["d6ba9efe.cabb78"]]},{"id":"9b154153.6df0c","type":"exec","z":"74add188.62b63","command":"ls /dev/rfcomm*","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1580,"y":1200,"wires":[["245d371a.55e21","bfd82385.3cf878"],[],[]]},{"id":"13ac692.cef2097","type":"debug","z":"74add188.62b63","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":2130,"y":1200,"wires":[]},{"id":"245d371a.55e21","type":"switch","z":"74add188.62b63","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"rfcomm0","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1750,"y":1200,"wires":[["fa9f9b47.f62e88"]]},{"id":"d6ba9efe.cabb78","type":"change","z":"74add188.62b63","name":"","rules":[{"t":"set","p":"tosend","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1400,"y":1200,"wires":[["9b154153.6df0c"]]},{"id":"fa9f9b47.f62e88","type":"change","z":"74add188.62b63","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"tosend","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1920,"y":1200,"wires":[["13ac692.cef2097","be0352e2.29879"]]},{"id":"9ae757b0.eec63","type":"comment","z":"74add188.62b63","name":"Experimental - onlt send if port exists to prevent locking","info":"","x":1560,"y":1140,"wires":[]},{"id":"f26cf35c.8db9f","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":1740,"wires":[["8206f2bb.0d6228"]]},{"id":"8206f2bb.0d6228","type":"exec","z":"74add188.62b63","command":"sudo rm /dev/rfcomm0","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":410,"y":1740,"wires":[[],[],["502546ba.e4a2b"]]},{"id":"502546ba.e4a2b","type":"change","z":"74add188.62b63","name":"connected=0","rules":[{"t":"set","p":"connected","pt":"flow","to":"0","tot":"str"},{"t":"set","p":"repeat","pt":"flow","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":1820,"wires":[["42f82568.579044"]]},{"id":"492272eb.07c31c","type":"link in","z":"74add188.62b63","name":"startbt","links":["c05d5830.ea922","95ed3cd1.9224b"],"x":155,"y":280,"wires":[["fb2dd2fa.0017f8"]]},{"id":"95ed3cd1.9224b","type":"link out","z":"74add188.62b63","name":"","links":["492272eb.07c31c"],"x":355,"y":2020,"wires":[]},{"id":"42f82568.579044","type":"exec","z":"74add188.62b63","command":"sudo rfkill unblock bluetooth","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":440,"y":1900,"wires":[[],[],["7bdb1165.b5cbf"]]},{"id":"7bdb1165.b5cbf","type":"delay","z":"74add188.62b63","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":400,"y":1960,"wires":[["95ed3cd1.9224b"]]},{"id":"bfd82385.3cf878","type":"debug","z":"74add188.62b63","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1750,"y":1260,"wires":[]},{"id":"7602a5b6.22f734","type":"link out","z":"74add188.62b63","name":"","links":["d0c2949f.5c0b78"],"x":815,"y":200,"wires":[]},{"id":"557aebac.6f0c84","type":"status","z":"74add188.62b63","name":"","scope":["ae4e0f4f.d663f"],"x":790,"y":820,"wires":[["daf3339c.b3c778"]]},{"id":"a2e04284.ab447","type":"debug","z":"74add188.62b63","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"status","targetType":"msg","statusVal":"","statusType":"auto","x":1190,"y":820,"wires":[]},{"id":"daf3339c.b3c778","type":"change","z":"74add188.62b63","name":"","rules":[{"t":"set","p":"rfstatus","pt":"flow","to":"status","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":820,"wires":[["a2e04284.ab447"]]},{"id":"c0d8ddb1.9a288","type":"switch","z":"74add188.62b63","name":"","property":"rfstatus.text","propertyType":"flow","rules":[{"t":"cont","v":"pid","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":240,"y":820,"wires":[[],["ca9b360b.53746"]]},{"id":"ca9b360b.53746","type":"change","z":"74add188.62b63","name":"connected=0","rules":[{"t":"set","p":"connected","pt":"flow","to":"0","tot":"str"},{"t":"set","p":"repeat","pt":"flow","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":860,"wires":[[]]},{"id":"b10c96c.84ca5e8","type":"mqtt in","z":"74add188.62b63","name":"","topic":"local/+/+/url/#","qos":"0","datatype":"auto","broker":"7ad2997b.42a908","x":210,"y":960,"wires":[["966e3363.16d47"]]},{"id":"ee98fbb.7465f08","type":"mqtt in","z":"74add188.62b63","name":"","topic":"local/+/+/cmd/uploadFlows","qos":"0","datatype":"auto","broker":"7ad2997b.42a908","x":1090,"y":1340,"wires":[["9c556e29.d4e65"]]},{"id":"9c556e29.d4e65","type":"trigger","z":"74add188.62b63","name":"","op1":"1","op2":"","op1type":"str","op2type":"nul","duration":"15","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":1310,"y":1340,"wires":[["9dca45fa.f0371"]]},{"id":"11133233.bce706","type":"exec","z":"74add188.62b63","command":"cat","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1210,"y":1440,"wires":[["d828a5d8.51e588"],[],[]]},{"id":"b990b603.c1cef","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1000,"y":1500,"wires":[["9dca45fa.f0371"]]},{"id":"aa1b109.53b58f","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1530,"y":1500,"wires":[]},{"id":"9dca45fa.f0371","type":"function","z":"74add188.62b63","name":"","func":"\nmsg.payload = "/var/lib/node-red/.node-red/flows_"+global.get("node")+".json";\n\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1040,"y":1440,"wires":[["11133233.bce706","a8e23c32.4bdf38"]]},{"id":"a8e23c32.4bdf38","type":"debug","z":"74add188.62b63","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1230,"y":1500,"wires":[]},{"id":"d828a5d8.51e588","type":"switch","z":"74add188.62b63","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":".{","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1350,"y":1440,"wires":[["aa1b109.53b58f","43cc1c60.cb3a5c"]]},{"id":"81244a41.981c3","type":"link out","z":"74add188.62b63","name":"","links":["69fbaadd.d42ba4"],"x":1775,"y":1440,"wires":[]},{"id":"43cc1c60.cb3a5c","type":"function","z":"74add188.62b63","name":"","func":"flow.set("conecttime",new Date().getTime() - 25000); // pause mqtt stream\n\nmsg.payload = ""+ msg.payload +""\nmsg.payload = ""+ msg.payload +""\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1510,"y":1440,"wires":[["496d3825.b51488"]]},{"id":"496d3825.b51488","type":"delay","z":"74add188.62b63","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1660,"y":1440,"wires":[["81244a41.981c3"]]},{"id":"64a9e7e3.f8f3b","type":"trigger","z":"74add188.62b63","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"500","extend":false,"overrideDelay":false,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":740,"y":1340,"wires":[["db1e35c5.dc7b4"]]},{"id":"160380c2.cbc1cf","type":"inject","z":"74add188.62b63","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"cmd/request","payload":"#","payloadType":"str","x":290,"y":1260,"wires":[["67ee39d1.43f8"]]},{"id":"67ee39d1.43f8","type":"link out","z":"74add188.62b63","name":"","links":["b172c8c3.95bbb8"],"x":455,"y":1260,"wires":[]},{"id":"7ad2997b.42a908","type":"mqtt-broker","name":"","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":""}]

Notes

sudo nano /etc/systemd/system/dbus-org.bluez.service

Change

ExecStart=/usr/lib/bluetooth/bluetoothd

To

ExecStart=/usr/lib/bluetooth/bluetoothd --compat

Converted from the Heatweb wiki article “Node-HIU Bluetooth”, last edited 2021-04-26. Under review for the new site.

Talk to an engineer

Tell us about your network and we will come back with a practical next step, usually within one working day.