Skip to main content

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 by pip install 'neewerd[mcp]').

Layout

  • neewerd/__main__.py — entrypoint: load + validate config → start neewer.Fleet → start modules.
  • neewerd/modules/ — I/O front-ends (socket, mqtt, osc, http, artnet, sacn) + the bundled web UIs. The artnet module 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.pyDaemonClient: the shared async client of the daemon's /api/v1 HTTP layer (no bleak, no neewer BLE code). Consumed by neewer-mcp.
  • neewerd/mcp_server.py — the MCP tools, built on DaemonClient.
  • 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


Download files

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

Source Distribution

neewerd-0.1.0.tar.gz (91.1 kB view details)

Uploaded Source

Built Distribution

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

neewerd-0.1.0-py3-none-any.whl (67.5 kB view details)

Uploaded Python 3

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

Hashes for neewerd-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6d1dca72113cbd0964e2ea8cf439ee270587641e5a73a5eb5bd7073882b6a928
MD5 6133597ccc6bdbe3e972f89c2695c136
BLAKE2b-256 f6e9200983a6586f7da89520b2bd64679c368322cecd61a96fee3239f2b685a6

See more details on using hashes here.

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

Hashes for neewerd-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 17942935199a4befd44d2b8f6c2ef04da2d743200ff8c757e18a5622aab30c38
MD5 e1f4384e89ec5988778be17c0d34b732
BLAKE2b-256 28c244962d54b36224df99d96f0d8ed2961e42948bb8cb3e8fc1e23fb50f017d

See more details on using hashes here.

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