alexa_hue 1.2.1 → 1.2.2

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: a860a3862c73d97b96d2099308d960b63ab1ec25
4
- data.tar.gz: 5cdc6c1eef1700a4be503187addcab5db8a657e5
3
+ metadata.gz: 57a0ac8e1a676ca01553ffd07787129c43dc5a17
4
+ data.tar.gz: 48e7ca98535697a5ca4721e954e5346b40678887
5
5
  SHA512:
6
- metadata.gz: 10a43e57896d0c32ec2e3b9e142cd151d1c1b07325ddd3fab251b2b5f76ff7fbf06a773310af527e380c408266057297f4bd250c64135a9edf1bd397e7ce5267
7
- data.tar.gz: 145d7ba3d020c0a07f4ef31f30964f256d21cd8d1b27e4774eafb7dec609a7328eaf92b92a62ec4a26313fe86b0e3badb3827a6f243e4f4755ba568237a7f765
6
+ metadata.gz: 3a7abed1501fb8e48a008a437d81e54cced4358a7270c26bef2aa82385a4d49c297af824f2760bb29f0fea8828d11411766eabd4c58241a28490d2f2f371cb0c
7
+ data.tar.gz: f6bc4b6015915cd1fb076269eaea1ce5b73eeb201e48fa744e7056858f2851fb8f2f864320a747a15d06223537c00c2279aa5285e18fcc6f0352067d219857ee
@@ -3,10 +3,10 @@ module Hue
3
3
  def self.custom_slots
4
4
  client = Hue::Client.new
5
5
  slots = "LIGHTS"
6
- client.instance_variable_get(("@lights").intern).keys.each {|x| slots << "\n#{x}"}
7
- client.instance_variable_get(("@groups").intern).keys.each {|x| slots << "\n#{x}"}
6
+ client.instance_variable_get("@lights").keys.each {|x| slots << "\n#{x}"}
7
+ client.instance_variable_get("@groups").keys.each {|x| slots << "\n#{x}"}
8
8
  slots << "\n\nSCENE"
9
- client.instance_variable_get(("@scenes").intern).keys.each {|x| slots << "\n#{x}"}
9
+ client.instance_variable_get("@scenes").keys.each {|x| slots << "\n#{x}"}
10
10
  slots << "\n"
11
11
  slots << File.read(File.expand_path('../../../skills_config/custom_slots.txt', __FILE__))
12
12
  slots
@@ -50,15 +50,17 @@ module Hue
50
50
  @client.put_all_lights(alert: 'select')
51
51
  end
52
52
 
53
- def hue(numeric_value)
54
- @body.reset
55
- @body.hue = numeric_value
56
- end
53
+ # Not currently used??
54
+
55
+ # def hue(numeric_value)
56
+ # @body.reset
57
+ # @body.hue = numeric_value
58
+ # end
57
59
 
58
- def mired(numeric_value)
59
- @body.reset
60
- @body.ct = numeric_value
61
- end
60
+ # def mired(numeric_value)
61
+ # @body.reset
62
+ # @body.ct = numeric_value
63
+ # end
62
64
 
63
65
  def color(color_name)
64
66
  @body.reset
@@ -81,7 +83,7 @@ module Hue
81
83
  @body.transitiontime = in_seconds * 10
82
84
  end
83
85
 
84
- def light (*args)
86
+ def light(*args)
85
87
  @lights_array = []
86
88
  @_group = ""
87
89
  @body.clear_scene
@@ -103,7 +105,7 @@ module Hue
103
105
  @body.scene = scene_details["id"]
104
106
  end
105
107
 
106
- def save_scene(scene_name)
108
+ def savescene(scene_name)
107
109
  fade(2) if @body.transitiontime == nil
108
110
  light_group = @_group.empty? ? @client.get_all_lights.body["lights"] : @client.get_group(group: @_group).body["lights"]
109
111
  params = {name: scene_name.gsub!(' ','-'), lights: light_group, transitiontime: @body.transitiontime}
@@ -112,7 +114,7 @@ module Hue
112
114
  end
113
115
 
114
116
  def toggle_lights
115
- @lights_array.each { |l| @client.put_lights({lights: l}.merge(@body.to_hash)) }
117
+ @lights_array.each { |l| @client.put_light({lights: l}.merge(@body.to_hash)) }
116
118
  end
117
119
 
118
120
  def toggle_group
@@ -124,7 +126,7 @@ module Hue
124
126
  @client.put_group({group: @_group}.merge(@body.to_hash(without_scene: true)))
125
127
  else
126
128
  @client.get_scenes[@body[:scene]]["lights"].each do |l|
127
- @client.put_lights({lights: l}.merge(@body.to_hash))
129
+ @client.put_light({lights: l}.merge(@body.to_hash))
128
130
  end
129
131
  end
130
132
  end
@@ -177,6 +179,7 @@ module Hue
177
179
  end
178
180
 
179
181
  def alert(value)
182
+ value = value.to_sym
180
183
  if value == :short
181
184
  @body.alert = "select"
