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