defmodule TehamaClient.Unit do
@moduledoc """
A tehama device.
"""
use TypedStruct
# require Logger
typedstruct do
@typedoc "A typed Device struct"
field(:id, String.t())
field(:apt, String.t())
field(:addr, String.t())
field(:building, String.t())
field(:meters, [TehamaClient.Meter.t()])
end
def from_devices(devices) when is_list(devices) do
sorted_devices =
devices
|> Enum.sort_by(fn %TehamaClient.Device{node_id: node_id} ->
node_id
end)
unit = sorted_devices |> List.first() |> TehamaClient.Unit.from_device()
%TehamaClient.Unit{
unit
| meters: sorted_devices |> Enum.map(&TehamaClient.Meter.from_device/1)
}
end
def from_device(%TehamaClient.Device{} = device) do
%TehamaClient.Unit{
id: device.node_id,
apt: device.apt,
addr: device.addr,
building: device.building
}
end
end