ecobee 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ecobee/thermostat.rb +79 -45
- data/lib/ecobee/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e5259700881085205481c34338397602ab0c167
|
4
|
+
data.tar.gz: 6595615983c9aa45463c4ecc6b38edb1c049852e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6bfd85b6e3e227d5366585fc467d97593eeaba79147b69fdbca978e9f7f3023a9c1ea62a5b93615c3a2ca6e7ede24d5d9ba95df9ed902a1389918f8f6f938371
|
7
|
+
data.tar.gz: ad7c7b641b5262038958ca581a396d75e40468366e4c79ae688fa9ee778a67665f1225e27a13392559117b41cf6a48e2c581c5a8bd2585d04de104c6e24ca949
|
data/lib/ecobee/thermostat.rb
CHANGED
@@ -25,7 +25,7 @@ module Ecobee
|
|
25
25
|
}
|
26
26
|
|
27
27
|
attr_accessor :client
|
28
|
-
attr_reader :auto_refresh
|
28
|
+
attr_reader :auto_refresh
|
29
29
|
|
30
30
|
def initialize(
|
31
31
|
auto_refresh: 0,
|
@@ -35,13 +35,11 @@ module Ecobee
|
|
35
35
|
fake_max_index: 0,
|
36
36
|
selection: nil,
|
37
37
|
selection_args: {},
|
38
|
-
token: nil
|
39
|
-
to_sym: true
|
38
|
+
token: nil
|
40
39
|
)
|
41
40
|
@auto_refresh = auto_refresh
|
42
41
|
# TODO: add auto-refresh thread handling
|
43
42
|
@client = client || Ecobee::Client.new(token: token)
|
44
|
-
@to_sym = to_sym
|
45
43
|
@fake_index = fake_index
|
46
44
|
@fake_max_index = fake_max_index
|
47
45
|
@index = index
|
@@ -51,30 +49,38 @@ module Ecobee
|
|
51
49
|
refresh
|
52
50
|
end
|
53
51
|
|
52
|
+
def celsius?
|
53
|
+
self[:settings][:useCelsius]
|
54
|
+
end
|
55
|
+
|
54
56
|
def cool_range(with_delta: false)
|
55
57
|
if with_delta
|
56
|
-
low_range = [
|
58
|
+
low_range = [unitize(self[:settings][:coolRangeLow]),
|
57
59
|
desired_heat + heat_cool_min_delta].max
|
58
60
|
else
|
59
|
-
low_range =
|
61
|
+
low_range = unitize(self[:settings][:coolRangeLow])
|
60
62
|
end
|
61
|
-
(low_range
|
63
|
+
to_range(low_range, unitize(self[:settings][:coolRangeHigh]))
|
62
64
|
end
|
63
65
|
|
64
|
-
def
|
65
|
-
|
66
|
+
def dump(pretty: true)
|
67
|
+
if pretty
|
68
|
+
self.select { |k, v| k.is_a? Symbol }.pretty_inspect
|
69
|
+
else
|
70
|
+
self.select { |k, v| k.is_a? Symbol }
|
71
|
+
end
|
66
72
|
end
|
67
73
|
|
68
74
|
def desired_cool
|
69
|
-
|
75
|
+
unitize(self[:runtime][:desiredCool])
|
70
76
|
end
|
71
77
|
|
72
78
|
def desired_cool=(temp)
|
73
|
-
set_hold(cool_hold_temp: temp
|
79
|
+
set_hold(cool_hold_temp: temp)
|
74
80
|
end
|
75
81
|
|
76
82
|
def desired_fan_mode
|
77
|
-
|
83
|
+
self[:runtime][:desiredFanMode]
|
78
84
|
end
|
79
85
|
|
80
86
|
def desired_fan_mode=(fan)
|
@@ -82,25 +88,34 @@ module Ecobee
|
|
82
88
|
end
|
83
89
|
|
84
90
|
def desired_heat
|
85
|
-
|
91
|
+
unitize(self[:runtime][:desiredHeat])
|
86
92
|
end
|
87
93
|
|
88
94
|
def desired_heat=(temp)
|
89
|
-
|
95
|
+
# need celcius un_unitize
|
96
|
+
set_hold(heat_hold_temp: temp)
|
90
97
|
end
|
91
98
|
|
92
99
|
def desired_range
|
93
|
-
(desired_heat
|
100
|
+
to_range(desired_heat, desired_cool)
|
101
|
+
end
|
102
|
+
|
103
|
+
def heat_cool_min_delta
|
104
|
+
unitize(self[:settings][:heatCoolMinDelta])
|
94
105
|
end
|
95
106
|
|
96
107
|
def heat_range(with_delta: false)
|
97
108
|
if with_delta
|
98
|
-
high_range = [
|
109
|
+
high_range = [unitize(self[:settings][:heatRangeHigh]),
|
99
110
|
desired_cool - heat_cool_min_delta].min
|
100
111
|
else
|
101
|
-
high_range =
|
112
|
+
high_range = unitize(self[:settings][:heatRangeHigh])
|
102
113
|
end
|
103
|
-
(
|
114
|
+
to_range(unitize(self[:settings][:heatRangeLow]), high_range)
|
115
|
+
end
|
116
|
+
|
117
|
+
def humidity
|
118
|
+
self[:runtime][:actualHumidity]
|
104
119
|
end
|
105
120
|
|
106
121
|
def index
|
@@ -112,7 +127,7 @@ module Ecobee
|
|
112
127
|
end
|
113
128
|
|
114
129
|
def mode
|
115
|
-
|
130
|
+
self[:settings][:hvacMode]
|
116
131
|
end
|
117
132
|
|
118
133
|
def mode=(mode)
|
@@ -120,14 +135,14 @@ module Ecobee
|
|
120
135
|
end
|
121
136
|
|
122
137
|
def model
|
123
|
-
Ecobee::Model(
|
138
|
+
Ecobee::Model(self[:modelNumber])
|
124
139
|
end
|
125
140
|
|
126
141
|
def my_selection
|
127
142
|
{
|
128
143
|
'selection' => {
|
129
144
|
'selectionType' => 'thermostats',
|
130
|
-
'selectionMatch' =>
|
145
|
+
'selectionMatch' => self[:identifier]
|
131
146
|
}
|
132
147
|
}
|
133
148
|
end
|
@@ -136,7 +151,7 @@ module Ecobee
|
|
136
151
|
if @fake_index
|
137
152
|
"Fake No. #{@fake_index}"
|
138
153
|
else
|
139
|
-
|
154
|
+
self[:name]
|
140
155
|
end
|
141
156
|
end
|
142
157
|
|
@@ -146,21 +161,41 @@ module Ecobee
|
|
146
161
|
raise ThermostatError.new('No such thermostat')
|
147
162
|
end
|
148
163
|
@max_index = response['thermostatList'].length - 1
|
149
|
-
|
164
|
+
list = response['thermostatList'][@index]
|
150
165
|
|
151
|
-
self.replace(
|
166
|
+
self.replace list.merge(to_sym(list))
|
152
167
|
end
|
153
168
|
|
154
|
-
def
|
155
|
-
|
169
|
+
def set_hold(
|
170
|
+
cool_hold_temp: unitize(self[:runtime][:desiredCool]),
|
171
|
+
fan: nil,
|
172
|
+
heat_hold_temp: unitize(self[:runtime][:desiredHeat]),
|
173
|
+
hold_type: 'nextTransition'
|
174
|
+
)
|
175
|
+
params = {
|
176
|
+
'holdType' => 'nextTransition',
|
177
|
+
'coolHoldTemp' => un_unitize(cool_hold_temp),
|
178
|
+
'heatHoldTemp' => un_unitize(heat_hold_temp)
|
179
|
+
}
|
180
|
+
params.merge!({ 'fan' => fan }) if fan
|
181
|
+
update(functions: [{ 'type' => 'setHold', 'params' => params }])
|
182
|
+
end
|
183
|
+
|
184
|
+
def set_mode(mode)
|
185
|
+
update(thermostat: { 'settings' => { 'hvacMode' => mode } })
|
156
186
|
end
|
157
187
|
|
158
188
|
def temperature
|
159
|
-
|
189
|
+
unitize(self[:runtime][:actualTemperature])
|
160
190
|
end
|
161
191
|
|
162
|
-
def
|
163
|
-
|
192
|
+
def to_range(low, high)
|
193
|
+
if celsius?
|
194
|
+
((low * 2).round..(high * 2).round).to_a
|
195
|
+
.map { |deg| deg / 2.0 }
|
196
|
+
else
|
197
|
+
(low.round..high.round).to_a
|
198
|
+
end
|
164
199
|
end
|
165
200
|
|
166
201
|
def to_sym(obj = self)
|
@@ -179,24 +214,23 @@ module Ecobee
|
|
179
214
|
end
|
180
215
|
end
|
181
216
|
|
182
|
-
def
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
params = {
|
189
|
-
'holdType' => 'nextTransition',
|
190
|
-
'coolHoldTemp' => cool_hold_temp,
|
191
|
-
'heatHoldTemp' => heat_hold_temp
|
192
|
-
}
|
193
|
-
params.merge!({ 'fan' => fan }) if fan
|
194
|
-
|
195
|
-
update(functions: [{ 'type' => 'setHold', 'params' => params }])
|
217
|
+
def un_unitize(value)
|
218
|
+
if celsius?
|
219
|
+
(((value.to_f * 9/5) + 32) * 10).round
|
220
|
+
else
|
221
|
+
(value.to_f * 10).round
|
222
|
+
end
|
196
223
|
end
|
197
224
|
|
198
|
-
|
199
|
-
|
225
|
+
# converts Ecobee farenheit * 10 integer input, returns
|
226
|
+
# farenheit or celsius output rounded to nearest .5
|
227
|
+
def unitize(value)
|
228
|
+
if celsius?
|
229
|
+
celsius = (value.to_f / 10.0 - 32) * 5/9
|
230
|
+
(celsius / 5).round(1) * 5
|
231
|
+
else
|
232
|
+
value.to_f / 10.0
|
233
|
+
end
|
200
234
|
end
|
201
235
|
|
202
236
|
def update(
|
data/lib/ecobee/version.rb
CHANGED