wizrb 1.1.2 → 1.2.0

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -12
  3. data/exe/wizrb +1 -1
  4. data/lib/wizrb/cli.rb +16 -16
  5. data/lib/wizrb/lighting/discover.rb +7 -7
  6. data/lib/wizrb/lighting/events/set_brightness_event.rb +2 -2
  7. data/lib/wizrb/lighting/events/set_cold_white_event.rb +2 -2
  8. data/lib/wizrb/lighting/events/set_color_temp_event.rb +3 -3
  9. data/lib/wizrb/lighting/events/set_rgb_event.rb +5 -5
  10. data/lib/wizrb/lighting/events/set_scene_event.rb +3 -3
  11. data/lib/wizrb/lighting/events/set_speed_event.rb +2 -2
  12. data/lib/wizrb/lighting/events/set_warm_white_event.rb +2 -2
  13. data/lib/wizrb/lighting/group.rb +1 -1
  14. data/lib/wizrb/lighting/products/dimable_light.rb +2 -2
  15. data/lib/wizrb/lighting/products/light.rb +19 -10
  16. data/lib/wizrb/lighting/products/rgb_light.rb +2 -2
  17. data/lib/wizrb/lighting/products/tunable_light.rb +2 -2
  18. data/lib/wizrb/lighting/scenes/scene.rb +8 -6
  19. data/lib/wizrb/lighting/scenes/spooky_scene.rb +2 -2
  20. data/lib/wizrb/lighting/state.rb +2 -2
  21. data/lib/wizrb/power/discover.rb +5 -5
  22. data/lib/wizrb/power/group.rb +1 -1
  23. data/lib/wizrb/power/products/smart_plug.rb +2 -2
  24. data/lib/wizrb/shared/connection.rb +9 -9
  25. data/lib/wizrb/shared/discover.rb +15 -15
  26. data/lib/wizrb/shared/events/base.rb +2 -2
  27. data/lib/wizrb/shared/events/power_event.rb +3 -3
  28. data/lib/wizrb/shared/events/reboot_event.rb +2 -2
  29. data/lib/wizrb/shared/events/refresh_event.rb +2 -2
  30. data/lib/wizrb/shared/events/reset_event.rb +2 -2
  31. data/lib/wizrb/shared/group.rb +10 -10
  32. data/lib/wizrb/shared/products/device.rb +16 -16
  33. data/lib/wizrb/shared/state.rb +2 -2
  34. data/lib/wizrb/version.rb +1 -1
  35. data/lib/wizrb.rb +12 -12
  36. metadata +13 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93c20b34451939421c8be549770476540295a279b27c1218028c404eee376c78
4
- data.tar.gz: 98c458a2589d357984ed03ad873c466ce7cc16869fc82ef0634ec9a963bbcaed
3
+ metadata.gz: acfb68d7507a35c4556c19733918d8a1b5e2dcede554301d5352e5e39df46784
4
+ data.tar.gz: 70618d85bd75d2db6f7a8c69563162ddfe027edaf3f98df305d1b6fa7646f8c0
5
5
  SHA512:
6
- metadata.gz: dfcda0e85d20c77bc3f841bbb362c97401d9a2c469a10a79f9c73df91347b507cbcc368e30d027d7ddd5b4caa232913331ca47bdc248b4ff21f50a140c85cbf9
7
- data.tar.gz: b21b5f60f1b98ab1f0a5e70f4fac966548f3fdaf24c84f1e7dab058770243d58a76f808ac335f2b3eaf581fd1c22ff6ca1d504315471809bb0c117ab72b32d51
6
+ metadata.gz: e3b40750c2e4529e678408904ee963301b2cf3575c5d26c1b219570f1cb761fc7beb020f81466a189b6a2d0bddf37a0a1a840375025912151a6f232523281a46
7
+ data.tar.gz: 874e025e3343e95c3bda66b6cc1e49a229da3308117acaf63750bb71bb20429e2ac767ab689daf3ac24221eb40e00df42f7a40c33514e224a372d68e9875f1e8
data/README.md CHANGED
@@ -21,20 +21,15 @@ Testers with other (supported) Philips WiZ devices are welcome!
21
21
 
22
22
  ## Installation
23
23
 
