Skip to content

DALI: keep asking for a group whose members are still initializing - #1229

Draft
evgeny-boger wants to merge 2 commits into
masterfrom
split/dali-group-awaiting-members
Draft

DALI: keep asking for a group whose members are still initializing#1229
evgeny-boger wants to merge 2 commits into
masterfrom
split/dali-group-awaiting-members

Conversation

@evgeny-boger

@evgeny-boger evgeny-boger commented Aug 31, 2026

Copy link
Copy Markdown
Member

Что даёт

Страница группы DALI больше не залипает пустой, если открыть её, пока участники группы ещё инициализируются: она говорит, что происходит, и заполняется сама.

Почему пустой ответ законен

Editor/GetGroup сливает схему параметров только по инициализированным участникам группы (load_group_info). Пока ни один не поднялся, демон честно отвечает пустой схемой — это «пока нечего показать», а не «у группы нет настроек». Стор кэшировал этот ответ как конфигурацию группы, и вкладка оставалась пустой всё время, пока открыта страница DALI.

  • GroupStore.isAwaitingMembers: ответ с пустым properties не считается загруженным, следующий load() спрашивает снова;
  • в этом состоянии вкладка показывает баннер и переспрашивает каждые 3 с (GetGroup у демона чисто внутренний, шину не трогает), форма заполняется без перезагрузки;
  • упавший GetGroup (занятая шина, таймаут RPC) вместо пустой страницы даёт предупреждение с кнопкой «Повторить».

Как воспроизвести и проверить

  1. Контроллер с WB-DALI, на шине есть группа хотя бы с одним участником.
  2. Открыть Настройки → Конфигурации → DALI, дождаться дерева с узлом группы; саму группу не открывать. Узел строится из groups в GetList, поэтому страница должна быть открыта до перезапуска демона.
  3. На контроллере выполнить systemctl restart wb-mqtt-dali.
  4. В первые ~10–30 с кликнуть в дереве по этой группе.
  5. До: пустая область параметров, и она остаётся пустой, пока открыта страница DALI, — даже когда участники уже инициализировались.
  6. После: баннер «Устройства группы ещё инициализируются…», через несколько секунд параметры появляются сами.

Парно к wirenboard/wb-mqtt-dali#225: там пустой ответ о группе подтягивает инициализацию балластов вперёд, вместо ожидания бэкоффа 5 с → 60 с.
Тикет: SOFT-7444

Скриншоты

Стенд WB8 с реальным WB-DALI, группа 0 на шине 2 (один участник — «DALI 1»). Порядок из раздела выше: открыть страницу DALI, дождаться дерева, группу не открывать, systemctl restart wb-mqtt-dali, кликнуть по «Группа 0» примерно через 4 с.

«До» — homeui 2.250.4~exp~split+dali+live+controls+v2~2~gaf772ffb (master + живые контролы, без этого исправления); «после» — 2.250.0~exp~feat+dali+device+controls~16~g90254100. Демон wb-mqtt-dali 1.27.0~exp~soft+dali+host+apis~33~g591221e в обоих случаях.

До: +14 с после перезапуска демона — область параметров пуста

До: +14 с после перезапуска демона — область параметров пуста

До: +81 с, всё ещё пусто, хотя контролы сверху уже показывают 100 % / 6535 К — участники давно инициализировались

До: +81 с, всё ещё пусто, хотя контролы сверху уже показывают 100 % / 6535 К — участники давно инициализировались

После: +4 с — «Устройства группы ещё инициализируются…»

После: +4 с — «Устройства группы ещё инициализируются…»

После: +7 с — параметры заполнились сами, без действий пользователя

После: +7 с — параметры заполнились сами, без действий пользователя

Если кликнуть по группе в первую секунду после перезапуска, попадаешь в третье состояние, которое добавляет этот PR: «Не удалось прочитать настройки группы…» с кнопкой «Повторить» — RPC демона ещё не поднялся. Скриншота нет.

🤖 Generated with Claude Code

GetGroup merges the parameters of the group's members that have finished
initializing; while none has — a cold boot with a large bus — it answers an
empty schema. The store cached that answer as "this group has no settings",
and the group page stayed a controls-only stub for the whole session (seen
on real hardware after a memo reset). An empty answer now marks the store as
awaiting members: the page says so and re-asks every 3 s until the form
fills in. A failed GetGroup gets a retry instead of a blank page.

The existing "skips if already loaded" fixture had to become non-empty —
an empty schema is precisely the case that is no longer cached.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 duplication

Metric Results
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

The new retry-load key duplicated dali.buttons.retry word for word — and had
landed in the svg-dashboard block besides, so the button rendered the raw
key instead of a caption.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant