====== 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. ===== Installation ===== 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**. ===== Adding a Sensor ===== Navigate to **Services → Temp Monitor**. Click the **+** (Create) button to open the sensor form. ==== Sensor Fields ==== ^ 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|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. The **Name** field can only be set when creating a sensor. To rename a sensor, delete it and recreate it. ===== Example Scripts ===== ==== Linux Thermal Zone (millidegrees) ==== 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 ==== lm-sensors (degrees, already Celsius) ==== 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''. ==== Hard Drive Temperature via hddtemp ==== #!/bin/sh hddtemp -n /dev/sda Use **Divisor: 1**. ==== Hard Drive Temperature via smartctl ==== #!/bin/sh smartctl -A /dev/sda | awk '/Temperature_Celsius/ { print $10 }' Use **Divisor: 1**. ==== Fixed / Test Value ==== Useful for verifying the widget and chart pipeline without real hardware: #!/bin/sh echo "42000" Use **Divisor: 1000** → displays 42.0 °C. ==== NVMe Drive Temperature ==== #!/bin/sh nvme smart-log /dev/nvme0 | awk '/^temperature/ { gsub(/[^0-9]/, "", $3); print $3 * 1000 }' Use **Divisor: 1000**. ===== Dashboard Widgets ===== 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. ===== Performance Charts ===== 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. 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. ===== How It Works ===== - Each sensor's script is written to its **Script path** by Salt when **Apply Changes** runs. - 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. - collectd writes the values to RRD files under ''/var/lib/collectd/rrd/''. - ''omv-mkrrdgraph'' reads those RRD files to generate PNG graph images served in the workbench. - The dashboard widget uses a live RPC call (''TempMon.getAll'') that runs all sensor scripts on demand — it does **not** use the RRD data. ===== Troubleshooting ===== ==== Widget shows "–" or no value ==== * 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. ==== Performance chart page missing ==== * Ensure at least one sensor has **Performance chart** enabled and **Apply Changes** has been run. * Try a hard browser refresh (Ctrl+Shift+R). ==== Performance chart shows no data / placeholder image ==== * 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 ==== Sensor name is greyed out when editing ==== 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. ===== Multiple Sensors ===== 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 |