2 подобных устройства в Home Assistant через MQTT и отсутствие сенсоров

Давно уже столкнулся с проблемой отображения сенсоров батарей из “Powerbank для дома“. Обе батареи на базе BMS от Daly, 2 очень похожих прошивки, но для мелкой батареи все сенсоры отображались, а от большой – только несколько штук. Причем, не было самых важных – например, процента заряда батареи. Добавил нужные через mqtt.yaml, потом как-то фокус сместился на новые проекты и батарею на базе JK BMS, поэтому проблему особо не копал.

Сейчас по случаю пересобрал батарею 5-ку – добавил наконец-то проставки между ячейками, а также сделал обжим всех ячеек – соответственно, занимался в том числе перепайкой обвязки и BMS’кой в целом. По мотивам того, что умеет JK – добавил в сенсоры разницу между самым высоким и самым низким значением напряжения, а пока это все стояло и балансировалось – очередной раз задумался насчет сенсоров. Уже и переименовал устройство, и удалял из MQTT-сервера, и из HA – ничего.

В общем. Если заглянуть в MQTT в ветку homeassistant – там есть кнопки / сенсоры / прочее, группированное по устройствам. Какая-то внутренняя кухня у HA при работе с MQTT. Что важно: в описании сенсора есть поле “uniq_id“. Значение – например, “ESPsensornbpu1_cell_voltage_5“, где есть “ESP, тип, имя хоста”_”название сенсора”. Так вот, для обоих daly-based-устройств имя хоста отсутствует. В итоге имеем, например, uniq_id”: ESPsensorcell_1_voltage“. Для двух устройств – т.е., про уникальность уже речь не идет. В итоге HA работает только с тем устройством, который первый “застолбил” данный uniq_id и все. В конфиге mqtt.yaml id я задавал уже другие (чисто на автомате).

Как решить: в конфиге прошивки устройства в разделе mqtt можно задать принцип генерации этих uniq_id (и кое-что еще – я задал обе опции):

discovery_unique_id_generator: mac
discovery_object_id_generator: device_name
В итоге теперь имеем id вида 678901234567-sensor-87654321. Все сенсоры появились, теперь все работает нормально. Явно баг в ESP Home, надо будет зарепортить.

Добавить комментарий