Groov RIO - Health and Network Status - Example Flow

We have a customer putting a lot of RIO’s into the field and they wanted to get a good bit of information about the each of the RIOs health and well-being back to the central operations center.

Most of the system data they wanted is scattered around in different posts here in the forums, so I have just pulled all those threads together here.

But they also wanted some network data, like WAN IP address of the cell modem, the RIO’s local IP and more importantly, the VPN IP address of each RIO. The other two bits of data that were not here in the forums were the RIOs serial number or firmware version.
@torchard has written some API calls for that in the past, so I had to dig up his old flows and add them in here as well.

Bottom line, here is what I think is a pretty useful slug of info from a RIO (You should be able to - with a few tweaks - get all this from an EPIC if you need).

  • CPU (%)
  • Memory Used (Kb)
  • Drive Space (Gb)
  • I/O Board Temperature (F or C)
  • Uptime (milliseconds)
  • Serial Number
  • WAN IP Address
  • Host name
  • Host IP Address
  • VPN IP Address
  • Firmware Version

The flow I have posted here does not do anything with the information (beside show it in the debug tab).
This customer is going to send it all back via MQTT / SparkplugB, so I am going to move each string into the string scratchpad area and then use Ignition (they are using RIO-MM2) to publish each index on change (ie, every 15 minutes).
How you work with the data strings is up to you.

I would not run this more than every 15 minutes, there is just no need.
One thing to note about the flow, there is a 10 second delay on the CPU% because every now and then the flow would catch a CPU spike as the flow itself ran, I put the delay node in so we get a true indication of what the RIO is up to when this flow is not running.

The WAN IP address uses my favorite IP address look up

Here is how the flow looks:

The flow is attached the zip file. (2.6 KB)

If I have missed any status you would like added let me know, or you end up adding some of your own if you are happy to share, please post in this thread.



Is it possible to obtain the Node-RED version and NodeJS version through a flow?

1 Like

Yes. Just use the exe node to do a version check.
Let me know if you need a sample flow.

Here is an example of getting those two versions:

Inject when you need the versions. I would probably just put it as inject once about 10 seconds after Node-RED starts and you should be fine with that.

The delay 3 seconds is just something I have picked up after banging at exec nodes in the past, its nice to give each command a little breathing room.

The top exec node pulls the node -v version very cleanly.
The bottom exec node pulls node-red --help and thus pulls back all the command line help fluff that you don’t want, so we feed that output into the function node and do a substring command to pull just the Node-RED version info that you ask about.

I’m sure there are other ways to get this, sound off if you put any together.

[{"id":"4c4ab81f73213aa3","type":"inject","z":"248184bf.5969bc","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1380,"y":140,"wires":[["234da5deec67f247","1e9ecb5036364ce9"]]},{"id":"234da5deec67f247","type":"exec","z":"248184bf.5969bc","command":"node -v","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"","x":1680,"y":140,"wires":[["407f1d4c2313a2e0"],[],[]]},{"id":"1e9ecb5036364ce9","type":"delay","z":"248184bf.5969bc","name":"","pauseType":"delay","timeout":"3","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"x":1540,"y":200,"wires":[["a0653c0691571210"]]},{"id":"407f1d4c2313a2e0","type":"debug","z":"248184bf.5969bc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":2090,"y":120,"wires":[]},{"id":"a0653c0691571210","type":"exec","z":"248184bf.5969bc","command":"node-red --help","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"","x":1700,"y":200,"wires":[["7aeda24bfc12e345"],[],[]]},{"id":"b1ddeed45c0e535a","type":"debug","z":"248184bf.5969bc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":2090,"y":200,"wires":[]},{"id":"7aeda24bfc12e345","type":"function","z":"248184bf.5969bc","name":"Get version","func":"msg.payload = msg.payload.substring(9,15)\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1890,"y":200,"wires":[["b1ddeed45c0e535a"]]}]

Thank you. I tried to construct something myself based on the original example you provided, but .exe nodes are not my thing (yet).

Your flow works great.

For the EPIC, can some / most of these flows be used?


Of course. For what the flows pull back you should be fine to run on either.