Иллюстрация GrowerHub: MQTT discovery создает датчики растений в Home Assistant

MQTT discovery позволяет устройству или сервису самому описать свои сущности для Home Assistant через MQTT. Вместо ручного YAML публикуется конфигурационное сообщение, и Home Assistant создает sensor, binary_sensor, switch или другую сущность. Для растений это удобно: GrowerHub, ESP32 или другой контроллер может объявить влажность почвы, температуру, протечку и состояние насоса.

Но discovery не отменяет аккуратного проектирования. Если не задать unique_id, device metadata, state topic и availability, сущности будут путаться, дублироваться или оставаться "доступными" по устаревшему retained-сообщению. Для автополива это не мелочь, а риск неверного решения.

Что должно быть в конфигурации

У сущности должен быть стабильный unique_id. Он не должен меняться при переименовании зоны. Нужен state_topic, откуда Home Assistant читает значение. Для устройства полезен блок device: identifiers, name, model, manufacturer или другие поля. Так несколько сенсоров одного контроллера объединяются в одно устройство.

Для датчиков растений указывайте device_class и unit_of_measurement, когда они подходят: температура, влажность, проценты, литры. Если значение приходит в JSON, используйте template, но держите формат стабильным.

Availability и expire_after

Home Assistant может показывать сущность unavailable, если нет свежих данных или пришел отдельный availability payload. Для датчиков полива это важно. Старое retained-сообщение не должно выглядеть как актуальная влажность. В MQTT sensor есть expire_after, который помогает считать состояние устаревшим после отсутствия обновлений.

В GrowerHub этот же принцип должен использоваться в правилах: если датчик недоступен, автоматический полив не должен запускаться по старому значению. Availability - не декоративный статус, а часть безопасности.

Discovery и retained

Конфигурационные discovery-сообщения часто сохраняют retained, чтобы Home Assistant увидел их после перезапуска. Но состояния датчиков с retain требуют осторожности: Home Assistant может получить старое значение мгновенно. Для влажности почвы лучше полагаться на fresh update или expire_after, а не считать retained state живым.

Если устройство перезапускается, оно должно заново публиковать discovery или реагировать на birth-сообщение Home Assistant. Это снижает шанс, что сущности останутся без конфигурации после рестарта.

GrowerHub и Home Assistant

GrowerHub может публиковать discovery для своих зон или читать уже существующие сущности через MQTT. В обоих случаях важна карта соответствий: зона GrowerHub, MQTT-топик, Home Assistant entity, физическое устройство. Без этой карты интеграция становится набором похожих названий.

Более широкий сценарий описан в статье GrowerHub и Home Assistant через MQTT.

Вывод

MQTT discovery упрощает добавление датчиков растений в Home Assistant, но требует стабильных идентификаторов, корректных топиков и availability. Для GrowerHub это хороший способ интеграции, если не забывать, что автополив должен принимать решения только по свежим и понятным данным.