ledenet_api 0.1.5 → 0.1.6
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 +92 -1
- data/lib/ledenet/device_discovery.rb +10 -3
- data/lib/ledenet/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d957c5cc344a32f9a136953d6c250850eee2a49
|
4
|
+
data.tar.gz: e7d1aa4844be0c35a54cdcb50f38e9bb4ffec8f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13ec8ea531321fbcf2ef004852680801522cf72c4b606ecb94d9003b2d1a3ead020811ae90cf73987d8514fd377c73097d3dca396399155342264211655783e2
|
7
|
+
data.tar.gz: 71f2af760c9487ec5d6e94917b35a60a24dbb219ee52dcc1b27b9bfa008741b88cb01fa75d2a6ef2d5b3e7d24b3c2ace5832203e98fa99d334869b8e0b4fa754
|
data/README.md
CHANGED
@@ -1,2 +1,93 @@
|
|
1
1
|
# ledenet_api
|
2
|
-
An API for the LEDENET Magic UFO LED WiFi Controller
|
2
|
+
An API for the [LEDENET Magic UFO LED WiFi Controller](http://amzn.com/B00MDKOSN0)
|
3
|
+
|
4
|
+
## What's this?
|
5
|
+
This RGB LED controller is a relatively cheap (~$30) alternative to something like the Phillips Hue RGB Strip + Hub, which can run you between $100 and $200.
|
6
|
+
|
7
|
+
However, it doesn't come with an open API, and doesn't integrate with smarthome hubs (SmartThings, etc.). I used a [packet capture app](https://play.google.com/store/apps/details?id=app.greyshirts.sslcapture&hl=en) on my phone to reverse engineer how the official app communicated with the controller.
|
8
|
+
|
9
|
+
## Installing
|
10
|
+
|
11
|
+
ledenet_api is available on [Rubygems](https://rubygems.org). You can install it with:
|
12
|
+
|
13
|
+
```
|
14
|
+
$ gem install ledenet_api
|
15
|
+
```
|
16
|
+
|
17
|
+
You can also add it to your Gemfile:
|
18
|
+
|
19
|
+
```
|
20
|
+
gem 'ledenet_api'
|
21
|
+
```
|
22
|
+
|
23
|
+
## Using it
|
24
|
+
|
25
|
+
### Device discovery
|
26
|
+
|
27
|
+
These devices implement a service discovery protocol, which allows you to find them on your network without digging for their IP address. To use it:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
require 'ledenet_api'
|
31
|
+
devices = LEDENET.discover_devices
|
32
|
+
=> [#<LEDENET::Device:0x007feccc0241d8 @ip="10.133.8.113", @hw_addr="XXXXXXXXXXXX", @model="HF-LPB100-ZJ200">]
|
33
|
+
devices.first.ip
|
34
|
+
=> "10.133.8.113"
|
35
|
+
```
|
36
|
+
|
37
|
+
### API
|
38
|
+
|
39
|
+
To construct an API class, use the following:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
api = LEDENET::Api.new('10.133.8.113')
|
43
|
+
```
|
44
|
+
|
45
|
+
By default, each API call will open a new connection, and close it when it's finished. This is convenient if the API is being used inside of a long-running process (like a web server). If what you're doing is more short-lived, you can reuse the same connection:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
api = LEDENET::Api.new('10.133.8.113', reuse_connection: true)
|
49
|
+
```
|
50
|
+
|
51
|
+
By default, the API will re-try transient-looking failures three times. You can change this behavior with:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
api = LEDENET::Api.new('10.133.8.113', reuse_connection: true, max_retries: 0)
|
55
|
+
```
|
56
|
+
|
57
|
+
### Status
|
58
|
+
|
59
|
+
To check if the controller is current on:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
api.on?
|
63
|
+
=> false
|
64
|
+
```
|
65
|
+
|
66
|
+
To turn the controller on and off:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
api.on
|
70
|
+
=> true
|
71
|
+
api.off
|
72
|
+
=> true
|
73
|
+
```
|
74
|
+
|
75
|
+
### Color
|
76
|
+
|
77
|
+
To get the current color setting (as an array of RGB values):
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
api.current_color
|
81
|
+
=> [10, 10, 10]
|
82
|
+
```
|
83
|
+
|
84
|
+
To set the color:
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
irb(main):016:0> api.update_color(255, 0, 255)
|
88
|
+
=> true
|
89
|
+
```
|
90
|
+
|
91
|
+
### Warm White
|
92
|
+
|
93
|
+
This controller is also capable of controling Warm White (WW) LEDs. I didn't have a strip to test, but I'm pretty sure I found out how to control it. If this would be useful to you, please open an issue/pull request.
|
@@ -14,6 +14,11 @@ module LEDENET
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
DEFAULT_OPTIONS = {
|
18
|
+
expected_devices: 1,
|
19
|
+
timeout: 5
|
20
|
+
}
|
21
|
+
|
17
22
|
# The WiFi controllers these things appear to use support a discovery protocol
|
18
23
|
# roughly outlined here: http://www.usriot.com/Faq/49.html
|
19
24
|
#
|
@@ -21,7 +26,9 @@ module LEDENET
|
|
21
26
|
# containing IP address, hardware address, and model number. The model number
|
22
27
|
# appears to correspond to the WiFi controller, and not the LED controller
|
23
28
|
# itself.
|
24
|
-
def self.discover_devices(
|
29
|
+
def self.discover_devices(options = {})
|
30
|
+
options = DEFAULT_OPTIONS.merge(options)
|
31
|
+
|
25
32
|
send_addr = ['<broadcast>', 48899]
|
26
33
|
send_socket = UDPSocket.new
|
27
34
|
send_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
|
@@ -30,12 +37,12 @@ module LEDENET
|
|
30
37
|
discovered_devices = []
|
31
38
|
|
32
39
|
begin
|
33
|
-
Timeout::timeout(timeout) do
|
40
|
+
Timeout::timeout(options[:timeout]) do
|
34
41
|
while true
|
35
42
|
data = send_socket.recv(1024)
|
36
43
|
discovered_devices.push(LEDENET::Device.new(data))
|
37
44
|
|
38
|
-
raise Timeout::Error if discovered_devices.count >= expected_devices
|
45
|
+
raise Timeout::Error if discovered_devices.count >= options[:expected_devices]
|
39
46
|
end
|
40
47
|
end
|
41
48
|
rescue Timeout::Error
|
data/lib/ledenet/version.rb
CHANGED