A flexible temperature monitoring plugin for OpenMediaVault 7/8. Unlike fixed-sensor plugins, Temp Monitor lets you define any number of sensors using custom shell scripts — one script per sensor, each outputting a raw numeric value. Dashboard gauge widgets and RRD performance charts are generated automatically per sensor.
Install via omv-extras in the OMV web interface under System → omv-extras, or from the command line:
apt-get install openmediavault-tempmon
After installation, click Apply Changes.
Navigate to Services → Temp Monitor.
Click the + (Create) button to open the sensor form.
| Field | Description |
|---|---|
| Name | Display label used on the dashboard widget and performance chart. Set on creation only — cannot be changed after saving. |
| Script path | Full path where the script will be written on disk (e.g. /usr/sbin/cputemp1). Must be writable by root. |
| Script | Shell script that outputs a single raw numeric value on stdout. See Example Scripts below. |
| Divisor | The raw value is divided by this number to produce degrees Celsius. Use 1000 for millidegree sources (e.g. Linux thermal zones), 1 if the script already outputs Celsius. |
| Dashboard widget | When enabled, a gauge widget is added to the dashboard showing the current temperature. |
| Performance chart | When enabled, an RRD graph is added under Diagnostics → Performance Statistics → Temp Monitor. |
| Current reading | Live reading from the sensor script, shown when editing an existing sensor. |
After saving, click Apply Changes to deploy the scripts and regenerate the collectd configuration, dashboard widgets, and performance chart pages.
<note important> The Name field can only be set when creating a sensor. To rename a sensor, delete it and recreate it. </note>
Most ARM boards, Intel, and AMD CPUs expose temperatures via the kernel's thermal framework. Values are in millidegrees Celsius, so use Divisor: 1000.
#!/bin/sh cat /sys/devices/virtual/thermal/thermal_zone0/temp
To find the right thermal zone:
for z in /sys/devices/virtual/thermal/thermal_zone*/; do echo "$z: $(cat ${z}type) = $(cat ${z}temp)" done
If lm-sensors is installed and configured, use Divisor: 1:
#!/bin/sh sensors -u | awk '/temp1_input:/ { printf "%.0f", $2 * 1000; exit }'
Adjust the awk pattern to match the specific sensor name shown by sensors -u.
#!/bin/sh hddtemp -n /dev/sda
Use Divisor: 1.
#!/bin/sh smartctl -A /dev/sda | awk '/Temperature_Celsius/ { print $10 }'
Use Divisor: 1.
Useful for verifying the widget and chart pipeline without real hardware:
#!/bin/sh echo "42000"
Use Divisor: 1000 → displays 42.0 °C.
#!/bin/sh nvme smart-log /dev/nvme0 | awk '/^temperature/ { gsub(/[^0-9]/, "", $3); print $3 * 1000 }'
Use Divisor: 1000.
Each sensor with Dashboard widget enabled gets a circular gauge on the OMV dashboard showing the current temperature. The gauge fills from 0–100 °C.
Widgets are generated automatically when Apply Changes is run. They appear under the widget picker on the dashboard — click the grid icon at the top right of the dashboard to add or arrange them.
Colors are assigned deterministically from the sensor's UUID so they remain stable across deploys.
Sensors with Performance chart enabled are recorded by collectd and graphed under Diagnostics → Performance Statistics → Temp Monitor.
The chart page appears automatically after Apply Changes once at least one chart-enabled sensor exists. It is removed if all sensors have the chart option disabled.
Charts are updated every 60 seconds (collectd's default interval). Data is retained in RRD files and covers the standard OMV time ranges: 1 hour, 1 day, 1 week, 1 month, and 1 year.
<note> After clicking Apply Changes, it takes up to 60 seconds for the first data point to appear. The chart page will show a placeholder image until data is available. A browser refresh (Ctrl+Shift+R) may be needed to see newly added chart pages. </note>
/usr/share/openmediavault-tempmon/scripts/collectd-tempmon as user nobody. This script loops continuously, calling each sensor script and emitting PUTVAL lines in collectd's protocol./var/lib/collectd/rrd/.omv-mkrrdgraph reads those RRD files to generate PNG graph images served in the workbench.TempMon.getAll) that runs all sensor scripts on demand — it does not use the RRD data.ls -la /usr/sbin/cputemp1
/usr/sbin/cputemp1
It should print a single number.
systemctl status collectd
nobody: sudo -u nobody /usr/sbin/cputemp1
cat /etc/collectd/collectd.conf.d/tempmon.conf
cat /etc/openmediavault/tempmon.conf
This is by design. The name is locked after creation because it is used to identify the sensor's widget and chart. Delete and recreate the sensor to change the name.
There is no fixed limit on the number of sensors. Add one sensor per thermal source. Each gets its own:
Example multi-sensor setup:
| Name | Script path | Script | Divisor |
|---|---|---|---|
| CPU | /usr/sbin/temp-cpu | cat /sys/devices/virtual/thermal/thermal_zone0/temp | 1000 |
| NVMe | /usr/sbin/temp-nvme | nvme smart-log /dev/nvme0 | awk … | 1000 |
| HDD | /usr/sbin/temp-hdd | smartctl -A /dev/sda | awk … | 1 |
| Board | /usr/sbin/temp-board | cat /sys/bus/i2c/drivers/…/temp1_input | 1000 |