fix: add missing sensor units to existing sensors

Sets sensor_unit for all sensors that are missing it, fixing sensors
created before the discovery code was updated to set units properly.

Updates:
- Temperature sensors: set to '°C'
- Voltage sensors: set to 'V'
- Current sensors: set to 'mA'
- Power sensors: set to 'W'
- dBm sensors: set to 'dBm'

This ensures the device detail page displays units correctly for all
sensor types (e.g., "27 °C" instead of "27" for temperature).

The discovery code already sets these units for new sensors, so this
migration only affects existing data.

Related to:
- lib/towerops/snmp/profiles/vendors/routeros.ex:690 (°C)
- lib/towerops/snmp/profiles/vendors/routeros.ex:709 (V)
- lib/towerops/snmp/profiles/base.ex:1473-1480 (sensor_type_to_unit)

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Graham McIntire 2026-01-25 12:38:23 -06:00
parent 9c2efec473
commit a23296ea34
No known key found for this signature in database

View file

@ -0,0 +1,62 @@
defmodule Towerops.Repo.Migrations.AddMissingSensorUnits do
use Ecto.Migration
def up do
# Set sensor_unit for all sensors that are missing it
# This fixes sensors created before sensor_unit was properly set in discovery code
# Temperature sensors
execute """
UPDATE snmp_sensors
SET sensor_unit = '°C'
WHERE sensor_type = 'temperature'
AND (sensor_unit IS NULL OR sensor_unit = '')
"""
# Voltage sensors (only those without unit set)
execute """
UPDATE snmp_sensors
SET sensor_unit = 'V'
WHERE sensor_type = 'voltage'
AND (sensor_unit IS NULL OR sensor_unit = '')
"""
# Current sensors
execute """
UPDATE snmp_sensors
SET sensor_unit = 'mA'
WHERE sensor_type = 'current'
AND (sensor_unit IS NULL OR sensor_unit = '')
"""
# Power sensors
execute """
UPDATE snmp_sensors
SET sensor_unit = 'W'
WHERE sensor_type = 'power'
AND (sensor_unit IS NULL OR sensor_unit = '')
"""
# dBm sensors (optical power)
execute """
UPDATE snmp_sensors
SET sensor_unit = 'dBm'
WHERE sensor_type = 'dbm'
AND (sensor_unit IS NULL OR sensor_unit = '')
"""
# State sensors (leave empty, they don't have units)
# Fan speed sensors should already have RPM
# Frequency, rate, etc. should already have their units
end
def down do
# Revert by setting units back to empty string
execute """
UPDATE snmp_sensors
SET sensor_unit = ''
WHERE sensor_type IN ('temperature', 'voltage', 'current', 'power', 'dbm')
AND sensor_unit IN ('°C', 'V', 'mA', 'W', 'dBm')
"""
end
end