defmodule TehamaClient.Meter do
@moduledoc """
A tehama device.
"""
use TypedStruct
# require Logger
typedstruct do
@typedoc "A typed Device struct"
field(:node_id, String.t())
field(:location_note, String.t())
field(:latest_link_status_data_read_time, String.t())
field(:battery_v, String.t())
field(:multiplier, String.t())
field(:pulse_unit, String.t())
field(:link_partner, String.t())
field(:radio_dec_id, String.t())
field(:radio_hex_id, String.t())
field(:readings, [TehamaClient.Reading.t()])
end
def from_device(
%TehamaClient.Device{
readings: [%TehamaClient.Reading{factor: factor, units: units} | _rest]
} = device
) do
%TehamaClient.Meter{
node_id: device.node_id,
location_note: device.location_note,
latest_link_status_data_read_time: device.latest_link_status_data_read_time,
battery_v: device.battery_v,
link_partner: device.link_partner,
radio_dec_id: device.radio_dec_id,
radio_hex_id: device.radio_hex_id,
multiplier: factor,
pulse_unit: units,
readings: device.readings
}
end
def from_device(%TehamaClient.Device{} = device) do
%TehamaClient.Meter{
node_id: device.node_id,
location_note: device.location_note,
latest_link_status_data_read_time: device.latest_link_status_data_read_time,
battery_v: device.battery_v,
link_partner: device.link_partner,
radio_dec_id: device.radio_dec_id,
radio_hex_id: device.radio_hex_id,
readings: device.readings
}
end
end