geo-therminator/lib/geo_therminator/pump_api/device/device.ex

84 lines
1.8 KiB
Elixir
Raw Normal View History

2021-11-07 09:01:39 +00:00
defmodule GeoTherminator.PumpAPI.Device do
import GeoTherminator.TypedStruct
deftypedstruct(%{
id: integer(),
device_id: integer(),
is_online: boolean(),
last_online: NaiveDateTime.t(),
created_when: NaiveDateTime.t(),
mac_address: String.t(),
name: String.t(),
model: String.t(),
retailer_access: integer()
})
defmodule Status do
deftypedstruct(%{
heating_effect: integer(),
is_heating_effect_set_by_user: boolean()
})
end
defmodule Register do
deftypedstruct(%{
register_name: String.t(),
register_value: integer(),
timestamp: DateTime.t()
})
end
defmodule RegisterCollection do
deftypedstruct(%{
outdoor_temp: Register.t(),
supply_out: Register.t(),
supply_in: Register.t(),
desired_supply: Register.t(),
brine_out: Register.t(),
brine_in: Register.t(),
hot_water_temp: Register.t()
})
end
defmodule OpStat do
deftypedstruct(%{
priority:
:hand_operated
| :hot_water
| :heating
| :active_cooling
| :pool
| :anti_legionella
| :passive_cooling
| :standby
| :idle
| :off
2022-02-17 18:46:26 +00:00
| :defrost
| :unknown
2021-11-07 09:01:39 +00:00
})
end
@spec get_device_process(GenServer.name(), GeoTherminator.PumpAPI.Auth.InstallationInfo.t()) ::
{:ok, GenServer.name()} | :error
def get_device_process(auth_server, installation) do
case DynamicSupervisor.start_child(
__MODULE__.Supervisor,
{__MODULE__.Server,
%__MODULE__.Server.Options{
auth_server: auth_server,
installation: installation
}}
) do
{:ok, pid} ->
{:ok, pid}
{:error, {:already_started, pid}} ->
{:ok, pid}
err ->
IO.inspect(err)
:error
end
end
end