class ParseP1::Base

Attributes

data[R]
device_id[R]
obis_records[R]

Public Class Methods

new(data) click to toggle source
# File lib/parse_p1/base.rb, line 12
def initialize(data)
  @data = data.split('/').last.split('!').first.split
  @obis_records = {}
  extract_obis_records(@data)
end

Public Instance Methods

valid?() click to toggle source
# File lib/parse_p1/base.rb, line 18
def valid?
  electra_meter_id.is_a?(String) && actual_electra.is_a?(Float) && gas_meter_id.is_a?(String) && gas_usage.is_a?(Float)
end

Private Instance Methods

cleanup(obis_values) click to toggle source
# File lib/parse_p1/base.rb, line 50
def cleanup(obis_values)
  obis_values[1..-1].map {|value| value[-1] == ')' ? value.chop : value }
end
extract_key(record) click to toggle source
# File lib/parse_p1/base.rb, line 45
def extract_key(record)
  record.first.match(obis_record_pattern)
  $1
end
extract_obis_records(data) click to toggle source
# File lib/parse_p1/base.rb, line 28
def extract_obis_records(data)
  data.each do |item|
    obis_values     = item.split('(')
    previous_values = []

    key = extract_key(obis_values)

    #Values without a key are associated with the last known key
    if key.nil?
      key = @obis_records.keys.last
      previous_values = @obis_records[key] if key
    end

    @obis_records[key] = previous_values + cleanup(obis_values)
  end
end
obis_record_pattern() click to toggle source
# File lib/parse_p1/base.rb, line 54
def obis_record_pattern
  /(\d+-\d+:\d+\.\d+.\d+)/
end