lex-wled 0.1.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 +7 -0
- data/.github/workflows/ci.yml +16 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.rubocop.yml +53 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +12 -0
- data/README.md +74 -0
- data/lex-wled.gemspec +30 -0
- data/lib/legion/extensions/wled/client.rb +31 -0
- data/lib/legion/extensions/wled/helpers/client.rb +21 -0
- data/lib/legion/extensions/wled/runners/effects.rb +26 -0
- data/lib/legion/extensions/wled/runners/state.rb +31 -0
- data/lib/legion/extensions/wled/version.rb +9 -0
- data/lib/legion/extensions/wled.rb +15 -0
- metadata +72 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: d6a69b3c11767dd1bc0f214b64a974b69049f2d0d9ce65f6a1367b32d71ea399
|
|
4
|
+
data.tar.gz: 16de9a8b3c2f3477627b091c09ee968b381d7ab9eead701ecb5d5d135e6f4751
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 95d2595231940542dbc9692132cf1c98a79390d16403cc14e19f99314c5321862e6d8b22f5230818a5cdcf73a1d774d7af9ec24c6d5786faf4426f8db574a084
|
|
7
|
+
data.tar.gz: 90b4587c6e701b7b52c5f6b927edc3922e57caf2852a1b52809597e510526e6feec0f9bd37b699005fe877fe1253e165f3a241abf5a7d655ba0a3f215f471728
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [origin]
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
ci:
|
|
9
|
+
uses: LegionIO/.github/.github/workflows/ci.yml@main
|
|
10
|
+
|
|
11
|
+
release:
|
|
12
|
+
needs: ci
|
|
13
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/origin'
|
|
14
|
+
uses: LegionIO/.github/.github/workflows/release.yml@main
|
|
15
|
+
secrets:
|
|
16
|
+
rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 3.4
|
|
3
|
+
NewCops: enable
|
|
4
|
+
SuggestExtensions: false
|
|
5
|
+
|
|
6
|
+
Layout/LineLength:
|
|
7
|
+
Max: 160
|
|
8
|
+
|
|
9
|
+
Layout/SpaceAroundEqualsInParameterDefault:
|
|
10
|
+
EnforcedStyle: space
|
|
11
|
+
|
|
12
|
+
Layout/HashAlignment:
|
|
13
|
+
EnforcedHashRocketStyle: table
|
|
14
|
+
EnforcedColonStyle: table
|
|
15
|
+
|
|
16
|
+
Metrics/MethodLength:
|
|
17
|
+
Max: 50
|
|
18
|
+
|
|
19
|
+
Metrics/ClassLength:
|
|
20
|
+
Max: 1500
|
|
21
|
+
|
|
22
|
+
Metrics/ModuleLength:
|
|
23
|
+
Max: 1500
|
|
24
|
+
|
|
25
|
+
Metrics/BlockLength:
|
|
26
|
+
Max: 40
|
|
27
|
+
Exclude:
|
|
28
|
+
- 'spec/**/*'
|
|
29
|
+
|
|
30
|
+
Metrics/ParameterLists:
|
|
31
|
+
Max: 10
|
|
32
|
+
|
|
33
|
+
Metrics/AbcSize:
|
|
34
|
+
Max: 60
|
|
35
|
+
|
|
36
|
+
Metrics/CyclomaticComplexity:
|
|
37
|
+
Max: 15
|
|
38
|
+
|
|
39
|
+
Metrics/PerceivedComplexity:
|
|
40
|
+
Max: 17
|
|
41
|
+
|
|
42
|
+
Style/Documentation:
|
|
43
|
+
Enabled: false
|
|
44
|
+
|
|
45
|
+
Style/SymbolArray:
|
|
46
|
+
Enabled: true
|
|
47
|
+
|
|
48
|
+
Style/FrozenStringLiteralComment:
|
|
49
|
+
Enabled: true
|
|
50
|
+
EnforcedStyle: always
|
|
51
|
+
|
|
52
|
+
Naming/FileName:
|
|
53
|
+
Enabled: false
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.1.0] - 2026-03-21
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Initial release
|
|
7
|
+
- `Helpers::Client` — Faraday connection builder targeting WLED JSON API with JSON content type
|
|
8
|
+
- `Runners::State` — get_state, set_power, set_brightness, set_color
|
|
9
|
+
- `Runners::Effects` — list_effects, set_effect, list_palettes
|
|
10
|
+
- Standalone `Client` class for use outside the Legion framework
|
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# lex-wled
|
|
2
|
+
|
|
3
|
+
A Legion Extension (LEX) for controlling [WLED](https://kno.wled.ge/) LED controllers via the WLED JSON API.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Add to your Gemfile:
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
gem 'lex-wled'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Configuration
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"lex-wled": {
|
|
18
|
+
"url": "http://wled-light.local"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Standalone Usage
|
|
24
|
+
|
|
25
|
+
```ruby
|
|
26
|
+
require 'legion/extensions/wled'
|
|
27
|
+
|
|
28
|
+
client = Legion::Extensions::Wled::Client.new(url: 'http://wled-light.local')
|
|
29
|
+
|
|
30
|
+
# Get current state
|
|
31
|
+
client.get_state
|
|
32
|
+
|
|
33
|
+
# Control power
|
|
34
|
+
client.set_power(on: true)
|
|
35
|
+
client.set_power(on: false)
|
|
36
|
+
|
|
37
|
+
# Set brightness (0-255)
|
|
38
|
+
client.set_brightness(bri: 128)
|
|
39
|
+
|
|
40
|
+
# Set RGB color
|
|
41
|
+
client.set_color(red: 255, green: 0, blue: 0)
|
|
42
|
+
|
|
43
|
+
# List available effects
|
|
44
|
+
client.list_effects
|
|
45
|
+
|
|
46
|
+
# Set effect by id
|
|
47
|
+
client.set_effect(id: 3)
|
|
48
|
+
|
|
49
|
+
# List available palettes
|
|
50
|
+
client.list_palettes
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Runners
|
|
54
|
+
|
|
55
|
+
### State
|
|
56
|
+
|
|
57
|
+
| Method | Description |
|
|
58
|
+
|--------|-------------|
|
|
59
|
+
| `get_state` | GET /json/state — fetch current device state |
|
|
60
|
+
| `set_power(on:)` | POST /json/state — turn on or off |
|
|
61
|
+
| `set_brightness(bri:)` | POST /json/state — set brightness 0-255 |
|
|
62
|
+
| `set_color(red:, green:, blue:)` | POST /json/state — set RGB color on segment 0 |
|
|
63
|
+
|
|
64
|
+
### Effects
|
|
65
|
+
|
|
66
|
+
| Method | Description |
|
|
67
|
+
|--------|-------------|
|
|
68
|
+
| `list_effects` | GET /json/effects — list all available effects |
|
|
69
|
+
| `set_effect(id:)` | POST /json/state — apply effect by integer id |
|
|
70
|
+
| `list_palettes` | GET /json/palettes — list all available palettes |
|
|
71
|
+
|
|
72
|
+
## License
|
|
73
|
+
|
|
74
|
+
MIT
|
data/lex-wled.gemspec
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/legion/extensions/wled/version'
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = 'lex-wled'
|
|
7
|
+
spec.version = Legion::Extensions::Wled::VERSION
|
|
8
|
+
spec.authors = ['Esity']
|
|
9
|
+
spec.email = ['matthewdiverson@gmail.com']
|
|
10
|
+
|
|
11
|
+
spec.summary = 'LEX::Wled'
|
|
12
|
+
spec.description = 'Used to connect Legion to WLED'
|
|
13
|
+
spec.homepage = 'https://github.com/LegionIO/lex-wled'
|
|
14
|
+
spec.license = 'MIT'
|
|
15
|
+
spec.required_ruby_version = '>= 3.4'
|
|
16
|
+
|
|
17
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
18
|
+
spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-wled'
|
|
19
|
+
spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-wled/blob/main/CHANGELOG.md'
|
|
20
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
21
|
+
|
|
22
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
23
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
24
|
+
end
|
|
25
|
+
spec.bindir = 'exe'
|
|
26
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
27
|
+
spec.require_paths = ['lib']
|
|
28
|
+
|
|
29
|
+
spec.add_dependency 'faraday', '~> 2.0'
|
|
30
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'helpers/client'
|
|
4
|
+
require_relative 'runners/state'
|
|
5
|
+
require_relative 'runners/effects'
|
|
6
|
+
|
|
7
|
+
module Legion
|
|
8
|
+
module Extensions
|
|
9
|
+
module Wled
|
|
10
|
+
class Client
|
|
11
|
+
include Helpers::Client
|
|
12
|
+
include Runners::State
|
|
13
|
+
include Runners::Effects
|
|
14
|
+
|
|
15
|
+
attr_reader :opts
|
|
16
|
+
|
|
17
|
+
def initialize(url: 'http://wled-light.local', **extra)
|
|
18
|
+
@opts = { url: url, **extra }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def settings
|
|
22
|
+
{ options: @opts }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def connection(**override)
|
|
26
|
+
super(**@opts, **override)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'faraday'
|
|
4
|
+
|
|
5
|
+
module Legion
|
|
6
|
+
module Extensions
|
|
7
|
+
module Wled
|
|
8
|
+
module Helpers
|
|
9
|
+
module Client
|
|
10
|
+
def connection(url: 'http://wled-light.local', **_opts)
|
|
11
|
+
Faraday.new(url: url) do |conn|
|
|
12
|
+
conn.request :json
|
|
13
|
+
conn.response :json, content_type: /\bjson$/
|
|
14
|
+
conn.adapter Faraday.default_adapter
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Wled
|
|
6
|
+
module Runners
|
|
7
|
+
module Effects
|
|
8
|
+
def list_effects(**)
|
|
9
|
+
resp = connection(**).get('/json/effects')
|
|
10
|
+
{ effects: resp.body }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def set_effect(id:, **)
|
|
14
|
+
resp = connection(**).post('/json/state', { seg: [{ fx: id }] })
|
|
15
|
+
{ state: resp.body }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def list_palettes(**)
|
|
19
|
+
resp = connection(**).get('/json/palettes')
|
|
20
|
+
{ palettes: resp.body }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Wled
|
|
6
|
+
module Runners
|
|
7
|
+
module State
|
|
8
|
+
def get_state(**)
|
|
9
|
+
resp = connection(**).get('/json/state')
|
|
10
|
+
{ state: resp.body }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def set_power(on:, **)
|
|
14
|
+
resp = connection(**).post('/json/state', { on: on })
|
|
15
|
+
{ state: resp.body }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def set_brightness(bri:, **)
|
|
19
|
+
resp = connection(**).post('/json/state', { bri: bri })
|
|
20
|
+
{ state: resp.body }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_color(red:, green:, blue:, **)
|
|
24
|
+
resp = connection(**).post('/json/state', { seg: [{ col: [[red, green, blue]] }] })
|
|
25
|
+
{ state: resp.body }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'legion/extensions/wled/version'
|
|
4
|
+
require 'legion/extensions/wled/helpers/client'
|
|
5
|
+
require 'legion/extensions/wled/runners/state'
|
|
6
|
+
require 'legion/extensions/wled/runners/effects'
|
|
7
|
+
require 'legion/extensions/wled/client'
|
|
8
|
+
|
|
9
|
+
module Legion
|
|
10
|
+
module Extensions
|
|
11
|
+
module Wled
|
|
12
|
+
extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: lex-wled
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Esity
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: faraday
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '2.0'
|
|
26
|
+
description: Used to connect Legion to WLED
|
|
27
|
+
email:
|
|
28
|
+
- matthewdiverson@gmail.com
|
|
29
|
+
executables: []
|
|
30
|
+
extensions: []
|
|
31
|
+
extra_rdoc_files: []
|
|
32
|
+
files:
|
|
33
|
+
- ".github/workflows/ci.yml"
|
|
34
|
+
- ".gitignore"
|
|
35
|
+
- ".rspec"
|
|
36
|
+
- ".rubocop.yml"
|
|
37
|
+
- CHANGELOG.md
|
|
38
|
+
- Gemfile
|
|
39
|
+
- README.md
|
|
40
|
+
- lex-wled.gemspec
|
|
41
|
+
- lib/legion/extensions/wled.rb
|
|
42
|
+
- lib/legion/extensions/wled/client.rb
|
|
43
|
+
- lib/legion/extensions/wled/helpers/client.rb
|
|
44
|
+
- lib/legion/extensions/wled/runners/effects.rb
|
|
45
|
+
- lib/legion/extensions/wled/runners/state.rb
|
|
46
|
+
- lib/legion/extensions/wled/version.rb
|
|
47
|
+
homepage: https://github.com/LegionIO/lex-wled
|
|
48
|
+
licenses:
|
|
49
|
+
- MIT
|
|
50
|
+
metadata:
|
|
51
|
+
homepage_uri: https://github.com/LegionIO/lex-wled
|
|
52
|
+
source_code_uri: https://github.com/LegionIO/lex-wled
|
|
53
|
+
changelog_uri: https://github.com/LegionIO/lex-wled/blob/main/CHANGELOG.md
|
|
54
|
+
rubygems_mfa_required: 'true'
|
|
55
|
+
rdoc_options: []
|
|
56
|
+
require_paths:
|
|
57
|
+
- lib
|
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '3.4'
|
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
requirements: []
|
|
69
|
+
rubygems_version: 3.6.9
|
|
70
|
+
specification_version: 4
|
|
71
|
+
summary: LEX::Wled
|
|
72
|
+
test_files: []
|