Home assistant mqtt autodiscovery

Добрый день, планирую использовать WirenBoard в связке с Home Assistant.
Настроил mqtt бридж до инстанса с home assistant. Все отлично работает, топики приходят, даже вручную можно сущности добавить и будет происходить взаимодействие, но учитывая как много сущностей писать придется это вариант не лучший.
При этом в ha есть механизм mqtt autodiscovery, который описан здесь
HA mqtt discovery

То есть по большому счету нужно добавить для каждого устройства добавить топик config с данными в виде json. Вот пример нагрузки для реле https://www.home-assistant.io/docs/mqtt/discovery/#switches

{
    "name": "wb_0_kotel",
    "unique_id": "wb_mr6c_26_0_kotel",
    "state_topic": "/client/wb_adq6cca2/devices/wb-mr6c_26/controls/K1",
    "command_topic": "/client/wb_adq6cca2/devices/wb-mr6c_26/controls/K1/on",
    "payload_off": 0,
    "payload_on": 1
}

Это пример моей настройки устройства
и это надо отправить в топик /homeassistant/switch/wb_adq6cca2/wb-mr6c_26_K1/config
Тогда ha сразу увидит эту сущность как переключатель и сможет им управлять через стандартный механизм mqtt.

мои настройки бриджа
image

2 лайка

Вообще есть скрипт на питоне который делает почти то что надо,

правда он не полностью функционален, но там реализовано создание даже отдельных устройст с группой контроллов , например релюшек. в общем есть что подсмотреть
например публикуемый топик в ha

1 лайк

Добрый день!
Извиняюсь, что отвечаю с такой задержкой.
Обсудили с коллегами, решили так:
идея, безусловно, хорошая. Но если делать, то имеет смысл сразу реализовать нормальную поддержку Home Assistant. Пока не готовы выделить под это ресурсы, заняты другими задачами.
Но идею запомнили.

Доброго дня!

Подскажите, как-то изменилась ситуация по данному вопросу?

Спасибо.

Здравствуйте! К сожалению, пока данный вопрос без изменений: в ближайший планах нет реализации полноценной поддержки Home Assistant.

Накидал скрипт который это делает на wb-rules - https://github.com/MatkovIvan/wb-homeassistant
Пока только для serial девайсов, на днях допилю до ума, но может кому пригодится даже в таком состоянии :slight_smile:
cc @sag3ll0

2 лайка

@Ivan_Matkov
Здравствуйте, репозиторий по ссылке недоступен.

Упс, по дефолту приватный создал. Исправил

2 лайка

Добрый день!

Пробовала выполнить скрипт - получаю ошибку

Ошибка правила: TypeError: invalid base value
duk_hobject_props.c:2000
registerDevice /etc/wb-rules/mqtt_autodiscovery.js:127
anon /etc/wb-rules/mqtt_autodiscovery.js:144 preventsyield
forEach native strict preventsyield
anon /etc/wb-rules/mqtt_autodiscovery.js:145 preventsyield
forEach native strict preventsyield
registerSerialDevices /etc/wb-rules/mqtt_autodiscovery.js:146
anon /etc/wb-rules/mqtt_autodiscovery.js:150 preventsyield

С чем это может быть связано? В системе зарегистрированы только реле. Все виртуальные устройства удалены.

Заранее спасибо :pray:

Ещё вопрос - удалось ли вам нормально скрестить димер светодиодных лент WB с Home Assistant? Все варианты шаблонов работаю с «глюками», главным образом из-за того, что HA пытается при включении слать дополнительное сообщение на включения вместо записи RGB/on r;g;b одной командой. Приходится колхозить через виртуальные устройства. Может есть нормальный готовый вариант ? :slight_smile:
Подозреваю, что аналогичная проблема возникнет с мосфет-димером.

Привет.

Судя по всему по ид не может найти девайс из конфига, странно. Надо будет добавить проверки на это и логи по хорошему :slight_smile:
Виртуальные девайсы не должны мешать, у самого их много.
Диммера светодиодных лент у меня нет, проверить не могу.

Здравствуйте. Там беда в имени устройства: нельзя пробелы и точки, надо строчку

var deviceId = "{}_{}".format(device.device_type, device.slave_id).toLowerCase()

заменить на

var deviceId = "{}_{}".format(device.device_type, device.slave_id).toLowerCase().replace('.', '').replace(' ', '-');

Должно помочь.

1 лайк

У меня в таком формате устройства тоже не находятся (почему, собственно, необходим именно такой формат?). А вот так вполне себе начинает работать:

var deviceId = device.id;

добрый день, а не подскажете как этим пользоваться?

Копируете скрипт в /etc/wb-rules/ (я делаю это через Winscp на Windows’e или по адресу fish://root@<ip_контроллера>/ в файловом менеджере на линуксе с KDE) и всё - он сразу запустится. Он будет выполнен движком wb-rules.

Посмотреть, как всё прошло, можно в логе. В веб-интерфейсе Настройки -> Системный журнал. Чтобы быстрее найти логи движка wb-rules, в фильтре вместо “все сервисы” выберите “wb-rules.sevice”, а вместо “Все сеансы”, выберите самый первый из списка.

1 лайк

спасибо, это я уже сделал… вот судя по всему у меня не работает автодискавери… подскажите как поправить?

подскажите, как включить автодискавери???

В Home Assistant autodiscovery включено по умолчанию. Правильно ли у Вас настроена интеграция с mqtt?
См. здесь пункт " Установка MQTT-интеграции":

https://wirenboard.com/wiki/Home_Assistant

думаю правильно) те если руками в configuration.yaml я добавляю сущности - все работает.
но вот новых сущностей нет:

cat /etc/mosquitto/conf.d/bridge1.conf
connection bridge1
#address of server
address 10.10.30.152
notifications true
notification_topic /client/wb/bridge1_status
remote_username {логин}
remote_password {пасс}
restart_timeout 20

topic /devices/# both 0 “” /wb