182
185
  elsif value == :long
@@ -39,24 +39,24 @@ module Hue
39
39
  end
40
40
  end
41
41
 
42
- def fix_schedule_syntax(string)
43
- sub_time = string.match(/time \d{2}:\d{2}/)
44
- sub_duration = string.match(/schedule PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?/)
42
+ # def fix_schedule_syntax(string)
43
+ # sub_time = string.match(/time \d{2}:\d{2}/)
44
+ # sub_duration = string.match(/schedule PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?/)
45
45
 
46
- if sub_time
47
- sub_time = sub_time.to_s
48
- string.slice!(sub_time).strip
49
- string << " #{sub_time}"
50
- string.sub!("time", "schedule at")
51
- end
46
+ # if sub_time
47
+ # sub_time = sub_time.to_s
48
+ # string.slice!(sub_time).strip
49
+ # string << " #{sub_time}"
50
+ # string.sub!("time", "schedule at")
51
+ # end
52
52
 
53
- if sub_duration
54
- sub_duration = sub_duration.to_s
55
- string.slice!(sub_duration).strip
56
- sub_duration = ChronicDuration.parse(sub_duration.split(' ').last)
57
- string << " schedule in #{sub_duration} seconds"
58
- end
59
- string.strip if string
60
- end
53
+ # if sub_duration
54
+ # sub_duration = sub_duration.to_s
55
+ # string.slice!(sub_duration).strip
56
+ # sub_duration = ChronicDuration.parse(sub_duration.split(' ').last)
57
+ # string << " schedule in #{sub_duration} seconds"
58
+ # end
59
+ # string.strip if string
60
+ # end
61
61
  end
62
62
  end
@@ -17,14 +17,9 @@ module Hue
17
17
 
18
18
  def save_scene(scene_name)
19
19
  fade(2) if @body.transitiontime == nil
20
- if @_group.empty?
21
- light_group = @client.get_all_lights.body["lights"]
22
- else
23
- light_group = @client.get_group(group: @_group).body["lights"]
24
- end
20
+ light_group = @_group.empty? ? @client.get_all_lights.body["lights"] : @client.get_group(group: @_group).body["lights"]
25
21
  params = {name: scene_name.gsub!(' ','-'), lights: light_group, transitiontime: @body.transitiontime}
26
- response = @client.put_scene(scene: scene_name, options: params).body
27
- confirm if response.first.keys[0] == "success"
22
+ confirm if @client.put_scene(scene: scene_name, options: params).body.first.keys[0] == "success"
28
23
  end
29
24
 
30
25
  def delete_schedules!
@@ -54,10 +49,8 @@ module Hue
54
49
  end
55
50
  end
56
51
 
57
- def on
58
- if @body.scene
59
- @client.get_activate_scene(scene: @body.scene)
60
- end
52
+ def toggle_scene
53
+ @client.get_activate_scene(scene: @body.scene)
61
54
  end
62
55
 
63
56
  def off
@@ -1,6 +1,7 @@
1
1
  require 'alexa_hue/hue/client'
2
2
  require 'alexa_hue/hue/js_client'
3
3
  require 'alexa_hue/hue/helpers'
4
+ require 'active_support/core_ext/hash'
4
5
 
5
6
  module Hue
6
7
  class VoiceParser
@@ -12,70 +13,27 @@ module Hue
12
13
  @client = options[:js] ? Hue::JsClient.new(options[:js]) : Hue::Client.new
13
14
  end
14
15
 
15
- def voice(string)
16
+ def voice(echo_response)
16
17
  @client.reset
17
- @client.command << string
18
-
19
- parse_voice(string)
20
-
21
- if @client.command.include?("schedule")
22
- state = string.match(/off|on/)[0].to_sym rescue nil
23
- @client.schedule(*[string, state])
24
- else
25
- string.include?(' off') ? @client.off : @client.on
18
+
19
+ echo_response.slots.to_h.except(:state).each do |key, value|
20
+ if value
21
+ if value.split(' ').last == "light"
22
+ key = "light"
23
+ value = value[/(.*)\s/,1]
24
+ elsif value.split(' ').last == "lights"
25
+ key = "lights"
26
+ value = value.split(' ').count == 1 ? "lights" : value[/(.*)\s/,1]
27
+ end
28
+
29
+ value = value.in_numbers if value.scan(Regexp.union( (1..10).map {|k| k.in_words} ) ).any?
30
+ value = ((value.to_f/10.to_f)*255).to_i if (value.class == Fixnum) && (key.to_s != "fade")
31
+ @client.send(key.to_sym, value)
32
+ puts "Calling: #{key}(#{value})"
33
+ end
26
34
  end
