lights 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NWFmMGQyNWJmYTg4Zjg1NmY5MDM5NzFiM2NkNmQzZDJlZGFkMDcxZg==
4
+ NzUzMjA0NzFlODMzNmZjODIyZGZlNTQ2NTI3Y2QxNWQ5MjhhZmQ0OA==
5
5
  data.tar.gz: !binary |-
6
- ZWQ1YTJmNTlkNGNhMzQ2ZTRjMTQ5NGEwYTZhYzFiYWMxYjc0OTE3Yg==
6
+ YzgxNTIyZGNkODQxOTJhOTI4NDdmZDAzM2VhMzY1MDFmYjhkMGFhMw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZmI2MGRiZWFjMjU2NWE5ZTkzMzcyZDE5MzEwMjA2ZjVkOGZiMTFhMzdhZjQ1
10
- NTkyZjdiNWYxNzJlNjlhYWZiZTY4MTJhODc5OGYyMmJmNzgxMjBiNmRlYmZh
11
- MmMxMWQ5MWE4ZGNjZjg4OTkyMWNmMzU5ZGU3MmQ5OTExOGM2ZGY=
9
+ MDMwNzQ0OGUxZTBjYjY1NjY2MWU3Yjg2YWNhMmExYmM1MGIzMWIyZGI3OThl
10
+ OWM1MWExYzA1YTVlNTE3NGYzN2MzYzA3MmQwNjAxMTg3YTQzOWFlMjUxMjNm
11
+ YmFlMzUyYWJmMDk2ZTFmM2QxYmY5OGQ5ZGE3NWZjYWUyZGIzZDA=
12
12
  data.tar.gz: !binary |-
13
- ZjRkZTNjMzBiN2YxMWE1NTIwMTE4YWUzODNiMjYzYmFiMTU1YzdmNWE4NGYz
14
- MTJjODg0NDI1ZTM2YzcyMjM1M2Y4YzI5ZDA3YzA3NGQ5MjIzYzExYWNmZTBm
15
- MWI1NTQ2NGFmNzQxYjQ5YTMyNjc0YWIxZDkzMTkyN2Y4ODRlZjc=
13
+ ZDRjMjE0NmE2MDVlODVkYTJmNmNhZDc3NzQ5OTkxNmQ4MGRlZWQyMzNlNGVl
14
+ YmUzOTYyMjMxZDVjOTBlNzFkZGEzMGM3OGU2MjY1YTUxMzk1YjQzZDVhYmY4
15
+ ZjA0ZGRlZTRmY2JiOGI2MmI4MjI5NzY0OThiYjRkZWYxYjk4NWQ=
data/bin/lights CHANGED
@@ -66,7 +66,69 @@ class LightsCli
66
66
  puts "Configuration settings saved."
67
67
  end
68
68
  end
69
-
69
+
70
+ def create
71
+ type = ARGV.shift
72
+ hue = Lights.new @config["bridge_ip"], @config["username"]
73
+ options = {}
74
+
75
+ case type
76
+ when "group"
77
+ OptionParser.new do |opts|
78
+ opts.on("-l", "--lights 1,2,...N", Array, "Which lights to put in group") do |l|
79
+ options[:lights] = l
80
+ end
81
+ opts.on("-n", "--name <name>", String, "Set group name") do |n|
82
+ options[:name] = n
83
+ end
84
+ end.parse!
85
+
86
+ if !options[:lights]
87
+ puts "Must specify which lights to group."
88
+ exit 1
89
+ end
90
+ if !options[:name]
91
+ puts "Must specify group name."
92
+ exit 1
93
+ end
94
+
95
+ group = Group.new
96
+ group.name = options[:name]
97
+ group.lights = options[:lights]
98
+ hue.create_group(group)
99
+ when nil
100
+ STDERR.puts "Must specify a type to create."
101
+ else
102
+ STDERR.puts "Don't know how to create type \"#{type}\"."
103
+ end
104
+ end
105
+
106
+ def delete
107
+ type = ARGV.shift
108
+ hue = Lights.new @config["bridge_ip"], @config["username"]
109
+ options = {}
110
+
111
+ case type
112
+ when "group"
113
+ OptionParser.new do |opts|
114
+ opts.on("-i", "--id <id>", String, "Group ID to delete") do |i|
115
+ options[:id] = i
116
+ end
117
+ end.parse!
118
+
119
+ if !options[:id]
120
+ puts "Must specify group id."
121
+ exit 1
122
+ end
123
+
124
+ hue.delete_group(options[:id])
125
+ when nil
126
+ STDERR.puts "Must specify a type to delete."
127
+ else
128
+ STDERR.puts "Don't know how to delete type \"#{type}\"."
129
+ end
130
+ end
131
+
70
132
  def list
