feat: wait for enrolled sensors to announce, factory reset them on deletion

This commit is contained in:
2026-05-15 15:07:04 +02:00
parent 4c66642cd4
commit b434896e71
8 changed files with 99 additions and 5 deletions
@@ -68,6 +68,15 @@ defmodule Localiser.Web.Controllers.SensorController do
unauthorized: {"Unauthorized", "application/json", Schemas.Error}
]
operation :enroll,
summary: "Notify server a sensor is about to be enrolled",
request_body: {"Enroll params", "application/json", Schemas.SensorEnrollParams, required: true},
responses: [
ok: {"Sensor (unconfirmed)", "application/json", Schemas.Sensor},
bad_request: {"Missing sensor_id", "application/json", Schemas.Error},
unauthorized: {"Unauthorized", "application/json", Schemas.Error}
]
operation :calibration_start,
summary: "Begin RSSI calibration",
parameters: [id: [in: :path, type: :integer, required: true]],
@@ -86,6 +95,24 @@ defmodule Localiser.Web.Controllers.SensorController do
unauthorized: {"Unauthorized", "application/json", Schemas.Error}
]
def enroll(conn, %{"sensor_id" => sensor_id}) do
case Sensors.expect_sensor(sensor_id) do
{:ok, sensor} ->
json(conn, render_sensor(sensor))
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> json(%{errors: format_errors(changeset)})
end
end
def enroll(conn, _params) do
conn
|> put_status(:bad_request)
|> json(%{error: "sensor_id is required"})
end
def index(conn, _params) do
json(conn, Enum.map(Sensors.list_sensors(), &render_sensor/1))
end
@@ -176,6 +203,7 @@ defmodule Localiser.Web.Controllers.SensorController do
%{
id: sensor.id,
sensor_id: sensor.sensor_id,
confirmed: sensor.confirmed,
room_id: sensor.room_id,
floor_x: sensor.floor_x,
floor_y: sensor.floor_y,