First parsing of frame

This commit is contained in:
Aart van Halteren
2013-06-26 17:46:21 -04:00
parent 6443d70bcf
commit bdcf92211f
4 changed files with 28 additions and 4 deletions

View File

@@ -4,5 +4,4 @@ gem "activerecord", "3.2.13"
gem "mysql2" gem "mysql2"
gem "serialport" gem "serialport"
gem "state_pattern" gem "state_pattern"
#gem "daemon-kit" gem 'rufus-scheduler'
#gem 'rufus-scheduler', '>= 2.0.3'

View File

@@ -17,6 +17,8 @@ GEM
i18n (0.6.1) i18n (0.6.1)
multi_json (1.7.7) multi_json (1.7.7)
mysql2 (0.3.11) mysql2 (0.3.11)
rufus-scheduler (2.0.19)
tzinfo (>= 0.3.23)
serialport (1.1.0) serialport (1.1.0)
state_pattern (2.0.1) state_pattern (2.0.1)
tzinfo (0.3.37) tzinfo (0.3.37)
@@ -27,5 +29,6 @@ PLATFORMS
DEPENDENCIES DEPENDENCIES
activerecord (= 3.2.13) activerecord (= 3.2.13)
mysql2 mysql2
rufus-scheduler
serialport serialport
state_pattern state_pattern

View File

@@ -20,8 +20,9 @@ class InSyncState < StatePattern::State
if new_frame_starts(bytes,idx,sync_pattern_length) if new_frame_starts(bytes,idx,sync_pattern_length)
p "------ FRAME -----" p "------ FRAME -----"
frame_lines = frame.split("\n") frame_lines = frame.split("\n")
p frame_lines # should call to higher level p frame_lines
p "##################" p "##################"
handle_frame(frame_lines)
return bytes[idx+sync_pattern_length..-1] return bytes[idx+sync_pattern_length..-1]
else else
return nil return nil
@@ -34,4 +35,25 @@ class InSyncState < StatePattern::State
#return bytes[idx..idx+sync_pattern_length-1].eql?(Synchronizer::SYNC_PATTERN) #return bytes[idx..idx+sync_pattern_length-1].eql?(Synchronizer::SYNC_PATTERN)
return bytes[idx..idx+sync_pattern_length-1].eql?(END_OF_FRAME) return bytes[idx..idx+sync_pattern_length-1].eql?(END_OF_FRAME)
end end
def handle_frame(frame_lines)
frame_lines.each {| line|
if line.match(/1.8.1/)
total_kwh_consumed_high = line.split(/1-0:1.8.1\(|\*kWh\)/).join.to_f
p "Total kwh consumed (high): #{total_kwh_consumed_high}."
end
if line.match(/1.8.2/)
total_kwh_consumed_high = line.split(/1-0:1.8.2\(|\*kWh\)/).join.to_f
p "Total kwh consumed (low): #{total_kwh_consumed_high}."
end
if line.match(/2.8.1/)
total_kwh_produced_high = line.split(/1-0:2.8.1\(|\*kWh\)/).join.to_f
p "Total kwh consumed (high): #{total_kwh_produced_high}."
end
if line.match(/2.8.2/)
total_kwh_produced_low = line.split(/1-0:2.8.2\(|\*kWh\)/).join.to_f
p "Total kwh consumed (low): #{total_kwh_produced_low}."
end
}
end
end end

View File

@@ -11,7 +11,7 @@ Dir.glob(project_root + "/app/helpers/*.rb").each{|f| require f}
connection_details = YAML::load(File.open('config/database.yml')) connection_details = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.establish_connection(connection_details) ActiveRecord::Base.establish_connection(connection_details)
# # Open connection to serial port # Open connection to serial port
ser = SerialPort.new("/dev/ttyUSB1", 9600, 7, 1, SerialPort::EVEN) ser = SerialPort.new("/dev/ttyUSB1", 9600, 7, 1, SerialPort::EVEN)
lines = "" lines = ""
for i in 0..21 for i in 0..21