hue-lib 0.7.0 → 0.7.1

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.
data/hue-lib.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "hue-lib"
6
- s.version = '0.7.0'
6
+ s.version = '0.7.1'
7
7
  s.authors = ["Birkir A. Barkarson", "Aaron Hurley"]
8
8
  s.email = ["birkirb@stoicviking.net"]
9
9
  s.homepage = "https://github.com/birkirb/hue-lib"
data/lib/hue/bridge.rb CHANGED
@@ -18,6 +18,10 @@ module Hue
18
18
  index(uri)
19
19
  end
20
20
 
21
+ def add_lights
22
+ create(uri('lights'))
23
+ end
24
+
21
25
  def lights
22
26
  index(uri('lights'))
23
27
  end
@@ -35,7 +39,6 @@ module Hue
35
39
  end
36
40
 
37
41
  def bulbs
38
- # puts status['lights'].inspect
39
42
  @bulbs ||= lights.keys.map { |b| Bulb.new(self, b) }
40
43
  end
41
44
 
@@ -50,14 +53,6 @@ module Hue
50
53
  # ids.each{|x| remove_schedule x}
51
54
  # end
52
55
 
53
- def get_light_state(id)
54
- index(uri('lights', id))
55
- end
56
-
57
- def set_light_state(id, state)
58
- update(uri('lights', id, 'state'), state)
59
- end
60
-
61
56
  def register
62
57
  create(URI.parse(bridge_uri),
63
58
  {"username" => application_id, "devicetype" => Hue.device_type})
@@ -67,6 +62,18 @@ module Hue
67
62
  delete(uri('config', 'whitelist', application_id))
68
63
  end
69
64
 
65
+ def get_light(id)
66
+ index(uri('lights', id))
67
+ end
68
+
69
+ def set_light(id, property)
70
+ update(uri('lights', id), property)
71
+ end
72
+
73
+ def set_light_state(id, state)
74
+ update(uri('lights', id, 'state'), state)
75
+ end
76
+
70
77
  private
71
78
 
72
79
  def uri(*args)
@@ -95,7 +102,10 @@ module Hue
95
102
  Hue.logger.info("Sending #{payload.to_s if payload} to #{url.to_s}")
96
103
  response = nil
97
104
  begin
98
- response = Net::HTTP.new(url.host, url.port).start { |http| http.request(request) }
105
+ http = Net::HTTP.new(url.host, url.port)
106
+ http.open_timeout = 3 # Quick timeout on connection fail.
107
+ http.read_timeout = 10 # Slower timeout on read fail, but way faster than the default.
108
+ response = http.start { |http| http.request(request) }
99
109
  rescue => err
100
110
  Hue.logger.error(err.message)
101
111
  raise Hue::Error.new("Problem reaching bridge.", err)
data/lib/hue/bulb.rb CHANGED
@@ -21,7 +21,7 @@ module Hue
21
21
  end
22
22
 
23
23
  def refresh!
24
- @status = bridge.get_light_state(id)
24
+ @status = bridge.get_light(id)
25
25
  end
26
26
 
27
27
  def info
@@ -55,12 +55,12 @@ module Hue
55
55
  end
56
56
 
57
57
  def on
58
- update(on: true)
58
+ update_state(on: true)
59
59
  on?
60
60
  end
61
61
 
62
62
  def off
63
- update(on: false)
63
+ update_state(on: false)
64
64
  off?
65
65
  end
66
66
 
@@ -72,9 +72,9 @@ module Hue
72
72
 
73
73
  def brightness=(bri)
74
74
  if scale = Hue.percent_to_unit_interval(bri)
75
- update(bri: (scale * BRIGHTNESS_MAX).round)
75
+ update_state(bri: (scale * BRIGHTNESS_MAX).round)
76
76
  else
77
- update(bri: bri.to_i)
77
+ update_state(bri: bri.to_i)
78
78
  end
79
79
  brightness
80
80
  end
@@ -100,7 +100,7 @@ module Hue
100
100
  end
101
101
 
102
102
  def color=(col)
103
- update(col.to_hash)
103
+ update_state(col.to_hash)
104
104
  set_color
105
105
  end
106
106
 
@@ -113,16 +113,17 @@ module Hue
113
113
  end
114
114
 
115
115
  def blink
116
- update(alert: 'lselect')
116
+ update_state(alert: 'lselect')
117
117
  end
118
118
 
119
119
  def solid
120
- update(alert: 'none')
120
+ update_state(alert: 'none')
121
121
  end
122
122
 
123
123
  def flash
124
- update(alert: 'select')
125
- update(alert: 'none')
124
+ update_state(alert: 'select')
125
+ # immediately update to expected state
126
+ @status['state']['alert'] = 'none'
126
127
  end
127
128
 
128
129
  def transition_time
@@ -145,12 +146,23 @@ module Hue
145
146
  @color = Colors.parse_state(state)
146
147
  end
147
148
 
148
- def update(settings = {})
149
+ def update_state(settings = {})
149
150
  if bridge.set_light_state(id, options.merge(settings))
150
- if @status
151
- settings.each do |key, value|
152
- @status['state'][key.to_s] = value # or refresh!
153
- end
151
+ set_status(settings, 'state')
152
+ end
153
+ end
154
+
155
+ def update(settings = {})
156
+ if bridge.set_light(id, settings)
157
+ set_status(settings)
158
+ end
159
+ end
160
+
161
+ def set_status(settings, key = nil)
162
+ if @status
163
+ status = key ? @status[key] : @status
164
+ settings.each do |key, value|
165
+ status[key.to_s] = value
154
166
  end
155
167
  end
156
168
  end
@@ -50,6 +50,11 @@ describe Hue::Bridge do
50
50
  with_fake_delete("config/whitelist/#{TEST_APPLICATION_UUID}")
51
51
  bridge.unregister
52
52
  end
53
+
54
+ it 'should allow scanning for new lights' do
55
+ with_fake_post("#{TEST_APPLICATION_UUID}/lights")
56
+ bridge.add_lights
57
+ end
53
58
  end
54
59
 
55
60
  context 'when instantiated with a new config' do
@@ -62,6 +62,12 @@ describe Hue::Bulb do
62
62
  bulb.off.should be_true
63
63
  end
64
64
 
65
+ it 'should allow changing the name' do
66
+ with_fake_update('lights/1', name: 'New name')
67
+ bulb.name = 'New name'
68
+ bulb.name.should == 'New name'
69
+ end
70
+
65
71
  it 'should allow setting hue, saturation and brightness' do
66
72
  color = Hue::Colors::HueSaturation.new(21845, 1293)
67
73
 
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "success":{
4
+ "/lights":"Searching for new devices"
5
+ }
6
+ }
7
+ ]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hue-lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-02-04 00:00:00.000000000 Z
13
+ date: 2013-02-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -118,6 +118,7 @@ files:
118
118
  - spec/hue/config/application_spec.rb
119
119
  - spec/hue/config/bridge_spec.rb
120
120
  - spec/hue_spec.rb
121
+ - spec/json/application_uuid/lights/post_success.json
121
122
  - spec/json/config.json
122
123
  - spec/json/config/whitelist/application_uuid/delete_success.json
123
124
  - spec/json/get_success.json