IVAN-MIRANIKHIN-thermostat-exercise 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/IVAN-MIRANIKHIN-thermostat-exercise +84 -0
- data/lib/IVAN-MIRANIKHIN-thermostat-exercise.rb +5 -0
- data/lib/color.rb +27 -0
- data/lib/example.rb +18 -0
- data/lib/file.rb +47 -0
- data/lib/heater.rb +21 -0
- data/lib/led.rb +21 -0
- data/lib/temperatur.rb +32 -0
- data/lib/termostat.rb +25 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -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
|
data/lib/color.rb
ADDED
@@ -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
|
data/lib/example.rb
ADDED
@@ -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
|
data/lib/file.rb
ADDED
@@ -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
|
data/lib/heater.rb
ADDED
@@ -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
|
data/lib/led.rb
ADDED
@@ -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
|
data/lib/temperatur.rb
ADDED
@@ -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
|
data/lib/termostat.rb
ADDED
@@ -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: []
|