diff --git a/lib/towerops/agent/validator.ex b/lib/towerops/agent/validator.ex index 5b68b568..681cdb9c 100644 --- a/lib/towerops/agent/validator.ex +++ b/lib/towerops/agent/validator.ex @@ -369,10 +369,17 @@ defmodule Towerops.Agent.Validator do # Validate sensor value (must be finite float/int) defp validate_sensor_value(value) when is_float(value) or is_integer(value) do - if is_float(value) and (value == :nan or value == :infinity or value == :neg_infinity) do - {:error, {:invalid_sensor_value, "Sensor value must be finite number"}} - else - :ok + # Check for NaN (NaN is the only value that doesn't equal itself) + # Check for infinity by comparing with max/min float values + cond do + is_float(value) and value != value -> + {:error, {:invalid_sensor_value, "Sensor value must be finite number (not NaN)"}} + + is_float(value) and (value > 1.0e308 or value < -1.0e308) -> + {:error, {:invalid_sensor_value, "Sensor value must be finite number (not infinity)"}} + + true -> + :ok end end