xilight 0.1.2 → 0.1.5
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 +4 -4
- data/README.md +224 -5
- data/exe/yee +6 -12
- data/lib/xilight.rb +32 -20
- data/lib/xilight/version.rb +1 -1
- data/xilight.gemspec +2 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44464a51e814edd4efc2df5a1fbf336f8081faa936cc1a3a1e228bcdc6777ae7
|
4
|
+
data.tar.gz: fd04dddea590e4f0fb860b57e5334bacf017f151245eb839e425fd1727d6ebe0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d065ccb4e6aa4ff99984778525dd69f1b6fda9cf2d7f25e1de176d241b53fbcd846e8735588cb11634f8a9efb320d5374f280803a9c72ebdab27ca0928dfa07b
|
7
|
+
data.tar.gz: 538d5da718744d16bd2690728a496cfd799fbee712ed97ec1166be6bde5deabf4a7b00e40b91cfeff47d3141e96f90038894d4450ee936e490903c8c0fba94b3
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
#
|
1
|
+
# Xilight
|
2
2
|
|
3
|
-
|
3
|
+
Xilight provides a Ruby library and a CLI interface to control your Xiaomi Yeelight programmatically.
|
4
4
|
|
5
|
-
|
5
|
+
**Note**: It requires your yeelight to be configured to [development mode](https://www.yeelight.com/en_US/developer).
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -22,7 +22,226 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
### Library
|
26
|
+
|
27
|
+
Read the API docs [here](https://rubydoc.info/github/wouterken/xilight/master/Xilight/Yeelight).
|
28
|
+
|
29
|
+
### CLI
|
30
|
+
|
31
|
+
#### Help
|
32
|
+
|
33
|
+
yee -h
|
34
|
+
|
35
|
+
#### Discovery
|
36
|
+
Command:
|
37
|
+
yee discover
|
38
|
+
|
39
|
+
Usage:
|
40
|
+
yee discover
|
41
|
+
|
42
|
+
Description:
|
43
|
+
Discover Yeelights and save to ~/.config/.yeelights
|
44
|
+
|
45
|
+
Options:
|
46
|
+
--help, -h # Print this help
|
47
|
+
|
48
|
+
Examples:
|
49
|
+
yee discover
|
50
|
+
|
51
|
+
#### List Lights
|
52
|
+
|
53
|
+
Command:
|
54
|
+
yee list
|
55
|
+
|
56
|
+
Usage:
|
57
|
+
yee list
|
58
|
+
|
59
|
+
Description:
|
60
|
+
List known Yeelights
|
61
|
+
|
62
|
+
Options:
|
63
|
+
--help, -h # Print this help
|
64
|
+
|
65
|
+
Examples:
|
66
|
+
yee list
|
67
|
+
|
68
|
+
#### Set Light Name
|
69
|
+
|
70
|
+
Command:
|
71
|
+
yee name
|
72
|
+
|
73
|
+
Usage:
|
74
|
+
yee name NAME
|
75
|
+
|
76
|
+
Description:
|
77
|
+
Set name for Yeelight
|
78
|
+
|
79
|
+
Arguments:
|
80
|
+
NAME # REQUIRED Name to set for light
|
81
|
+
|
82
|
+
Options:
|
83
|
+
--light=VALUE, -l VALUE # ID/index of Yeelight to target, default: "0"
|
84
|
+
--help, -h # Print this help
|
85
|
+
|
86
|
+
Examples:
|
87
|
+
yee name name -l 1 foo # Set the name for light#1 to "foo"
|
88
|
+
|
89
|
+
|
90
|
+
#### Set RGB
|
91
|
+
|
92
|
+
Command:
|
93
|
+
yee rgb
|
94
|
+
|
95
|
+
Usage:
|
96
|
+
yee rgb R G B
|
97
|
+
|
98
|
+
Description:
|
99
|
+
Set RGB for Yeelight
|
100
|
+
|
101
|
+
Arguments:
|
102
|
+
R # REQUIRED Red (0-255)
|
103
|
+
G # REQUIRED Green (0-255)
|
104
|
+
B # REQUIRED Blue (0-255)
|
105
|
+
|
106
|
+
Options:
|
107
|
+
--light=VALUE, -l VALUE # ID/index of Yeelight to target, default: "0"
|
108
|
+
--name=VALUE, -n VALUE # Name of Yeelight to target
|
109
|
+
--help, -h # Print this help
|
110
|
+
|
111
|
+
Examples:
|
112
|
+
yee rgb 255 0 0 # set light to red (red 255, green 0, blue 0)
|
113
|
+
yee rgb 0 0 180 -n foo# set light with name foo to blue (red 0, green 0, blue 180)
|
114
|
+
yee rgb 255 255 255 -l 3# set light #3 to white (red 255, green 255, blue 255)
|
115
|
+
|
116
|
+
|
117
|
+
#### Brightness
|
118
|
+
|
119
|
+
Command:
|
120
|
+
yee bright
|
121
|
+
|
122
|
+
Usage:
|
123
|
+
yee bright BRIGHTNESS
|
124
|
+
|
125
|
+
Description:
|
126
|
+
Set Brightness for Yeelight
|
127
|
+
|
128
|
+
Arguments:
|
129
|
+
BRIGHTNESS # REQUIRED Brightness (0-100)
|
130
|
+
|
131
|
+
Options:
|
132
|
+
--light=VALUE, -l VALUE # ID/index of Yeelight to target, default: "0"
|
133
|
+
--name=VALUE, -n VALUE # Name of Yeelight to target
|
134
|
+
--help, -h # Print this help
|
135
|
+
|
136
|
+
Examples:
|
137
|
+
yee bright 100 # full brightness
|
138
|
+
yee bright 50 -n foo # 50% brightness for light with name foo
|
139
|
+
yee bright 25 -l 3 # 25% brightness for light#3
|
140
|
+
|
141
|
+
#### Set HSV
|
142
|
+
|
143
|
+
Command:
|
144
|
+
yee hsv
|
145
|
+
|
146
|
+
Usage:
|
147
|
+
yee hsv H S
|
148
|
+
|
149
|
+
Description:
|
150
|
+
Set HSV for Yeelight
|
151
|
+
|
152
|
+
Arguments:
|
153
|
+
H # REQUIRED Hue (0-359)
|
154
|
+
S # REQUIRED Saturation (0-100)
|
155
|
+
|
156
|
+
Options:
|
157
|
+
--light=VALUE, -l VALUE # ID/index of Yeelight to target, default: "0"
|
158
|
+
--name=VALUE, -n VALUE # Name of Yeelight to target
|
159
|
+
--help, -h # Print this help
|
160
|
+
|
161
|
+
Examples:
|
162
|
+
yee hsv 180 40 # set hue to 180 and saturation to 40
|
163
|
+
yee hsv 200 20 -n foo# set light with name foo to hue: 200, saturation: 20
|
164
|
+
yee hsv 359 90 -l 3# set light #3 to hue: 359, saturation: 90
|
165
|
+
|
166
|
+
#### Turn Off
|
167
|
+
|
168
|
+
Command:
|
169
|
+
yee off
|
170
|
+
|
171
|
+
Usage:
|
172
|
+
yee off
|
173
|
+
|
174
|
+
|
175
|
+
Description:
|
176
|
+
Turn Off Yeelight
|
177
|
+
|
178
|
+
Options:
|
179
|
+
--light=VALUE, -l VALUE # ID/index of Yeelight to target, default: "0"
|
180
|
+
--name=VALUE, -n VALUE # Name of Yeelight to target
|
181
|
+
--help, -h # Print this help
|
182
|
+
|
183
|
+
Examples:
|
184
|
+
yee off # turn default/first light off
|
185
|
+
yee off -n kitchen # turn light with name 'kitchen' off
|
186
|
+
yee off -l 3 # turn light #3 off
|
187
|
+
|
188
|
+
#### Turn On
|
189
|
+
Command:
|
190
|
+
yee on
|
191
|
+
|
192
|
+
Usage:
|
193
|
+
yee on
|
194
|
+
|
195
|
+
Description:
|
196
|
+
Turn on Yeelight
|
197
|
+
|
198
|
+
Options:
|
199
|
+
--light=VALUE, -l VALUE # ID/index of Yeelight to target, default: "0"
|
200
|
+
--name=VALUE, -n VALUE # Name of Yeelight to target
|
201
|
+
--help, -h # Print this help
|
202
|
+
|
203
|
+
Examples:
|
204
|
+
yee on # turn default/first light on
|
205
|
+
yee on -n kitchen # turn light with name 'kitchen' on
|
206
|
+
yee on -l 3 # turn light #3 on
|
207
|
+
|
208
|
+
#### Toggle
|
209
|
+
|
210
|
+
Command:
|
211
|
+
yee toggle
|
212
|
+
|
213
|
+
Usage:
|
214
|
+
yee toggle
|
215
|
+
|
216
|
+
Description:
|
217
|
+
Toggle Yeelight
|
218
|
+
|
219
|
+
Options:
|
220
|
+
--light=VALUE, -l VALUE # ID/index of Yeelight to target, default: "0"
|
221
|
+
--name=VALUE, -n VALUE # Name of Yeelight to target
|
222
|
+
--help, -h # Print this help
|
223
|
+
|
224
|
+
Examples:
|
225
|
+
yee toggle # toggle default/first light
|
226
|
+
yee toggle -n kitchen # toggle light with name 'kitchen'
|
227
|
+
yee toggle -l 3 # toggle light #3
|
228
|
+
|
229
|
+
#### Version
|
230
|
+
|
231
|
+
Command:
|
232
|
+
yee version
|
233
|
+
|
234
|
+
Usage:
|
235
|
+
yee version
|
236
|
+
|
237
|
+
Description:
|
238
|
+
Print version
|
239
|
+
|
240
|
+
Options:
|
241
|
+
--help, -h # Print this help
|
242
|
+
|
243
|
+
Examples:
|
244
|
+
yee version
|
26
245
|
|
27
246
|
## Development
|
28
247
|
|
@@ -32,5 +251,5 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
32
251
|
|
33
252
|
## Contributing
|
34
253
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
254
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/wouterken/xilight. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
36
255
|
|
data/exe/yee
CHANGED
@@ -58,17 +58,11 @@ module Xilight
|
|
58
58
|
]
|
59
59
|
|
60
60
|
def call(**)
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
end
|
67
|
-
current_config['yeelights'] = current_lights
|
68
|
-
current_lights.each_with_index do |light, index|
|
69
|
-
puts "Light ##{index} => #{(light['name'] || light['id'])}@#{light['host']}"
|
70
|
-
end
|
71
|
-
::Xilight::CLI.config = current_config
|
61
|
+
::Xilight::CLI.config = {
|
62
|
+
'yeelights' => ::Xilight::Yeelight.discover.each do |light|
|
63
|
+
light.instance_variables.map{|v| [v.to_s[1..-1], light.instance_variable_get(v)] }.to_h
|
64
|
+
end
|
65
|
+
}
|
72
66
|
end
|
73
67
|
end
|
74
68
|
|
@@ -236,7 +230,7 @@ module Xilight
|
|
236
230
|
Object.const_set(class_name, Class.new(Dry::CLI::Command) do
|
237
231
|
desc "Set yeelight to color #{color}"
|
238
232
|
example [
|
239
|
-
"
|
233
|
+
""
|
240
234
|
]
|
241
235
|
|
242
236
|
option :light, desc: "ID/index of Yeelight to target", default: "0", aliases: ["-l"]
|
data/lib/xilight.rb
CHANGED
@@ -25,11 +25,17 @@ module Xilight
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def request(cmd)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
begin
|
29
|
+
Timeout.timeout(0.5) do
|
30
|
+
s = TCPSocket.open(@host, @port)
|
31
|
+
s.puts "#{JSON.generate(cmd)}\r\n"
|
32
|
+
data = s.gets.chomp
|
33
|
+
s.close
|
34
|
+
JSON.parse(data)
|
35
|
+
end
|
36
|
+
rescue Timeout::Error
|
37
|
+
puts "Yeelight connection timed out. Yeelight not accessible"
|
38
|
+
end
|
33
39
|
end
|
34
40
|
|
35
41
|
# This method is used to retrieve current property of smart LED.
|
@@ -37,38 +43,44 @@ module Xilight
|
|
37
43
|
request({id: 1,method: 'get_prop', params: values})
|
38
44
|
end
|
39
45
|
|
40
|
-
# This method is used to change the color temperature of
|
46
|
+
# This method is used to change the color temperature of the smart LED.
|
41
47
|
def set_ct_abx(ct_value, effect='smooth', duration=200)
|
42
48
|
request({id: 2,method: 'set_ct_abx', params: [ct_value,effect,duration]})
|
43
49
|
end
|
44
50
|
|
51
|
+
# This method is used to change the color temperature of the smart LED.
|
45
52
|
def ct_abx=ct_value
|
46
53
|
set_ct_abx(ct_value)
|
47
54
|
end
|
48
55
|
|
49
|
-
# This method is used to change the color RGB of
|
56
|
+
# This method is used to change the color RGB of the smart LED.
|
57
|
+
# Expects an integer representing a hex triplet (e.g. 0xFFFFFF )
|
50
58
|
def set_rgb(rgb_value, effect='smooth', duration=200)
|
51
59
|
request({id: 3,method: 'set_rgb', params: [rgb_value,effect,duration]})
|
52
60
|
end
|
53
61
|
|
62
|
+
# This method is used to change the color RGB of the smart LED.
|
63
|
+
# Expects an integer representing a hex triplet (e.g. 0xFFFFFF )
|
54
64
|
def rgb=rgb_value
|
55
65
|
set_rgb(rgb_value)
|
56
66
|
end
|
57
67
|
|
58
|
-
# This method is used to change the color HSV of
|
68
|
+
# This method is used to change the color HSV of the smart LED.
|
59
69
|
def set_hsv(hue, sat, effect='smooth', duration=200)
|
60
70
|
request({id: 4,method: 'set_hsv', params: [hue,sat,effect,duration]})
|
61
71
|
end
|
62
72
|
|
73
|
+
# This method is used to change the color HSV of the smart LED.
|
63
74
|
def hsv=hue
|
64
75
|
set_hsv(hue)
|
65
76
|
end
|
66
77
|
|
67
|
-
# This method is used to change the brightness of
|
78
|
+
# This method is used to change the brightness of the smart LED.
|
68
79
|
def set_bright(brightness, effect='smooth', duration=200)
|
69
80
|
request({id: 5,method: 'set_bright', params: [brightness,effect,duration]})
|
70
81
|
end
|
71
82
|
|
83
|
+
# This method is used to change the brightness of the smart LED.
|
72
84
|
def bright=brightness
|
73
85
|
set_bright(brightness)
|
74
86
|
end
|
@@ -78,6 +90,7 @@ module Xilight
|
|
78
90
|
request({id: 6,method: 'set_power', params: [power,effect,duration]})
|
79
91
|
end
|
80
92
|
|
93
|
+
# This method is used to switch on or off the smart LED (software managed on/off).
|
81
94
|
def power=power
|
82
95
|
set_power(power)
|
83
96
|
end
|
@@ -87,16 +100,15 @@ module Xilight
|
|
87
100
|
request({id: 7,method: 'toggle', params: []})
|
88
101
|
end
|
89
102
|
|
90
|
-
# This method is used to save current state of smart LED in persistent memory.
|
91
|
-
#
|
92
|
-
# the smart LED will show last saved state.
|
93
|
-
# Note: The "automatic state saving" must be turn off
|
103
|
+
# This method is used to save the current state of smart LED in persistent memory.
|
104
|
+
# If user powers off and then powers on the smart LED again (hard power reset),
|
105
|
+
# the smart LED will show last the saved state.
|
94
106
|
def set_default
|
95
107
|
request({id: 8,method: 'set_default', params: []})
|
96
108
|
end
|
97
109
|
|
98
110
|
# This method is used to start a color flow. Color flow is a series of smart
|
99
|
-
# LED visible state
|
111
|
+
# LED visible state changes. It can be either brightness changing, color changing
|
100
112
|
# or color temperature changing
|
101
113
|
def start_cf(count, action, flow_expression)
|
102
114
|
request({id: 9,method: 'set_power', params: [count,action,flow_expression]})
|
@@ -108,8 +120,8 @@ module Xilight
|
|
108
120
|
end
|
109
121
|
|
110
122
|
# This method is used to set the smart LED directly to specified state. If
|
111
|
-
# the smart LED is off, then it will turn on the
|
112
|
-
# apply the specified
|
123
|
+
# the smart LED is off, then it will first turn on the smartLED and then
|
124
|
+
# apply the specified command.
|
113
125
|
def set_scene(classe, val1, val2)
|
114
126
|
request({id: 11,method: 'set_scene', params: [classe,val1,val2]})
|
115
127
|
end
|
@@ -131,14 +143,14 @@ module Xilight
|
|
131
143
|
end
|
132
144
|
|
133
145
|
# This method is used to change brightness, CT or color of a smart LED
|
134
|
-
# without knowing the current value, it's
|
146
|
+
# without knowing the current value, it's mainly used by controllers.
|
135
147
|
def set_adjust(action, prop)
|
136
148
|
request({id: 15,method: 'set_adjust', params: [action,prop]})
|
137
149
|
end
|
138
150
|
|
139
151
|
# This method is used to name the device. The name will be stored on the
|
140
|
-
# device and reported in
|
141
|
-
# through “get_prop” method.
|
152
|
+
# device and reported in the discovery response. Users can also read the device name
|
153
|
+
# through the “get_prop” method.
|
142
154
|
def set_name(name)
|
143
155
|
request({id: 16,method: 'set_name', params: [name]})
|
144
156
|
end
|
@@ -158,7 +170,7 @@ module Xilight
|
|
158
170
|
end
|
159
171
|
|
160
172
|
|
161
|
-
# This method is used to discover a smart LED
|
173
|
+
# This method is used to discover a smart LED on the local network
|
162
174
|
def self.discover
|
163
175
|
host = "239.255.255.250"
|
164
176
|
port = 1982
|
data/lib/xilight/version.rb
CHANGED
data/xilight.gemspec
CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
|
12
12
|
spec.summary = "Ruby Xiaomi Yeelight gem"
|
13
13
|
spec.description = "Ruby Xiaomi Yeelight gem"
|
14
|
+
spec.homepage = "https://github.com/wouterken/xilight"
|
14
15
|
|
15
16
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
16
17
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
@@ -29,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
29
30
|
spec.require_paths = ["lib"]
|
30
31
|
spec.add_runtime_dependency "dry-cli"
|
31
32
|
spec.add_development_dependency "bundler", "~> 1.13"
|
32
|
-
spec.add_development_dependency "rake", "
|
33
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
33
34
|
spec.add_development_dependency "pry"
|
34
35
|
spec.add_development_dependency "pry-byebug"
|
35
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xilight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wouter Coppieters
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-cli
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 12.3.3
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 12.3.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,7 +99,7 @@ files:
|
|
99
99
|
- lib/xilight.rb
|
100
100
|
- lib/xilight/version.rb
|
101
101
|
- xilight.gemspec
|
102
|
-
homepage:
|
102
|
+
homepage: https://github.com/wouterken/xilight
|
103
103
|
licenses: []
|
104
104
|
metadata: {}
|
105
105
|
post_install_message:
|