IVAN-MIRANIKHIN-thermostat-exercise 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3c2433c15c7c976f6fc349ac63e71d12f478d35a
4
+ data.tar.gz: 93a45e7d8d906eac71d9d561b58a30f53d258a07
5
+ SHA512:
6
+ metadata.gz: 347dc4b0df1d03ff30bc9c5a83a6b9b89da6e391e7056576e338f1b39dc02be4754e4e865811a1c875bec32bea60690d82d0f7b7d80fe17b246e292d553b8bed
7
+ data.tar.gz: e57cc6d2c776ea8bdc58e839e3680cf9e8a8bbd352fca3fcfdce29ca171600b49b581ea447ac95386cdbf4b29b218c36c7c981f6d2da81886697e660cbf08d9f
@@ -0,0 +1,84 @@
1
+ require 'IVAN-MIRANIKHIN-thermostat-exercise'
2
+ require 'optparse'
3
+
4
+ heater = Heater.new()
5
+ file = Reader.new()
6
+ led = Led.new()
7
+
8
+ choise = {:scale => nil,:range => 0,:normal => 20,:use => nil,:temperature =>0}
9
+
10
+ OptionParser.new do |opts|
11
+ opts.banner = "Usage: termostat.rb [options]"
12
+
13
+ opts.on("-t", "--temperature t",Float, "Temperature") do |temperature|
14
+ choise[:temperature] = temperature
15
+ end
16
+
17
+ opts.on("-s", "--scale s", String, "Scale (Celcius, Kelvin, Farenheit)")do |scale|
18
+ choise[:scale] = scale
19
+ end
20
+
21
+ opts.on("-r", "--range r", Float, "Range")do |range|
22
+ choise[:range] = range
23
+ end
24
+
25
+ opts.on("-n", "--normal n", Float, "Normal temperature")do |normal|
26
+ choise[:normal] = normal
27
+ end
28
+
29
+ opts.on("-u", "--use u", String, "Method (MQTT, MQTTP, url, user)")do |use|
30
+ choise[:use] = use
31
+ end
32
+ end.parse!
33
+
34
+ case choise[:use]
35
+
36
+ when "MQTT"
37
+ file.on_change do |temperature|
38
+ termo = Termostat.new(choise[:range],choise[:normal])
39
+
40
+ termo.temperature = Temperatuur.new($temperature, choise[:scale])
41
+
42
+ led.check_led(termo.check_temp(heater))
43
+ puts $temperature
44
+ puts led.color.kleur
45
+ puts "Heating is " + heater.heating
46
+ puts "Cooling is " + heater.cooling
47
+ end
48
+ file.connect
49
+
50
+ when "MQTTP"
51
+ termo = Termostat.new(choise[:range],choise[:normal])
52
+ $temperature = choise[:temperature]
53
+ termo.temperature = Temperatuur.new($temperature, choise[:scale])
54
+
55
+ led.check_led(termo.check_temp(heater))
56
+ file.send(led.color.kleur)
57
+
58
+ when "url"
59
+ OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
60
+ $temperature = file.get_temp('https://labict.be/software-engineering/temperature/api/temperature/fake')
61
+
62
+ when "user"
63
+ $temperature = choise[:temperature]
64
+ puts $temperature
65
+ else
66
+ puts "invalig input"
67
+ end
68
+
69
+
70
+
71
+ if(choise[:use] != "MQTT" and choise[:use] != "MQTTP")
72
+
73
+
74
+ termo = Termostat.new(choise[:range],choise[:normal])
75
+
76
+ termo.temperature = Temperatuur.new($temperature, choise[:scale])
77
+
78
+ led.check_led(termo.check_temp(heater))
79
+ puts $temperature
80
+ puts led.color.kleur
81
+ puts "Heatin is " + heater.heating
82
+ puts "Cooling is " + heater.cooling
83
+
84
+ end
@@ -0,0 +1,5 @@
1
+
2
+ require_relative 'temperatur.rb'
3
+ require_relative 'termostat.rb'
4
+ require_relative 'file.rb'
5
+ require 'optparse'
@@ -0,0 +1,27 @@
1
+ class Color
2
+ attr_accessor :kleur,:temp
3
+ def initialize(kleur,temp)
4
+ @temp = temp
5
+ get_kolor(kleur)
6
+ end
7
+
8
+ def get_kolor(kleur)
9
+ if kleur == "Red"
10
+ @kleur = @temp.to_i.to_s(16) + "0000"
11
+ if @kleur.length == 5
12
+ @kleur = @temp.to_i.to_s(16) + @kleur
13
+ end
14
+ end
15
+ if kleur == "Blue"
16
+ @kleur = @temp.to_i.abs.to_s(16) +"ff"
17
+ if @kleur.length == 3
18
+ @kleur = @temp.to_i.abs.to_s(16) + @kleur
19
+ end
20
+ @kleur = "00" + @kleur
21
+ end
22
+ if kleur == "Green"
23
+ @kleur = "00ff00"
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,18 @@
1
+ require 'optparse'
2
+
3
+ options = {}
4
+ OptionParser.new do |opts|
5
+ opts.banner = "Usage: example.rb [options]"
6
+
7
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
8
+ options[:verbose] = v
9
+ end
10
+
11
+ opts.on("-l", "--lox L", String, "Says who you are")do |lox|
12
+
13
+ p lox
14
+ end
15
+ end.parse!
16
+
17
+ p options
18
+ #p ARGV
@@ -0,0 +1,47 @@
1
+ require 'net/https'
2
+ require 'uri'
3
+ require 'open-uri'
4
+ require 'json'
5
+
6
+ class Reader
7
+
8
+ def initialize()
9
+
10
+ end
11
+
12
+ def get_temp(link)
13
+ file = open(link)
14
+ $temperature = file.read
15
+ $temperature = $temperature.to_f
16
+ end
17
+
18
+ def on_change &block
19
+ @on_change_block = block
20
+ end
21
+
22
+ def send(color)
23
+ require "mqtt"
24
+ client2 = MQTT::Client.connect('mqtt.labict.be')
25
+ data = {"color" => color}
26
+ payload = JSON.generate(data)
27
+ client2.publish('softwareengineering/thermostat/Nigga/led', payload, retain=false)
28
+ end
29
+
30
+ def connect
31
+ require "mqtt"
32
+
33
+ temperature_topic = 'softwareengineering/temperature/mbed'
34
+
35
+ MQTT::Client.connect('mqtt.labict.be') do |client|
36
+ while true
37
+ client.get(temperature_topic) do |topic,message|
38
+ json = JSON.parse(message)
39
+ $temperature = (json["temperature"]).to_f
40
+ @on_change_block.call($temperature) unless @on_change_block.nil?
41
+ #puts $temperature
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,21 @@
1
+ class Heater
2
+ attr_accessor :heating,:cooling;
3
+ def initialize()
4
+ end
5
+
6
+ def set_heating()
7
+ @cooling = "off"
8
+ @heating = "on"
9
+ end
10
+
11
+ def set_cooling()
12
+ @cooling = "on"
13
+ @heating = "off"
14
+ end
15
+
16
+ def turn_off()
17
+ @cooling = "off"
18
+ @heating = "off"
19
+ end
20
+
21
+ end
@@ -0,0 +1,21 @@
1
+ require_relative 'color.rb'
2
+ class Led
3
+ attr_accessor :color
4
+ def initialize()
5
+
6
+ end
7
+
8
+ def check_led(temp)
9
+ if temp>(0)
10
+ @color = Color.new("Red",temp)
11
+
12
+ elsif temp<(0)
13
+ @color = Color.new("Blue",temp)
14
+
15
+ elsif temp == 0
16
+ @color = Color.new("Green",temp)
17
+ end
18
+ end
19
+
20
+
21
+ end
@@ -0,0 +1,32 @@
1
+
2
+ class Temperatuur
3
+ attr_accessor :temp, :scale
4
+
5
+
6
+ def initialize (temp, scale)
7
+ check(temp,scale);
8
+ end
9
+
10
+ # Return the temperature value in degrees celsius
11
+ # It is also needed to provide the scale in wich the temperature is displayed
12
+ # @return [Number] temperature in degrees celsius
13
+ # @example
14
+ # temperature = Temperatuure.new 374,Kelvin
15
+
16
+ def check(temp,scale)
17
+ if scale == "Celcius"
18
+ @temp = temp
19
+
20
+ elsif scale == "Farenheit"
21
+ @temp = ((temp-32)*5/9)
22
+
23
+ elsif scale == "Kelvin"
24
+ @temp = temp - 273.15
25
+ else
26
+ puts "nope"
27
+ @temp = temp
28
+ end
29
+ end
30
+
31
+
32
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'led.rb'
2
+ require_relative 'heater.rb'
3
+ class Termostat
4
+ attr_accessor :verschill, :temperature, :range, :normal
5
+
6
+ def initialize(range, normal)
7
+ @range = range
8
+ @normal = normal
9
+ end
10
+
11
+ def check_temp(h)
12
+ if @temperature.temp>(@normal+@range)
13
+ h.set_cooling
14
+ @verschill = @temperature.temp - @normal
15
+
16
+ elsif @temperature.temp<(@normal-@range)
17
+ h.set_heating
18
+ @verschill = @temperature.temp - @normal
19
+
20
+ elsif (@normal-@range)<@temperature.temp and @temperature.temp<(@temperature.temp+@range)
21
+ h.turn_off
22
+ @verschill = 0
23
+ end
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: IVAN-MIRANIKHIN-thermostat-exercise
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Ivan Miranikhin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-20 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Thermostat gem
14
+ email: ivan.miranikhin@student.vives.be
15
+ executables:
16
+ - IVAN-MIRANIKHIN-thermostat-exercise
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/IVAN-MIRANIKHIN-thermostat-exercise
21
+ - lib/IVAN-MIRANIKHIN-thermostat-exercise.rb
22
+ - lib/color.rb
23
+ - lib/example.rb
24
+ - lib/file.rb
25
+ - lib/heater.rb
26
+ - lib/led.rb
27
+ - lib/temperatur.rb
28
+ - lib/termostat.rb
29
+ homepage: http://git.labict.be/ivanmiranikhin/termostat
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: []