farmitry_hvac/app/services/modbus/polling_service.rb

56 lines
1.5 KiB
Ruby

# polling_service.rb
require "rufus-scheduler"
module Modbus
class PollingService
class << self
def start
return if defined?(@scheduler) && @scheduler&.running?
puts "[#{Time.current}] Modbus polling service 시작됨 (Rufus)"
@scheduler = Rufus::Scheduler.new
@scheduler.cron "0 * * * * *" do
now = Time.now
current_time = format("%02d:%02d", now.hour, now.min)
puts "# current time: #{current_time}.#{now.sec}"
schedule = Schedule.find_by(hour: now.hour, minute: now.min)
apply_schedule(schedule) if schedule
end
end
def stop
@scheduler&.shutdown
puts "[#{Time.current}] Modbus polling service 중지됨"
end
def running?
@scheduler&.running?
end
private
def apply_schedule(schedule)
if schedule.is_active
run_script("on_off.rb", "0", "[Schedule] ON")
run_script(
"serial.rb",
(schedule.temperature * 10).to_i.to_s,
"[Schedule] #{format('%02d:%02d', schedule.hour, schedule.minute)}#{schedule.temperature}°C"
)
else
run_script("on_off.rb", "1", "[Schedule] OFF")
end
end
def run_script(file, arg, success_msg)
path = Rails.root.join(file)
if system("ruby", path.to_s, arg)
puts success_msg
else
puts "[#{Time.current}] #{file} 실행 실패 (args: #{arg})"
end
end
end
end
end