alex-vancoillie-thermostat-exercise 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a451d9e4fc8e92c3c98d58ffdb2a5e8ce985af2a
4
+ data.tar.gz: f8c70a710491a874f417a7479c01e8b196ae62b1
5
+ SHA512:
6
+ metadata.gz: 96c51c4bfbd4e19cd2a41673825b4323af1d492bdff147f9d49cce3d30c82cda2ff4b45166d6dfecd2a4c2c43d6b143018773ba79cb56c5ae6f0176d86a173a0
7
+ data.tar.gz: 8f20b5f1c46218e231de9957fddd8932d55cc91863abfab29293e5a16794f2a37a5230f5b0067177e8da8da255885ac6f6edc4da4e1f5f9829daa64875827c03
data/bin/app ADDED
@@ -0,0 +1,114 @@
1
+ require 'alex-vancoillie-thermostat-exercise'
2
+ require 'optparse'
3
+
4
+ led = Led.new
5
+ relais = Relais.new
6
+ log = Log.new
7
+ temp = Temperature.new
8
+ web = Web.new
9
+ transport = Transport.new
10
+ input = UserInput.new
11
+
12
+ # this hash will hold all of the options
13
+ # parsed from the command-line by
14
+ # OptionParser
15
+ options = {}
16
+
17
+ # We give a block argument with the constructor
18
+ optparse = OptionParser.new do |opts|
19
+ # set a banner, displayed at the top
20
+ # of the help screen
21
+ opts.banner = "Usage: app.rb [options]"
22
+
23
+ # define the options, and what they do
24
+ opts.on('-m', '--method M', String, 'How to get temperature [user], [url], [mqtt]') do |method|
25
+ options[:method] = method
26
+ end
27
+
28
+ opts.on('-c', '--celsius TEMP', Float, 'Enter the temperature in Celsius') do |celsius|
29
+ options[:temperature] = temp.convert('c', celsius)
30
+ end
31
+
32
+ opts.on('-k', '--kelvin TEMP', Float, 'Enter the temperature in Kelvin') do |kelvin|
33
+ options[:temperature] = temp.convert('k', kelvin)
34
+ end
35
+
36
+ opts.on('-f', '--fahrenheit TEMP', Float, 'Enter the temperature in Fahrenheit') do |fahrenheit|
37
+ options[:temperature] = temp.convert('f', fahrenheit)
38
+ end
39
+
40
+ opts.on('-r', '--range R', Float, 'Enter the range') do |range|
41
+ options[:range] = range
42
+ end
43
+
44
+ opts.on('-w', '--wanted W', Float, 'Enter the wanted temperature (in Celsius)') do |set|
45
+ options[:set] = set
46
+ end
47
+
48
+ opts.on('-h', '--help', 'Get this help screen') do
49
+ puts opts
50
+ exit
51
+ end
52
+ end
53
+
54
+ optparse.parse!
55
+
56
+ if options[:method] == 'user'
57
+ input.askData
58
+ conversion = temp.convert(input.get_temp, input.get_unit)
59
+
60
+ led.check_led(conversion, input.get_set, input.get_range)
61
+ relais.set(conversion, input.get_set, input.get_range)
62
+
63
+ puts relais.get_heating
64
+ puts relais.get_cooling
65
+ puts led.get_led
66
+
67
+ log.addContent(relais.get_heating)
68
+ log.addContent(relais.get_cooling)
69
+ log.addContent(led.get_fcolor)
70
+ end
71
+
72
+ if options[:method] == 'url'
73
+ update = Thread.new do
74
+
75
+ while true do
76
+ puts "\n"
77
+ temp = web.url
78
+
79
+ led.check_led(temp, options[:set], options[:range])
80
+ relais.set(temp, options[:set], options[:range])
81
+
82
+ puts relais.get_heating
83
+ puts relais.get_cooling
84
+ puts led.get_led
85
+
86
+ log.addContent(relais.get_heating)
87
+ log.addContent(relais.get_cooling)
88
+ log.addContent(led.get_fcolor)
89
+
90
+ sleep(10)
91
+ end
92
+ end
93
+ update.join
94
+ end
95
+
96
+ if options[:method] == 'mqtt'
97
+ transport.on_change do |temp|
98
+ puts temp
99
+
100
+ led.check_led(temp, options[:set], options[:range])
101
+ relais.set(temp, options[:set], options[:range])
102
+
103
+ puts relais.get_heating
104
+ puts relais.get_cooling
105
+ puts led.get_led
106
+
107
+ log.addContent(relais.get_heating)
108
+ log.addContent(relais.get_cooling)
109
+ log.addContent(led.get_fcolor)
110
+
111
+ transport.send_color(led.get_color)
112
+ end
113
+ transport.get_connection
114
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'led.rb'
2
+ require_relative 'relais.rb'
3
+ require_relative 'log.rb'
4
+ require_relative 'temperature.rb'
5
+ require_relative 'web.rb'
6
+ require_relative 'transport.rb'
7
+ require_relative 'user_input.rb'
data/lib/led.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'colorize'
2
+
3
+ class Led
4
+ def check_led(temp, set, range)
5
+ if(temp < (set - range))
6
+ @color = "0000FF".colorize(:blue)
7
+ @fcolor = "0000FF"
8
+ elsif(temp > (set + range))
9
+ @color = "FF0000".colorize(:red)
10
+ @fcolor = "FF0000"
11
+ else
12
+ @color = "00FF00".colorize(:green)
13
+ @fcolor = "00FF00"
14
+ end
15
+ end
16
+
17
+ def get_led
18
+ "The LED is #{@color}"
19
+ end
20
+
21
+ def get_color
22
+ return @fcolor
23
+ end
24
+
25
+ def get_fcolor
26
+ "The LED is #{@fcolor}"
27
+ end
28
+ end
data/lib/log.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'date'
2
+
3
+ class Log
4
+ def initialize()
5
+ @file = "log.txt"
6
+ end
7
+
8
+ def addContent(content)
9
+ date = Time.now.strftime("%d/%m/%Y %H:%M")
10
+ File.open(@file, 'a+') do |file|
11
+ file.puts("#{date}: \n")
12
+ file.puts("#{content} \n")
13
+ file.puts("\n")
14
+ end
15
+ end
16
+ end
data/lib/relais.rb ADDED
@@ -0,0 +1,22 @@
1
+ class Relais
2
+ def set(temp, set, range)
3
+ if temp < (set - range)
4
+ @heating = true
5
+ @cooling = false
6
+ elsif temp > (set + range)
7
+ @heating = false
8
+ @cooling = true
9
+ else
10
+ @heating = false
11
+ @cooling = false
12
+ end
13
+ end
14
+
15
+ def get_heating
16
+ "The heating is #{@heating}"
17
+ end
18
+
19
+ def get_cooling
20
+ "The cooling is #{@cooling}"
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ class Temperature
2
+ def convert(temp, unit)
3
+ if(unit == "C")
4
+ @temp = temp
5
+ elsif(unit == "K")
6
+ # normally it need to be '273.15', but if we do this the led will never
7
+ # be "green"
8
+ @temp = temp - 273
9
+ elsif(unit == "F")
10
+ @temp = ((temp - 32) * 5 / 9)
11
+ else
12
+ @temp = temp
13
+ end
14
+ end
15
+ end
data/lib/transport.rb ADDED
@@ -0,0 +1,30 @@
1
+ require 'mqtt'
2
+ require 'json'
3
+
4
+ class Transport
5
+ def get_connection
6
+ puts "MQTT:"
7
+ temperature_topic = 'softwareengineering/thermostat/cfbnik/temperature'
8
+ MQTT::Client.connect('mqtt.labict.be') do |client|
9
+ while(true)
10
+ client.get(temperature_topic) do |topic, message|
11
+ json = message
12
+ hash = JSON.parse(json)
13
+ temp = (hash["temperature"]).to_f
14
+ @on_change_block.call(temp) unless @on_change_block.nil?
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ def on_change &block
21
+ @on_change_block = block
22
+ end
23
+
24
+ def send_color(color)
25
+ connection = MQTT::Client.connect('mqtt.labict.be')
26
+ my_hash = {"color" => color}
27
+ payload = JSON.generate(my_hash) # convert my_hash to JSON
28
+ connection.publish('softwareengineering/thermostat/cfbnik/led', payload, retain = false)
29
+ end
30
+ end
data/lib/user_input.rb ADDED
@@ -0,0 +1,31 @@
1
+ class UserInput
2
+ def askData
3
+ puts "Enter the temperature:"
4
+ @temp = gets.chomp.to_f
5
+
6
+ puts "Enter the wanted temperature:"
7
+ @set = gets.chomp.to_f
8
+
9
+ puts "Enter the unit:"
10
+ @unit = gets.chomp
11
+
12
+ puts "Enter the range:"
13
+ @range = gets.chomp.to_f
14
+ end
15
+
16
+ def get_temp
17
+ return @temp
18
+ end
19
+
20
+ def get_set
21
+ return @set
22
+ end
23
+
24
+ def get_unit
25
+ return @unit
26
+ end
27
+
28
+ def get_range
29
+ return @range
30
+ end
31
+ end
data/lib/web.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'openssl'
2
+ require 'open-uri'
3
+
4
+ OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
5
+
6
+ class Web
7
+ def url
8
+ @temp = (URI.parse("https://labict.be/software-engineering/temperature/api/temperature/fake").read).to_f
9
+ puts @temp
10
+ return @temp
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alex-vancoillie-thermostat-exercise
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Alex Vancoillie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-09 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A thermostat gem
14
+ email: alex.vancoillie@student.vives.be
15
+ executables:
16
+ - app
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/app
21
+ - lib/alex-vancoillie-thermostat-exercise.rb
22
+ - lib/led.rb
23
+ - lib/log.rb
24
+ - lib/relais.rb
25
+ - lib/temperature.rb
26
+ - lib/transport.rb
27
+ - lib/user_input.rb
28
+ - lib/web.rb
29
+ homepage: http://git.labict.be/alexvancoillie/Ruby_Temperature
30
+ licenses:
31
+ - MIT
32
+ metadata: {}
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubyforge_project:
49
+ rubygems_version: 2.5.2
50
+ signing_key:
51
+ specification_version: 4
52
+ summary: Thermostat
53
+ test_files: []