Visualize your Data using Node-RED Dashboard
We assume you have already been through the SmartMesh IP and Node-RED, revisited recipe and that you can launch the JsonServer application and Node-RED.
The Node-RED Dashboard is an add-on to Node-RED to build a dashboard with gauges, line charts, switches, etc. right on the computer that runs Node-RED!
You edit your dashboard by dragging and dropping Node-RED nodes. It integrates directly within your Node-RED flows.
In this recipe, you will create a simple dashboard which displays the temperature of 5 motes in your network and allows you to control their LEDs.
What you need
We assume you have a SmartMesh IP DC9000 starter kit with an embedded manager and 5 motes. Make sure the motes are turned on, run in master mode, and have joined the network.
Installation
Installation
Open the Node-RED flow editor in your browser:
click on the hamburger menu on the top right
Select "Manage palette"
in the install tab, enter "node-red-dashboard" and click install
Meet the dashboard palette!
When you start Node-RED after installation, you see a new "Dashboard" palette:
Start JsonServer
When Node-RED is running, start the JsonServer application and connect it to your manager.
See SmartMesh IP and Node-RED, revisited if you don't know how to do that.
In my network, I have 5 motes:
|
|
|
|
|
Create the flow
Visualizing Temperature
To visualize temperature, you can set up the following flow:
Some keys for understanding:
the
JsonServerapplication automatically publishes OAP notifications by issuing an HTTP POSTthe "extract" function filters temperature measurements and extracts the MAC address and the temperature value
the "switch" dispatches the messages based on the MAC address
5 equivalent gauges display the temperature
We provide the JSON string of the Node-RED flow below.
Setting LEDs
The second half of the flow takes input from on/off switches and issues the appropriate HTTP request to the JsonServer app to set/clear the LED.
Complete Flow and Visualization
JSON version of the flow
[{"id":"b16af910.c0de28","type":"http in","z":"2e0dad9f.85f132","name":"","url":"/oap","method":"post","swaggerDoc":"","x":83.40908813476562,"y":150.9091339111328,"wires":[["a36c1282.cad38","65cd86a7.c24f98"]]},{"id":"a36c1282.cad38","type":"http response","z":"2e0dad9f.85f132","name":"","x":212.4091033935547,"y":171.90914154052734,"wires":[]},{"id":"d8ca1da.61323e","type":"switch","z":"2e0dad9f.85f132","name":"","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"00-17-0d-00-00-58-f5-2b","vt":"str"},{"t":"eq","v":"00-17-0d-00-00-38-04-25","vt":"str"},{"t":"eq","v":"00-17-0d-00-00-60-08-ba","vt":"str"},{"t":"eq","v":"00-17-0d-00-00-38-03-69","vt":"str"},{"t":"eq","v":"00-17-0d-00-00-60-05-4a","vt":"str"}],"checkall":"true","outputs":5,"x":347.40904235839844,"y":102.63640594482422,"wires":[["2e5d0b44.c935f4"],["eead95ff.342898"],["b52b0555.174278"],["60f5d02a.341e5"],["25fd73a7.d622ec"]]},{"id":"2e5d0b44.c935f4","type":"ui_gauge","z":"2e0dad9f.85f132","name":"temp 58-f5-2b","group":"738e94b.6746f6c","order":1,"width":0,"height":0,"gtype":"gage","title":"temperature","label":"C","format":"{{value}}","min":"-40","max":"85","colors":["#00b500","#e6e600","#ca3838"],"x":525.4090423583984,"y":35.454559326171875,"wires":[]},{"id":"65cd86a7.c24f98","type":"function","z":"2e0dad9f.85f132","name":"extract","func":"if (msg.payload.fields.channel_str==\"temperature\") {\n msg.topic = msg.payload.mac;\n msg.payload = msg.payload.fields.samples[0]/100.00;\n return msg;\n}\n","outputs":1,"noerr":0,"x":219.40907287597656,"y":108.36367797851562,"wires":[["d8ca1da.61323e"]]},{"id":"3c970c62.e6f7d4","type":"comment","z":"2e0dad9f.85f132","name":"display temperature","info":"","x":122.40908813476562,"y":51.897727966308594,"wires":[]},{"id":"eead95ff.342898","type":"ui_gauge","z":"2e0dad9f.85f132","name":"temp 38-04-25","group":"606c391f.b987d8","order":1,"width":0,"height":0,"gtype":"gage","title":"temperature","label":"C","format":"{{value}}","min":"-40","max":"85","colors":["#00b500","#e6e600","#ca3838"],"x":520.2726898193359,"y":69.2727279663086,"wires":[]},{"id":"b52b0555.174278","type":"ui_gauge","z":"2e0dad9f.85f132","name":"temp 60-08-ba","group":"273f8bd5.76c3d4","order":1,"width":0,"height":0,"gtype":"gage","title":"temperature","label":"C","format":"{{value}}","min":"-40","max":"85","colors":["#00b500","#e6e600","#ca3838"],"x":518.2726898193359,"y":102.2727279663086,"wires":[]},{"id":"60f5d02a.341e5","type":"ui_gauge","z":"2e0dad9f.85f132","name":"temp 38-03-69","group":"600c3ee0.f4be3","order":1,"width":0,"height":0,"gtype":"gage","title":"temperature","label":"C","format":"{{value}}","min":"-40","max":"85","colors":["#00b500","#e6e600","#ca3838"],"x":520.2726898193359,"y":138.27276611328125,"wires":[]},{"id":"25fd73a7.d622ec","type":"ui_gauge","z":"2e0dad9f.85f132","name":"temp 60-05-4a","group":"b32e00c6.d7c1d","order":1,"width":0,"height":0,"gtype":"gage","title":"temperature","label":"C","format":"{{value}}","min":"-40","max":"85","colors":["#00b500","#e6e600","#ca3838"],"x":521.2726898193359,"y":171.27277374267578,"wires":[]},{"id":"888864fa.2414d8","type":"ui_switch","z":"2e0dad9f.85f132","name":"LED 58-f5-2b","label":"LED","group":"738e94b.6746f6c","order":0,"width":0,"height":0,"passthru":true,"topic":"00-17-0d-00-00-58-f5-2b","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":102.40908813476562,"y":316.0000534057617,"wires":[["dbd55b23.e7ebb8"]]},{"id":"fa3d5939.b22d48","type":"ui_switch","z":"2e0dad9f.85f132","name":"LED 38-04-25","label":"LED","group":"606c391f.b987d8","order":0,"width":0,"height":0,"passthru":true,"topic":"00-17-0d-00-00-38-04-25","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":103.27272033691406,"y":356.2727508544922,"wires":[["dbd55b23.e7ebb8"]]},{"id":"8ead9a2b.7f1e38","type":"ui_switch","z":"2e0dad9f.85f132","name":"LED 60-08-ba","label":"LED","group":"273f8bd5.76c3d4","order":0,"width":0,"height":0,"passthru":true,"topic":"00-17-0d-00-00-60-08-ba","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":104.27272033691406,"y":395.2727508544922,"wires":[["dbd55b23.e7ebb8"]]},{"id":"b256d372.2fd74","type":"ui_switch","z":"2e0dad9f.85f132","name":"LED 38-03-69","label":"LED","group":"600c3ee0.f4be3","order":0,"width":0,"height":0,"passthru":true,"topic":"00-17-0d-00-00-38-03-69","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":102.27272033691406,"y":435.2727508544922,"wires":[["dbd55b23.e7ebb8"]]},{"id":"ca84f4f6.262468","type":"ui_switch","z":"2e0dad9f.85f132","name":"LED 60-05-4a","label":"LED","group":"b32e00c6.d7c1d","order":0,"width":0,"height":0,"passthru":true,"topic":"00-17-0d-00-00-60-05-4a","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":107.27272033691406,"y":480.2727508544922,"wires":[["dbd55b23.e7ebb8"]]},{"id":"c9e1fc70.f5cce","type":"http request","z":"2e0dad9f.85f132","name":"","method":"PUT","ret":"txt","url":"","tls":"","x":505.4091033935547,"y":336.1818313598633,"wires":[["56c59ff0.218e1"]]},{"id":"dbd55b23.e7ebb8","type":"function","z":"2e0dad9f.85f132","name":"create request","func":"msg.url = \"http://127.0.0.1:8080/api/v1/oap/\"+msg.topic+\"/digital_out/INDICATOR_0\"\nmsg.payload = {\n \"value\": msg.payload===true?1:0,\n}\nreturn msg;","outputs":1,"noerr":0,"x":329.4090270996094,"y":333.9091262817383,"wires":[["c9e1fc70.f5cce"]]},{"id":"56c59ff0.218e1","type":"switch","z":"2e0dad9f.85f132","name":"","property":"statusCode","propertyType":"msg","rules":[{"t":"eq","v":"200","vt":"num"},{"t":"else"}],"checkall":"true","outputs":2,"x":304.40904235839844,"y":496.5454788208008,"wires":[["bfa6958f.444938"],["40208c1f.dc1414"]]},{"id":"f2fac085.05143","type":"ui_toast","z":"2e0dad9f.85f132","position":"top right","displayTime":"3","outputs":0,"ok":"OK","cancel":"","topic":"","name":"","x":599.4091033935547,"y":501.8182144165039,"wires":[]},{"id":"bfa6958f.444938","type":"change","z":"2e0dad9f.85f132","name":"success","rules":[{"t":"set","p":"payload","pt":"msg","to":"LED successfully set","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":434.40904235839844,"y":461.27274322509766,"wires":[["f2fac085.05143"]]},{"id":"40208c1f.dc1414","type":"change","z":"2e0dad9f.85f132","name":"fail","rules":[{"t":"set","p":"payload","pt":"msg","to":"ERROR when setting LED","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":430.272705078125,"y":524.2727355957031,"wires":[["f2fac085.05143"]]},{"id":"a855fd92.d2363","type":"comment","z":"2e0dad9f.85f132","name":"set LED","info":"","x":74.27272033691406,"y":266.2727355957031,"wires":[]},{"id":"738e94b.6746f6c","type":"ui_group","z":"","name":"00-17-0d-00-00-58-f5-2b","tab":"d1579ccd.92068","order":1,"disp":true,"width":"6"},{"id":"606c391f.b987d8","type":"ui_group","z":"","name":"00-17-0d-00-00-38-04-25","tab":"d1579ccd.92068","order":2,"disp":true,"width":"6"},{"id":"273f8bd5.76c3d4","type":"ui_group","z":"","name":"00-17-0d-00-00-60-08-ba","tab":"d1579ccd.92068","order":3,"disp":true,"width":"6"},{"id":"600c3ee0.f4be3","type":"ui_group","z":"","name":"00-17-0d-00-00-38-03-69","tab":"d1579ccd.92068","order":4,"disp":true,"width":"6"},{"id":"b32e00c6.d7c1d","type":"ui_group","z":"","name":"00-17-0d-00-00-60-05-4a","tab":"d1579ccd.92068","order":5,"disp":true,"width":"6"},{"id":"d1579ccd.92068","type":"ui_tab","z":"","name":"Motes","icon":"dashboard","order":1}]To import the flow above in your Node-RED instance:
- copy the string above (triple-click to select, then copy with Ctrl+C)
- in your Node-RED editor, on the hamburger menu on the upper right, select "Import" > "Clipboard"
- paste the string (Ctrl+V) and click "Import"
- activate the flow by clicking on the "Deploy" button
What's Next?
We haven't scratched the surface of what the Node-RED Dashboard can do. There are countless other widgets you can add, in a way equivalent to what we did, including:
line charts
bar charts
donuts
drop-down menus
buttons
sliders
forms
etc.