lib/tehama_client/objects/meter.ex

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