71
133
  hue = Lights.new @config["bridge_ip"], @config["username"]
72
134
  if !ARGV[0] || ARGV[0] == "lights"
@@ -348,7 +410,7 @@ end
348
410
 
349
411
 
350
412
  if !ARGV[0]
351
- STDERR.puts "Must specify a command. (config, list, register, discover, on, off, set)"
413
+ STDERR.puts "Must specify a command. (config, list, register, discover, on, off, set, create, delete)"
352
414
  exit 1
353
415
  end
354
416
 
@@ -371,6 +433,10 @@ begin
371
433
  cli.off
372
434
  elsif command == "set"
373
435
  cli.set
436
+ elsif command == "create"
437
+ cli.create
438
+ elsif command == "delete"
439
+ cli.delete
374
440
  else
375
441
  puts "Cannot find command #{command}."
376
442
  end
data/lib/lights.rb CHANGED
@@ -112,6 +112,13 @@ class Lights
112
112
  put "groups/#{id}/action", state
113
113
  end
114
114
 
115
+ def create_group( group )
116
+ post "groups", group
117
+ end
118
+
119
+ def delete_group( id )
120
+ delete "groups/#{id}"
121
+ end
115
122
  private
116
123
 
117
124
  def process_error(result)
@@ -148,5 +155,23 @@ private
148
155
  JSON.parse response.body
149
156
  end
150
157
 
158
+ def post( path, data )
159
+ @logger.debug "==> POST: #{path}"
160
+ @logger.debug data.to_json
161
+ response = @http.post( "/api/#{@username}/#{path}", data.to_json )
162
+ @logger.debug "<== #{response.code}"
163
+ @logger.debug response.body
164
+ JSON.parse response.body
165
+ end
166
+
167
+ def delete( path )
168
+ @logger.debug "==> DELETE: #{path}"
169
+ request = Net::HTTP::Delete.new( "/api/#{@username}/#{path}" )
170
+ response = @http.request request
171
+ @logger.debug "<== #{response.code}"
172
+ @logger.debug response.body
173
+ JSON.parse response.body
174
+ end
175
+
151
176
  end
152
177
 
data/lib/lights/group.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  class Group
2
2
 
3
3
  attr_reader :id, :data, :name, :lights
4
- def initialize( id, data = {} )
4
+ attr_writer :name, :lights
5
+ def initialize( id = nil, data = {} )
5
6
  @id = id
6
7
  @data = data
7
8
  @action = BulbState.new(data["action"])
@@ -13,4 +14,17 @@ class Group
13
14
  @action.data
14
15
  end
15
16
 
17
+ def data
18
+ data = @data
19
+ data["id"] = @id if @id
20
+ data["name"] = @name if @name
21
+ data["lights"] = @lights if @lights
22
+ data["action"] = @action.data if @action.data != {}
23
+ data
24
+ end
25
+
26
+ def to_json
27
+ data.to_json
28
+ end
29
+
16
30
  end
@@ -1,3 +1,3 @@
1
1
  module LightsConst
2
- VERSION = "0.8.3"
2
+ VERSION = "0.8.4"
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.3
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brady Turner