давай попробую объяснить. Конфиг такой:
wb7 с модулями MR6C (164, 172, 174), MDM3 (126) - на нем крутится встроенный mosquitto (назовем его WB7_MQTT), и настроен мост до другого mosquitto (назовем MQTT_MAIN (контейнер на другом сервере в той же сети).
Так же на сервере крутиться z2m, iobroker, home assistant все в контейнерах, и все БЫЛИ подключены к MQTT_MAIN. Потом я решил, что MQTT_MAIN в принципе не нужен, и хотел перевести все устройства на общение через WB7_MQTT. После этого и начались проблемы.
Топики отличаются, не знаю как текстом их показать, но попробую.
на WB7_MQTT есть топики:
тут почему-то вообще нет топика meta.
Мой основной вопрос в том, можно ли использовать WB7_MQTT как ОСНОВНОЙ брокер в сети? Что бы на него приходили топики с других устройств (z2m, термостаты работающие по mqtt), что бы уйти от MQTT_MAIN?
отбой! у меня в скрипте “.” затесалась, вот он и не грузился… а я уже что только не перепробовал (((. Привел скрипт к правильному состоянию - все подгрузилось. Прошу прощения. Но вопрос остается открытым, можно ли использовать mosquitto на WB как основной брокер в системе?
На всякий случай, чтобы сэкономить время тем, ктол будет повторять - в конфиге mosquitto в полях со значениями не должно быть комментариев!
Т.е. в примере, что привел AlexU:
connection wb_hs #неважно что
address {HOST}:1883 #где HOST - ип адрес HA Сервера
remote_username {логин в HA} # логин, установленный на шаге 2 , можно создать отдельного пользователя
remote_password {пароль в HA} # пароль, установленный на шаге 2
clientid home-assistant #неважно что
try_private false
start_type automatic
topic # both
Нужно удалить все комментарии чтобы стало так:
connection wb_hs
address {HOST}:1883
remote_username {логин в HA}
remote_password {пароль в HA}
clientid home-assistant
try_private false
start_type automatic
topic # both
Я пишу:
publish(‘homeassistant/light/namecontrol1/config’,
‘{“~”:“/devices/wb-gpio/controls”, “name”:“Люстра 1”, “object_id”:“namecontrol1”, “unique_id”:“namecontrol1”,“stat_t”:“~/EXT1_R3A1”,“cmd_t”:“~/EXT1_R3A1/on”, “ic”:“mdi:chandelier”, “payload_on”:1, “payload_off”:0, “expire_after”: 300}’, 0, true);
И контрол сам появляется в НА.
Вот сейчас пишу модуль публикации в НА всех контролов, но есть не задачки:
Вопросы в тех.поддержку:
Как в /devices/wb-gpio/controls/EXT1_R3A1/meta добавить title и свое поле ha_icon для редактирования из веб интерфейса.
Это же касается /devices/WB-MR6C/controls/K1.
Как избавиться от
runShellCommand(“mqtt-delete-retained ‘{}/+/{}.{}.{}/#’”.format(…);
как-то же можно это сделать силами javascript?
(и главного) title - не в основном интерфейсе… Я пытаюсь побороть ситуацию когда надо в разных местах. задавать “название”, не хочу WB-MR6C K1 - Хочу “люстра”
И в дашбордах менялось автоматически, ну хоть не через “интерфейс” пусть через wb-rules - НО В ОДНОМ МЕСТЕ!
Двумя путями. Первый, простой - опубликовать его из wb-rules, например.
Второй, более сложный - отредактировать как схему соответствющего сервиса так и добавить публикацию в его код.
Вообще при очистке из интерфейса (нажатие корзины) просто публикуется пустая строка в
/devices/[имя]/meta/driver
/devices/[имя]/meta/name
Именно так - приведет, так как опубликуете его прямо в само значение контрола.
То есть в этом топике хранится текущее значение.
Так, в принципе, сработает. Но это будет довольно негодным решением, нестабильным. Контролами управляет именно описанный в /devices/wb-gpio/meta драйвер. Если добавить сторонние топики то при (например) перезапуске драйвера поведение может быть непредсказуемым.
Последние уточнение:
Получается из wb-rules, для контрола “/devices/wb-gpio/controls/EXT1_R3A1” нет легитимного способа в веб интерфейсе, в “Устройствах” видеть “Блок освещения” → “Люстра”, а так-же нет возможности расширить список meta данных (пусть не отображаемых веб интерфейсом)?
“Устройства” совсем не для этого. Желаемое делается в виджетах.
Про виджеты - это понятно. (100 дашбордов по 100 виджетов и на каждом 100 реле - очень удобно.)
Я спрашивал о другом, Я спрашивал о Единой Системе хранения meta данных.
Например - я могу в настройках serial (modbus) для модуля MR6C v.3 150 сказать name(Название mqtt)= “MyLikeModule”, title(Имя устройства)=“Мой Любимый Модуль” - НО немогу сказать К1=“Любимое реле”. А для wb-gpio я да же этого не могу… не считая дополнительных опциональных свойств. Как то не логично. Ведь в defineVirtualDevice я могу указать и name и title.
В принципе вопрос стал риторический, если на meta из wb-rules (или ещё откуда) влиять нельзя.
Вкладка Устройства — это что-то вроде Диспетчера устройств в ОС Windows. И переименование устройства там сделано с одной целью — решить возможные конфликты в MQTT. Возможность переименовывать каналы в MQTT приведёт к неожиданным последствиям, например, сломаются системные или пользовательские скрипты.
Поэтому для представления устройств в понятном для пользователя виде используется слой абстракции — Виджеты, где каналы разных устройств объединяются в группы по смыслу: вентиляция, комната родителей и т.п.
Тут просто нужен удобный инструмент «копирования» устройств в виджеты, где вы сможете их править как угодно. Однажды добавим.
Это хорошо.
Но я немножко не об этом. Я о том, (на будущие) что я, например, в одном месте мог менять meta данные, а в 100 виджетах они менялись автоматически. Плюс, лично мне, очень необходимо хранить дополнительные meta опции, например icon, url и т.д. (Желательно с возможностью правки из web). Конечно можно хранить в storage, объекте wb-rules - но повторюсь: хотелось бы в одном месте хранить данные контрола и описательной части его касающихся.