Web endpoint status dashboard - uibuilder zero-code example

Another advantage to using uibuilder over manually created endpoints is that uibuilder endpoints - including their websockets - adjust to Node-RED's configuration. On my dev machine for example, your connection to the websocket does not work without adjusting the web page because I deliberately set httpNodeRoot to /nr in order to test that URL's still work.

The constant refresh also seems to do something odd to my browser giving a regular flash - I think it was coming from the Editor but it was odd.

I am not criticising your project by the way - sorry if it seemed that way. Quite the opposite, it prompted me to see how easy/hard it might be to reproduce this really useful display using uibuilder and its (about to be) new zero-code nodes.

So I managed to reproduce the core of it. I would like to do more and have a display that automatically groups different types of endpoint together (servers, storage, networking, IoT).

But here is my attempt so far. Only needs uibuilder, no other contrib nodes and no external libraries needed. It uses my existing MQTT statuses rather than doing another ping. I was already checking services and endpoints via other methods so had no need to do it again.


In case anyone wants to try it - just note that you will want the beta version of uibuilder v6.1.0 that I just pushed to GitHub because I added some standard utility classes to uibuilder's default style sheet. (That also prompted me to start documenting the style sheet! So thanks for that as well. And also thanks for some ideas on new utility styles and grid layouts :grin: )

