Uptime/Runtime with Hourglass node

I wanted to keep track of my Node-RED uptime on my home Windows PC and so put together this little flow.

It uses a new to me node - the hourglass node. Its a little different than other nodes to control, this sample flow should save you some time to get it up and running.

The top inject node is set to fire once when the flow is first run, in my case, when Node-RED boots up.
The middle inject node fires every 15 seconds so I can get a readout of the current uptime.
The bottom inject node could be manually pressed to stop the timer. I included it purely as an example on how to control the hourglass node.

I could see this node being pressed into use for something like a pump run time totalizator, or refrigeration compressor duty cycle control.

Here is what the node outputs.

For my use case, I simply used the msg.elapsed.human so I could broadly see the program uptime at a glance. I don’t need minutes and seconds resolution on my dashboard. But the full time object is there if you want to drill into that.

Lastly, here is my flow to get you started.

[{"id":"f4c0fc7b.0d8ba","type":"hourglass","z":"d9148e1f.60835","name":"","humanizeLocale":"","x":740,"y":240,"wires":[["cc439402.40cd98"]]},{"id":"9dbff6e2.f4fa78","type":"inject","z":"d9148e1f.60835","name":"Auto Start","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":230,"y":192,"wires":[["913ec325.43e08"]]},{"id":"913ec325.43e08","type":"change","z":"d9148e1f.60835","name":"Start","rules":[{"t":"set","p":"command","pt":"msg","to":"start","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":192,"wires":[["f4c0fc7b.0d8ba"]]},{"id":"3bc76c68.e85f64","type":"change","z":"d9148e1f.60835","name":"Status","rules":[{"t":"set","p":"command","pt":"msg","to":"status","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":240,"wires":[["f4c0fc7b.0d8ba"]]},{"id":"c857c4c5.942628","type":"change","z":"d9148e1f.60835","name":"Stop","rules":[{"t":"set","p":"command","pt":"msg","to":"stop","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":288,"wires":[["f4c0fc7b.0d8ba"]]},{"id":"3fa35199.275e3e","type":"inject","z":"d9148e1f.60835","name":"Read every 15 seconds","topic":"","payload":"","payloadType":"date","repeat":"15","crontab":"","once":false,"onceDelay":0.1,"x":270,"y":240,"wires":[["3bc76c68.e85f64"]]},{"id":"b4de9086.a01dc","type":"inject","z":"d9148e1f.60835","name":"Manual Stop","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":289,"wires":[["c857c4c5.942628"]]},{"id":"cc439402.40cd98","type":"debug","z":"d9148e1f.60835","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":910,"y":240,"wires":[]}]
1 Like

Hourglass node persists its state between restarts of Node-Red so after the next restart calculation continues. Does it still work for your case?

Welcome to the Opto forums.

I don’t know if it does persist. I never tested in. In my case I do not want it to persist.
Perhaps you can test it and let us know.

yes, it restarts from the same value.

can someone help me with the following;

  1. get the time in hours and minutes only.for example 250h and 55m.
  2. store the time in a comma delimited csv file every 30s with header

For getting the time, check out this post here:

For putting it in a CSV, use a function node to build the header, then another function block to build your time in the CSV format you want. Take the output of that node into a file write node.

1 Like