Rainmeter render node skin

Take a break between projects and forget about 3D is what I sometimes do. Continuing one of my previous posts (Restoration of 3ds Max) and experiments with Rainmeter desktop I wrote an useful skin to monitor my render nodes.

Intro

The features

  • Show the node availability (base color or grey);
  • Show its temperature/overheating (burning image appears);
  • Show the CPU activity as a graph;
  • Run a program, or a remote desktop profile (RDP) in my case, by clicking on it.

I know there are Deadline, RenderPal and other farm managers. I find them complex and pricey. Another reason is I don’t have many nodes to be exhausted every time I turn them on and off, a matter of seconds. So it’s better for me to code my own, to understand something cool (like regex), and again, to reinvent the wheel.

How does it work

The source of all data is Open Hardware Monitor by Michael Möller. The program has its own web server that generates JSON-data using HTTP and 8085 port. Basically, what we need to get the temperature is to parse the data from this server.

An example for CPU Core #2 looks like this:

{
	"id": 18,
	"Text": "Intel Core",
	"Children": [
		{
			"id": 27,
			"Text": "Temperatures",
			"Children": [
				{
					"id": 29,
					"Text": "CPU Core #2",
					"Children": [],
					"Min": "30.0 °C",
					"Value": "36.0 °C",
					"Max": "64.0 °C",
					"ImageURL": "images/transparent.png"
				},
			],
		},
}

As you can see, the minimum value was 30.0 °C, current value is 36.0 °C and max was at 64.0 °C. The current value needs to be parsed by Rainmeter plugin WebParser.dll and the right regex. Here is an example of the main parser:

[Variables]
json=http://10.0.0.5:8085/data.json
CPU=Intel
Core=2

[OHM]
Measure=Plugin
Plugin=WebParser.dll
URL=#json#
RegExp=(?siU).*"#CPU#(.*)".*Temp(.*)".*"CPU(.*)#Core#".*Value": "(.*)".*
UpdateRate=5
StringIndex=4

This code takes data from the node with IP 10.0.0.5, looks for a CPU branch (index 1), then looks for a temperature subbranch with core number 2 (indices 2 and 3) and finally gets Value’s value (index 4). The second core is not so hot and not so cold, average to present the whole package of the cores, that’s why I always consider only the second one. All parameters can be checked in Open Hardware Monitor’s GUI.

Another example of regex that parses the temperature from motherboard:

RegExp=(?siU).*"Gigabyte(.*)".*ITE(.*)".*Temp(.*)#3".*Value": "(.*)".*
StringIndex=4

This regex looks for the Temperature #3 of the ITE 8712F Interface installed on my server’s motherboard and takes only 4th index, which represents the current value of the processor temperature.

As a result

When the node gets down, turned off or simply sleeps, its skin does not receive a proper ping response and becomes grey. When the temperature exceeds the threshold, it turns red. Easy-peasy!

By the way, all values are customizable and gathered in one additional file named variables.inc. E.g. look for ‘colorgrey’ variable to set gray’s color according to RGB model, or change the font face replacing ‘font1’ and ‘font2’. By default, the skin uses Segoe UI which is standard for Windows 7.

Here is how it looks after I added 6 fake node-skins and a server (NS), clean and usable:

6 nodes

How to use it

You need to install Open Hardware Monitor on each node you want to monitor (do not forget to turn the web server on), and on the monitor-machine to install Rainmeter and the skin (one per node, simply duplicate its folder). Then you need to edit variables.inc to set node’s ID (a number 1-254), IP (local network), your CPU model (look at GUI). That’s pretty much all. Should work on Windows 7 and Rainmeter 2.5, tested.

The skin itself:
RenderNode_0.3.2.rmskin

I’m going to develop it and post the updates here, but so far it works fine for me.
Thanks for visiting. And have a good week.

UPDATE: The script work very well for almost a year now. I really got used to it.
Last edited on April 11, 2014