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 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