JSON-конфиги и обзор Home Assistant
Учимся хранить настройки в файлах и встраивать устройство в готовую экосистему умного дома.
Home Assistant — популярная открытая платформа умного дома, которая собирает устройства разных производителей в одном интерфейсе; ESP32 подключают к ней чаще всего через MQTT.
Зачем выносить настройки в JSON
Хранить Wi-Fi-пароль, адрес брокера и имя устройства прямо в коде неудобно: меняешь сеть — правишь и перепрошиваешь программу. Лучше держать настройки в отдельном файле config.json на плате. Тогда код один на всех, а различия — только в конфиге.
{
"wifi_ssid": "MyHomeWiFi",
"wifi_pass": "secret123",
"broker": "192.168.1.50",
"device_id": "esp32-livingroom",
"interval": 30
}Читаем и проверяем конфиг — на чистом Python
Парсинг и валидация конфига — чистый stdlib, пример исполним:
import json
raw = '{"broker": "192.168.1.50", "device_id": "esp32-livingroom", "interval": 30}'
config = json.loads(raw)
required = ["broker", "device_id", "interval"]
missing = [k for k in required if k not in config]
if missing:
print("Не хватает ключей:", missing)
else:
print("Конфиг валиден")
print("Брокер:", config["broker"])
print("Интервал:", config["interval"], "с")Вывод:
Конфиг валиден Брокер: 192.168.1.50 Интервал: 30 с
Чтение файла на плате
import ujson
def load_config(path="config.json"):
with open(path) as f:
return ujson.load(f)
cfg = load_config()
broker = cfg["broker"]
interval = cfg["interval"]Как устройство попадает в Home Assistant
Home Assistant умеет слушать MQTT-брокер. Есть два пути:
| Подход | Суть |
| Ручная настройка | В конфиге HA описываете сенсор и указываете топик, откуда брать данные |
| MQTT Discovery | Устройство само публикует «паспорт» в спец-топик, и HA добавляет его автоматически |
Во втором случае ESP32 один раз публикует в homeassistant/sensor/.../config описание (имя, единицы, топик состояния), и устройство появляется в интерфейсе само.
Как работает под капотом
Home Assistant — это сервер (часто на Raspberry Pi), который подписан на топики брокера. Когда ваш ESP32 публикует температуру в home/livingroom/temp, HA видит сообщение и обновляет показание на дашборде. Через тот же брокер HA может слать команды: вы нажимаете кнопку в приложении — HA публикует ON в топик лампы — ESP32 получает и включает реле. То есть ESP32 и HA не знают друг о друге напрямую, их связывает брокер.
Частые ошибки
- Не проверять конфиг. Опечатка в ключе или отсутствие файла уронят запуск — валидируйте после загрузки.
- Разные топики у устройства и HA. Если топик публикации не совпадает с тем, что слушает HA, данные «теряются».
- Класть config.json в публичный репозиторий. Там пароли — добавьте файл в
.gitignore.
Итог
- Настройки удобно хранить в
config.jsonи читать черезjson. - После загрузки конфиг стоит валидировать (проверить наличие ключей).
- Home Assistant подключает ESP32 через MQTT: вручную или через Discovery.
- Связь идёт через брокер; топики устройства и HA должны совпадать.