Не блокировать loop() бесконечными попытками подключения к MQTT
mqttClient.connect() блокирует на время TCP-таймаута, если брокер недоступен. Без паузы между попытками это происходило на каждой итерации loop() — веб-интерфейс и опрос датчиков/реле (не зависят от MQTT и должны работать даже без платформы) подвисали. Теперь переподключение пробуется не чаще раза в 5 секунд. В README добавлен раздел "Автономная работа без платформы" — что именно работает локально без docker compose, а что требует брокера.
This commit is contained in:
@@ -137,6 +137,23 @@ DHT22 (готовый модуль, 3 провода):
|
||||
авторизации — только для локальной сети, как и mosquitto платформы; для
|
||||
выхода за пределы LAN сначала нужно добавить хотя бы Basic Auth.
|
||||
|
||||
## Автономная работа без платформы
|
||||
|
||||
Плате не нужен запущенный `docker compose` (`home_automatization`), чтобы
|
||||
показывать датчики и включать/выключать свет/насос/вентилятор — для этого
|
||||
достаточно Wi-Fi и веб-интерфейса выше (`http://<ip-платы>/`). MQTT-брокер
|
||||
нужен только для синхронизации с платформой (телеметрия в ClickHouse,
|
||||
команды из Laravel/rule-engine, device shadow в Redis) — если он недоступен,
|
||||
эта синхронизация просто не происходит, но локальное управление продолжает
|
||||
работать.
|
||||
|
||||
Важная деталь реализации: `mqttEnsureConnected()` пробует переподключиться к
|
||||
брокеру не чаще раза в 5 секунд (`RECONNECT_INTERVAL_MS` в `mqtt_link.cpp`)
|
||||
— без этой паузы блокирующий `mqttClient.connect()` при недоступном брокере
|
||||
съедал бы почти весь `loop()` на каждой итерации, и веб-интерфейс с опросом
|
||||
датчиков подвисали бы. Serial-лог в этом случае пишет `failed, rc=...` раз в
|
||||
5 секунд — это ожидаемо, если платформа сейчас не поднята, а не поломка.
|
||||
|
||||
## Настройка и прошивка через Arduino IDE
|
||||
|
||||
1. **Поддержка ESP32.** Arduino IDE → Settings → «Additional boards manager
|
||||
|
||||
Reference in New Issue
Block a user