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, rssi_ref, path_loss_exp}, socket) do push(socket, "calibration_complete", %{sensor_id: sensor_id, rssi_ref: rssi_ref, path_loss_exp: path_loss_exp}) {: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, x: sensor.x, y: sensor.y } end end