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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a99a3623251e1d3a912fe40894936a22b14fb1b1
4
- data.tar.gz: 1340b44c08f9a2367b1da7e999fbbea6f46e10a1
3
+ metadata.gz: 6e5259700881085205481c34338397602ab0c167
4
+ data.tar.gz: 6595615983c9aa45463c4ecc6b38edb1c049852e
5
5
  SHA512:
6
- metadata.gz: 12e17299139449ac3a03380e58df09517d933cb289b14793568ded8fc06ce7df51a0c64a5d25c84523addf447912a4b4deadafd62f28a621e906e6c468acc8f9
7
- data.tar.gz: 1cd46185bde20e5bb5caff189c283dc61ad17da6ffbbc44f956ebf79574ec1a0f8cff8ee13ccb8b1715370f04e0e01dbf3cb9c80edaf4196f0bf941f0b186586
6
+ metadata.gz: 6bfd85b6e3e227d5366585fc467d97593eeaba79147b69fdbca978e9f7f3023a9c1ea62a5b93615c3a2ca6e7ede24d5d9ba95df9ed902a1389918f8f6f938371
7
+ data.tar.gz: ad7c7b641b5262038958ca581a396d75e40468366e4c79ae688fa9ee778a67665f1225e27a13392559117b41cf6a48e2c581c5a8bd2585d04de104c6e24ca949
@@ -25,7 +25,7 @@ module Ecobee
25
25
  }
26
26
 
27
27
  attr_accessor :client
28
- attr_reader :auto_refresh, :orig_response
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 = [@orig_response['settings']['coolRangeLow'] / 10,
58
+ low_range = [unitize(self[:settings][:coolRangeLow]),
57
59
  desired_heat + heat_cool_min_delta].max
58
60
  else
59
- low_range = @orig_response['settings']['coolRangeLow'] / 10
61
+ low_range = unitize(self[:settings][:coolRangeLow])
60
62
  end
61
- (low_range..@orig_response['settings']['coolRangeHigh'] / 10)
63
+ to_range(low_range, unitize(self[:settings][:coolRangeHigh]))
62
64
  end
63
65
 
64
- def heat_cool_min_delta
65
- @orig_response['settings']['heatCoolMinDelta'] / 10
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
- @orig_response['runtime']['desiredCool'] / 10
75
+ unitize(self[:runtime][:desiredCool])
70
76
  end
71
77
 
72
78
  def desired_cool=(temp)
73
- set_hold(cool_hold_temp: temp.to_i * 10)
79
+ set_hold(cool_hold_temp: temp)
74
80
  end
75
81
 
76
82
  def desired_fan_mode
77
- @orig_response['runtime']['desiredFanMode']
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
- @orig_response['runtime']['desiredHeat'] / 10
91
+ unitize(self[:runtime][:desiredHeat])
86
92
  end
87
93
 
88
94
  def desired_heat=(temp)
89
- set_hold(heat_hold_temp: temp.to_i * 10)
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..desired_cool)
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 = [@orig_response['settings']['heatRangeHigh'] / 10,
109
+ high_range = [unitize(self[:settings][:heatRangeHigh]),
99
110
  desired_cool - heat_cool_min_delta].min
100
111
  else
101
- high_range = @orig_response['settings']['heatRangeHigh'] / 10
112
+ high_range = unitize(self[:settings][:heatRangeHigh])
102
113
  end
103
- (@orig_response['settings']['heatRangeLow'] / 10..high_range)
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
- @orig_response['settings']['hvacMode']
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(@orig_response['modelNumber'])
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' => @orig_response['identifier']
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
- @orig_response['name']
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
- @orig_response = response['thermostatList'][@index]
164
+ list = response['thermostatList'][@index]
150
165
 
151
- self.replace(@to_sym ? to_sym(@orig_response) : @orig_response)
166
+ self.replace list.merge(to_sym(list))
152
167
  end
153
168
 
154
- def humidity
155
- @orig_response['runtime']['actualHumidity']
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
- @orig_response['runtime']['actualTemperature'] / 10.0
189
+ unitize(self[:runtime][:actualTemperature])
160
190
  end
161
191
 
162
- def to_sym?
163
- @to_sym
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 set_hold(
183
- cool_hold_temp: @orig_response['runtime']['desiredCool'],
184
- fan: nil,
185
- heat_hold_temp: @orig_response['runtime']['desiredHeat'],
186
- hold_type: 'nextTransition'
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
- def set_mode(mode)
199
- update(thermostat: { 'settings' => { 'hvacMode' => mode } })
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(
@@ -1,3 +1,3 @@
1
1
  module Ecobee
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecobee
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Zwissler