Русский и English описания ниже.
GUI-приложение (Tkinter) для управления WLED через UDP realtime, где позиция подсветки задается источником данных (manual, home_assistant_ws, mqtt).
- Автопоиск WLED устройств по mDNS (
_wled._tcp.local). - Подключение к устройству кликом в списке (
Devices). - Чтение количества LED из
/json/info. - Управление эффектами подсветки по позиции объекта.
- Переключение языка интерфейса:
Русский/English. - Переводы вынесены в
/Users/idobryak/OpenAi/projects/wled-stair/wled_stair/i18n/(en.py,ru.py) с автоподхватом языков. - Источники данных:
manual: ручной слайдер позиции.home_assistant_ws: подписка на Home Assistant WebSocket (/api/websocket).mqtt: подписка на MQTT topic.
- Сохранение настроек в
settings.json. - Секреты (
HA token,MQTT password) через системный keychain (keyring) с fallback вsettings.json.
Devices
- Список найденных WLED устройств.
- Клик по устройству: подключение.
- Повторный клик по уже подключенному устройству: отключение.
Connection
- Поле
IP. Additional parameters ▸:Port,Timeout (s),UDP Port.
INFO
Status,LEDs,Counted Position,Discovery,Secrets storage.Counted Position = src + offsetс итоговым clamping в0..100%.
General Settings
Offset (-50..50)%.Effect:Частичная подсветкаПодстветка со стороныПодстветка от центаПодстветка к центру
- Для
Частичная подсветка: дополнительный параметрLEDs each side.
Data Source
Mode:manual/home_assistant_ws/mqtt.Manual Input:Position (0-100%).Home Assistant: статус +Last raw/numeric/position, URL, Token, Entity ID, Min/Max, Invert.MQTT: статус +Last raw/numeric/position, Host/Port/Topic, Username/Password, TLS, QoS, Min/Max, Invert.
- Кнопка
Save Settings
- Все источники управляют именно позицией (
0..100%), не яркостью. manual:- Позиция
0и100трактуется как отсутствие объекта (подсветка снимается с fade).
- Позиция
home_assistant_ws:unknown/unavailable/none/nullи нечисловые значения считаются неизвестными.- Значение вне
min..maxсчитаетсяOut of range.
mqtt:- Поддерживаются payload:
- число (например
123.4) - JSON
{ "value": ... } - JSON
{ "state": ... }
- число (например
unknown/unavailable/none/nullи нечисловые значения считаются неизвестными.- Значение вне
min..maxсчитаетсяOut of range.
- Поддерживаются payload:
- Для сетевых источников (
home_assistant_ws,mqtt) отображаются статусы с префиксами:[INFO],[OK],[WARN],[ERROR].
- Плавное включение: примерно
300 ms. - Плавное выключение: примерно
2000 ms. - Время развития эффектов (
from_side,from_center,to_center):4000 ms. - Если источник перестал давать валидную позицию, выход гасится после
3000 msс fade. - Ограничение DRGB: максимум
490LED.
- Файл настроек:
settings.json. - Для добавления нового языка: создать файл в
wled_stair/i18n/сLANGUAGE_IDиTRANSLATIONS. - Секреты:
System keychain(предпочтительно).settings.json (fallback), если keyring недоступен.
- Legacy-миграция поддерживается:
- старый блок
haпереносится вsources.home_assistant_ws.
- старый блок
uv run python main.pyили
python main.pyПроект распространяется под лицензией Apache 2.0. См. LICENSE.
A Tkinter GUI app to control WLED via UDP realtime, where light position is driven by a pluggable data source (manual, home_assistant_ws, mqtt).
- Automatic WLED discovery via mDNS (
_wled._tcp.local). - Click-to-connect device list (
Devices). - LED count loading from
/json/info. - Position-driven lighting effects.
- UI language switch:
Russian/English. - Translations are split into
/Users/idobryak/OpenAi/projects/wled-stair/wled_stair/i18n/(en.py,ru.py) and discovered automatically. - Data sources:
manual: slider-based position.home_assistant_ws: Home Assistant WebSocket subscription (/api/websocket).mqtt: MQTT topic subscription.
- Settings persisted in
settings.json. - Secrets (
HA token,MQTT password) stored in system keychain (keyring) with fallback tosettings.json.
Devices
- Discovered WLED devices.
- Click to connect.
- Click connected device again to disconnect.
Connection
IPfield.Additional parameters ▸:Port,Timeout (s),UDP Port.
INFO
Status,LEDs,Counted Position,Discovery,Secrets storage.Counted Position = src + offset, clamped to0..100%.
General Settings
Offset (-50..50)%.Effect:Частичная подсветкаПодстветка со стороныПодстветка от центаПодстветка к центру
- For
Частичная подсветка: extraLEDs each sidecontrol.
Data Source
Mode:manual/home_assistant_ws/mqtt.Manual Input:Position (0-100%).Home Assistant: status +Last raw/numeric/position, URL, Token, Entity ID, Min/Max, Invert.MQTT: status +Last raw/numeric/position, Host/Port/Topic, Username/Password, TLS, QoS, Min/Max, Invert.
Save Settingsbutton
- All sources control position (
0..100%), not brightness. manual:- Positions
0and100are treated as no object present (output fades out).
- Positions
home_assistant_ws:unknown/unavailable/none/nulland non-numeric states are treated as unknown.- Values outside
min..maxare treated asOut of range.
mqtt:- Supported payloads:
- number (e.g.
123.4) - JSON
{ "value": ... } - JSON
{ "state": ... }
- number (e.g.
unknown/unavailable/none/nulland non-numeric payloads are treated as unknown.- Values outside
min..maxare treated asOut of range.
- Supported payloads:
- For network sources (
home_assistant_ws,mqtt), statuses use:[INFO],[OK],[WARN],[ERROR].
- Fade-in time: about
300 ms. - Fade-out time: about
2000 ms. - Effect ramp time (
from_side,from_center,to_center):4000 ms. - If source stops providing valid position, output is released after
3000 msand faded out. - DRGB limit: up to
490LEDs.
- Settings file:
settings.json. - To add a new language: create a file in
wled_stair/i18n/withLANGUAGE_IDandTRANSLATIONS. - Secrets storage:
System keychain(preferred).settings.json (fallback)when keyring is unavailable.
- Legacy migration:
- old
hablock is migrated tosources.home_assistant_ws.
- old
uv run python main.pyor
python main.pyLicensed under Apache 2.0. See LICENSE.