From 28a9517a1f7dfea74ae60ec732825921042e87d8 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Wed, 21 Jan 2026 17:29:23 -0600 Subject: [PATCH] fix: use last_value field so sensor values are saved to database - Change sensor_value to last_value to match Sensor schema - Make wireless sensor_index unique using OID suffix - Values now persist and can be graphed --- lib/towerops/snmp/profiles/dynamic.ex | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/towerops/snmp/profiles/dynamic.ex b/lib/towerops/snmp/profiles/dynamic.ex index 9fea6ede..02c77611 100644 --- a/lib/towerops/snmp/profiles/dynamic.ex +++ b/lib/towerops/snmp/profiles/dynamic.ex @@ -216,7 +216,7 @@ defmodule Towerops.Snmp.Profiles.Dynamic do sensor_descr: sensor_oid[:sensor_descr] || sensor_oid[:sensor_type], sensor_unit: sensor_oid[:sensor_unit] || "", sensor_divisor: sensor_oid[:sensor_divisor] || 1, - sensor_value: value + last_value: value / 1 } else {:error, :translation_failed} -> @@ -368,7 +368,7 @@ defmodule Towerops.Snmp.Profiles.Dynamic do oid: sensor.sensor_oid, descr: sensor.sensor_descr, type: sensor.sensor_type, - value: sensor.sensor_value, + value: sensor.last_value, unit: sensor.sensor_unit || "" } @@ -656,14 +656,18 @@ defmodule Towerops.Snmp.Profiles.Dynamic do defp fetch_wireless_sensor_value(sensor_def, client_opts) do case Client.get(client_opts, sensor_def.oid) do {:ok, value} when is_integer(value) -> + # Use OID suffix to make sensor_index unique (avoids collisions like two "frequency" sensors) + oid_suffix = sensor_def.oid |> String.split(".") |> Enum.take(-2) |> Enum.join("_") + %{ sensor_type: sensor_def.sensor_type, - sensor_index: "wireless_#{sensor_def.sensor_type}", + sensor_index: + "wireless_#{sensor_def.sensor_descr |> String.downcase() |> String.replace(" ", "_")}_#{oid_suffix}", sensor_oid: sensor_def.oid, sensor_descr: sensor_def.sensor_descr, sensor_unit: sensor_def.sensor_unit, sensor_divisor: sensor_def.sensor_divisor, - sensor_value: value + last_value: value / 1 } _ ->