forked from SWNRG/wishful-coral
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdash-board-node-red-v1.6.1.txt
1 lines (1 loc) · 33 KB
/
dash-board-node-red-v1.6.1.txt
1
[{"id":"c902fc6b.2415c","type":"subflow","name":"Coral - Jitter Charts (2)","info":"","in":[{"x":40,"y":160,"wires":[{"id":"c26ad94f.2afcc"}]}],"out":[]},{"id":"c26ad94f.2afcc","type":"switch","z":"c902fc6b.2415c","name":"NODE Switch","property":"nid","propertyType":"msg","rules":[{"t":"eq","v":"2","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"str"},{"t":"eq","v":"6","vt":"str"},{"t":"eq","v":"7","vt":"str"},{"t":"eq","v":"8","vt":"str"},{"t":"eq","v":"9","vt":"str"},{"t":"eq","v":"10","vt":"str"},{"t":"eq","v":"11","vt":"str"},{"t":"eq","v":"12","vt":"str"},{"t":"eq","v":"13","vt":"str"},{"t":"eq","v":"14","vt":"str"},{"t":"eq","v":"15","vt":"str"}],"checkall":"true","outputs":14,"x":200,"y":160,"wires":[["8b5f8022.5862a8"],["73c3039e.75086c"],["bb4cd195.0811e8"],["d996eda6.5d0f38"],["731d3405.fd09cc"],["bfa2c2bd.483b68"],["4a78e9c5.39b5d8"],["2b2f8b72.d98094"],["bd796736.78d69"],["5afebc3a.4a9c44"],["44f80f4c.83cdf8"],["bdc9ca0d.eeabf"],["4f7625e0.59e19c"],["e95ddaf7.b5223"]]},{"id":"8b5f8022.5862a8","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node2","group":"7c13ce30.527a7","order":2,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":650,"y":80,"wires":[[],[]]},{"id":"73c3039e.75086c","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node3","group":"7c13ce30.527a7","order":3,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":830,"y":80,"wires":[[],[]]},{"id":"bb4cd195.0811e8","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node4","group":"7c13ce30.527a7","order":4,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":470,"y":120,"wires":[[],[]]},{"id":"d996eda6.5d0f38","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node5","group":"7c13ce30.527a7","order":5,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":650,"y":120,"wires":[[],[]]},{"id":"731d3405.fd09cc","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node6","group":"7c13ce30.527a7","order":6,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":830,"y":120,"wires":[[],[]]},{"id":"bfa2c2bd.483b68","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node7","group":"7c13ce30.527a7","order":7,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":470,"y":160,"wires":[[],[]]},{"id":"4a78e9c5.39b5d8","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node8","group":"7c13ce30.527a7","order":8,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":650,"y":160,"wires":[[],[]]},{"id":"2b2f8b72.d98094","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node9","group":"7c13ce30.527a7","order":9,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":830,"y":160,"wires":[[],[]]},{"id":"bd796736.78d69","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node10","group":"7c13ce30.527a7","order":10,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"30","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":480,"y":200,"wires":[[],[]]},{"id":"5afebc3a.4a9c44","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node11","group":"7c13ce30.527a7","order":11,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":660,"y":200,"wires":[[],[]]},{"id":"44f80f4c.83cdf8","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node12","group":"7c13ce30.527a7","order":12,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":840,"y":200,"wires":[[],[]]},{"id":"bdc9ca0d.eeabf","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node13","group":"7c13ce30.527a7","order":13,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":480,"y":240,"wires":[[],[]]},{"id":"4f7625e0.59e19c","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node14","group":"7c13ce30.527a7","order":14,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":660,"y":240,"wires":[[],[]]},{"id":"e95ddaf7.b5223","type":"ui_chart","z":"c902fc6b.2415c","name":"Jitter Node15","group":"7c13ce30.527a7","order":15,"width":"8","height":"6","label":"","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":840,"y":240,"wires":[[],[]]},{"id":"aa30c8c4.d90238","type":"comment","z":"c902fc6b.2415c","name":"Jitter Node Graphs","info":"","x":210,"y":20,"wires":[]},{"id":"7c13ce30.527a7","type":"ui_group","z":"","name":"Jitter Node Graphs","tab":"109d8c50.2f5744","order":1,"disp":true,"width":"24"},{"id":"109d8c50.2f5744","type":"ui_tab","z":"","name":"Coral - Jitter","icon":"dashboard","order":3},{"id":"ec10e813.04d7e","type":"subflow","name":"Coral - Configuration (2)","info":"","in":[],"out":[{"x":820,"y":380,"wires":[{"id":"3adefc5.6d5f584","port":0}]}]},{"id":"441ea939.372398","type":"comment","z":"ec10e813.04d7e","name":"Store Configuration into Memory","info":"","x":150,"y":40,"wires":[]},{"id":"30950023.273dc","type":"inject","z":"ec10e813.04d7e","name":"Default 8","topic":"","payload":"8","payloadType":"num","repeat":"","crontab":"","once":true,"x":220,"y":160,"wires":[["2ba84314.a319c4"]]},{"id":"ce5429ea.582c9","type":"ui_dropdown","z":"ec10e813.04d7e","name":"Node Target","label":"Target","group":"9b53249e.0a079","order":1,"width":"0","height":"0","passthru":true,"options":[{"label":"All","value":1000,"type":"num"},{"label":"SINK","value":1,"type":"num"},{"label":"Node","value":-1,"type":"num"}],"payload":"","topic":"","x":410,"y":80,"wires":[["1bf2b292.5de05d"]]},{"id":"b0df7f96.311bd8","type":"inject","z":"ec10e813.04d7e","name":"Default ALL","topic":"","payload":"-1","payloadType":"num","repeat":"","crontab":"","once":true,"x":230,"y":80,"wires":[["ce5429ea.582c9"]]},{"id":"ec834354.0f9ec","type":"ui_numeric","z":"ec10e813.04d7e","name":"Node ID","label":"Node","group":"9b53249e.0a079","order":2,"width":"0","height":"0","passthru":true,"topic":"","format":"{{value}}","min":"2","max":"15","step":1,"x":400,"y":120,"wires":[["54a24901.c1dc8"]]},{"id":"698cedbe.cf803c","type":"inject","z":"ec10e813.04d7e","name":"Default 2","topic":"","payload":"2","payloadType":"num","repeat":"","crontab":"","once":true,"x":220,"y":120,"wires":[["ec834354.0f9ec"]]},{"id":"a61839be.b2e588","type":"function","z":"ec10e813.04d7e","name":"Store Config","func":"var config = flow.get('coral_controler_config') || {};\nconfig[msg.option] = msg.payload;\nflow.set('coral_controler_config',config);","outputs":1,"noerr":0,"x":930,"y":160,"wires":[[]]},{"id":"1bf2b292.5de05d","type":"function","z":"ec10e813.04d7e","name":"Set Config Option","func":"msg.option = \"targetnode\";\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":80,"wires":[["a61839be.b2e588"]]},{"id":"54a24901.c1dc8","type":"function","z":"ec10e813.04d7e","name":"Set Config Option","func":"msg.option = \"nodeid\";\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":120,"wires":[["a61839be.b2e588"]]},{"id":"375786c.40b667a","type":"function","z":"ec10e813.04d7e","name":"Set Config Option","func":"msg.option = \"IEEE802154_RPL_Imin\";\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":160,"wires":[["a61839be.b2e588"]]},{"id":"2ba84314.a319c4","type":"ui_numeric","z":"ec10e813.04d7e","name":"","label":"RPL DIO Interval Min","group":"adf00b76.c1b4b8","order":1,"width":"6","height":"1","passthru":true,"topic":"","format":"{{value}}","min":"8","max":"13","step":1,"x":440,"y":160,"wires":[["375786c.40b667a"]]},{"id":"f93d1ec0.15a378","type":"inject","z":"ec10e813.04d7e","name":"Default 8","topic":"","payload":"8","payloadType":"num","repeat":"","crontab":"","once":true,"x":220,"y":200,"wires":[["fb339e3d.4badf8"]]},{"id":"57d497f2.cb0cb","type":"function","z":"ec10e813.04d7e","name":"Set Config Option","func":"msg.option = \"IEEE802154_RPL_Doublings\";\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":200,"wires":[["a61839be.b2e588"]]},{"id":"fb339e3d.4badf8","type":"ui_numeric","z":"ec10e813.04d7e","name":"","label":"RPL DIO Interval Doublings","group":"adf00b76.c1b4b8","order":3,"width":"6","height":"1","passthru":true,"topic":"","format":"{{value}}","min":"8","max":"13","step":1,"x":460,"y":200,"wires":[["57d497f2.cb0cb"]]},{"id":"ae122f92.c3291","type":"inject","z":"ec10e813.04d7e","name":"Default 8","topic":"","payload":"1","payloadType":"num","repeat":"","crontab":"","once":true,"x":220,"y":240,"wires":[["9b925aa4.f2e3b"]]},{"id":"94b02fb6.ffd578","type":"function","z":"ec10e813.04d7e","name":"Set Config Option","func":"msg.option = \"CORAL_send_interval\";\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":240,"wires":[["a61839be.b2e588"]]},{"id":"9b925aa4.f2e3b","type":"ui_numeric","z":"ec10e813.04d7e","name":"","label":"UDP send freq","group":"adf00b76.c1b4b8","order":5,"width":"6","height":"1","passthru":true,"topic":"","format":"{{value}}","min":"1","max":"10","step":1,"x":420,"y":240,"wires":[["94b02fb6.ffd578"]]},{"id":"c25136fa.99956","type":"debug","z":"ec10e813.04d7e","name":"Debug Send Data","active":true,"console":"false","complete":"payload","x":1010,"y":440,"wires":[]},{"id":"5be274d7.9daa74","type":"comment","z":"ec10e813.04d7e","name":"Apply Settings","info":"","x":90,"y":320,"wires":[]},{"id":"1447071a.802189","type":"ui_button","z":"ec10e813.04d7e","name":"Update : RPLDIOIM","group":"adf00b76.c1b4b8","order":2,"width":"2","height":"1","label":"Update","color":"","bgcolor":"","icon":"","payload":"","payloadType":"date","topic":"","x":200,"y":360,"wires":[["e7440a79.e29668"]]},{"id":"3510fb41.b56ddc","type":"function","z":"ec10e813.04d7e","name":"JSON CMD","func":"config = context.flow.get('coral_controler_config') || {}; // Get Stored Config\n\nmsg = {};\nmsg.payload = {\n \"CMD\":\"IEEE802154_RPL_Doublings\",\n \"VAL\": config.IEEE802154_RPL_Doublings\n };\nreturn msg;","outputs":"1","noerr":0,"x":430,"y":400,"wires":[["3adefc5.6d5f584"]]},{"id":"f0fd2ca1.583fc","type":"json","z":"ec10e813.04d7e","name":"","x":850,"y":440,"wires":[["c25136fa.99956"]]},{"id":"1a2066aa.59afa9","type":"ui_button","z":"ec10e813.04d7e","name":"Update : RPLDIOID","group":"adf00b76.c1b4b8","order":4,"width":"2","height":"1","label":"Update","color":"","bgcolor":"","icon":"","payload":"","payloadType":"date","topic":"","x":200,"y":400,"wires":[["3510fb41.b56ddc"]]},{"id":"db9f38ca.16ee7","type":"ui_button","z":"ec10e813.04d7e","name":"Update : UDPFREQ","group":"adf00b76.c1b4b8","order":6,"width":"2","height":"1","label":"Freg++","color":"","bgcolor":"","icon":"","payload":"","payloadType":"date","topic":"","x":200,"y":440,"wires":[["af4c25b4.d633c8"]]},{"id":"e7440a79.e29668","type":"function","z":"ec10e813.04d7e","name":"JSON CMD","func":"// Get Settings\nconfig = context.flow.get('coral_controler_config') || {}; // Get Stored Settings\n\n// RPL Dio Interval Min\nmsg = {};\nmsg.payload = {\n \"CMD\":\"IEEE802154_RPL_Imin\",\n \"VAL\": config.IEEE802154_RPL_Imin\n};\nreturn msg;","outputs":"1","noerr":0,"x":430,"y":360,"wires":[["3adefc5.6d5f584"]]},{"id":"af4c25b4.d633c8","type":"function","z":"ec10e813.04d7e","name":"JSON CMD","func":"config = context.flow.get('coral_controler_config') || {}; // Get Stored Config\n\nmsg = {};\nmsg.payload = {\n \"CMD\":\"CORAL_send_interval\",\n \"VAL\": config.CORAL_send_interval\n };\nreturn msg;","outputs":"1","noerr":0,"x":430,"y":440,"wires":[["3adefc5.6d5f584"]]},{"id":"3adefc5.6d5f584","type":"function","z":"ec10e813.04d7e","name":"TCP CMD","func":"config = context.flow.get('coral_controler_config') || {}; // Get Stored Config\n\n// Get Node Target\nvar nodeid = 0;\nnodeid = config.targetnode; // Get 1 (SINK) or 1000 (ALL)\nif (nodeid == -1) nodeid = config.nodeid; // Get Target Node ID\n\n// Add NodeID to JSON\njson = msg.payload;\njson.NID = nodeid;\n\ncmd = {};\ncmd.payload = JSON.stringify(json)+\"\\n\"; \nreturn cmd;","outputs":"1","noerr":0,"x":670,"y":400,"wires":[["f0fd2ca1.583fc"]]},{"id":"6c8f5e62.24af2","type":"ui_template","z":"ec10e813.04d7e","group":"9b53249e.0a079","name":"Fill Group Node Space","order":3,"width":"4","height":"1","format":"<div> </div>","storeOutMessages":false,"fwdInMessages":false,"x":230,"y":560,"wires":[[]]},{"id":"ca3f44ea.c603d","type":"comment","z":"ec10e813.04d7e","name":"DashBoard Patch","info":"","x":110,"y":520,"wires":[]},{"id":"9b53249e.0a079","type":"ui_group","z":"","name":"Nodes","tab":"c913b47.c167848","order":1,"disp":true,"width":"4"},{"id":"adf00b76.c1b4b8","type":"ui_group","z":"","name":"Configuration","tab":"c913b47.c167848","order":2,"disp":true,"width":"8"},{"id":"c913b47.c167848","type":"ui_tab","z":"","name":"Coral Dashboard","icon":"dashboard","order":2},{"id":"4a02e3cb.e3762c","type":"ui_template","z":"b6a86340.1bd9f8","group":"e98cb849.f3a608","name":"Network Data","order":1,"width":"4","height":"3","format":"<div ng-if=\"!msg.enabled\">\n <p class=\"blank-label ng-binding ng-scope\">Waiting for Data</p>\n</div>\n<div ng-if=\"msg.enabled\">\n <div>\n <span><b>Network Nodes</b> :</span>\n <span>{{ msg.nodes }}</span>\n </div>\n <div>\n <span><b>Sink Nodes</b> :</span>\n <span>{{ msg.sink }}</span>\n </div>\n <div>\n <span><b>Static Nodes</b> :</span>\n <span>{{ msg.static }}</span>\n </div>\n <div>\n <span><b>Mobile Nodes</b> :</span>\n <span>{{ msg.mobile }}</span>\n </div>\n</div>\n\n\n","storeOutMessages":true,"fwdInMessages":true,"x":1125,"y":780,"wires":[[]]},{"id":"f4fb575e.1a225","type":"ui_template","z":"b6a86340.1bd9f8","group":"6a375a31.0b079c","name":"Monitoring Info","order":1,"width":"6","height":"3","format":"<div>\n <span><b>Date</b> :</span>\n <span>{{msg.timeNow | date:'mediumDate'}}</span>\n</div>\n<div>\n <span><b>Time</b> :</span>\n <span>{{msg.timeNow | date:'mediumTime'}}</span>\n</div>\n\n<div ng-if=\"msg.elapsedTime\">\n <div>\n <span><b>Monitoring Elapsed Time</b> :</span>\n <span>{{ msg.elapsedTime }}</span>\n </div>\n <!-- <div>\n <span><b>Monitoring Elapsed Time</b> :</span>\n <span> \n <span ng-if=\"msg.elapsedDays>0\">{{msg.elapsedDays}}D</span>\n {{msg.elapsedTime | date:'HH:mm:ss' : 'UTC' }}\n </span>\n </div> -->\n</div>","storeOutMessages":true,"fwdInMessages":true,"x":1125,"y":940,"wires":[[]]},{"id":"b3c3868f.46b","type":"comment","z":"b6a86340.1bd9f8","name":"Data & Charts","info":"","x":95,"y":220,"wires":[]},{"id":"8c2e0aec.aadbd","type":"function","z":"b6a86340.1bd9f8","name":"Parse N.S. Data","func":"network = {};\n\n// Get Payload Values or Stored Values (if not exist)\nnetwork.nodes = msg.payload.NODES || (flow.get('coral_netowork').nodes || 0);\nnetwork.sink = msg.payload.SINK || (flow.get('coral_netowork').sink || 0);\nnetwork.static = msg.payload.STATIC || (flow.get('coral_netowork').static || 0);\nnetwork.mobile = msg.payload.MOBILE || (flow.get('coral_netowork').mobile || 0);\n\n// Detect Zero Network\nif ( (msg.payload.NODES + msg.payload.SINK + msg.payload.STATIC + msg.payload.MOBILE) === 0) {\n network.enabled = false;\n network = {};\n} else {\n network.enabled = true;\n}\n\nflow.set('coral_netowork',network);\nreturn network;","outputs":"1","noerr":0,"x":905,"y":780,"wires":[["4a02e3cb.e3762c"]]},{"id":"8e4e6689.7c6058","type":"inject","z":"b6a86340.1bd9f8","name":"Time Tick","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":true,"x":735,"y":940,"wires":[["4f2c7cb0.73be6c"]]},{"id":"abce722c.8dfba","type":"ui_chart","z":"b6a86340.1bd9f8","name":"PDR - LineChart","group":"33ea1b42.31bcec","order":1,"width":"18","height":"6","label":"Packet Delivery Ratio (PDR)","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":1115,"y":180,"wires":[[],[]]},{"id":"63dd5f18.e6655","type":"function","z":"b6a86340.1bd9f8","name":"Parse Graph Data","func":"function convertToNumber(value) {\n if (typeof value === 'string' || value instanceof String) {\n return Number(value.replace(\",\", \".\"));\n //return parseFloat(value.replace(\",\", \".\"));\n }\n return value;\n}\n\nif (typeof(msg.payload.NID) != \"undefined\") {\n // Parse Data to Graph\n var data = {};\n \n // Select Graph\n var graphType = msg.payload.CMD;\n var outputGraph = 0;\n var dataLabel = \"\";\n var nodeLabel = \"\";\n\n // Handle NID and VAL as numbers\n msg.payload.NID = convertToNumber(msg.payload.NID);\n msg.payload.VAL = convertToNumber(msg.payload.VAL);\n \n // Get Line Legend\n switch (msg.payload.NID) {\n case 1: \n nodeLabel = 'SINK';\n break;\n default :\n nodeLabel = 'Node' + msg.payload.NID;\n break;\n }\n \n data.nid = msg.payload.NID;\n \n switch (true) {\n case graphType.includes(\"CORAL_pdr_total_sink\"):\n outputGraph = 1;\n var dataLabel = nodeLabel;\n break;\n case graphType.includes(\"CORAL_udp_send_total_sink\"):\n outputGraph = 2;\n dataLabel = \"Total UDP packets sent\";\n break;\n case graphType.includes(\"CORAL_icmp_send_total_sink\"):\n outputGraph = 2;\n dataLabel = \"Total control packets sent\";\n break;\n case graphType.includes(\"CORAL_udp_vs_control\"):\n outputGraph = 3;\n dataLabel = \"UDP vs Control Packets (%)\";\n break;\n case graphType.includes(\"jitter\"):\n outputGraph = 4;\n dataLabel = nodeLabel; // nid1000 is Average. Legend isn't visible.\n break;\n case graphType.includes(\"CORAL_latency\"):\n outputGraph = 5;\n var dataLabel = nodeLabel;\n break;\n default:\n outputGraph = 0;\n break;\n }\n\n // Value\n data.payload = msg.payload.VAL;\n if (data.payload === 'FAKE') data.payload = Math.round(Math.random()*100); // DEMO ONLY\n \n // Label\n data.topic = dataLabel;\n \n \n // Send Data to Selected Graph\n if (outputGraph) {\n var output = [];\n output[outputGraph-1] = data;\n return output;\n }\n} else {\n return null;\n}","outputs":"5","noerr":0,"x":875,"y":400,"wires":[["abce722c.8dfba","2ec0a16a.c05426"],["5e6f05d3.560034"],["f8fb9e7e.0fdcf"],["a81b7428.6d5f58"],["d645cfb3.fbd468"]]},{"id":"5e6f05d3.560034","type":"ui_chart","z":"b6a86340.1bd9f8","name":"Control vs. Data Packets - LineChart","group":"33ea1b42.31bcec","order":3,"width":"12","height":"6","label":"Control Packets vs. Data Packets","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"bezier","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":1315,"y":300,"wires":[[],[]]},{"id":"2ec0a16a.c05426","type":"ui_gauge","z":"b6a86340.1bd9f8","name":"PDR - Gauge","group":"33ea1b42.31bcec","order":2,"width":"6","height":"6","gtype":"gage","title":"Current PDR","label":"","format":"{{value}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"x":1305,"y":180,"wires":[]},{"id":"c6acf0af.e129e8","type":"comment","z":"b6a86340.1bd9f8","name":"Chart Data","info":"","x":785,"y":300,"wires":[]},{"id":"6483e987.091188","type":"debug","z":"b6a86340.1bd9f8","name":"Recieved Data","active":true,"console":"false","complete":"payload","x":585,"y":480,"wires":[]},{"id":"16e1e1ea.f19826","type":"tcp in","z":"b6a86340.1bd9f8","name":"","server":"client","host":"localhost","port":"8992","datamode":"stream","datatype":"utf8","newline":"\\n","topic":"","base64":false,"x":195,"y":540,"wires":[["27dbf799.c1a108","54a4df92.ce4f48"]]},{"id":"f561457d.0ee3a","type":"link in","z":"b6a86340.1bd9f8","name":"Coral Control","links":["2d604165.ff6a1e","a6fc9e0b.d683e","f57840bd.984fa","c1239a6a.78eed8","33e56e56.0050c2"],"x":260,"y":500,"wires":[["27dbf799.c1a108"]]},{"id":"55558af9.9cc7fc","type":"comment","z":"b6a86340.1bd9f8","name":"Info Data","info":"","x":845,"y":740,"wires":[]},{"id":"1ce81e4f.521642","type":"comment","z":"b6a86340.1bd9f8","name":"Split DTP","info":"","x":565,"y":440,"wires":[]},{"id":"41672858.454b88","type":"function","z":"b6a86340.1bd9f8","name":"Store M.I. DATA","func":"if (msg.payload.DURATION === undefined) {\n if (msg.payload.STARTTIME !== undefined) {\n flow.set('coral_mi_elasped_time_start', msg.payload.STARTTIME);\n flow.set('coral_mi_elasped_status', 'run'); \n flow.set('coral_mi_elasped_duration', null); \n flow.set('coral_mi_elasped_duration_start', null);\n }\n // If no value detected dont change anything\n} else {\n flow.set('coral_mi_elasped_duration', msg.payload.DURATION || null);\n flow.set('coral_mi_elasped_duration_start', new Date().getTime());\n flow.set('coral_mi_elasped_status', 'run'); \n}\n\nswitch (msg.payload.ACTION || null) {\n case \"START\":\n flow.set('coral_mi_elasped_status', 'run'); \n break; \n case \"STOP\":\n flow.set('coral_mi_elasped_status', 'stop'); \n break;\n}","outputs":"1","noerr":0,"x":905,"y":900,"wires":[[]]},{"id":"4f2c7cb0.73be6c","type":"function","z":"b6a86340.1bd9f8","name":"Update Tick","func":"// Helper\nNumber.prototype.pad = function(size) {\n var s = String(this);\n while (s.length < (size || 2)) {s = \"0\" + s;}\n return s;\n};\n// Monitor Info\nvar monitor = {};\nvar timeNow = msg.payload;\n\n// Get Stored Varuables\nvar elStatus = flow.get('coral_mi_elasped_status') || null;\nvar elTimeStart = flow.get('coral_mi_elasped_time_start') || null;\nvar elDuration = flow.get('coral_mi_elasped_duration') || null;\nvar elDurationStart = flow.get('coral_mi_elasped_duration_start') || null;\n\nvar elapsedTime = null;\n\nswitch (elStatus) {\n case \"run\":\n if (elDuration !== null) { \n elapsedTime = elDuration + (timeNow - elDurationStart);\n } else if (elTimeStart !== null) {\n elapsedTime = timeNow - elTimeStart;\n } \n break;\n case \"stop\":\n elapsedTime = null;\n break;\n}\n\nif (elapsedTime !== null) {\n // Construct Duration Output\n var hours = Math.floor(elapsedTime / 36e5);\n minutes = Math.floor(elapsedTime % 36e5 / 60000);\n seconds = Math.floor(elapsedTime % 60000 / 1000);\n monitor.elapsedTime = hours +\":\"+minutes.pad(2)+\":\"+seconds.pad(2);\n}\n// Construct Date/Time Output\nmonitor.timeNow = timeNow;\n\nreturn monitor;\n\n\n//flow.set('coral_mi_elasped_time_start', msg.payload);\n//elTimeStart = msg.payload;\n//monitor.elapsedDays = Math.floor( monitor.elapsedTime / (24*60*60*1000) ).pad(2);\n//monitor.elTimeStart = elTimeStart;\n","outputs":"1","noerr":0,"x":895,"y":940,"wires":[["f4fb575e.1a225"]]},{"id":"1ff0ccab.31a553","type":"comment","z":"b6a86340.1bd9f8","name":"DEV - CORAL CONTROL - v.1.6.2","info":"","x":145,"y":20,"wires":[]},{"id":"7708db1c.202b44","type":"comment","z":"b6a86340.1bd9f8","name":"EMUL.INPUT <= LINK","info":"","x":145,"y":500,"wires":[]},{"id":"155b9108.12bfaf","type":"switch","z":"b6a86340.1bd9f8","name":"DataType Split","property":"payload.DTP","propertyType":"msg","rules":[{"t":"else"},{"t":"eq","v":"NET","vt":"str"},{"t":"eq","v":"CNF","vt":"str"},{"t":"eq","v":"MON","vt":"str"}],"checkall":"true","outputs":4,"x":585,"y":640,"wires":[["63dd5f18.e6655"],["8c2e0aec.aadbd"],["7ec5b905.05d7"],["41672858.454b88"]]},{"id":"27dbf799.c1a108","type":"json","z":"b6a86340.1bd9f8","name":"","x":415,"y":560,"wires":[["6483e987.091188","155b9108.12bfaf"]]},{"id":"7ec5b905.05d7","type":"function","z":"b6a86340.1bd9f8","name":"Parse Config Data","func":"var config = flow.get('coral_controler_current_config') || {};\n\ndata = msg.payload;\n\ntabLabel = '';\nswitch (msg.payload.NID) {\n case 1000:\n tabLabel = '';\n break;\n case \"1\": \n tabLabel = 'SINK';\n break;\n default :\n tabLabel = 'Node ' + msg.payload.NID;\n break;\n}\n\nif (data.NID != 1000) {\n if (config[data.NID] === undefined) config[data.NID] = {};\n config[data.NID][data.CMD] = data.VAL;\n config[data.NID][\"label\"] = tabLabel;\n} else {\n for (var node in config) {\n config[node][data.CMD] = data.VAL;\n }\n}\n\nflow.set('coral_controler_current_config',config);\nvar msg = {};\nmsg.payload = config;\nreturn msg;","outputs":"1","noerr":0,"x":895,"y":820,"wires":[["8c2046af.8182f"]]},{"id":"8c2046af.8182f","type":"ui_template","z":"b6a86340.1bd9f8","group":"a1f71589.52e22","name":"Node Config Tabs","order":0,"width":"24","height":"3","format":"<div class=\"currentNodesConfig\">\n <md-content>\n <md-tabs md-dynamic-height=\"\" md-border-bottom=\"\">\n\n <md-tab label=\"{{node.label}}\" ng-repeat=\"node in msg.payload\">\n <md-content class=\"md-padding\">\n <div ng-if=\"node.IEEE802154_RPL_Imin\">\n <span><b>RPL DIO Interval Min</b> :</span>\n <span> {{node.IEEE802154_RPL_Imin}}</span>\n </div>\n <div ng-if=\"node.IEEE802154_RPL_Doublings\">\n <span><b>RPL DIO Interval Doublings</b> :</span>\n <span> {{node.IEEE802154_RPL_Doublings}}</span>\n </div>\n <div ng-if=\"node.CORAL_send_interval\">\n <span><b>UDP send freq</b> :</span>\n <span> {{node.CORAL_send_interval}}</span>\n </div>\n </md-content>\n </md-tab>\n\n </md-tabs> \n </md-content>\n</div>\n\n\n\n\n\n<style type=\"text/css\">\n\n/* Light Theme */\n \n .nr-dashboard-theme-light .currentNodesConfig md-tabs.md-default-theme md-ink-bar,\n .nr-dashboard-theme-light .currentNodesConfig md-tabs md-ink-bar {\n color: #ECEFF1 !important;\n background-color:#0094CE !important;\n } \n \n .nr-dashboard-theme-light .currentNodesConfig md-tabs .md-tab.md-active {\n color: black;\n }\n .nr-dashboard-theme-light.currentNodesConfig md-tabs md-content {\n background-color: transparent !important;\n color: black;\n }\n .nr-dashboard-theme-light.currentNodesConfig md-content md-tabs {\n background: #FFFFFF; // #f6f6f6;\n border: 1px solid #e1e1e1;\n }\n .nr-dashboard-theme-light.currentNodesConfig md-content md-tabs md-tabs-wrapper {\n background: white;\n }\n .nr-dashboard-theme-light.currentNodesConfig md-content h1:first-child {\n margin-top: 0;\n }\n \n \n \n/* Dark Theme */\n\n .nr-dashboard-theme-dark .currentNodesConfig md-tabs.md-default-theme md-ink-bar,\n .nr-dashboard-theme-dark .currentNodesConfig md-tabs md-ink-bar {\n color: rgba(255, 255, 255, 0.05) !important;\n background-color:#097479 !important;\n } \n\n .nr-dashboard-theme-dark .currentNodesConfig md-tabs .md-tab.md-active {\n color: white;\n }\n .nr-dashboard-theme-dark .currentNodesConfig md-content {\n background-color: transparent !important;\n color: white;\n }\n .nr-dashboard-theme-dark .currentNodesConfig md-content md-tabs {\n background: transparent; // #f6f6f6;\n border: 1px solid rgba(255, 255, 255, 0.02);\n }\n .nr-dashboard-theme-dark .currentNodesConfig md-content md-tabs md-tabs-wrapper {\n background: transparent;\n border-color: rgba(255,255,255,0.12);\n }\n .nr-dashboard-theme-dark .currentNodesConfig md-content h1:first-child {\n margin-top: 0;\n } \n \n .nr-dashboard-theme-dark .currentNodesConfig md-tabs.md-default-theme .md-tab, \n .nr-dashboard-theme-dark .currentNodesConfig md-tabs .md-tab {\n color: rgba(255, 255, 255, 0.5);\n }\n \n \n</style>","storeOutMessages":true,"fwdInMessages":true,"x":1135,"y":820,"wires":[[]]},{"id":"8b4031df.7f621","type":"ui_chart","z":"b6a86340.1bd9f8","name":"Jitter- LineChart","group":"33ea1b42.31bcec","order":5,"width":"12","height":"6","label":"Jitter Average","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":1325,"y":460,"wires":[[],[]]},{"id":"d645cfb3.fbd468","type":"ui_chart","z":"b6a86340.1bd9f8","name":"Latency- LineChart","group":"33ea1b42.31bcec","order":6,"width":"12","height":"6","label":"Latency","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"5","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":1115,"y":500,"wires":[[],[]]},{"id":"19bc7c50.edc64c","type":"file","z":"b6a86340.1bd9f8","name":"TCP Input - Log","filename":"e:\\coral-tcp-input-log.txt","appendNewline":true,"createDir":true,"overwriteFile":"false","x":585,"y":520,"wires":[]},{"id":"6c67c49f.b5b664","type":"subflow:ec10e813.04d7e","z":"b6a86340.1bd9f8","name":"","x":425,"y":100,"wires":[["4d280809.abafa"]]},{"id":"29fdce5e.0c77aa","type":"comment","z":"b6a86340.1bd9f8","name":"Configuration Page","info":"","x":215,"y":100,"wires":[]},{"id":"4d280809.abafa","type":"tcp out","z":"b6a86340.1bd9f8","host":"","port":"","beserver":"reply","base64":false,"end":false,"name":"TCP Server : Reply to all connections","x":755,"y":100,"wires":[]},{"id":"54a4df92.ce4f48","type":"template","z":"b6a86340.1bd9f8","name":"cut back messages","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"","x":695,"y":140,"wires":[["4d280809.abafa"]]},{"id":"5c226f.68b29d9","type":"subflow:c902fc6b.2415c","z":"b6a86340.1bd9f8","name":"","x":1345,"y":420,"wires":[]},{"id":"e24dee7b.1d9678","type":"file","z":"b6a86340.1bd9f8","name":"TCP OutPut - Log","filename":"e:\\coral-tcp-output-log.txt","appendNewline":true,"createDir":true,"overwriteFile":"false","x":695,"y":60,"wires":[]},{"id":"a81b7428.6d5f58","type":"switch","z":"b6a86340.1bd9f8","name":"Split Avrg/Node","property":"nid","propertyType":"msg","rules":[{"t":"else"},{"t":"eq","v":"1000","vt":"str"}],"checkall":"true","outputs":2,"x":1125,"y":440,"wires":[["5c226f.68b29d9"],["8b4031df.7f621"]]},{"id":"f8fb9e7e.0fdcf","type":"ui_chart","z":"b6a86340.1bd9f8","name":"Control vs. Data Packets % - LineChart","group":"33ea1b42.31bcec","order":3,"width":"12","height":"6","label":"Control Packets vs. Data Packets (%)","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"bezier","nodata":"Waiting for Data","ymin":"0","ymax":"","removeOlder":"30","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"x":1325,"y":340,"wires":[[],[]]},{"id":"e98cb849.f3a608","type":"ui_group","z":"","name":"Network Setup","tab":"c913b47.c167848","order":3,"disp":true,"width":"5"},{"id":"6a375a31.0b079c","type":"ui_group","z":"","name":"Monitoring Info","tab":"c913b47.c167848","order":4,"disp":true,"width":"6"},{"id":"33ea1b42.31bcec","type":"ui_group","z":"","name":"Charts","tab":"af9f5f0d.cdd7a","order":1,"disp":true,"width":"24"},{"id":"a1f71589.52e22","type":"ui_group","z":"","name":"Current Config","tab":"c913b47.c167848","order":5,"disp":true,"width":"24"},{"id":"c913b47.c167848","type":"ui_tab","z":"","name":"Coral Dashboard","icon":"dashboard","order":2},{"id":"af9f5f0d.cdd7a","type":"ui_tab","z":"","name":"Coral - Charts","icon":"dashboard","order":1}]