27
- end
28
-
29
- private
30
-
31
- def parse_leading(methods)
32
- methods.each do |l|
33
- capture = (@client.command.match (/\b#{l}\s\w+/)).to_s.split(' ')
34
- method = capture[0]
35
- value = capture[1]
36
- value = value.in_numbers if value.scan(Regexp.union( (1..10).map {|k| k.in_words} ) ).any?
37
- value = ((value.to_f/10.to_f)*255).to_i if (value.class == Fixnum) && (l != "fade")
38
- @client.send( method, value )
39
- end
40
- end
41
-
42
- def parse_trailing(method)
43
- all_keys = Regexp.union((@client.groups.keys + @client.lights.keys).flatten)
44
- value = @client.command.match(all_keys).to_s
45
- @client.send(method.first, value)
46
- end
47
-
48
- def parse_dynamic(methods)
49
- methods.each do |d|
50
- capture = (@client.command.match (/\w+ #{d}\b/)).to_s.split(' ')
51
- method = capture[1]
52
- value = capture[0].to_sym
53
- @client.send(method, value)
54
- end
55
- end
56
-
57
- def parse_scene(scene_name)
58
- scene_name.gsub!(' ','-') if scene_name.size > 1
59
- @client.scene(scene_name)
60
- end
61
-
62
- def parse_save_scene
63
- save_scene = @client.command.partition(/save (scene|seen) as /).last
64
- @client.save_scene(save_scene)
65
- end
66
-
67
- def parse_voice(string)
68
- string.gsub!('schedule ','')
69
- trailing = string.split(' ') & %w[lights light]
70
- leading = string.split(' ') & %w[hue brightness saturation fade color]
71
- dynamic = string.split(' ') & %w[colorloop alert]
72
- scene_name = string.partition(" scene").first
73
-
74
- parse_scene(scene_name) if string.include?(" scene") && !string.include?("save")
75
- parse_leading(leading) if leading.any?
76
- parse_trailing(trailing) if trailing.any?
77
- parse_dynamic(dynamic) if dynamic.any?
78
- parse_save_scene if @client.command.scan(/save (scene|seen) as/).length > 0
35
+
36
+ echo_response.slots.state == "off" ? @client.off : @client.on
79
37
  end
80
38
  end
81
39
  end
@@ -1,4 +1,4 @@
1
1
  module Hue
2
- VERSION = "1.2.1"
2
+ VERSION = "1.2.2"
3
3
  end
4
4
 
data/lib/alexa_hue.rb CHANGED
@@ -28,37 +28,12 @@ module Hue
28
28
  LEVELS.keys.reverse_each { |level| @echo_request.slots.send(attribute).sub!(level, LEVELS[level]) } if @echo_request.slots.send(attribute) && @echo_request.slots.schedule.nil?
29
29
  end
30
30
 
31
- @echo_request.slots.to_h.each do |k,v|
32
- @string ||= ""
33
- next unless v
34
- if k == :scene || k == :alert
35
- @string << "#{v.to_s} #{k.to_s} "
36
- elsif k == :lights || k == :modifier || k == :state
37
- @string << "#{v.to_s} "
38
- elsif k == :savescene
39
- @string << "save scene as #{v.to_s} "
40
- elsif k == :flash
41
- @string << "start long alert "
42
- else
43
- @string << "#{k.to_s} #{v.to_s} "
44
- end
45
- end
46
-
47
- fix_schedule_syntax(@string)
48
- @string.sub!("color loop", "colorloop")
49
- @string.strip!
50
- switch.voice @string
31
+ switch.voice @echo_request
51
32
  end
52
-
53
- # if @echo_request.slots.lights.nil? && @echo_request.slots.scene.nil? && @echo_request.slots.savescene.nil?
54
- # halt AlexaObjects::Response.new(end_session: false, spoken_response: "Please specify which light or lights you'd like to adjust. I'm ready to control the lights.").to_json
55
- # end
56
33
 
57
- # if @echo_request.slots.lights
58
- # if @echo_request.slots.lights.scan(/light|lights/).empty?
59
- # halt AlexaObjects::Response.new(end_session: false, spoken_response: "Please specify which light or lights you'd like to adjust. I'm ready to control the lights.").to_json
60
- # end
61
- # end
34
+ if (@echo_request.slots.lights.nil? && @echo_request.slots.scene.nil? && @echo_request.slots.savescene.nil?) || @echo_request.slots.lights&.scan(/light|lights/).empty?
35
+ halt AlexaObjects::Response.new(end_session: false, spoken_response: "Please specify which light or lights you'd like to adjust. I'm ready to control the lights.").to_json
36
+ end
62
37
 
63
38
  # if @echo_request.slots.lights
64
39
  # if @echo_request.slots.lights.include?('lights')
@@ -71,16 +46,6 @@ module Hue
71
46
  # end
72
47
  # end
73
48
  # end
74
-
75
-
76
- #if @string.include?('light ')
77
- # if (@string.split(' ') & switch.list_lights.keys.join(', ').downcase.split(', ')).empty?
78
- # r = AlexaObjects::Response.new
79
- # r.end_session = true
80
- # r.spoken_response = "I couldn't find a light with the name #{@echo_request.slots.lights}"
81
- # halt r.without_card.to_json
82
- # end
83
- #end
84
49
 
85
50
  return AlexaObjects::Response.new(spoken_response: "okay").to_json
86
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alexa_hue
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Lucas