Home Assistant

MQTT сервер на ESP32

Почему брокер на ESP32 плохо подходит для постоянной работы: мало памяти, состояние теряется при перезагрузке. Что делать вместо этого.

MQTT сервер на ESP32

Коротко: Брокер на ESP32 поднять можно, но плата для этой роли не предназначена: памяти мало, состояние теряется при перезагрузке, а шифрование почти не помещается. Держать брокер лучше на мини-компьютере или в Home Assistant, а ESP32 оставить её обычную работу — датчик, реле, мост.

MQTT-брокер на ESP32 — популярная тема в самодельных проектах, но у неё есть подвох. Плата действительно умеет принимать сообщения и рассылать их подписчикам, однако роль брокера для неё не родная: памяти мало, диска нет, а питание часто берётся от зарядки. Разберём, когда такой вариант оправдан, а когда лучше поставить брокер на мини-компьютер, оставив ESP32 её обычную работу.

Что вообще делает брокер

Брокер — это посредник. Устройства публикуют сообщения в топики, брокер их принимает и передаёт тем, кто на эти топики подписался. Всё, что от него нужно: держать соединения, помнить подписки, копить небольшую очередь и не терять сообщения на удержание.

Отсюда требования к железу: оперативная память под состояние клиентов, место под удержанные сообщения и логи, ровное питание и перезапуск после сбоя без потери настроек. ESP32 не подходит ни по одному из этих пунктов по-настоящему — и это не недостаток платы, а несовпадение задач.

Что реально умеет ESP32

Плата построена на микроконтроллере с Wi-Fi: у неё сотни килобайт оперативной памяти, нет файловой системы в привычном смысле и нет операционной системы с планировщиком задач. Всё, что вы запускаете, — это одна программа, которую вы загрузили.

Про то, какие выводы платы можно занимать под свои задачи, есть отдельная статья ESP32: какие пины можно использовать.

Из этого следует:

  • Брокер на ESP32 существует как учебный проект. Есть компактные реализации, которые принимают подключения и пересылают сообщения. Их обычно хватает на несколько устройств и простые сценарии.
  • Устойчивости ждать не стоит. Перезагрузка платы стирает состояние: подписки, удержанные сообщения, незавершённые передачи. Восстанавливать их нечем.
  • Подписчиков будет немного. Каждое подключение занимает память, а её на плате мало. Как только клиентов становится десяток, начинаются отказы и перезапуски.
  • TLS и аутентификация ограничены. Шифрование на микроконтроллере съедает и память, и процессорное время; на несколько шифрованных подключений ресурсов может не хватить.
  • Запаса нет. Брокер на сервере можно перезапустить и обновить, не трогая устройства. Плата с брокером — единая точка отказа для всей автоматики.

Почему брокер лучше держать не на ESP32

Проще всего поставить брокер там, где уже работает система умного дома.

Где брокерПлюсыМинусы
Мини-компьютер или одноплатный серверПамять, диск, обновления, перезапуск службы, TLS и паролиНужен отдельный компьютер
Home Assistant как дополнениеНичего не надо ставить отдельно, всё в одном местеСервер должен работать постоянно
Роутер с поддержкой пакетовРаботает круглосуточно и без лишнего железаОграниченный набор функций и версий
ESP32Дёшево, интересно, всё в одной платеМало памяти, нет устойчивости, нет нормального TLS

Если выбор стоит между «брокер на ESP32» и «брокер на том же компьютере, где Home Assistant», второй вариант почти всегда правильнее: он бесплатный, если сервер уже есть.

Когда вариант с ESP32 всё-таки имеет смысл

  • Учебная задача. Разобраться, как устроен брокер, удобнее на маленькой плате, чем на сервере.
  • Автономный узел без сервера. Например, дача или гараж, где нет постоянного сервера умного дома, а связать между собой нужно три-четыре датчика и реле.
  • Временная схема. Собрать стенд на выходные и потом перенести брокер на компьютер.

Во всех остальных случаях ESP32 полезнее в своей обычной роли: датчика, реле, моста Bluetooth или устройства ESPHome.

Смотреть, что происходит в брокере, удобнее клиентом на компьютере: как его выбрать и подключить, написано в статье MQTT-клиент для Windows.

Обычная роль ESP32: клиент MQTT

