Packages
Sensor fusion framework for Elixir built on OTP. Poll sensors, buffer readings, fuse with weighted averaging and thresholds, and render HUD widgets (gauges, sparklines, threat indicators). Optional Nx backend.
Current section
Files
Jump to
Current section
Files
lib/raxol_sensor.ex
defmodule RaxolSensor do
@moduledoc """
Sensor fusion framework for Elixir built on OTP.
Poll sensors at configurable intervals, buffer readings, fuse data with
weighted averaging and configurable thresholds, and render real-time HUD
widgets (gauges, sparklines, threat indicators, minimaps).
## Quick Start
defmodule CpuSensor do
@behaviour Raxol.Sensor.Behaviour
@impl true
def read(_opts) do
# Return a sensor reading
{:ok, %Raxol.Sensor.Reading{
sensor_id: :cpu,
value: get_cpu_usage(),
unit: :percent,
timestamp: System.monotonic_time(:millisecond)
}}
end
end
# Start the sensor supervisor, then register sensors
Raxol.Sensor.Feed.start_link(sensor: CpuSensor, interval: 1000)
## Architecture
- `Raxol.Sensor.Behaviour` -- Sensor callback and `Reading` struct
- `Raxol.Sensor.Feed` -- GenServer: polling, buffering, error escalation
- `Raxol.Sensor.Fusion` -- GenServer: batching, weighted averaging, thresholds
- `Raxol.Sensor.HUD` -- Pure functional HUD widgets (gauge, sparkline, threat, minimap)
- `Raxol.Sensor.Supervisor` -- rest_for_one: Registry + DynSup + Fusion
## Optional Nx Backend
When `{:nx, "~> 0.9"}` is available, vectorized fusion operations use Nx tensors
for batch processing sensor readings.
## Documentation
See the [Sensor Fusion guide](https://hexdocs.pm/raxol_sensor/readme.html).
"""
@doc """
Returns the version of RaxolSensor.
"""
def version, do: unquote(Mix.Project.config()[:version])
end