diff --git a/app/services/modbus/polling_service.rb b/app/services/modbus/polling_service.rb index 6a3d7db..3083672 100644 --- a/app/services/modbus/polling_service.rb +++ b/app/services/modbus/polling_service.rb @@ -22,22 +22,31 @@ module Modbus private def apply_schedule(schedule) if schedule.is_active - run_script("on_off.rb", "#{schedule.controller.station_id}", "0", "[Schedule] #{schedule.controller.name} ON") + run_script( + "power", + "#{schedule.controller.station_id}", + "0", + "[Schedule] #{schedule.controller.name} ON" + ) sleep 2 run_script( - "serial.rb", + "temp", "#{schedule.controller.station_id}", (schedule.temperature * 10).to_i.to_s, "[Schedule] #{schedule.controller.name} #{format('%02d:%02d', schedule.hour, schedule.minute)} → #{schedule.temperature}°C" ) else - run_script("on_off.rb", "#{schedule.controller.station_id}", "1", "[Schedule] #{schedule.controller.name} OFF") + run_script( + "power", + "#{schedule.controller.station_id}", + "1", + "[Schedule] #{schedule.controller.name} OFF" + ) end end - def run_script(file, controller_id, value, success_msg) - path = Rails.root.join(file) - if system("ruby", path.to_s, controller_id, value) + def run_script(mode, controller_id, value, success_msg) + if system("ruby", "modbus.rb", mode, controller_id, value) puts success_msg Rails.logger.info success_msg else diff --git a/modbus.rb b/modbus.rb new file mode 100644 index 0000000..a4ff827 --- /dev/null +++ b/modbus.rb @@ -0,0 +1,21 @@ +require "rmodbus" +require "ccutrer-serialport" + +mode = ARGV[0].strip +controller_id = ARGV[1].to_i +value = ARGV[2].to_i + +ModBus::RTUClient.new("/dev/ttyUSB0", 9600) do |cl| + cl.with_slave(controller_id) do |slave| + regs = slave.holding_registers + case mode + when "temp" + regs[2] = value + when "power" + regs[22] = value + else + # type code here + end + sleep 0.1 + end +end diff --git a/on_off.rb b/on_off.rb deleted file mode 100644 index 998757f..0000000 --- a/on_off.rb +++ /dev/null @@ -1,13 +0,0 @@ -require "rmodbus" -require "ccutrer-serialport" - -controller_id = ARGV[0]&.to_i -value = ARGV[1]&.to_i - -ModBus::RTUClient.new("/dev/ttyUSB0", 9600) do |cl| - cl.with_slave(controller_id) do |slave| - regs = slave.holding_registers - regs[22] = value - sleep 0.1 - end -end diff --git a/serial.rb b/serial.rb deleted file mode 100644 index dd9d4a9..0000000 --- a/serial.rb +++ /dev/null @@ -1,13 +0,0 @@ -require "rmodbus" -require "ccutrer-serialport" - -controller_id = ARGV[0]&.to_i -value = ARGV[1]&.to_i - -ModBus::RTUClient.new("/dev/ttyUSB0", 9600) do |cl| - cl.with_slave(controller_id) do |slave| - regs = slave.holding_registers - regs[2] = value - sleep 0.1 - end -end