Thin BLE control daemon for Neewer TL90C/Infinity lights — pluggable I/O modules over the neewer library
Project description
neewerd
Thin, library-backed control daemon for Neewer TL90C / TL120C ("NEEWER Infinity") RGB tube lights.
neewerd is built on the
neewer library and is based on
the research documented in the
neewer-hardware reference.
This package is the daemon shell only. All the byte-wise protocol knowledge,
the Fleet BLE client, animation effects, the device book and the BlueZ
self-heal live in the neewer
library — neewerd depends on it (pinned neewer>=0.1.0,<0.2.0) and just wires
pluggable I/O front-ends (socket / MQTT / OSC / HTTP+web UI / Art-Net / sACN)
and an MCP server onto the library's Fleet.
python -m neewerd [config.toml]
New protocol verbs (rgbcw / xy / gel by-MAC colour, …) arrive for free the
moment the library gains them: the daemon adds no per-verb code, only HTTP
field-maps and MCP tool wrappers. On startup the config is validated — unknown
top-level / [core] / [modules.*] keys are warned (a typo won't silently drop
a setting).
Console scripts
neewerd— the daemon itself.neewerctl— a thin client of the daemon's command socket.neewer-mcp— a stdio MCP server; a client of a running daemon's HTTP API (installed bypip install 'neewerd[mcp]').
Layout
neewerd/__main__.py— entrypoint: load + validate config → startneewer.Fleet→ start modules.neewerd/modules/— I/O front-ends (socket,mqtt,osc,http,artnet,sacn) + the bundled web UIs. Theartnetmodule drives tubes from DMX-over-IP with four personalities (hsi/cct/rgb/rgbw), so RGB/RGBW sources such as LedFx work directly; it paces BLE writes with a per-connection governor (auto-tuning, zero-config) so a fast source can't back up the Bluetooth transmit queue, and reports per-tube pacing telemetry (rate / bandwidth / latency / deferred).neewerd/client.py—DaemonClient: the shared async client of the daemon's/api/v1HTTP layer (nobleak, noneewerBLE code). Consumed byneewer-mcp.neewerd/mcp_server.py— the MCP tools, built onDaemonClient.neewerd/socketpath.py— shared command-socket path resolver.
HTTP API
The http module serves a REST layer at /api/v1, a legacy line transport, a
Server-Sent-Events stream that pushes on change (/api/v1/events), and the
bundled web UIs (/, /console). The /console page shows full per-light detail
(model / firmware / battery / temperature / RSSI / network id / last command) plus
a write-pacing (governor) block and a system panel with a backpressure indicator;
the state API and SSE stream carry the same per-tube pacing stats under a gov
key. Full reference: docs/HTTP-API.md.
Bind loopback — there is no auth/TLS.
Runtime signals
Tune a running daemon without a restart (a restart drops every BLE link):
SIGUSR1— toggle DEBUG logging on/off (watch the notify/GATT stream live).SIGUSR2— reset the log level to the configured one.SIGHUP— re-read the config and hot-apply the safe subset:[presets]and[core.positions]. Roster keys and module knobs are read at startup only; the reload logs exactly what it ignored.
kill -USR1 $(pgrep -f 'python -m neewerd')
Install (local dev)
uv venv .venv
.venv/bin/pip install -e '.[all]'
(Or, with a sibling checkout of
neewer-python to develop both at
once: .venv/bin/pip install -e ../neewer-python -e '.[all]'.)
See CHANGELOG.md for notable changes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file neewerd-0.1.0.tar.gz.
File metadata
- Download URL: neewerd-0.1.0.tar.gz
- Upload date:
- Size: 91.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d1dca72113cbd0964e2ea8cf439ee270587641e5a73a5eb5bd7073882b6a928
|
|
| MD5 |
6133597ccc6bdbe3e972f89c2695c136
|
|
| BLAKE2b-256 |
f6e9200983a6586f7da89520b2bd64679c368322cecd61a96fee3239f2b685a6
|
File details
Details for the file neewerd-0.1.0-py3-none-any.whl.
File metadata
- Download URL: neewerd-0.1.0-py3-none-any.whl
- Upload date:
- Size: 67.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17942935199a4befd44d2b8f6c2ef04da2d743200ff8c757e18a5622aab30c38
|
|
| MD5 |
e1f4384e89ec5988778be17c0d34b732
|
|
| BLAKE2b-256 |
28c244962d54b36224df99d96f0d8ed2961e42948bb8cb3e8fc1e23fb50f017d
|