summaryrefslogtreecommitdiff
path: root/temp.rb
blob: 9641df5dab446dc616c61c07b79f4d2801c857a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
require 'rubygems'
require 'mqtt'
require 'yaml'

CONFIG = open("config.yml") do |fd|
	YAML.load fd
end

def beaworker
	cli = MQTT::Client.new(
		:remote_host	=> CONFIG[:broker][:remote],
		:client_id		=> CONFIG[:broker][:clientid],
		:will_topic		=> CONFIG[:topics][:lwt],
		:will_payload	=> "Last Will and Testament: #{CONFIG[:broker][:clientid]} has died!"
	)

	cli.connect do |c|
		Signal.trap("TERM") do
			c.publish "#{CONFIG[:topics][:status]}/#{CONFIG[:broker][:clientid]}", "Stopped"
			c.disconnect
			Process.exit! true
		end

		c.publish "#{CONFIG[:topics][:status]}/#{CONFIG[:broker][:clientid]}", "Started"

		while true do
			bulk = ""

			IO.readlines("/sys/devices/w1_bus_master1/w1_master_slaves").each do |idn|
				id = idn.chomp

				lines = IO.readlines "/sys/devices/w1_bus_master1/#{id}/w1_slave"

				spl = lines[1].split "="
				temp = spl[1]

				c.publish "#{CONFIG[:topics][:report]}/#{CONFIG[:broker][:clientid]}/#{id}", "#{temp}"
				bulk += "#{id} : #{temp}"
			end

			c.publish "#{CONFIG[:topics][:report]}/#{CONFIG[:broker][:clientid]}/bulk", bulk

			sleep CONFIG[:reports][:period]
		end
	end
end

def beaparent pid
	File.open("tempworker.pid", "w") do |file|
		file.write "#{CONFIG[:broker][:clientid]} : #{pid}"
	end

	puts "Worker #{CONFIG[:broker][:clientid]} started on PID #{pid}."

	Process.detach(pid)
end

def start
	pid = Process.fork

	if pid.nil? then
		beaworker
	else
		beaparent pid
	end
end

def stop
	IO.readlines("tempworker.pid").each do |line|

		linearr = line.split ":"
		Process.kill "TERM", linearr[1].to_i

		puts "Worker #{CONFIG[:broker][:clientid]}, PID #{linearr[1].to_i} killed."

	end

	File.unlink "tempworker.pid"
end

def restart
	stop
	start
end

def usage
	puts "Usage: ruby temp.rb { start | stop | restart }"
end

case ARGV.first
	when "start"
		start
	when "stop"
		stop
	when "restart"
		restart
	else
		usage
end