diff --git a/app/helpers/ConfirmingSyncPatternState.rb b/app/helpers/ConfirmingSyncPatternState.rb index bfd8e93..406a941 100644 --- a/app/helpers/ConfirmingSyncPatternState.rb +++ b/app/helpers/ConfirmingSyncPatternState.rb @@ -8,14 +8,14 @@ class ConfirmingSyncPatternState < StatePattern::State while (idx < bytes.length && idx < sync_length && bytes[idx] == Synchronizer::SYNC_PATTERN[idx]) do idx = idx+1 end if (idx == sync_length) - #p "Sync pattern confirmed" + p "Sync pattern confirmed" transition_to(InSyncState) else - #p "Back to SearchingForSync state. idx = #{idx}." + p "Back to SearchingForSync state. idx = #{idx}." transition_to(SearchingForSyncState) end # return the rest return bytes[idx+1..-1] || "" end -end \ No newline at end of file +end diff --git a/app/helpers/InSyncState.rb b/app/helpers/InSyncState.rb index b11f3ba..1e818c7 100644 --- a/app/helpers/InSyncState.rb +++ b/app/helpers/InSyncState.rb @@ -2,7 +2,7 @@ require "socket" class InSyncState < StatePattern::State - END_OF_FRAME = "!\n" + END_OF_FRAME = "!****\n" # def initialize(stateful, previous_state) # # open socket to EmonHub @@ -42,7 +42,8 @@ class InSyncState < StatePattern::State private def new_frame_starts(bytes,idx,sync_pattern_length) #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) + return bytes[idx].eql?(END_OF_FRAME[0]) end def handle_frame(frame_lines) diff --git a/app/helpers/Synchronizer.rb b/app/helpers/Synchronizer.rb index df24f98..53f9424 100644 --- a/app/helpers/Synchronizer.rb +++ b/app/helpers/Synchronizer.rb @@ -1,7 +1,8 @@ class Synchronizer include StatePattern - SYNC_PATTERN = "\n/ISk5\\2ME382-1003\n\n" + SYNC_PATTERN = "/CTA5ZIV\-METER\n\n" + #SYNC_PATTERN = "\n/ISk5\\2ME382-1003\n\n" set_initial_state ::SearchingForSyncState diff --git a/app/models/reading.rb b/app/models/reading.rb index 66f9920..40e05e6 100644 --- a/app/models/reading.rb +++ b/app/models/reading.rb @@ -3,14 +3,21 @@ UNKNOWN_READING = { :total_kwh_consumed_high => nil, :total_kwh_consumed_low => class Reading < ActiveRecord::Base - + + # Round up with 1 (default) decimals + def round_up(number, decimals = 1) + factor = 10 ** decimals + (number * factor).ceil / factor.to_f + end + + def eql_reading?(reading) self.total_kwh_consumed_high == reading.total_kwh_consumed_high && self.total_kwh_consumed_low == reading.total_kwh_consumed_low && self.total_kwh_produced_high == reading.total_kwh_produced_high && self.total_kwh_produced_low == reading.total_kwh_produced_low && - self.current_kw_consumed == reading.current_kw_consumed && - self.current_kw_produced == reading.current_kw_produced && + round_up(self.current_kw_consumed) == round_up(reading.current_kw_consumed) && + round_up(self.current_kw_produced) == round_up(reading.current_kw_produced) && self.total_m3_gas_consumed == reading.total_m3_gas_consumed && self.high_tarif == reading.high_tarif end diff --git a/docker-compose.yml b/docker-compose.yml index 0381a56..750d236 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,3 @@ -version: '3' services: db: container_name: smartmeter_db diff --git a/smartmeter.rb b/smartmeter.rb index 21521d3..6013542 100644 --- a/smartmeter.rb +++ b/smartmeter.rb @@ -17,7 +17,7 @@ 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) + io_device = SerialPort.new("/dev/ttyUSB0", 115200, 8, 1, SerialPort::NONE) # Make reading blocking io_device.read_timeout = 0 rescue diff --git a/test-serial.rb b/test-serial.rb index 59bf644..447f694 100644 --- a/test-serial.rb +++ b/test-serial.rb @@ -18,10 +18,10 @@ if __FILE__ == $0 #params for serial port port_str = "/dev/ttyUSB0" #may be different for you - baud_rate = 9600 - data_bits = 7 + baud_rate = 115200 + data_bits = 8 stop_bits = 1 - parity = SerialPort::EVEN + parity = SerialPort::NONE sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity)