defmodule TehamaClient.Reading do @moduledoc """ A device reading. """ use TypedStruct typedstruct do @typedoc "A typed Reading struct" field(:raw, String.t()) 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"], 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