Files
smartmeter/smartmeter.rb
2014-07-15 23:35:41 +02:00

53 lines
1.4 KiB
Ruby

#require "rubygems"
require "bundler/setup"
require "active_record"
require "serialport"
require "state_pattern"
MAX_BYTES = 100
project_root = File.dirname(File.absolute_path(__FILE__))
Dir.glob(project_root + "/app/models/*.rb").each{|f| require f}
Dir.glob(project_root + "/app/helpers/SearchingForSyncState.rb").each{|f| require f}
Dir.glob(project_root + "/app/helpers/*.rb").each{|f| require f}
connection_details = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.establish_connection(connection_details)
def open_device
begin
# Open connection to serial port
io_device = SerialPort.new("/dev/ttyUSB0", 9600, 7, 1, SerialPort::EVEN)
# Make reading blocking
io_device.read_timeout = 0
rescue
p "Serialport Error - reverting to 'example_blurp.txt'"
io_device = File.open("example_blurp.txt")
# start at random place in the file
io_device.seek(rand(1500), IO::SEEK_SET)
end
return io_device
end
def read_from(source)
source.read(MAX_BYTES).gsub(/\r/, '') rescue ""
end
if __FILE__ == $0
# open serial port and read first bytes
source = open_device
buffer = []
buffer = read_from(source)
#
# Process the received lines
#
sync = Synchronizer.new
while (buffer && buffer.length > 0)
# p "BUFFER: #{buffer}."
buffer = sync.handle_byte_stream(buffer)
buffer = buffer + read_from(source)
end
end
#p sync