Files
localiserd/lib/localiser/web/channels/sensors_channel.ex
T

54 lines
1.4 KiB
Elixir

defmodule Localiser.Web.Channels.SensorsChannel do
use Phoenix.Channel
@impl true
def join("sensors", _params, socket) do
Phoenix.PubSub.subscribe(Localiser.PubSub, "sensors")
{:ok, socket}
end
@impl true
def handle_info({:sensor_announced, sensor}, socket) do
push(socket, "sensor_announced", render_sensor(sensor))
{:noreply, socket}
end
def handle_info({:sensor_enrolled, sensor}, socket) do
push(socket, "sensor_enrolled", render_sensor(sensor))
{:noreply, socket}
end
def handle_info({:sensor_unenrolled, sensor_id}, socket) do
push(socket, "sensor_unenrolled", %{sensor_id: sensor_id})
{:noreply, socket}
end
def handle_info({:calibration_complete, sensor_id}, socket) do
push(socket, "calibration_complete", %{sensor_id: sensor_id})
{:noreply, socket}
end
def handle_info({:sensor_expected, sensor}, socket) do
push(socket, "sensor_expected", render_sensor(sensor))
{:noreply, socket}
end
def handle_info({:sensor_enrollment_timeout, sensor_id}, socket) do
push(socket, "sensor_enrollment_timeout", %{sensor_id: sensor_id})
{:noreply, socket}
end
def handle_info(_msg, socket), do: {:noreply, socket}
defp render_sensor(sensor) do
%{
id: sensor.id,
sensor_id: sensor.sensor_id,
room_id: sensor.room_id,
floor_x: sensor.floor_x,
floor_y: sensor.floor_y,
rssi_ref: sensor.rssi_ref
}
end
end