yeelight-client 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/yeelight_client.rb +31 -0
- data/lib/yeelight_client/requests.rb +12 -0
- data/lib/yeelight_client/response/exception.rb +2 -0
- data/lib/yeelight_client/response/properties.rb +17 -0
- data/lib/yeelight_client/response/result.rb +12 -5
- data/lib/yeelight_client/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83fbe6a22fa518845613a0a7601688afe2cc1dda13f485aecd1ea9817459d844
|
4
|
+
data.tar.gz: 4c22e9a33137a66ff286f1218350970f565e1c084efe942fe3d3d166544004f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11038321442e83ea9c7d20f3b70ad0d840e85397bb3a64a2ad3d5321dad88c0341cd4554ed4bbf499880eab5c0679913522f6c00c370db86d66691c2b9224ea7
|
7
|
+
data.tar.gz: 7df23d9f91a23940763afdaf4d0781169cf0ad7259f9618d3b2db8af7ccfb85453f6adb6977c2b63480917ab1c42d55fdf99ac8fd03abee6d84bfbf9494a93aa
|
data/Gemfile.lock
CHANGED
data/lib/yeelight_client.rb
CHANGED
@@ -3,12 +3,39 @@ require "yeelight_client/connection"
|
|
3
3
|
require "yeelight_client/requests"
|
4
4
|
require "yeelight_client/response"
|
5
5
|
require "yeelight_client/response/result"
|
6
|
+
require "yeelight_client/response/properties"
|
6
7
|
require "yeelight_client/response/exception"
|
7
8
|
require "yeelight_client/broadcast"
|
8
9
|
|
9
10
|
class YeelightClient
|
10
11
|
include Requests
|
11
12
|
|
13
|
+
SUPPORTED_PROPERTIES = %i[
|
14
|
+
power
|
15
|
+
bright
|
16
|
+
ct
|
17
|
+
rgb
|
18
|
+
hue
|
19
|
+
sat
|
20
|
+
color_mode
|
21
|
+
flowing
|
22
|
+
delayoff
|
23
|
+
flow_params
|
24
|
+
music_on
|
25
|
+
name
|
26
|
+
bg_power
|
27
|
+
bg_flowing
|
28
|
+
bg_flow_params
|
29
|
+
bg_ct
|
30
|
+
bg_lmode
|
31
|
+
bg_bright
|
32
|
+
bg_rgb
|
33
|
+
bg_hue
|
34
|
+
bg_sat
|
35
|
+
nl_br
|
36
|
+
active_mode
|
37
|
+
]
|
38
|
+
|
12
39
|
DEFAULT_PARAMS = {
|
13
40
|
effect: "sudden".freeze,
|
14
41
|
duration: 0
|
@@ -39,4 +66,8 @@ class YeelightClient
|
|
39
66
|
def prep_params(params)
|
40
67
|
DEFAULT_PARAMS.merge(params)
|
41
68
|
end
|
69
|
+
|
70
|
+
def prep_props(props)
|
71
|
+
props.map(&:to_sym) & SUPPORTED_PROPERTIES
|
72
|
+
end
|
42
73
|
end
|
@@ -2,6 +2,18 @@ class YeelightClient
|
|
2
2
|
module Requests
|
3
3
|
extend Handler
|
4
4
|
|
5
|
+
def get_prop(props: nil)
|
6
|
+
props = prep_props(props || PROPERTIES)
|
7
|
+
|
8
|
+
query = {
|
9
|
+
method: "get_prop",
|
10
|
+
params: props
|
11
|
+
}
|
12
|
+
|
13
|
+
responses = @connection.request(query)
|
14
|
+
responses.map { |response| Response::Properties.new(props, response) }
|
15
|
+
end
|
16
|
+
|
5
17
|
def set_bright(value, params: {})
|
6
18
|
params = prep_params(params)
|
7
19
|
.slice(:effect, :duration)
|
@@ -25,6 +25,8 @@ class YeelightClient
|
|
25
25
|
def detect_errors
|
26
26
|
# EOFError - when lamp is busy
|
27
27
|
case @exception
|
28
|
+
when JSON::ParserError
|
29
|
+
assign_errors(:invalid_json, :device_error)
|
28
30
|
when EOFError
|
29
31
|
assign_errors(:device_busy, :device_error)
|
30
32
|
when Timeout::Error, Errno::ETIMEDOUT
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class YeelightClient
|
2
|
+
class Response
|
3
|
+
class Properties < YeelightClient::Response::Result
|
4
|
+
def initialize(*args)
|
5
|
+
@props = args[0]
|
6
|
+
super(*args[1..-1])
|
7
|
+
end
|
8
|
+
|
9
|
+
def data
|
10
|
+
return {} unless success?
|
11
|
+
result = @data["result"]
|
12
|
+
array = @props.map.with_index { |prop, i| [prop, result[i]] }
|
13
|
+
Hash[array]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -2,15 +2,22 @@ class YeelightClient
|
|
2
2
|
class Response
|
3
3
|
class Result < YeelightClient::Response
|
4
4
|
def data
|
5
|
-
return unless success?
|
6
|
-
|
5
|
+
return {} unless success?
|
6
|
+
@data["result"]
|
7
7
|
end
|
8
8
|
|
9
|
-
# {"id"=>4, "error"=>{"code"=>-5000, "message"=>"general error"}}
|
10
|
-
# Result {"id":8232,"error":{"code":-1,"message":"client quota exceeded"}}
|
11
9
|
def detect_errors
|
12
|
-
return
|
10
|
+
return if success?
|
11
|
+
message = @data.dig("error", "message")
|
13
12
|
|
13
|
+
case message
|
14
|
+
when /client quota exceeded/i
|
15
|
+
assign_errors(:request_quota, :device_error)
|
16
|
+
when /general error/i
|
17
|
+
assign_errors(:bad_request, :bad_input)
|
18
|
+
else
|
19
|
+
super
|
20
|
+
end
|
14
21
|
end
|
15
22
|
end
|
16
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yeelight-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Ostroumov
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- lib/yeelight_client/requests.rb
|
108
108
|
- lib/yeelight_client/response.rb
|
109
109
|
- lib/yeelight_client/response/exception.rb
|
110
|
+
- lib/yeelight_client/response/properties.rb
|
110
111
|
- lib/yeelight_client/response/result.rb
|
111
112
|
- lib/yeelight_client/version.rb
|
112
113
|
- yeelight-client.gemspec
|
@@ -128,8 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
129
|
- !ruby/object:Gem::Version
|
129
130
|
version: '0'
|
130
131
|
requirements: []
|
131
|
-
|
132
|
-
rubygems_version: 2.7.6
|
132
|
+
rubygems_version: 3.0.6
|
133
133
|
signing_key:
|
134
134
|
specification_version: 4
|
135
135
|
summary: Yeelight Client
|