lights 0.8.11 → 0.8.12

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzY0NTEyM2NiOWQ0Y2FjOGVlMTU5NmU0MDE2NTZiZjFhNGYxZGFjYg==
4
+ ZmRlODZhMWNjYzYyY2Y3ZWU4M2M4NmI0MzNjYWFmOTZlOTFmNWViNw==
5
5
  data.tar.gz: !binary |-
6
- ZDYxNGU5OWQxMzk4NzZjYzQ3ZTAxMzllYmM4YjEzZjQwMmViMzdmOA==
6
+ MWI3MDc4ZmZlZjI1OWEyNTBjYjcwMTJmZGRhOTg2ZmQ0M2U1YTY5YQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MjY3ZjJjNjU5ZDUzNGUzNTI5NWU3YmY4NDNkMmNhMGMyYTU0NDNkZTZkNTEw
10
- OTk1ODg3ZWQ3NDIyNjE5MDgxNzNiOGFmMTZlOTc1ODE1ZjMzMDUzZmQ4NjFl
11
- NzA0NDMxNzIxMDljMzUyYjIxYTMxMGViYTk2OWI5MzkzOGU3MTU=
9
+ Y2NjYzcwMjA1M2Y0NmI4OTY5MmZiYTdjMjU1ZWFhNWQ3ZTFhNWMxN2U2YTM0
10
+ YmFkMDBkYzhjNjA3ODA2ZWE4NmExOWZmZDY3OTYzZGJkOTMzMmFhNmE5YTRl
11
+ NWQzMzU2NGNhYmY3MDJiOGNjNmFkM2QwYWU4NjkwNzA3M2FkYTM=
12
12
  data.tar.gz: !binary |-
13
- ZjJhZTA3NGU5NzZlZjVhMzQ3YTI4YzkwZGQ1MDM2N2ZmMjgzM2ViMDM3ZWFh
14
- YjFkMDFlMzJmZGZlNmRjMmMyZTJhZjM3MTFiMTZjODVhYjRiZTZkOTEyMjM3
15
- NzI4NWY1OWIyMWMzNDk0YjE5YjcxODUwNmY0ZWFkZmUwNTJlMDk=
13
+ YzA4YWNlZWZmZTMwZWI4NDIyM2ZhZjM0NjY0Yzg0YjQ0MmY3YWVmODFkY2Qy
14
+ NWIwMWU5ZTc3MzBmNjM4OGEyNTFkY2ExODM1NzlkNWQxZmU4ZTJhMzE3MDgz
15
+ ODQzZmY0OTJlZDY0MTkyNzdiODE3OGQxMWUxN2RmNmM1ZjFiMDU=
data/bin/lights CHANGED
@@ -92,11 +92,59 @@ class LightsCli
92
92
  end
93
93
  end
94
94
 
95
- def delete
95
+ def edit
96
96
  type = ARGV.shift
97
97
  hue = Lights.new @config["bridge_ip"], @config["username"]
98
98
  options = {}
99
99
 
100
+ case type
101
+ when "light"
102
+ id = ARGV.shift
103
+ if !id
104
+ puts "Must specify light id."
105
+ exit 1
106
+ end
107
+
108
+ OptionParser.new do |opts|
109
+ opts.on("--name", "--name <name>", String, "Set light name"){|n| options[:name]=n}
110
+ end.parse!
111
+ if !options[:name]
112
+ puts "Must specify new light name."
113
+ exit 1
114
+ end
115
+
116
+ light = Bulb.new(id,{"name"=>options[:name]})
117
+ hue.edit_bulb light
118
+ when "group"
119
+ id = ARGV.shift
120
+ if !id
121
+ puts "Must specify group id."
122
+ exit 1
123
+ end
124
+
125
+ OptionParser.new do |opts|
126
+ opts.on("--name", "--name <name>", String, "Set light name"){|n| options[:name]=n}
127
+ opts.on("-l", "--lights 1,2,...N", Array, "Which lights to put in group"){|l| options[:lights]=l}
128
+ end.parse!
129
+ if !options[:name] && !options[:lights]
130
+ puts "Must specify a value to edit."
131
+ exit 1
132
+ end
133
+ group = Group.new(id)
134
+ group.name = options[:name] if options[:name]
135
+ group.lights = options[:lights] if options[:lights]
136
+ hue.edit_group group
137
+ when nil
138
+ STDERR.puts "Must specify a type to edit."
139
+ else
140
+ STDERR.puts "Don't know how to edit type \"#{type}\"."
141
+ end
142
+ end
143
+
144
+ def delete
145
+ type = ARGV.shift
146
+ hue = Lights.new @config["bridge_ip"], @config["username"]
147
+
100
148
  case type
101
149
  when "group"
102
150
  id = ARGV.shift
@@ -132,17 +180,18 @@ class LightsCli
132
180
  options = {}
133
181
  OptionParser.new do |opts|
134
182
  opts.on("-j", "--json", "Print JSON response"){|j| options[:json] = j}
183
+ opts.on("-n", "--new", "Only list new"){|n| options[:new] = n}
135
184
  end.parse!
