omv7:omv8_plugins:tempmon

Temp Monitor (openmediavault-tempmon)

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>

  1. Each sensor's script is written to its Script path by Salt when Apply Changes runs.
  2. collectd's exec plugin runs /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.
  3. collectd writes the values to RRD files under /var/lib/collectd/rrd/.
  4. omv-mkrrdgraph reads those RRD files to generate PNG graph images served in the workbench.
  5. The dashboard widget uses a live RPC call (TempMon.getAll) that runs all sensor scripts on demand — it does not use the RRD data.
  • Check that Apply Changes has been run since the sensor was created.
  • Verify the script file exists and is executable:
    ls -la /usr/sbin/cputemp1
  • Test the script manually:
    /usr/sbin/cputemp1

    It should print a single number.

  • Check for errors in the script path or script content in the sensor form.
  • Ensure at least one sensor has Performance chart enabled and Apply Changes has been run.
  • Try a hard browser refresh (Ctrl+Shift+R).
  • Wait up to 60 seconds after Apply Changes for the first data point.
  • Check collectd is running:
    systemctl status collectd
  • Check collectd can execute the sensor script as nobody:
    sudo -u nobody /usr/sbin/cputemp1
  • Check the collectd configuration was written:
    cat /etc/collectd/collectd.conf.d/tempmon.conf
  • Check the sensor conf was written:
    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:

  • Row in the Services → Temp Monitor datatable with live reading
  • Dashboard gauge widget (if enabled)
  • RRD graph on the performance page (if enabled)

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
  • omv7/omv8_plugins/tempmon.txt
  • Last modified: 2026/03/23 23:56
  • by ryecoaaron