ledenet_api 1.1.2 → 1.2.1
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/bin/ledenet-ufo +40 -8
- data/lib/ledenet/api.rb +9 -0
- data/lib/ledenet/functions.rb +30 -0
- data/lib/ledenet/packets/empty_response.rb +1 -2
- data/lib/ledenet/packets/set_function_request.rb +39 -0
- data/lib/ledenet/packets/status_response.rb +2 -2
- data/lib/ledenet/version.rb +1 -1
- data/lib/ledenet_api.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b35153c257762f08c7ddfe36ec752d8a31ab43a
|
4
|
+
data.tar.gz: 8db99c674a748d3ed59154a186f9591c7be052a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a41d1078922bdf008dc686a1c9f24fb19a5feb3c7cad107fb74fbf249926f94b66c43e56f529db4b75c6c5d635ca453e6dcaf8b5822a535e8ab7bc126479b3f
|
7
|
+
data.tar.gz: c20ff4d69afba7a115c750727399211c7c92a93a91147eff469a4ea760bb4a75bd1700b9e791e4e41e0909256229dabeb8de19069bc1c346aa10f5446ed59342
|
data/bin/ledenet-ufo
CHANGED
@@ -53,7 +53,7 @@ opts = OptionParser.new do |opts|
|
|
53
53
|
options[:on?] = false
|
54
54
|
end
|
55
55
|
|
56
|
-
opts.on("-l", "--list",
|
56
|
+
opts.on("-l", "--list", "Prints a list of available devices and exits") do |v|
|
57
57
|
options[:list] = true
|
58
58
|
end
|
59
59
|
|
@@ -64,6 +64,24 @@ opts = OptionParser.new do |opts|
|
|
64
64
|
opts.on("-h", "--help", "Prints this help message") do
|
65
65
|
options[:print_help?] = true
|
66
66
|
end
|
67
|
+
|
68
|
+
opts.on("--function-id [VALUE]", Integer, "Set function id to VALUE") do |v|
|
69
|
+
options[:function] = v
|
70
|
+
end
|
71
|
+
|
72
|
+
opts.on("-f", "--function [VALUE]", "Set function to VALUE.") do |v|
|
73
|
+
if !LEDENET::Functions.const_defined?(v)
|
74
|
+
warn "Unknown function type: #{v}. Valid function types: \n\t" <<
|
75
|
+
"#{LEDENET::Functions.all_functions.join("\n\t")}"
|
76
|
+
exit 1
|
77
|
+
end
|
78
|
+
|
79
|
+
options[:function] = LEDENET::Functions.const_get(v)
|
80
|
+
end
|
81
|
+
|
82
|
+
opts.on("-p", "--speed [VALUE]", Integer, "Set function speed to VALUE") do |v|
|
83
|
+
options[:speed] = v
|
84
|
+
end
|
67
85
|
end
|
68
86
|
|
69
87
|
opts.parse!
|
@@ -73,14 +91,20 @@ if options[:print_help?] || options.empty?
|
|
73
91
|
exit 0
|
74
92
|
end
|
75
93
|
|
94
|
+
if options[:list] && options.count > 1
|
95
|
+
warn "--list is incompatible with other options!\n\n"
|
96
|
+
warn opts
|
97
|
+
exit 1
|
98
|
+
end
|
99
|
+
|
100
|
+
if options[:function].nil? != options[:speed].nil?
|
101
|
+
warn "--funciton and --speed must be specified together. You provide " <<
|
102
|
+
"one without also providing the other."
|
103
|
+
exit 1
|
104
|
+
end
|
105
|
+
|
76
106
|
begin
|
77
107
|
if options[:list]
|
78
|
-
if options.count > 1
|
79
|
-
warn "--list is incompatible with other options!\n\n"
|
80
|
-
warn opts
|
81
|
-
exit 1
|
82
|
-
end
|
83
|
-
|
84
108
|
devices = LEDENET.discover_devices(expected_devices: 1000)
|
85
109
|
|
86
110
|
row_format = "%16s %18s %20s\n"
|
@@ -111,7 +135,15 @@ begin
|
|
111
135
|
api = LEDENET::Api.new(ip)
|
112
136
|
|
113
137
|
api.set_power(options[:on?]) unless options[:on?].nil?
|
114
|
-
|
138
|
+
|
139
|
+
color_params = options.select do |k,_|
|
140
|
+
%w{red green blue warm_white}.include?(k.to_s)
|
141
|
+
end
|
142
|
+
api.update_color_data(color_params) unless color_params.empty?
|
143
|
+
|
144
|
+
if options[:function] && options[:speed]
|
145
|
+
api.update_function(options[:function], options[:speed])
|
146
|
+
end
|
115
147
|
|
116
148
|
if options[:print_status?]
|
117
149
|
status = api.current_color_data
|
data/lib/ledenet/api.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'ledenet/packets/set_power_request'
|
2
2
|
require 'ledenet/packets/status_request'
|
3
3
|
require 'ledenet/packets/update_color_request'
|
4
|
+
require 'ledenet/packets/set_function_request'
|
4
5
|
|
5
6
|
module LEDENET
|
6
7
|
class Api
|
@@ -60,6 +61,14 @@ module LEDENET
|
|
60
61
|
Hash[color_data]
|
61
62
|
end
|
62
63
|
|
64
|
+
def update_function(fn, speed)
|
65
|
+
if fn.is_a?(String) or fn.is_a?(Symbol)
|
66
|
+
fn = LEDENET::Functions.const_get(fn.upcase)
|
67
|
+
end
|
68
|
+
|
69
|
+
send_packet(LEDENET::Packets::SetFunctionRequest.new(function_id: fn, speed: speed))
|
70
|
+
end
|
71
|
+
|
63
72
|
def reconnect!
|
64
73
|
create_socket
|
65
74
|
true
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module LEDENET
|
2
|
+
module Functions
|
3
|
+
VALUES = [
|
4
|
+
SEVEN_COLOR_CROSS_FADE = 0x25,
|
5
|
+
RED_GRADUAL_CHANGE = 0x26,
|
6
|
+
GREEN_GRADUAL_CHANGE = 0x27,
|
7
|
+
BLUE_GRADUAL_CHANGE = 0x28,
|
8
|
+
YELLOW_GRADUAL_CHANGE = 0x29,
|
9
|
+
CYAN_GRADUAL_CHANGE = 0x2A,
|
10
|
+
PURPLE_GRADUAL_CHANGE = 0x2B,
|
11
|
+
WHITE_GRADUAL_CHANGE = 0x2C,
|
12
|
+
RED_GREEN_CROSS_FADE = 0x2D,
|
13
|
+
RED_BLUE_CROSS_FADE = 0x2E,
|
14
|
+
GREEN_BLUE_CROSS_FADE = 0x2F,
|
15
|
+
SEVEN_COLOR_STROBE_FLASH = 0x30,
|
16
|
+
RED_STROBE_FLASH = 0x31,
|
17
|
+
GREEN_STROBE_FLASH = 0x32,
|
18
|
+
BLUE_STROBE_FLASH = 0x33,
|
19
|
+
YELLOW_STROBE_FLASH = 0x34,
|
20
|
+
CYAN_STROBE_FLASH = 0x35,
|
21
|
+
PURPLE_STROBE_FLASH = 0x36,
|
22
|
+
WHITE_STROBE_FLASH = 0x37,
|
23
|
+
SEVEN_COLOR_JUMPING_CHANGE = 0x38
|
24
|
+
]
|
25
|
+
|
26
|
+
def self.all_functions
|
27
|
+
LEDENET::Functions.constants.reject { |x| x == :VALUES }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'bindata'
|
2
|
+
|
3
|
+
require 'ledenet/packets/fields/checksum'
|
4
|
+
require 'ledenet/packets/empty_response'
|
5
|
+
|
6
|
+
module LEDENET::Packets
|
7
|
+
class SetFunctionRequest < BinData::Record
|
8
|
+
VALID_SPEED_RANGE = (0..100)
|
9
|
+
|
10
|
+
# Speed value is in [0x00, 0x20], with 0x00 being the fastest.
|
11
|
+
PACKET_SPEED_RANGE = (0x00..0x20)
|
12
|
+
|
13
|
+
hide :checksum
|
14
|
+
mandatory_parameter :function_id
|
15
|
+
mandatory_parameter :speed
|
16
|
+
|
17
|
+
uint8 :packet_id, value: 0x61
|
18
|
+
uint8 :function_id_val, value: ->() { function_id }
|
19
|
+
|
20
|
+
uint8 :speed_val, value: ->() do
|
21
|
+
if !VALID_SPEED_RANGE.include?(speed)
|
22
|
+
raise "Speed should be between #{VALID_SPEED_RANGE.min} and #{VALID_SPEED_RANGE.max}"
|
23
|
+
end
|
24
|
+
|
25
|
+
scaled_speed = (speed / (VALID_SPEED_RANGE.max / PACKET_SPEED_RANGE.max)).round
|
26
|
+
scaled_speed = [PACKET_SPEED_RANGE.min, scaled_speed].max
|
27
|
+
scaled_speed = [PACKET_SPEED_RANGE.max, scaled_speed].min
|
28
|
+
|
29
|
+
PACKET_SPEED_RANGE.max - scaled_speed
|
30
|
+
end
|
31
|
+
|
32
|
+
uint8 :remote_or_local, value: 0x0F
|
33
|
+
checksum :checksum, packet_data: ->() { snapshot }
|
34
|
+
|
35
|
+
def response_reader
|
36
|
+
LEDENET::Packets::EmptyResponse
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -4,7 +4,7 @@ require 'ledenet/packets/fields/checksum'
|
|
4
4
|
|
5
5
|
module LEDENET::Packets
|
6
6
|
class StatusResponse < BinData::Record
|
7
|
-
hide :checksum
|
7
|
+
hide :checksum
|
8
8
|
|
9
9
|
uint8 :packet_id, value: 0x81
|
10
10
|
uint8 :device_name
|
@@ -21,7 +21,7 @@ module LEDENET::Packets
|
|
21
21
|
uint8 :blue
|
22
22
|
uint8 :warm_white
|
23
23
|
|
24
|
-
uint16be :unused_payload
|
24
|
+
uint16be :unused_payload
|
25
25
|
uint8 :checksum
|
26
26
|
|
27
27
|
def on?
|
data/lib/ledenet/version.rb
CHANGED
data/lib/ledenet_api.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ledenet_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Mullins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bindata
|
@@ -98,8 +98,10 @@ files:
|
|
98
98
|
- ledenet_api.gemspec
|
99
99
|
- lib/ledenet/api.rb
|
100
100
|
- lib/ledenet/device_discovery.rb
|
101
|
+
- lib/ledenet/functions.rb
|
101
102
|
- lib/ledenet/packets/empty_response.rb
|
102
103
|
- lib/ledenet/packets/fields/checksum.rb
|
104
|
+
- lib/ledenet/packets/set_function_request.rb
|
103
105
|
- lib/ledenet/packets/set_power_request.rb
|
104
106
|
- lib/ledenet/packets/status_request.rb
|
105
107
|
- lib/ledenet/packets/status_response.rb
|