ecobee 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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