Device Capabilities Reference¶
This guide provides detailed information about each supported device's capabilities.
Capability Overview¶
| Feature | Devices | Description |
|---|---|---|
| Basic RGB Color | All devices | on(color) / off() with RGB tuples (0-255) |
| Hardware Flash | Embrava (3 devices) | flash(color, speed) with FlashSpeed enum |
| Dim/Bright | Embrava (3 devices) | dim() / bright() for brightness control |
| Audio Playback | Blynclight Plus (1 device) | play_sound(music, volume, repeat) |
| Multi-LED Control | BlinkStick variants, Luxafor Flag | on(color, led=N) for individual LEDs |
| Button Input | MuteMe (3 devices), Luxafor Mute | is_button / button_on properties |
| Auto Keepalive | Kuando (2 devices) | Managed automatically by on() / off() |
Vendor Details¶
Embrava (3 devices)¶
Professional meeting status lights with flash, brightness, and audio capabilities.
| Device | Flash | Dim/Bright | Audio | Special |
|---|---|---|---|---|
| Blynclight | Yes | Yes | No | Industry standard |
| Blynclight Mini | Yes | Yes | No | Compact form |
| Blynclight Plus | Yes | Yes | Yes | play_sound(), mute(), unmute() |
Usage:
from busylight_core import EmbravaLights, BlynclightPlus, NoLightsFoundError
# Any Embrava device - flash and brightness
try:
light = EmbravaLights.first_light()
light.on((255, 0, 0))
light.dim()
light.bright()
light.flash((255, 255, 0))
light.stop_flashing()
except NoLightsFoundError:
pass
# Blynclight Plus only - audio
try:
light = BlynclightPlus.first_light()
light.play_sound(music=0, volume=2)
light.stop_sound()
light.mute()
light.unmute()
except NoLightsFoundError:
pass
Kuando (2 devices)¶
Nordic-design status lights with automatic keepalive management.
| Device | Flash | Audio | Special |
|---|---|---|---|
| Busylight Alpha | No | No | Multiple USB IDs, auto keepalive |
| Busylight Omega | No | No | Premium model, auto keepalive |
Usage:
from busylight_core import KuandoLights, BusylightAlpha, NoLightsFoundError
try:
light = KuandoLights.first_light()
light.on((0, 255, 0)) # Keepalive starts automatically
light.off() # Keepalive stops automatically
except NoLightsFoundError:
pass
Note on ringtones: The Kuando protocol supports 9 built-in ringtones (Ring enum: OpenOffice, Quiet, Funky, FairyTale, KuandoTrain, TelephoneNordic, TelephoneOriginal, TelephonePickMeUp, Buzz) with volume control (0-3) at the command level. However, these are not exposed through the public on() API. The Step.jump() command in busylight_core.vendors.kuando.implementation.commands accepts ringtone and volume parameters for direct protocol access.
Luxafor (5 devices)¶
Versatile devices including multi-LED and button-equipped models.
| Device | LEDs | Flash | Button | Special |
|---|---|---|---|---|
| Flag | 6 | No | No | Multi-LED control via led param |
| Orb | 1 | No | No | Spherical design |
| Bluetooth | 1 | No | No | Wireless capable |
| Mute | 1 | No | Yes | is_button, button_on |
| Busy Tag | 1 | No | No | ASCII text protocol |
Usage:
from busylight_core import Flag, NoLightsFoundError
from busylight_core.vendors.luxafor import Mute
# Multi-LED with Flag
try:
flag = Flag.first_light()
for i in range(6):
flag.on((255, 0, 0), led=i) # Individual LED control
flag.on((0, 255, 0)) # All LEDs (led=0 default)
except NoLightsFoundError:
pass
# Button with Luxafor Mute
try:
mute = Mute.first_light()
if mute.is_button and mute.button_on:
mute.on((255, 0, 0)) # Red when pressed
except NoLightsFoundError:
pass
Agile Innovative BlinkStick (6 variants)¶
Flexible multi-LED strips and matrices for creative applications.
| Device | LEDs | Special |
|---|---|---|
| BlinkStick | 1 | Basic model |
| BlinkStick Nano | 2 | Dual LED |
| BlinkStick Square | 8 | 8-LED matrix |
| BlinkStick Strip | 8 | LED strip |
| BlinkStick Flex | 32 | Flexible strip |
| BlinkStick Pro | 64 | Professional strip |
Usage:
from busylight_core import AgileInnovativeLights, BlinkStickPro, NoLightsFoundError
# Any BlinkStick
try:
light = AgileInnovativeLights.first_light()
light.on((255, 0, 255))
except NoLightsFoundError:
pass
# Multi-LED with BlinkStick Pro
try:
strip = BlinkStickPro.first_light()
colors = [(255,0,0), (255,127,0), (255,255,0), (0,255,0), (0,0,255)]
for i, color in enumerate(colors):
strip.on(color, led=i)
except NoLightsFoundError:
pass
ThingM (1 device)¶
Popular maker-friendly device with dual LEDs.
| Device | LEDs | Special |
|---|---|---|
| Blink(1) | 2 | Dual LED control |
Usage:
from busylight_core import Blink1, NoLightsFoundError
try:
blink = Blink1.first_light()
blink.on((255, 0, 0), led=0) # First LED
blink.on((0, 0, 255), led=1) # Second LED
blink.on((255, 255, 255)) # Both LEDs
except NoLightsFoundError:
pass
MuteMe (3 devices)¶
Specialized mute button devices with status indication.
| Device | Button | Special |
|---|---|---|
| MuteMe Original | Yes | is_button, button_on |
| MuteMe Mini | Yes | Compact form |
| MuteSync Button | Yes | is_button, button_on |
Usage:
from busylight_core import MuteMe, MuteMeLights, NoLightsFoundError
try:
device = MuteMe.first_light()
if device.is_button:
if device.button_on:
device.on((255, 0, 0)) # Red when muted
else:
device.on((0, 255, 0)) # Green when unmuted
except NoLightsFoundError:
pass
Other Vendors¶
EPOS Busylight - Professional conferencing light
from busylight_core import EPOSLights, NoLightsFoundError
try:
light = EPOSLights.first_light()
light.on((0, 255, 0))
except NoLightsFoundError:
pass
Plantronics Status Indicator - Call center indicator
from busylight_core import PlantronicsLights, NoLightsFoundError
try:
light = PlantronicsLights.first_light()
light.on((255, 0, 0))
except NoLightsFoundError:
pass
CompuLab fit-statUSB - Industrial status indicator
from busylight_core import CompuLabLights, NoLightsFoundError
try:
light = CompuLabLights.first_light()
light.on((255, 165, 0))
except NoLightsFoundError:
pass
Hardware Notes¶
Color Ordering¶
Devices use different internal color byte orders, but the library handles all conversions automatically. You always pass standard RGB tuples:
- BlinkStick devices: GRB ordering internally
- Blynclight devices: RBG ordering internally
- Kuando Busylight devices: RGB with 0-100 scaling internally
Power Requirements¶
All supported devices are USB bus-powered and require no external power supply.
Platform Compatibility¶
All devices work on Windows, macOS, and Linux. Linux users need udev rules for non-root access (see Installation Guide).
Next Steps¶
- Check the Examples for more usage patterns
- Review the API Reference for complete method documentation
- See Installation Guide for setup instructions