24
- Add this line to your application's Gemfile:
25
-
26
- ```ruby
27
- gem 'wizrb'
24
+ Install via Bundler:
25
+ ```bash
26
+ bundle add wizrb
28
27
  ```
29
28
 
30
- And then execute:
31
-
32
- $ bundle install
33
-
34
- Or install it yourself as:
35
-
36
- $ gem install wizrb
37
-
29
+ Or install it manually:
30
+ ```bash
31
+ gem install wizrb
32
+ ```
38
33
  ## Usage
39
34
 
40
35
  Most of the documentation on how to use this gem is located within [Wizrb Devices](doc/devices.md).
data/exe/wizrb CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'wizrb/cli'
4
+ require "wizrb/cli"
5
5
  Wizrb::CLI.start
data/lib/wizrb/cli.rb CHANGED
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'thor'
4
- require 'wizrb'
3
+ require "thor"
4
+ require "wizrb"
5
5
 
6
6
  module Wizrb
7
7
  class CLI < Thor
8
8
  include Thor::Actions
9
9
 
10
- package_name 'Wizrb'
10
+ package_name "Wizrb"
11
11
 
12
- desc 'scene [SCENE]', 'Start a scene on all lights'
13
- method_option :scene, aliases: '-s', type: :string, required: true
12
+ desc "scene [SCENE]", "Start a scene on all lights"
13
+ method_option :scene, aliases: "-s", type: :string, required: true
14
14
  def scene
15
15
  scene_type = load_scene
16
16
  return unless scene_type
@@ -27,31 +27,31 @@ module Wizrb
27
27
  private
28
28
 
29
29
  def scene_class(string)
30
- name = string.split('_').map(&:capitalize).join
30
+ name = string.split("_").map(&:capitalize).join
31
31
  Object.const_get("Wizrb::Lighting::Scenes::#{name}Scene")
32
32
  rescue NameError
33
33
  nil
34
34
  end
35
35
 
36
36
  def load_scene
37
- say('Loading scene... ')
37
+ say("Loading scene... ")
38
38
  scene_type = scene_class(options[:scene])
39
39
 
40
40
  if scene_type
41
- say('DONE', :green)
41
+ say("DONE", :green)
42
42
  else
43
- say('INVALID SCENE', :red)
43
+ say("INVALID SCENE", :red)
44
44
  end
45
45
 
46
46
  scene_type
47
47
  end
48
48
 
49
49
  def find_lights
50
- say('Finding lights... ')
50
+ say("Finding lights... ")
51
51
  group = Wizrb::Lighting::Discover.all(wait: 10)
52
52
 
53
53
  if group.count == 0
54
- say('NONE FOUND', :red)
54
+ say("NONE FOUND", :red)
55
55
  return nil
56
56
  else
57
57
  say("#{group.count} FOUND", :green)
@@ -61,19 +61,19 @@ module Wizrb
61
61
  end
62
62
 
63
63
  def start(scene)
64
- say('Starting scene... ')
64
+ say("Starting scene... ")
65
65
  scene.start
66
- say('DONE', :green)
66
+ say("DONE", :green)
67
67
  end
68
68
 
69
69
  def prompt_stop
70
- nil until yes?('Would you like to stop? [y, yes]')
70
+ nil until yes?("Would you like to stop? [y, yes]")
71
71
  end
72
72
 
73
73
  def stop(scene)
74
- say('Stopping scene... ')
74
+ say("Stopping scene... ")
75
75
  scene.stop
76
- say('DONE', :green)
76
+ say("DONE", :green)
77
77
  end
78
78
  end
79
79
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../shared/discover'
4
- require_relative 'group'
5
- require_relative 'products/dimable_light'
6
- require_relative 'products/tunable_light'
7
- require_relative 'products/rgb_light'
3
+ require_relative "../shared/discover"
4
+ require_relative "group"
5
+ require_relative "products/dimable_light"
6
+ require_relative "products/tunable_light"
7
+ require_relative "products/rgb_light"
8
8
 
9
9
  module Wizrb
10
10
  module Lighting
@@ -13,10 +13,10 @@ module Wizrb
13
13
 
14
14
  def parse_response(data, addr)
15
15
  response = JSON.parse(data)
16
- return unless response.dig('result', 'success') && addr[1] && addr[2]
16
+ return unless response.dig("result", "success") && addr[1] && addr[2]
17
17
 
18
18
  resolve_device(ip: addr[2], port: addr[1])
19
- rescue StandardError
19
+ rescue
20
20
  nil
21
21
  end
22
22
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../shared/events/base'
3
+ require_relative "../../shared/events/base"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -11,7 +11,7 @@ module Wizrb
11
11
 
12
12
  def initialize(value)
13
13
  validate!(value)
14
- super(method: 'setState', params: { dimming: value.to_i })
14
+ super(method: "setState", params: {dimming: value.to_i})
15
15
  end
16
16
 
17
17
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../shared/events/base'
3
+ require_relative "../../shared/events/base"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -11,7 +11,7 @@ module Wizrb
11
11
 
12
12
  def initialize(value)
13
13
  validate!(value)
14
- super(method: 'setState', params: { c: value })
14
+ super(method: "setState", params: {c: value})
15
15
  end
16
16
 
17
17
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../shared/events/base'
3
+ require_relative "../../shared/events/base"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -11,7 +11,7 @@ module Wizrb
11
11
 
12
12
  def initialize(value)
13
13
  validate!(value)
14
- super(method: 'setState', params: { temp: value })
14
+ super(method: "setState", params: {temp: value})
15
15
  end
16
16
 
17
17
  private
@@ -21,7 +21,7 @@ module Wizrb
21
21
  raise ArgumentError, "Temperature must be between #{MIN_VALUE} and #{MAX_VALUE} kelvin"
22
22
  end
23
23
 
24
- raise ArgumentError, 'Temperature must be divisible by 100' unless value % 100 == 0
24
+ raise ArgumentError, "Temperature must be divisible by 100" unless value % 100 == 0
25
25
  end
26
26
  end
27
27
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../shared/events/base'
3
+ require_relative "../../shared/events/base"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -10,10 +10,10 @@ module Wizrb
10
10
  MAX_VALUE = 255
11
11
 
12
12
  def initialize(red, green, blue)
13
- validate_color!('Red', red)
14
- validate_color!('Green', green)
15
- validate_color!('Blue', blue)
16
- super(method: 'setState', params: { r: red, g: green, b: blue })
13
+ validate_color!("Red", red)
14
+ validate_color!("Green", green)
15
+ validate_color!("Blue", blue)
16
+ super(method: "setState", params: {r: red, g: green, b: blue})
17
17
  end
18
18
 
19
19
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../shared/events/base'
3
+ require_relative "../../shared/events/base"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -8,13 +8,13 @@ module Wizrb
8
8
  class SetSceneEvent < Wizrb::Shared::Events::Base
9
9
  def initialize(value)
10
10
  validate!(value)
11
- super(method: 'setState', params: { sceneId: Wizrb::Lighting::SCENES[value] })
11
+ super(method: "setState", params: {sceneId: Wizrb::Lighting::SCENES[value]})
12
12
  end
13
13
 
14
14
  private
15
15
 
16
16
  def validate!(value)
17
- raise ArgumentError, 'Invalid scene' unless Wizrb::Lighting::SCENES.include?(value)
17
+ raise ArgumentError, "Invalid scene" unless Wizrb::Lighting::SCENES.include?(value)
18
18
  end
19
19
  end
20
20
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../shared/events/base'
3
+ require_relative "../../shared/events/base"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -11,7 +11,7 @@ module Wizrb
11
11
 
12
12
  def initialize(value)
13
13
  validate!(value)
14
- super(method: 'setState', params: { speed: value })
14
+ super(method: "setState", params: {speed: value})
15
15
  end
16
16
 
17
17
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../shared/events/base'
3
+ require_relative "../../shared/events/base"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -11,7 +11,7 @@ module Wizrb
11
11
 
12
12
  def initialize(value)
13
13
  validate!(value)
14
- super(method: 'setState', params: { w: value })
14
+ super(method: "setState", params: {w: value})
15
15
  end
16
16
 
17
17
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../shared/group'
3
+ require_relative "../shared/group"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'light'
3
+ require_relative "light"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
7
7
  module Products
8
8
  class DimableLight < Wizrb::Lighting::Products::Light
9
- MODULE_NAME_IDENTIFIER = 'DW'
9
+ MODULE_NAME_IDENTIFIER = "DW"
10
10
  FEATURES = {
11
11
  brightness: true,
12
12
  color_temp: false,
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
- require 'socket'
5
- require_relative '../../shared/products/device'
6
- require_relative '../state'
3
+ require "json"
4
+ require "socket"
5
+ require_relative "../../shared/products/device"
6
+ require_relative "../state"
7
7
 
8
8
  module Wizrb
9
9
  module Lighting
@@ -14,12 +14,7 @@ module Wizrb
14
14
  end
15
15
 
16
16
  def white_range
17
- @white_range ||=
18
- user_config&.dig('whiteRange') ||
19
- model_config&.dig('extRange') ||
20
- model_config&.dig('cctRange') ||
21
- user_config&.dig('extRange') ||
22
- user_config&.dig('cctRange')
17
+ @white_range ||= primary_white_range || secondary_white_range || tertiary_white_range
23
18
  end
24
19
 
25
20
  def brightness(value)
@@ -49,6 +44,20 @@ module Wizrb
49
44
  def scene(value)
50
45
  dispatch_event(Wizrb::Lighting::Events::SetSceneEvent.new(value))
51
46
  end
47
+
48
+ private
49
+
50
+ def primary_white_range
51
+ user_config&.dig("whiteRange")
52
+ end
53
+
54
+ def secondary_white_range
55
+ model_config&.dig("extRange") || model_config&.dig("cctRange")
56
+ end
57
+
58
+ def tertiary_white_range
59
+ user_config&.dig("extRange") || user_config&.dig("cctRange")
60
+ end
52
61
  end
53
62
  end
54
63
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'light'
3
+ require_relative "light"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
7
7
  module Products
8
8
  class RgbLight < Wizrb::Lighting::Products::Light
9
- MODULE_NAME_IDENTIFIER = 'RGB'
9
+ MODULE_NAME_IDENTIFIER = "RGB"
10
10
  FEATURES = {
11
11
  brightness: true,
12
12
  color_temp: true,
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'light'
3
+ require_relative "light"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
7
7
  module Products
8
8
  class TunableLight < Wizrb::Lighting::Products::Light
9
- MODULE_NAME_IDENTIFIER = 'TW'
9
+ MODULE_NAME_IDENTIFIER = "TW"
10
10
  FEATURES = {
11
11
  brightness: true,
12
12
  color_temp: true,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../group'
3
+ require_relative "../group"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -35,25 +35,27 @@ module Wizrb
35
35
 
36
36
  protected
37
37
 
38
- def before_start; end
38
+ def before_start
39
+ end
39
40
 
40
41
  def step
41
- raise Wizrb::Error, 'You failed to implement #step on your scene'
42
+ raise Wizrb::Error, "You failed to implement #step on your scene"
42
43
  end
43
44
 
44
- def after_stop; end
45
+ def after_stop
46
+ end
45
47
 
46
48
  private
47
49
 
48
50
  def validate!(value)
49
51
  return if value.is_a?(Wizrb::Lighting::Group)
50
52
 
51
- raise Wizrb::Error, 'Scenes can only be activated on lighting groups'
53
+ raise Wizrb::Error, "Scenes can only be activated on lighting groups"
52
54
  end
53
55
 
54
56
  def save_state
55
57
  @state_events = @group.map do |device|
56
- Wizrb::Shared::Events::Base.new(method: 'setState', params: device.refresh.state)
58
+ Wizrb::Shared::Events::Base.new(method: "setState", params: device.refresh.state)
57
59
  end
58
60
  end
59
61
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'scene'
3
+ require_relative "scene"
4
4
 
5
5
  module Wizrb
6
6
  module Lighting
@@ -34,7 +34,7 @@ module Wizrb
34
34
  next if Random.rand > 0.25
35
35
 
36
36
  dispatch(BLACKOUT_EVENTS, sync: @sync)
37
- sleep(Random.rand > 0.98 ? 3 : 0.125)
37
+ sleep((Random.rand > 0.98) ? 3 : 0.125)
38
38
  dispatch(DEFAULT_STATE_EVENTS, sync: true)
39
39
  end
40
40
  end
@@ -6,7 +6,7 @@ module Wizrb
6
6
  STATE_KEYS = %i[state w c r g b temp dimming speed sceneId].freeze
7
7
 
8
8
  def parse!(response)
9
- result = response&.dig('result')
9
+ result = response&.dig("result")
10
10
  return unless result
11
11
 
12
12
  @state = result.transform_keys(&:to_sym).slice(*STATE_KEYS)
@@ -22,7 +22,7 @@ module Wizrb
22
22
  end
23
23
 
24
24
  def rgb
25
- { red: @state[:r], green: @state[:g], blue: @state[:b] }
25
+ {red: @state[:r], green: @state[:g], blue: @state[:b]}
26
26
  end
27
27
 
28
28
  def color_temp
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../shared/discover'
4
- require_relative 'group'
5
- require_relative 'products/smart_plug'
3
+ require_relative "../shared/discover"
4
+ require_relative "group"
5
+ require_relative "products/smart_plug"
6
6
 
7
7
  module Wizrb
8
8
  module Power
@@ -11,10 +11,10 @@ module Wizrb
11
11
 
12
12
  def parse_response(data, addr)
13
13
  response = JSON.parse(data)
14
- return unless response.dig('result', 'success') && addr[1] && addr[2]
14
+ return unless response.dig("result", "success") && addr[1] && addr[2]
15
15
 
16
16
  resolve_device(ip: addr[2], port: addr[1])
17
- rescue StandardError
17
+ rescue
18
18
  nil
19
19
  end
20
20
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../shared/group'
3
+ require_relative "../shared/group"
4
4
 
5
5
  module Wizrb
6
6
  module Power
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../shared/products/device'
3
+ require_relative "../../shared/products/device"
4
4
 
5
5
  module Wizrb
6
6
  module Power
7
7
  module Products
8
8
  class SmartPlug < Wizrb::Shared::Products::Device
9
- MODULE_NAME_IDENTIFIER = 'SOCKET'
9
+ MODULE_NAME_IDENTIFIER = "SOCKET"
10
10
 
11
11
  def initialize(ip:, port: 38_899)
12
12
  super
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
- require 'socket'
3
+ require "json"
4
+ require "socket"
5
5
 
6
6
  module Wizrb
7
7
  module Shared
@@ -13,13 +13,13 @@ module Wizrb
13
13
  @port = port
14
14
  @connection_id = Time.now.to_i.to_s(16)
15
15
  @socket = UDPSocket.new
16
- log('Created')
16
+ log("Created")
17
17
  end
18
18
 
19
19
  def connect
20
20
  with_error_logging do
21
21
  socket.connect(ip, port)
22
- log('Connected')
22
+ log("Connected")
23
23
  end
24
24
  end
25
25
 
@@ -27,7 +27,7 @@ module Wizrb
27
27
  with_error_logging do
28
28
  connect
29
29
  log("Sending: #{data.to_json}")
30
- socket.send(data.to_json.encode('UTF-8'), 0)
30
+ socket.send(data.to_json.encode("UTF-8"), 0)
31
31
  end
32
32
  end
33
33
 
@@ -46,7 +46,7 @@ module Wizrb
46
46
 
47
47
  def test
48
48
  with_error_logging do
49
- send({ method: 'getPilot', params: {} })
49
+ send({method: "getPilot", params: {}})
50
50
  receive
51
51
  end
52
52
  end
@@ -56,18 +56,18 @@ module Wizrb
56
56
  def parse_response(data)
57
57
  response = JSON.parse(data)
58
58
 
59
- raise Wizrb::ConnectionError, response['error'] if response.key?('error')
59
+ raise Wizrb::ConnectionError, response["error"] if response.key?("error")
60
60
 
61
61
  response
62
62
  end
63
63
 
64
64
  def log(message)
65
- puts "[Wizrb::Connection##{connection_id} #{ip}:#{port}] #{message}" if ENV['DEBUG']
65
+ puts "[Wizrb::Connection##{connection_id} #{ip}:#{port}] #{message}" if ENV["DEBUG"]
66
66
  end
67
67
 
68
68
  def with_error_logging
69
69
  yield
70
- rescue StandardError => e
70
+ rescue => e
71
71
  log("Error: #{e.message}")
72
72
  raise
73
73
  end
@@ -1,24 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ipaddr'
4
- require 'socket'
5
- require 'json'
6
- require_relative 'group'
7
- require_relative 'products/device'
3
+ require "ipaddr"
4
+ require "socket"
5
+ require "json"
6
+ require_relative "group"
7
+ require_relative "products/device"
8
8
 
9
9
  module Wizrb
10
10
  module Shared
11
11
  class Discover
12
- MULTICAST_ADDR = '224.0.0.1'
13
- BIND_ADDR = '0.0.0.0'
12
+ MULTICAST_ADDR = "224.0.0.1"
13
+ BIND_ADDR = "0.0.0.0"
14
14
  PORT = 38_899
15
15
  REGISTRATION_MESSAGE = {
16
- method: 'registration',
16
+ method: "registration",
17
17
  params: {
18
- phoneMac: 'ABCDEFGHIJKL',
18
+ phoneMac: "ABCDEFGHIJKL",
19
19
  register: false,
20
- phoneIp: '1.2.3.4',
21
- id: '1'
20
+ phoneIp: "1.2.3.4",
21
+ id: "1"
22
22
  }
23
23
  }.to_json
24
24
 
@@ -40,11 +40,11 @@ module Wizrb
40
40
  end
41
41
 
42
42
  def home(id)
43
- all(filters: { 'homeId' => id })
43
+ all(filters: {"homeId" => id})
44
44
  end
45
45
 
46
46
  def room(id)
47
- all(filters: { 'roomId' => id })
47
+ all(filters: {"roomId" => id})
48
48
  end
49
49
 
50
50
  def self.all(wait: 2, filters: {})
@@ -101,10 +101,10 @@ module Wizrb
101
101
 
102
102
  def parse_response(data, addr)
103
103
  response = JSON.parse(data)
104
- return unless response.dig('result', 'success') && addr[1] && addr[2]
104
+ return unless response.dig("result", "success") && addr[1] && addr[2]
105
105
 
106
106
  Wizrb::Shared::Products::Device.new(ip: addr[2], port: addr[1])
107
- rescue StandardError
107
+ rescue
108
108
  nil
109
109
  end
110
110
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
3
+ require "json"
4
4
 
5
5
  module Wizrb
6
6
  module Shared
@@ -14,7 +14,7 @@ module Wizrb
14
14
  end
15
15
 
16
16
  def to_json(*_args)
17
- @to_json ||= { method: @method, params: @params }.to_json
17
+ @to_json ||= {method: @method, params: @params}.to_json
18
18
  end
19
19
  end
20
20
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base'
3
+ require_relative "base"
4
4
 
5
5
  module Wizrb
6
6
  module Shared
@@ -8,13 +8,13 @@ module Wizrb
8
8
  class PowerEvent < Wizrb::Shared::Events::Base
9
9
  def initialize(value)
10
10
  validate!(value)
11
- super(method: 'setPilot', params: { state: value })
11
+ super(method: "setPilot", params: {state: value})
12
12
  end
13
13
 
14
14
  private
15
15
 
16
16
  def validate!(value)
17
- raise ArgumentError, 'Power state must be a boolean' unless [true, false].include?(value)
17
+ raise ArgumentError, "Power state must be a boolean" unless [true, false].include?(value)
18
18
  end
19
19
  end
20
20
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base'
3
+ require_relative "base"
4
4
 
5
5
  module Wizrb
6
6
  module Shared
7
7
  module Events
8
8
  class RebootEvent < Wizrb::Shared::Events::Base
9
9
  def initialize
10
- super(method: 'reboot')
10
+ super(method: "reboot")
11
11
  end
12
12
  end
13
13
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base'
3
+ require_relative "base"
4
4
 
5
5
  module Wizrb
6
6
  module Shared
7
7
  module Events
8
8
  class RefreshEvent < Wizrb::Shared::Events::Base
9
9
  def initialize
10
- super(method: 'getPilot')
10
+ super(method: "getPilot")
11
11
  end
12
12
  end
13
13
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base'
3
+ require_relative "base"
4
4
 
5
5
  module Wizrb
6
6
  module Shared
7
7
  module Events
8
8
  class ResetEvent < Wizrb::Shared::Events::Base
9
9
  def initialize
10
- super(method: 'reset')
10
+ super(method: "reset")
11
11
  end
12
12
  end
13
13
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'events/base'
4
- require_relative 'events/power_event'
5
- require_relative 'events/reboot_event'
6
- require_relative 'events/refresh_event'
7
- require_relative 'events/reset_event'
3
+ require_relative "events/base"
4
+ require_relative "events/power_event"
5
+ require_relative "events/reboot_event"
6
+ require_relative "events/refresh_event"
7
+ require_relative "events/reset_event"
8
8
 
9
9
  module Wizrb
10
10
  module Shared
@@ -17,8 +17,8 @@ module Wizrb
17
17
  @devices = devices
18
18
  end
19
19
 
20
- def each(&block)
21
- @devices.each(&block)
20
+ def each(&)
21
+ @devices.each(&)
22
22
  end
23
23
 
24
24
  def power_on
@@ -39,7 +39,7 @@ module Wizrb
39
39
 
40
40
  def dispatch_event(event)
41
41
  unless event.is_a?(Wizrb::Shared::Events::Base)
42
- raise ArgumentError, 'Not an instance of Wizrb::Shared::Events::Base'
42
+ raise ArgumentError, "Not an instance of Wizrb::Shared::Events::Base"
43
43
  end
44
44
 
45
45
  dispatch(event)
@@ -48,12 +48,12 @@ module Wizrb
48
48
  def dispatch_events(*events)
49
49
  events.each do |event|
50
50
  unless event.is_a?(Wizrb::Shared::Events::Base)
51
- raise ArgumentError, 'Not an instance of Wizrb::Shared::Events::Base'
51
+ raise ArgumentError, "Not an instance of Wizrb::Shared::Events::Base"
52
52
  end
53
53
  end
54
54
 
55
55
  params = events.reduce({}) { |h, e| h.merge(e.params) }
56
- dispatch_event(Wizrb::Shared::Events::Base.new(method: 'setState', params: params))
56
+ dispatch_event(Wizrb::Shared::Events::Base.new(method: "setState", params: params))
57
57
  end
58
58
 
59
59
  private
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
- require 'socket'
5
- require_relative '../connection'
6
- require_relative '../state'
7
- require_relative '../events/base'
8
- require_relative '../events/power_event'
9
- require_relative '../events/reboot_event'
10
- require_relative '../events/refresh_event'
11
- require_relative '../events/reset_event'
3
+ require "json"
4
+ require "socket"
5
+ require_relative "../connection"
6
+ require_relative "../state"
7
+ require_relative "../events/base"
8
+ require_relative "../events/power_event"
9
+ require_relative "../events/reboot_event"
10
+ require_relative "../events/refresh_event"
11
+ require_relative "../events/reset_event"
12
12
 
13
13
  module Wizrb
14
14
  module Shared
@@ -24,19 +24,19 @@ module Wizrb
24
24
  end
25
25
 
26
26
  def system_config
27
- @system_config ||= dispatch({ method: 'getSystemConfig', params: {} })&.dig('result')
27
+ @system_config ||= dispatch({method: "getSystemConfig", params: {}})&.dig("result")
28
28
  end
29
29
 
30
30
  def model_config
31
- @model_config ||= dispatch({ method: 'getModelConfig', params: {} })&.dig('result')
31
+ @model_config ||= dispatch({method: "getModelConfig", params: {}})&.dig("result")
32
32
  end
33
33
 
34
34
  def user_config
35
- @user_config ||= dispatch({ method: 'getUserConfig', params: {} })&.dig('result')
35
+ @user_config ||= dispatch({method: "getUserConfig", params: {}})&.dig("result")
36
36
  end
37
37
 
38
38
  def module_name
39
- @module_name ||= system_config&.dig('moduleName')
39
+ @module_name ||= system_config&.dig("moduleName")
40
40
  end
41
41
 
42
42
  def power_on
@@ -71,7 +71,7 @@ module Wizrb
71
71
 
72
72
  def dispatch_event(event)
73
73
  unless event.is_a?(Wizrb::Shared::Events::Base)
74
- raise ArgumentError, 'Not an instance of Wizrb::Shared::Events::Base'
74
+ raise ArgumentError, "Not an instance of Wizrb::Shared::Events::Base"
75
75
  end
76
76
 
77
77
  dispatch(event)
@@ -80,12 +80,12 @@ module Wizrb
80
80
  def dispatch_events(*events)
81
81
  events.each do |event|
82
82
  unless event.is_a?(Wizrb::Shared::Events::Base)
83
- raise ArgumentError, 'Not an instance of Wizrb::Shared::Events::Base'
83
+ raise ArgumentError, "Not an instance of Wizrb::Shared::Events::Base"
84
84
  end
85
85
  end
86
86
 
87
87
  params = events.reduce({}) { |h, e| h.merge(e.params) }
88
- dispatch_event(Wizrb::Shared::Events::Base.new(method: 'setState', params: params))
88
+ dispatch_event(Wizrb::Shared::Events::Base.new(method: "setState", params: params))
89
89
  end
90
90
 
91
91
  private
@@ -6,11 +6,11 @@ module Wizrb
6
6
  STATE_KEYS = %i[state].freeze
7
7
 
8
8
  def initialize
9
- @state = { state: false }
9
+ @state = {state: false}
10
10
  end
11
11
 
12
12
  def parse!(response)
13
- result = response&.dig('result')
13
+ result = response&.dig("result")
14
14
  return unless result
15
15
 
16
16
  @state = result.transform_keys(&:to_sym).slice(*STATE_KEYS)
data/lib/wizrb/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wizrb
4
- VERSION = '1.1.2'
4
+ VERSION = "1.2.0"
5
5
  end
data/lib/wizrb.rb CHANGED
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'wizrb/version'
4
- require_relative 'wizrb/shared/connection'
5
- require_relative 'wizrb/shared/discover'
6
- require_relative 'wizrb/shared/group'
7
- require_relative 'wizrb/shared/state'
8
- require_relative 'wizrb/lighting'
9
- require_relative 'wizrb/lighting/discover'
10
- require_relative 'wizrb/lighting/group'
11
- require_relative 'wizrb/lighting/state'
12
- require_relative 'wizrb/power/discover'
13
- require_relative 'wizrb/power/group'
3
+ require_relative "wizrb/version"
4
+ require_relative "wizrb/shared/connection"
5
+ require_relative "wizrb/shared/discover"
6
+ require_relative "wizrb/shared/group"
7
+ require_relative "wizrb/shared/state"
8
+ require_relative "wizrb/lighting"
9
+ require_relative "wizrb/lighting/discover"
10
+ require_relative "wizrb/lighting/group"
11
+ require_relative "wizrb/lighting/state"
12
+ require_relative "wizrb/power/discover"
13
+ require_relative "wizrb/power/group"
14
14
 
15
15
  Dir["#{File.dirname(__FILE__)}/wizrb/shared/products/*.rb"].sort.each { |file| require file }
16
16
  Dir["#{File.dirname(__FILE__)}/wizrb/shared/events/*.rb"].sort.each { |file| require file }
@@ -25,7 +25,7 @@ module Wizrb
25
25
  class ConnectionError < Wizrb::Error; end
26
26
 
27
27
  class ConnectionTimeoutError < Wizrb::ConnectionError
28
- def initialize(msg = 'Connection timeout waiting for response.')
28
+ def initialize(msg = "Connection timeout waiting for response.")
29
29
  super
30
30
  end
31
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wizrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bert McCutchen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-11 00:00:00.000000000 Z
11
+ date: 2024-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
19
+ version: '1.3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.3.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '1.1'
29
+ version: '1.3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.1
27
33
  description: Manage the state of your Philips WiZ devices.
28
34
  email:
29
35
  - mail@bertm.dev
@@ -79,6 +85,7 @@ metadata:
79
85
  homepage_uri: https://github.com/bert-mccutchen/wizrb
80
86
  source_code_uri: https://github.com/bert-mccutchen/wizrb
81
87
  changelog_uri: https://github.com/bert-mccutchen/wizrb/blob/master/CHANGELOG.md
88
+ rubygems_mfa_required: 'true'
82
89
  post_install_message:
83
90
  rdoc_options: []
84
91
  require_paths:
@@ -87,14 +94,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
94
  requirements:
88
95
  - - ">="
89
96
  - !ruby/object:Gem::Version
90
- version: 2.5.0
97
+ version: '3.1'
91
98
  required_rubygems_version: !ruby/object:Gem::Requirement
92
99
  requirements:
93
100
  - - ">="
94
101
  - !ruby/object:Gem::Version
95
102
  version: '0'
96
103
  requirements: []
97
- rubygems_version: 3.0.3.1
104
+ rubygems_version: 3.5.11
98
105
  signing_key:
99
106
  specification_version: 4
100
107
  summary: State management for Philips WiZ devices.