136
185
 
137
186
  type = ARGV.shift
138
187
  case type
139
188
  when nil, "","lights"
140
- response = hue.request_bulb_list
189
+ response = options[:new] ? hue.request_new_bulb_list : hue.request_bulb_list
141
190
  response.each{|id,value| objects << hue.request_bulb_info( id )}
142
191
  titles = ["ID","NAME"]
143
192
  methods = [:id,:name]
144
193
  when "sensors"
145
- response = hue.request_sensor_list
194
+ response = options[:new] ? hue.request_new_sensor_list : hue.request_sensor_list
146
195
  response.each { |id,value| objects << hue.request_sensor_info( id )}
147
196
  titles = ["ID","NAME"]
148
197
  methods = [:id,:name]
@@ -305,6 +354,16 @@ class LightsCli
305
354
  end
306
355
  end
307
356
 
357
+ def search
358
+ lights = Lights.new @config["bridge_ip"], @config["username"]
359
+ response = lights.search_new
360
+ if response.first["success"]
361
+ puts "Started search."
362
+ else
363
+ puts "Unknown error. Did not begin search."
364
+ end
365
+ end
366
+
308
367
  private
309
368
  def set_bulb_state(state,bulbs)
310
369
  lights = Lights.new @config["bridge_ip"], @config["username"]
@@ -343,7 +402,7 @@ end
343
402
 
344
403
 
345
404
  if !ARGV[0]
346
- STDERR.puts "Must specify a command. (config, list, register, discover, on, off, set, create, delete)"
405
+ STDERR.puts "Must specify a command. (config, list, register, discover, search, on, off, set, create, edit, delete)"
347
406
  exit 1
348
407
  end
349
408
 
@@ -370,11 +429,16 @@ begin
370
429
  cli.create
371
430
  elsif command == "delete"
372
431
  cli.delete
432
+ elsif command == "edit"
433
+ cli.edit
434
+ elsif command == "search"
435
+ cli.search
373
436
  else
374
437
  puts "Cannot find command #{command}."
375
438
  end
376
439
  rescue BridgeConnectException,
377
440
  UsernameException,
441
+ ResourceUnavailableException,
378
442
  BulbStateValueOutOfRangeException,
379
443
  BulbStateValueTypeException => e
380
444
  puts e.message
data/lib/lights.rb CHANGED
@@ -57,10 +57,22 @@ class Lights
57
57
  @bulbs << Bulb.new( id, bulb_data )
58
58
  end
59
59
 
60
+ def search_new
61
+ post "lights"
62
+ end
63
+
60
64
  def request_bulb_list
61
65
  get "lights"
62
66
  end
63
67
 
68
+ def request_new_bulb_list
69
+ get "lights/new"
70
+ end
71
+
72
+ def request_new_sensor_list
73
+ get "sensors/new"
74
+ end
75
+
64
76
  def request_bulb_info( id )
65
77
  response = get "lights/#{id}"
66
78
  Bulb.new(id,response)
@@ -124,6 +136,14 @@ class Lights
124
136
  delete "groups/#{id}"
125
137
  end
126
138
 
139
+ def edit_bulb( bulb )
140
+ put "lights/#{bulb.id}", bulb
141
+ end
142
+
143
+ def edit_group( group )
144
+ put "groups/#{group.id}", group
145
+ end
146
+
127
147
  def delete_user( username )
128
148
  delete "config/whitelist/#{username}"
129
149
  end
@@ -134,10 +154,12 @@ private
134
154
  case type
135
155
  when 1
136
156
  raise UsernameException
157
+ when 3
158
+ raise ResourceUnavailableException, result["error"]["description"]
137
159
  when 101
138
160
  raise BridgeConnectException
139
161
  else
140
- puts "Unknown Error."
162
+ raise "Unknown Error: #{result["error"]["description"]}"
141
163
  end
142
164
  end
143
165
 
@@ -154,7 +176,7 @@ private
154
176
  result
155
177
  end
156
178
 
157
- def put( path, data )
179
+ def put( path, data={} )
158
180
  @logger.debug "==> PUT: #{path}"
159
181
  @logger.debug data.to_json
160
182
  response = @http.put( "/api/#{@username}/#{path}", data.to_json )
@@ -163,7 +185,7 @@ private
163
185
  JSON.parse response.body
164
186
  end
165
187
 
166
- def post( path, data )
188
+ def post( path, data={} )
167
189
  @logger.debug "==> POST: #{path}"
168
190
  @logger.debug data.to_json
169
191
  response = @http.post( "/api/#{@username}/#{path}", data.to_json )
@@ -21,3 +21,9 @@ class BulbStateValueTypeException < Exception
21
21
  super
22
22
  end
23
23
  end
24
+
25
+ class ResourceUnavailableException < Exception
26
+ def initialize(msg = "ResourceUnavailable")
27
+ super
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module LightsConst
2
- VERSION = "0.8.11"
2
+ VERSION = "0.8.12"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lights
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.11
4
+ version: 0.8.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brady Turner