Skip to main content

Busylight Core Implementation for Humans, presumably like you!

Project description

Release Version Release Date Python Version License Monthly Downloads

Busylight Core for Humans™

A unified Python library for controlling USB status lights (busylights) from multiple vendors

busylight-core provides a consistent interface to control various USB-connected status lights, commonly used for indicating availability, meeting status, or system notifications. Were you looking for a command-line interface to control your lights? Check out Busylight for Humans™!

Features

  • Multi-Vendor Support - Control devices from nine vendors.
  • Multiple Connection Types - HID and Serial device support.
  • Python Library - Clean, object-oriented API for easy integration.
  • Input Detection - Button press handling on interactive devices.
  • Multi-LED Support - Control devices with 1-192 individual LEDs.
  • Extensible Architecture - Easy to add support for new devices.

Supported Hardware

Vendor Device Models
Agile Innovative BlinkStick, BlinkStick Pro, BlinkStick Flex, BlickStick Nano, BlinkStick Strip, BlinkStick Square
CompuLab fit-statUSB
EPOS Busylight
Embrava Blynclight, Blynclight Mini, Blynclight Plus
Kuando Busylight Alpha, Busylight Omega
Luxafor Flag, Mute, Orb, Bluetooth
MuteMe MuteMe, MuteMe Mini, MuteSync
Plantronics Status Indicator
ThingM Blink(1)

Installation

Add to Your Project with uv

uv add busylight_core

Install with pip

python3 -m pip install busylight_core

Usage

Basic usage (any compatible device):

from busylight_core import Light

lights = Light.all_lights()

print(f"Found {len(lights)} light(s)")

for light in lights:
    light.on((255, 0, 0))  # Turn on red
    light.off()            # Turn off

Vendor-specific usage (recommended for production):

from busylight_core import EmbravaLights, LuxaforLights, KuandoLights

# Get all Embrava devices
embrava_lights = EmbravaLights.all_lights()
if embrava_lights:
    light = embrava_lights[0]
    light.on((255, 0, 0), sound=True)  # Red with audio alert
    light.dim()  # Reduce brightness

# Get all Luxafor devices  
luxafor_lights = LuxaforLights.all_lights()
for light in luxafor_lights:
    light.on((0, 255, 0))  # Green

# Get first Kuando device
try:
    kuando_light = KuandoLights.first_light()
    kuando_light.on((0, 0, 255))  # Blue
    kuando_light.keepalive()  # Required for Kuando devices
except NoLightsFoundError:
    print("No Kuando devices found")

Common Use Cases

Meeting Status Indicator:

from busylight_core import Light

red = (255, 0, 0)
green = (0, 128, 0)
yellow = (255, 255, 0)

# Any device approach
light = Light.first_light()

# Available
light.on(green)

# In meeting  
light.on(red)

# Away
light.on(yellow)

light.off()

Enhanced Meeting Status with Audio (Embrava devices):

from busylight_core import EmbravaLights, NoLightsFoundError

try:
    light = EmbravaLights.first_light()
    
    # Available (quiet green)
    light.on((0, 255, 0))
    
    # In meeting (red with audio alert)
    light.on((255, 0, 0), sound=True)
    
    # Away (dim yellow)
    light.on((255, 255, 0))
    light.dim()
    
except NoLightsFoundError:
    print("No Embrava devices found")

For detailed documentation including API reference, advanced usage examples, and device-specific information:

Development

This project and it's virtual environment is managed using uv and is configured to support automatic activation of virtual environments using direnv. Development activites such as linting and testing are automated via Poe The Poet, run poe after cloning this repo for a list of tasks.

Check out CONTRIBUTING.md for more development details.


gh:JnyJny/python-package-cookiecutter

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

busylight_core-0.14.1.tar.gz (33.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

busylight_core-0.14.1-py3-none-any.whl (59.6 kB view details)

Uploaded Python 3

File details

Details for the file busylight_core-0.14.1.tar.gz.

File metadata

  • Download URL: busylight_core-0.14.1.tar.gz
  • Upload date:
  • Size: 33.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for busylight_core-0.14.1.tar.gz
Algorithm Hash digest
SHA256 a54b422cad362d63f55c1518b3ffcf99eab903c3f39eba763fb755c615f932dd
MD5 b21b6a2e09e18b7919759d7e650544cb
BLAKE2b-256 f02ef21b155996d1ad7096c7ec8f325df9bc0b7c62e25e299edaa88b5d39616d

See more details on using hashes here.

Provenance

The following attestation bundles were made for busylight_core-0.14.1.tar.gz:

Publisher: release.yaml on JnyJny/busylight-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file busylight_core-0.14.1-py3-none-any.whl.

File metadata

File hashes

Hashes for busylight_core-0.14.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6346d2319ed6ffb3ba05b6e7d16544d37c0b445a642512c1dabe096646c39263
MD5 cb1c019aaafdd5cf20769079b68b524d
BLAKE2b-256 f2e96ec3e8dc3d02e63fd726da7fa5c4ecc76d079e2d2ac64f0cf2b01b8655b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for busylight_core-0.14.1-py3-none-any.whl:

Publisher: release.yaml on JnyJny/busylight-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page