[{"id":"329fd730e3b77815","type":"uibuilder","z":"343ccabd2a6a1b48","name":"","topic":"","url":"bookmarks","fwdInMessages":false,"allowScripts":false,"allowStyles":false,"copyIndex":true,"templateFolder":"blank","extTemplate":"","showfolder":false,"reload":false,"sourceFolder":"src","deployedVersion":"6.1.0-beta","showMsgUib":false,"x":800,"y":760,"wires":[[],["7ec4018f86381147"]]},{"id":"bb288daf07bd8c1d","type":"mqtt in","z":"343ccabd2a6a1b48","name":"","topic":"services/+","qos":"2","datatype":"auto-detect","broker":"cc1c989613865d14","nl":false,"rap":true,"rh":0,"inputs":0,"x":240,"y":700,"wires":[["a334666d298a59fd"]]},{"id":"727b7e2e783e43c1","type":"debug","z":"343ccabd2a6a1b48","name":"debug 103","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":590,"y":700,"wires":[]},{"id":"864ff89e1f10115e","type":"inject","z":"343ccabd2a6a1b48","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"id\":\"Router\",\"name\":\"Router\",\"tag\":\"Network\",\"url\":\"https://192.168.1.1/\",\"ip\":\"192.168.1.1\",\"web\":true,\"ping\":true},{\"id\":\"NAS\",\"name\":\"NAS\",\"tag\":\"Service\",\"url\":\"https://nas.knightnet.co.uk:5001/\",\"ip\":\"nas.knightnet.co.uk:5001\",\"web\":true,\"ping\":true},{\"id\":\"nrmain\",\"name\":\"Node-RED (Admin)\",\"tag\":\"Service\",\"url\":\"https://home.knightnet.co.uk:1880/red/\",\"ip\":\"home.knightnet.co.uk:1880\",\"web\":true,\"ping\":true},{\"id\":\"Grafana\",\"name\":\"Grafana\",\"tag\":\"Service\",\"url\":\"http://home.knightnet.co.uk:3000/\",\"ip\":\"home.knightnet.co.uk:3000\",\"web\":true,\"ping\":true},{\"id\":\"Zigbee2MQTT\",\"name\":\"Zigbee2MQTT\",\"tag\":\"Service\",\"url\":\"http://home.knightnet.co.uk:8085/#/\",\"ip\":\"home.knightnet.co.uk:8085\",\"web\":true,\"ping\":true},{\"id\":\"shelly_rgbw2_01\",\"name\":\"Shelly RGB\",\"tag\":\"IoT\",\"url\":\"http://192.168.1.175/\",\"ip\":\"192.168.1.175\",\"web\":true,\"ping\":true},{\"id\":\"d1m05\",\"name\":\"Living Room Sensors\",\"tag\":\"IoT\",\"url\":\"http://192.168.1.188/\",\"ip\":\"192.168.1.188\",\"web\":true,\"ping\":true}]","payloadType":"json","x":185,"y":860,"wires":[["b16cce6360d7f32d"]],"l":false},{"id":"847b6fb6c9ee2b8b","type":"uib-element","z":"343ccabd2a6a1b48","name":"","topic":"","elementtype":"html","parent":"body","parentSource":"","parentSourceType":"str","elementid":"status","elementId":"","elementIdSourceType":"str","heading":"","headingSourceType":"str","headingLevel":"h2","position":"last","positionSourceType":"str","confData":{},"x":450,"y":860,"wires":[["329fd730e3b77815"]]},{"id":"b40901247276556f","type":"template","z":"343ccabd2a6a1b48","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<main>\n    <div id=\"bookmarks\" class=\"centre grid-3\">\n        {{#flow[file].bookmarks}}\n        <div id=\"bm-{{id}}\" class=\"box flex surface4\">\n            <div class=\"status-side-panel\"> </div>\n            <div>\n                <div>{{name}}</div>\n                <div class=\"text-smaller\">{{ip}}</div>\n            </div>\n        </div>\n        {{/flow[file].bookmarks}}\n\n        {{!-- <div id=\"bm-router\" class=\"box flex surface4\">\n            <div class=\"status-side-panel success\"> </div>\n            <div>\n                <div>Router</div>\n                <div>192.168.0.1</div>\n        </div> --}}\n    </div>\n</main>\n","output":"str","x":315,"y":860,"wires":[["847b6fb6c9ee2b8b"]],"l":false},{"id":"46f9bf7027361c26","type":"change","z":"343ccabd2a6a1b48","name":"","rules":[{"t":"delete","p":"uibuilderCtrl","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":985,"y":800,"wires":[["da7a7674e091bb42"]],"l":false},{"id":"7ec4018f86381147","type":"switch","z":"343ccabd2a6a1b48","name":"","property":"uibuilderCtrl","propertyType":"msg","rules":[{"t":"eq","v":"client connect","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":935,"y":800,"wires":[["46f9bf7027361c26"]],"l":false},{"id":"b16cce6360d7f32d","type":"change","z":"343ccabd2a6a1b48","name":"","rules":[{"t":"set","p":"#:(file)::bookmarks","pt":"flow","to":"payload","tot":"msg","dc":true}],"action":"","property":"","from":"","to":"","reg":false,"x":235,"y":860,"wires":[["b40901247276556f"]],"l":false},{"id":"da7a7674e091bb42","type":"link out","z":"343ccabd2a6a1b48","name":"link out 31","mode":"link","links":["cfcc9bbbbdf0e089"],"x":1035,"y":800,"wires":[]},{"id":"cfcc9bbbbdf0e089","type":"link in","z":"343ccabd2a6a1b48","name":"link in 10","links":["da7a7674e091bb42"],"x":235,"y":820,"wires":[["b40901247276556f"]]},{"id":"c5ed656cb0fd0dc6","type":"mqtt in","z":"343ccabd2a6a1b48","name":"","topic":"known_devices/+","qos":"2","datatype":"auto-detect","broker":"cc1c989613865d14","nl":false,"rap":true,"rh":0,"inputs":0,"x":220,"y":760,"wires":[["a334666d298a59fd"]]},{"id":"6b3072edc8dd8378","type":"uib-update","z":"343ccabd2a6a1b48","name":"","topic":"","mode":"update","modeSourceType":"update","cssSelector":"\"#bm-\" & $replace(topic, /known_devices\\/|services\\//, \"\") & \" .status-side-panel\"","cssSelectorType":"jsonata","slotSourceProp":"","slotSourcePropType":"msg","attribsSource":"{\t    \"class\": payload in [\"active\", \"Online\", true] ? \"status-side-panel success\" : \"status-side-panel error animate-pulse\"\t}","attribsSourceType":"jsonata","slotPropMarkdown":false,"x":570,"y":740,"wires":[["329fd730e3b77815"]]},{"id":"a334666d298a59fd","type":"delay","z":"343ccabd2a6a1b48","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":400,"y":700,"wires":[["6b3072edc8dd8378","727b7e2e783e43c1"]]},{"id":"cc1c989613865d14","type":"mqtt-broker","name":"home","broker":"home.knightnet.co.uk","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"5","keepalive":"60","cleansession":true,"birthTopic":"wiser","birthQos":"0","birthRetain":"false","birthPayload":"Online","birthMsg":{},"closeTopic":"Offline-Disconnected","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"Offline-Unexpected","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"sessionExpiry":""}]

This will very likely become an example in the next release. Of course, I did slightly cheat here and use a template node with Mustache to easily build the raw HTML for all of the defined endpoints. I could have done it differently but as I know HTML and Mustache, it was quicker this way.

Thanks again for sharing your project, it was a nice prompt for me to do a new page that I'd been meaning to do for ages. And really timely with the impending uibuilder v.6.1 letting me try out and demonstrate some of the zero-code features.


For those wanting to know how it works without wanting to install the flow ...

The lower-left flow builds and stores the data need to dynamically create the page (each endpoint to be shown). It is stored in permanent flow storage. The flow coming from the 2nd output of the uibuilder node filters out client connect messages and uses them to trigger sending the main page HTML to the new client.

I do have to slightly delay the incoming MQTT messages - though actually that is only really needed on a restart so that the MQTT retained messages arrive after the page is built. The incoming messages use the uib-update node and both the CSS Selector that identifies what to update and the class attributes to change use JSONata fields to format the incoming MQTT messages without needing any further processing.


Inspired by:

Here is an updated version with status groups and links enabled. I've tweaked the data so that it is in a more generic style and it is now also used to drive the MQTT status topics to monitor. Each status box where the input data has a link property also gets the link enabled so that you can visit the web page for that service/website/IoT device, etc.

Remember, no coding is needed - you can use this yourself. Just make sure you have the latest version of the uibuilder v6.1 beta from GitHub installed (updated again a few minutes ago). Or v6.1+ if you are reading this in the future! Then adjust the input data (the lower-left inject).

Don't forget to give your uibuilder node a URL and deploy before trying to run anything. Once deployed, change the input data and inject it. Then inject the monitoring subscriptions (the upper inject node). The monitoring inject will auto-start with Node-RED. The data is saved to flow.bookmarks(file).

Reloading the page (or a new browser tab connecting) will get the panels with a dark status bar. Once the live data arrives, the status bars will change to green or red.


[{"id":"329fd730e3b77815","type":"uibuilder","z":"343ccabd2a6a1b48","name":"","topic":"","url":"status","fwdInMessages":false,"allowScripts":false,"allowStyles":false,"copyIndex":true,"templateFolder":"blank","extTemplate":"","showfolder":false,"oldUrl":"bookmarks","reload":false,"sourceFolder":"src","deployedVersion":"6.1.0-beta","showMsgUib":false,"x":970,"y":260,"wires":[[],["7ec4018f86381147"]]},{"id":"7ec4018f86381147","type":"switch","z":"343ccabd2a6a1b48","name":"","property":"uibuilderCtrl","propertyType":"msg","rules":[{"t":"eq","v":"client connect","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1125,"y":300,"wires":[["da7a7674e091bb42"]],"l":false},{"id":"da7a7674e091bb42","type":"link out","z":"343ccabd2a6a1b48","name":"link out 31","mode":"link","links":["cfcc9bbbbdf0e089"],"x":1185,"y":300,"wires":[]},{"id":"cfcc9bbbbdf0e089","type":"link in","z":"343ccabd2a6a1b48","name":"link in 10","links":["da7a7674e091bb42"],"x":615,"y":300,"wires":[["101542aaa25d13b7"]]},{"id":"6b3072edc8dd8378","type":"uib-update","z":"343ccabd2a6a1b48","name":"","topic":"","mode":"update","modeSourceType":"update","cssSelector":"\"#st-\" & \ttopic & \t\" .status-side-panel\"","cssSelectorType":"jsonata","slotSourceProp":"","slotSourcePropType":"msg","attribsSource":"{\t    \"class\": payload in [\"active\", \"Online\", true] ? \"success status-side-panel\" : \"error animate-pulse status-side-panel\",\t    \"title\": \"Last update: \" & $now(),\t    \"data-updated\": $now(),\t    \"data-updatedBy\": \"monitor\"\t}","attribsSourceType":"jsonata","slotPropMarkdown":false,"x":720,"y":200,"wires":[["cc8f349b77115285"]]},{"id":"101542aaa25d13b7","type":"uib-cache","z":"343ccabd2a6a1b48","cacheall":false,"cacheKey":"topic","newcache":true,"num":1,"storeName":"file","name":"Cache HTML","storeContext":"context","varName":"uib_cache","x":730,"y":260,"wires":[["329fd730e3b77815"]]},{"id":"f75d53ff8e22e756","type":"change","z":"343ccabd2a6a1b48","name":"Slim topic","rules":[{"t":"set","p":"topic","pt":"msg","to":"$replace(topic, \t/known_devices\\/|services\\/|telegraf\\/ping\\//, \t\"\")","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":200,"wires":[["6b3072edc8dd8378"]]},{"id":"cc8f349b77115285","type":"junction","z":"343ccabd2a6a1b48","x":870,"y":220,"wires":[["329fd730e3b77815"]]},{"id":"e989206e9072ecc3","type":"group","z":"343ccabd2a6a1b48","name":"----- Start Monitoring. Dynamic subscriptions using flow.bookmarks. ----- \\n ","style":{"label":true,"color":"#000000","fill":"#ffffff","fill-opacity":"0.5"},"nodes":["75d86e89cf96881f","b067427063756317","749098f4774b3ac0","bea3425f1c0434bd","a11f17bfbf2785af","bd5442259a56f719","50650aaa25b0cea9"],"x":54,"y":143,"w":451,"h":98},{"id":"75d86e89cf96881f","type":"mqtt in","z":"343ccabd2a6a1b48","g":"e989206e9072ecc3","name":"","topic":"","qos":"2","datatype":"auto-detect","broker":"cc1c989613865d14","nl":false,"rap":true,"rh":0,"inputs":1,"x":425,"y":200,"wires":[["f75d53ff8e22e756"]],"l":false},{"id":"b067427063756317","type":"split","z":"343ccabd2a6a1b48","g":"e989206e9072ecc3","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":165,"y":200,"wires":[["bea3425f1c0434bd"]],"l":false},{"id":"749098f4774b3ac0","type":"inject","z":"343ccabd2a6a1b48","g":"e989206e9072ecc3","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"2","topic":"Start-Checks","payload":"#:(file)::bookmarks","payloadType":"flow","x":115,"y":200,"wires":[["b067427063756317"]],"l":false},{"id":"bea3425f1c0434bd","type":"split","z":"343ccabd2a6a1b48","g":"e989206e9072ecc3","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"group","x":215,"y":200,"wires":[["a11f17bfbf2785af"]],"l":false},{"id":"a11f17bfbf2785af","type":"switch","z":"343ccabd2a6a1b48","g":"e989206e9072ecc3","name":"","property":"group","propertyType":"msg","rules":[{"t":"eq","v":"checks","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":265,"y":200,"wires":[["bd5442259a56f719"]],"l":false},{"id":"bd5442259a56f719","type":"split","z":"343ccabd2a6a1b48","g":"e989206e9072ecc3","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"type","x":315,"y":200,"wires":[["50650aaa25b0cea9"]],"l":false},{"id":"50650aaa25b0cea9","type":"change","z":"343ccabd2a6a1b48","g":"e989206e9072ecc3","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"payload.statusTopic","tot":"msg","dc":true},{"t":"set","p":"action","pt":"msg","to":"subscribe","tot":"str"},{"t":"delete","p":"payload","pt":"msg"},{"t":"delete","p":"parts","pt":"msg"},{"t":"delete","p":"group","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":365,"y":200,"wires":[["75d86e89cf96881f"]],"l":false},{"id":"cc1c989613865d14","type":"mqtt-broker","name":"home","broker":"home.knightnet.co.uk","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"5","keepalive":"60","cleansession":true,"birthTopic":"wiser","birthQos":"0","birthRetain":"false","birthPayload":"Online","birthMsg":{},"closeTopic":"Offline-Disconnected","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"Offline-Unexpected","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"sessionExpiry":""},{"id":"81b5d5814cebd06a","type":"group","z":"343ccabd2a6a1b48","name":"Create base data. Save to flow.bookmarks(file). Create HTML. Send to uibuilder. \\n ","style":{"fill":"#ffffbf","fill-opacity":"0.33","label":true,"color":"#000000"},"nodes":["864ff89e1f10115e","847b6fb6c9ee2b8b","b40901247276556f","b16cce6360d7f32d"],"x":54,"y":243,"w":506,"h":98},{"id":"864ff89e1f10115e","type":"inject","z":"343ccabd2a6a1b48","g":"81b5d5814cebd06a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"1-main","payload":"[{\"group\":\"Network\",\"checks\":[{\"id\":\"router\",\"name\":\"Router\",\"type\":\"Network\",\"link\":\"https://192.168.1.1/\",\"description\":\"192.168.1.1\",\"statusTopic\":\"telegraf/ping/router\"}]},{\"group\":\"Services\",\"checks\":[{\"id\":\"NAS\",\"name\":\"NAS\",\"type\":\"Service\",\"link\":\"https://nas.knightnet.co.uk:5001/\",\"description\":\"nas.knightnet.co.uk:5001\",\"statusTopic\":\"telegraf/ping/NAS\"},{\"id\":\"nrmain\",\"name\":\"Node-RED (Live)\",\"type\":\"Service\",\"link\":\"https://home.knightnet.co.uk:1880/red/\",\"description\":\"home.knightnet.co.uk:1880\",\"statusTopic\":\"services/nrmain\"},{\"id\":\"Grafana\",\"name\":\"Grafana\",\"type\":\"Service\",\"link\":\"http://home.knightnet.co.uk:3000/\",\"description\":\"home.knightnet.co.uk:3000\",\"statusTopic\":\"services/Grafana\"},{\"id\":\"Zigbee2MQTT\",\"name\":\"Zigbee2MQTT\",\"type\":\"Service\",\"link\":\"http://home.knightnet.co.uk:8085/#/\",\"description\":\"home.knightnet.co.uk:8085\",\"statusTopic\":\"services/Zigbee2MQTT\"},{\"id\":\"wiser\",\"name\":\"Wiser Heating Control\",\"type\":\"Service\",\"description\":\"192.168.1.185\",\"statusTopic\":\"wiser\"}]},{\"group\":\"IoT Devices\",\"checks\":[{\"id\":\"shelly_rgbw2_01\",\"name\":\"Shelly RGB\",\"type\":\"IoT\",\"link\":\"http://192.168.1.175/\",\"description\":\"192.168.1.175\",\"statusTopic\":\"known_devices/shelly_rgbw2_01\"},{\"id\":\"d1m05\",\"name\":\"Living Room Sensors\",\"type\":\"IoT\",\"link\":\"http://192.168.1.188/\",\"description\":\"192.168.1.188\",\"statusTopic\":\"known_devices/d1m05\"}]},{\"group\":\"Websites\",\"checks\":[{\"id\":\"bbc\",\"name\":\"BBC\",\"type\":\"Web\",\"link\":\"https://bbc.co.uk/\",\"description\":\"bbc.co.uk\",\"statusTopic\":\"telegraf/ping/bbc\"},{\"id\":\"youtube\",\"name\":\"Youtube\",\"type\":\"Web\",\"link\":\"https://youtube.com/\",\"description\":\"youtube.com\",\"statusTopic\":\"telegraf/ping/youtube\"},{\"id\":\"maait\",\"name\":\"Much Ado About IT (blog)\",\"type\":\"Web\",\"link\":\"https://it.knightnet.org.uk/\",\"description\":\"it.knightnet.org.uk\",\"statusTopic\":\"telegraf/ping/maait\"}]}]","payloadType":"json","x":115,"y":300,"wires":[["b16cce6360d7f32d"]],"l":false},{"id":"847b6fb6c9ee2b8b","type":"uib-element","z":"343ccabd2a6a1b48","g":"81b5d5814cebd06a","name":"","topic":"","elementtype":"html","parent":"body","parentSource":"","parentSourceType":"str","elementid":"status","elementId":"","elementIdSourceType":"str","heading":"","headingSourceType":"str","headingLevel":"h2","position":"last","positionSourceType":"str","confData":{},"x":380,"y":300,"wires":[["101542aaa25d13b7"]]},{"id":"b40901247276556f","type":"template","z":"343ccabd2a6a1b48","g":"81b5d5814cebd06a","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<main>\n    {{#flow[file].bookmarks}}\n    <div id=\"websites\" class=\"centre grid-3\">\n        <h2 style=\"grid-column: span 3;\">{{group}}</h2>\n        {{#checks}}\n        {{#link}}<a href=\"{{link}}\" target=\"_blank\" style=\"display:contents;color:inherit;text-decoration:none\">{{/link}}\n        <div id=\"st-{{id}}\" class=\"box flex surface4\">\n            \n            <div class=\"status-side-panel\"> </div>\n            <div>\n                <div>{{name}}</div>\n                <div class=\"text-smaller\">{{description}}</div>\n            </div>\n        </div>\n        {{#link}}</a>{{/link}}\n        {{/checks}}\n    </div>\n    {{/flow[file].bookmarks}}\n</main>\n","output":"str","x":245,"y":300,"wires":[["847b6fb6c9ee2b8b"]],"l":false},{"id":"b16cce6360d7f32d","type":"change","z":"343ccabd2a6a1b48","g":"81b5d5814cebd06a","name":"","rules":[{"t":"set","p":"#:(file)::bookmarks","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":165,"y":300,"wires":[["b40901247276556f"]],"l":false},{"id":"d906100b38b4c184","type":"group","z":"343ccabd2a6a1b48","name":"Debugging","style":{"label":true,"color":"#7f7f7f"},"nodes":["b3f7353958926ab5","94e9853b8bb453ad","b9a0abcad0a95d93"],"x":534,"y":39,"w":272,"h":122},{"id":"b3f7353958926ab5","type":"inject","z":"343ccabd2a6a1b48","g":"d906100b38b4c184","name":"Visible Msgs On","props":[{"p":"_uib","v":"{\"command\":\"showMsg\",\"value\":true}","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":660,"y":80,"wires":[["b9a0abcad0a95d93"]]},{"id":"94e9853b8bb453ad","type":"inject","z":"343ccabd2a6a1b48","g":"d906100b38b4c184","name":"Visible Msgs Off","props":[{"p":"_uib","v":"{\"command\":\"showMsg\",\"value\":false}","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":660,"y":120,"wires":[["b9a0abcad0a95d93"]]},{"id":"b9a0abcad0a95d93","type":"junction","z":"343ccabd2a6a1b48","g":"d906100b38b4c184","x":780,"y":100,"wires":[["cc8f349b77115285"]]}]