Событие при загрузке SVG панели

Добрый день!

Есть ли возможность сгенерировать событие (записать что-то в MQTT топик) при загрузке SVG панели? Очень хотелось бы обойтись без кнопки “СТАРТ” на самой панели.

Добрый день. Не уверен что понял правильно вопрос, загрузки панели куда?

Имеется ввиду переход на SVG панель в Web UI

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

Ну клиентская часть UI может отправлять данные в MQTT что произошла загрузка панели. Это кстати можно сделать на стороне браузера. Для хрома есть дополнения которые позволяют вставить произвольный js в код страницы. Уже в нём можно отследить переход на страницу с панелью и отправить в mqtt признак загрузки страницы.

А для чего это можно использовать? Какая задача решается?

Я работаю над имитацией “сценарного пульта” для управления AV-системой (по типу Harmony от Logitech). Соответственно хотелось бы при переходе с одного сценария на другой (соответствует переходу с одной SVG панели на другую в HMI моде) заканчивать предыдущий (выключить ненужные устройства) и запускать новый (включить новые устройства, поменять входы-выходы-настройки устройств общих между сценариями).

По кнопкам выбора сценария все работает и так, но в ситуации когда пользователь перешел в другое приложение (медиатека видео или музыки например) и вернулся в Web UI через иконку на планшете (которая ведет на другую панель, например), можно было бы сгенерить событие, чтобы Web UI автоматом вернулся к последней активной SVG панели, либо заканчивать последний сценарий (нежелательно).

Нет, далеко не тривиально. А сли веб-интерфейс больше чем на одном устройстве, например. Или, на одном устройстве в двух вкладках? В общем - не подскажу. Код открыт, можете попробовать реализовать.

Вопрос решился переосмысливанием дизайна панели. Но теперь я столкнулся с другой проблемой - в датчике WB-MSW v.3, находящемся в поле видимости AV-системы не хватает места, чтобы запомнить все необходимые ИК-команды в ROM.

Видится 2 сценария:

  1. Использовать ROM других WB-MSW v3 для остальных команд и каким-то образом копировать их в RAM “основного” датчика.
  2. Использовать Persistent Storage контроллера для остальных команд и каким-то образом копировать их в RAM “основного” датчика.

Вопрос сводится к одному - как вычитывать ИК команды из WB-MSW v3 и как писать их в RАM (нужно для обоих сценариев).

Да, всего я насчитал 87 команд, и это - минимум! Чтобы убрать ИК пульты “навсегда” нужно запомнить около 110 команд

Вот тут: Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MSW, WB-MIR — Wiren Board
описана вся процедура, довольно подробно.
Но я вижу довольно значимый недостатоок: время. Для длинной команды время на запись регистров в RAM банк будет довольно приличным. Например:

systemctl stop wb-mqtt-serial
export DEV_PORT=/dev/ttyRS485-1; export DEV_ADDR=98
time modbus_client --debug -mrtu -pnone -b115200 -s2 $DEV_PORT -a$DEV_ADDR -t0x10 -r2000 0x0387 0x01cc 0x0039 0x00ae 0x003a 0x00ae 0x0039 0x003b 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003a 0x00ae 0x003a 0x00ae 0x0039 0x003b 0x0039 0x003c 0x0039 0x003b 0x0039 0x003b 0x003a 0x003a 0x003a 0x00ae 0x0039 0x00ae 0x003a 0x003b 0x0039 0x003b 0x003a 0x0039 0x003c 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003a 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003a 0x003a 0x003a 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003c 0x0036 0x003b 0x003b 0x003a 0x003a 0x003a 0x0038 0x003f 0x0038 0x0039 0x003b 0x0039 0x00ae 0x003a 0x003a 0x0037 0x00b1 0x0037 0x003d 0x003a 0x003a 0x003a 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003a 0x003b 0x0039 0x003b 0x0037 0x003d 0x003a 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x0039 0x00ae
Data to write: 0x0387 0x01cc 0x0039 0x00ae 0x003a 0x00ae 0x0039 0x003b 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003a 0x00ae 0x003a 0x00ae 0x0039 0x003b 0x0039 0x003c 0x0039 0x003b 0x0039 0x003b 0x003a 0x003a 0x003a 0x00ae 0x0039 0x00ae 0x003a 0x003b 0x0039 0x003b 0x003a 0x0039 0x003c 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003a 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003a 0x003a 0x003a 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003c 0x0036 0x003b 0x003b 0x003a 0x003a 0x003a 0x0038 0x003f 0x0038 0x0039 0x003b 0x0039 0x00ae 0x003a 0x003a 0x0037 0x00b1 0x0037 0x003d 0x003a 0x003a 0x003a 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x003a 0x003b 0x0039 0x003b 0x0037 0x003d 0x003a 0x003a 0x003a 0x003b 0x0039 0x003b 0x0039 0x003b 0x0039 0x00ae 
Opening /dev/ttyRS485-1 at 115200 bauds (N, 8, 2)
[62][10][07][D0][00][6E][DC][03][87][01][CC][00][39][00][AE][00][3A][00][AE][00][39][00][3B][00][3A][00][3B][00][39][00][3B][00][39][00][3B][00][3A][00][AE][00][3A][00][AE][00][39][00][3B][00][39][00][3C][00][39][00][3B][00][39][00][3B][00][3A][00][3A][00][3A][00][AE][00][39][00][AE][00][3A][00][3B][00][39][00][3B][00][3A][00][39][00][3C][00][3A][00][3A][00][3B][00][39][00][3B][00][39][00][3B][00][3A][00][3A][00][3A][00][3B][00][39][00][3B][00][39][00][3B][00][3A][00][3A][00][3A][00][3A][00][3A][00][3B][00][39][00][3B][00][39][00][3B][00][3C][00][36][00][3B][00][3B][00][3A][00][3A][00][3A][00][38][00][3F][00][38][00][39][00][3B][00][39][00][AE][00][3A][00][3A][00][37][00][B1][00][37][00][3D][00][3A][00][3A][00][3A][00][3A][00][3A][00][3B][00][39][00][3B][00][39][00][3B][00][3A][00][3B][00][39][00][3B][00][37][00][3D][00][3A][00][3A][00][3A][00][3B][00][39][00][3B][00][39][00][3B][00][39][00][AE][C7][84]
Waiting for a confirmation...
<62><10><07><D0><00><6E><48><FB>
SUCCESS: written 110 elements!

real	0m0.065s
user	0m0.009s
sys	0m0.003s

Видно что на 115200 запись 110 регистров занимает ~65мс. А если команда длиннее - то и время кратно больше.
Логичнее все ж поставить два, например WB-MSW и получить сразу 160 банков.
Ну или сделать (довольно несложно) ИК передатчик на Ардуино, передавая ему не последовательности импульсов а сразу коды команд. Что займет (максимум!) десяток регистров.
Так как кодировка пульта известна - то это проще.

Спасибо за ответ. Про использование modbus_client я читал. Мне принципиально не нравится то, что нужно останавливать mqtt-serial перед каждой акцией. Видел, что есть возможность делать тоже самое по RPC без остановки сервиса, буду изучать этот вариант.

По Arduino не подскажете что почитать про смычку с Wirenboard?

Да, выкладывал пример. Но, собственно тут проще просто добавить в шаблон MSW несколько “строк” в диапазн регистров, потом в эти строки и записывать части команд.