lib/tehama_client/objects/reading.ex

defmodule TehamaClient.Reading do
  @moduledoc """
  A device reading.
  """

  use TypedStruct

  typedstruct do
    @typedoc "A typed Reading struct"

    field(:raw, integer())
    field(:read_time, String.t())
    field(:reading, integer())
    field(:alerts, String.t())
    field(:display_type, String.t())
    field(:factor, float())
    field(:initial_meter_read, integer())
    field(:initial_meter_time, String.t())
    field(:serial_number, String.t())
    field(:style, String.t())
    field(:type, String.t())
    field(:mon_pt, String.t())
    field(:note, String.t())
    field(:sensor_type, String.t())
    field(:units, String.t())
  end

  def new(data) when is_map(data) do
    %__MODULE__{
      raw: data["RawReading"] |> TehamaClient.Object.parse_i(),
      read_time: data["ReadTime"],
      reading: data["Reading"] |> TehamaClient.Object.parse_i(),
      alerts: data["alerts"],
      display_type: data["display_type"],
      factor: data["factor"] |> TehamaClient.Object.parse_f(),
      initial_meter_read: data["initial_meter_read"] |> TehamaClient.Object.parse_i(0),
      initial_meter_time: data["initial_meter_time"],
      serial_number: data["meter_serial_number"],
      style: data["meter_style"],
      type: data["meter_type"],
      mon_pt: data["mon_pt"],
      note: data["note"],
      sensor_type: data["sensor_type"],
      units: data["units"]
    }
  end

  def new(_) do
    nil
  end

  def sensor_type(type) do
    case type do
      "51" -> :pulse_totalizer_1
    end
  end
end