Web UI 2.208.1: удалённый контрол остаётся на дашборде до перезагрузки страницы (на вкладке «Устройства» исчезает сразу)

Здравствуйте!

Контроллер Wiren Board 8.5, пакеты wb-mqtt-homeui и wb-homeui-backend

версии 2.208.1-wb101.

СИМПТОМ

Если устройство удаляет свой контрол на ходу (публикует пустой retained в

топик значения и в …/meta), то:

- на вкладке «Устройства» контрол пропадает сразу — правильно;

- на дашборде, куда этот контрол добавлен ячейкой виджета, строка остаётся

висеть пустой и уходит только после перезагрузки страницы (F5).

У нас это заметно постоянно: наше устройство публикует активные коды

неисправностей двигателя динамическими контролами — контрол на код создаётся,

когда код появился, и удаляется, когда код погас. После погасания кодов

оператор видит на дашборде пустые строки от уже удалённых контролов.

КАК ПОВТОРИТЬ

1. Создать контрол (на контроллере, в одну строку):

mosquitto_pub -h 127.0.0.1 -q 1 -r \

 -t /devices/testdev/controls/c1/meta \\

 -m '{"type":"text","readonly":true,"title":{"ru":"тест"}}'

mosquitto_pub -h 127.0.0.1 -q 1 -r \

 -t /devices/testdev/controls/c1 -m 'значение'

2. В Web UI создать виджет с ячейкой testdev/c1 и положить его на дашборд.

Открыть дашборд — строка есть, значение обновляется.

3. Удалить контрол (пустой retained, сначала значение, потом мета):

mosquitto_pub -h 127.0.0.1 -q 1 -r -t /devices/testdev/controls/c1 -m ‘’

mosquitto_pub -h 127.0.0.1 -q 1 -r -t /devices/testdev/controls/c1/meta -m ‘’

4. Не перезагружая страницу, посмотреть оба места.

ОЖИДАЕТСЯ: строка исчезает с дашборда сразу, как и на вкладке «Устройства».

ФАКТИЧЕСКИ: на вкладке «Устройства» контрол исчез, на дашборде пустая строка

осталась до F5.

В брокере после удаления retained-сообщений не остаётся (проверяли

mosquitto_sub).

ГДЕ, ПО-НАШЕМУ, СОБАКА ЗАРЫТА

Точных исходников у нас нет, смотрели минифицированный main.*.js, так что это

гипотеза — но она сходится с поведением.

В сторе устройств контролы лежат в двух местах: в наборе у самого устройства и

в общей Map, и дашборд рисует ячейку по наличию в общей Map. Обработчик пустого

…/meta убирает контрол только из набора устройства — отсюда и разница между

вкладкой «Устройства» и дашбордом.

Из общей Map контрол удаляется в другой ветке, и только при условии

type === “incomplete” && value === null. Для контролов строкового типа

(у нас type: “text”) value в null не превращается: пустое значение приводится

к “” или “-”, а null получается, насколько мы видим, только у типа rgb. То есть

для текстового контрола это условие недостижимо, и запись в общей Map остаётся

навсегда.

ПОЧЕМУ ПИШЕМ

Пока обходимся правкой бандла у себя, но это слетает при каждом обновлении

пакета. Будем рады, если поправите у себя — тогда мы свою правку снимем.

Спасибо!

Добрый день.
Собственно говоря дашборды предназначены для удобного доступа к существующим контролам.
Подобное (динамическое добавление/удаление) как пример кейса реального использования не предполагалось, по-моему.
Запишу в пожелания, но считаю это неудобным для типовых целей. Например дашборд после загрузки контроллера но при “временно” отсутствующих данных с редко обновляющихся источников - предпочитаю чтобы был сразу.

ладно, патч остаётся навсегда )

Ну, разработчики обсудят, конечно - возможно сделают отдельную настройку для контролов.