Именно так плата используется в большинстве умных домов, и здесь у неё всё хорошо.

  • Публикация показаний. Датчик температуры, влажности или движения публикует значение в топик и засыпает.
  • Подписка на команды. Реле подписывается на топик управления и включает нагрузку по сообщению от сервера.
  • Топик доступности. Клиент сообщает брокеру «последнюю волю»: если плата отключится, брокер сам опубликует сообщение о недоступности, и система не будет ждать ответа от молчащего устройства.
  • Готовые прошивки. ESPHome, Tasmota и подобные проекты избавляют от написания кода: конфигурация описывается текстом, а прошивка собирается сама.
  • Сон между измерениями. Батарейный датчик просыпается по таймеру, отправляет значение и уходит в глубокий сон. Именно поэтому такие датчики живут месяцами.

Что стоит помнить: Wi-Fi подключается не мгновенно, поэтому сразу после пробуждения нужно время на соединение. Если отправлять показания слишком часто, батарейка сядет быстро; если слишком редко — сценарии будут срабатывать с задержкой.

Питание и надёжность

Основная причина «ESP32 живёт своей жизнью» — питание.

  • Стабильные пять вольт и запас по току. Во время передачи Wi-Fi плата потребляет заметно больше, чем в покое. Слабый блок питания или тонкий кабель дают просадку, и плата перезагружается.
  • Не питайте от порта компьютера. Он подходит для прошивки, но не для круглосуточной работы.
  • Отдельный блок питания и корпус. Плата в корпусе с вентиляцией и своим блоком работает годами; плата на столе с гирляндой проводов — нет.
  • Статический адрес. Брокеру и серверу проще работать, когда адрес устройства не меняется.

Если в журнале устройства вы видите перезапуски без причины, начинать надо с питания, а не с кода.

Безопасность

  • Не выставляйте брокер в интернет. Домашний брокер должен быть доступен только в локальной сети. Наружу его выводят вместе с TLS и паролями, и делать это на ESP32 почти бессмысленно.
  • Локальная сеть для устройств. Если роутер умеет отдельную сеть для умного дома, устройства стоит поместить туда: тогда скомпрометированный датчик не увидит ваши компьютеры.
  • Пароль на брокере. Публиковать команды управления должен только тот, кому это разрешено. Открытый брокер в квартире — это открытые реле.
  • Обновления. ESPHome и Tasmota обновляются штатно; самодельная прошивка остаётся без обновлений, если вы про неё забудете.

Порядок действий, если вы всё же ставите брокер на ESP32

  1. Возьмите плату с запасом памяти и отдельный блок питания на пять вольт с запасом по току.
  2. Прошейте плату прошивкой брокера и закрепите за ней статический адрес в локальной сети.
  3. Подключите два-три устройства и проверьте, что сообщения доходят в обе стороны.
  4. Задайте удержание только для статусов, а не для всех сообщений: память ограничена.
  5. Настройте автоматический перезапуск при зависании, если прошивка это умеет.
  6. Проверьте поведение при пропадании питания: какое состояние будет у реле после включения.

Пункт про питание и пункт про поведение реле после перезапуска — самые важные. Именно на них чаще всего спотыкаются самодельные схемы.

Частые вопросы

Можно ли использовать ESP32 как MQTT-брокер для всего умного дома?

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

Чем брокер отличается от клиента?

Брокер принимает сообщения и рассылает их подписчикам, клиент публикует и подписывается. ESP32 обычно клиент: датчик, реле, мост. Брокер на ESP32 — редкий и ограниченный случай.

Нужен ли отдельный сервер, чтобы поднять брокер?

Не обязательно. Брокер можно поставить дополнением в Home Assistant, на роутер с подходящей прошивкой или на уже работающий мини-компьютер. Отдельная машина нужна только при большой нагрузке.

Почему датчик на ESP32 перезагружается сам по себе?

Чаще всего из-за питания: просадка при передаче по Wi-Fi. Проверьте блок питания и кабель, затем уже смотрите журнал и код. Вторая причина — переполнение памяти при слишком частой отправке сообщений.

Что такое «последняя воля» и зачем она нужна?

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

Войти, чтобы поставить лайк
ФОРУМ

Обсуждение статьи

Обсуждений пока нет. Вопрос по этой статье можно задать в форуме — тема будет связана с материалом.

Открыть тему по статье

Комментарии

Войдите, чтобы оставить комментарий.