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