BusyLight for Humans™ gives you control of USB attached LED lights from a variety of vendors. Lights can be controlled via the command-line, using a HTTP API or imported directly into your own python project.
Six Lights Attached to One Host
Back to Front, Left to Right
BlyncLight, BlyncLight Plus, Busylight
Blink(1), Flag, BlinkStick
Features
- Control lights from the command-line.
- Control lights via a Web API.
- Import
busylightinto your own project. - Supports Six Vendors & Multiple Models:
- Works on MacOS, Linux, probably Windows and BSD too!
- Tested extensively on Raspberry Pi 3b+, Zero W and 4
If you have a USB light that's not on this list open an issue with the make and model device you want supported, where I can get one, and any public hardware documentation you are aware of.
Basic Install
Installs only the command-line busylight tool and associated
modules.
$ python3 -m pip install busylight-for-humans
Web API Install
Installs uvicorn and FastAPI in addition to busylight:
$ python3 -m pip install busylight-for-humans[webapi]
Linux Post-Install Activities
Linux controls access to USB devices via the udev subsystem. By default it denies non-root users access to devices it doesn't recognize. I've got you covered!
You'll need root access to configure the udev rules:
$ busylight udev-rules -o 99-busylights.rules
$ sudo cp 99-busylights.rules /etc/udev/rules.d
$ sudo udevadm control -R
$ # unplug/plug your light
$ busylight on
Command-Line Examples
$ busylight on # light turns on green
$ busylight on red # now it's shining a friendly red
$ busylight on 0xff0000 # still red
$ busylight on #00ff00 # now it's blue!
$ busylight blink # it's slowly blinking on and off with a red color
$ busylight blink green fast # blinking faster green and off
$ busylight --all on # turn all lights on green
$ busylight --all off # turn all lights off
HTTP API Examples
First start the busylight API server:
$ busylight serve
INFO: Started server process [20189]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8888 (Press CTRL+C to quit)
The API is fully documented and available @ https://localhost:8888/redoc
Now you can use the web API endpoints which return JSON payloads:
$ curl -s http://localhost:8888/lights
...
$ curl -s http://localhost:8888/light/0/on | jq
{
"light_id": 0,
"action": "on",
"color": "green"
}
$ curl -s http://localhost:8888/light/0/off | jq
{
"light_id": 0,
"action": "off"
}
$ curl -s http://localhost:8888/light/0/on/purple | jq
{
"light_id": 0,
"action": "on",
"color": "purple"
}
$ curl -s http://localhost:8888/light/0/off | jq
{
"light_id": 0,
"action": "off"
}
$ curl -s http://localhost:8888/lights/on | jq
{
"light_id": "all",
"action": "on",
"color": "green"
}
$ curl -s http://localhost:8888/lights/off | jq
{
"light_id": "all",
"action": "off"
}
$ curl -s http://localhost:8888/lights/rainbow | jq
{
"light_id": "all",
"action": "effect",
"name": "rainbow"
}
Code Examples
Adding light support to your own python applications is easy!
Simple Case: Turn On a Single Light
In this example, we pick an Embrava Blynclight to activate with the color white.
from busylight.lights.embrava import Blynclight
light = Blynclight.first_light()
light.on((255, 255, 255))
Slightly More Complicated
The busylight package includes a manager class that great for
working with multiple lights or lights that require a little
more direct intervention like the Kuando Busylight series.
from busylight.manager import LightManager, ALL_LIGHTS
from busylight.effects import rainbow
manager = LightManager()
for light in manager.lights:
print(light.name)
manager.apply_effect_to_light(ALL_LIGHTS, rainbow)
...
manager.lights_off(ALL_LIGHTS)
Metadata
Release files for busylight-for-humans 0.12.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| busylight-for-humans-0.12.3.tar.gz | 33.5 kB | Without provenance | Details for busylight-for-humans-0.12.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| busylight_for_humans-0.12.3-py3-none-any.whl | Python 3 | none | any | Details for busylight_for_humans-0.12.3-py3-none-any.whl |
Total release size: 74.9 kB
Release files / busylight-for-humans-0.12.3.tar.gz
| Download URL | busylight-for-humans-0.12.3.tar.gz |
|---|---|
| Size | 33.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
63fbed465d09cd0a0df52b558bef32726a3f1e46597ce510ece1f245e3a470fb
|
|
BLAKE2b-256 checksum How to use checksums |
8a078eaedc84af2cbdfc196aca3f8ab4d1b119bcb77338578930005fcefb7726
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.4 CPython/3.9.4 Darwin/20.4.0
|
Release files / busylight_for_humans-0.12.3-py3-none-any.whl
| Download URL | busylight_for_humans-0.12.3-py3-none-any.whl |
|---|---|
| Size | 41.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
78bb58962cfbc80819ae93a5f2fe166d945cc8180bafd947b4c41844ef330dc3
|
|
BLAKE2b-256 checksum How to use checksums |
67598990a0b79e942551a712f437755afbdfd2bc7865cd30dede6dd2910f35d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.4 CPython/3.9.4 Darwin/20.4.0
|
Security for busylight-for-humans 0.12.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.