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 должны совпадать.
Проверьте себя
1. Зачем хранить настройки ESP32 в отдельном config.json?
AЧтобы код работал быстрее
BЧтобы менять параметры без правки и перепрошивки кода
CЧтобы скрыть Wi-Fi
DЭто требование MQTT
2. Как ESP32 обычно подключают к Home Assistant?
AПрямым кабелем
BЧерез MQTT-брокер, который слушает Home Assistant
CЧерез Bluetooth-пару
DНикак, это несовместимо
3. Что делает MQTT Discovery в Home Assistant?
AУскоряет Wi-Fi
BПозволяет устройству самому опубликовать «паспорт», и HA добавляет его автоматически
CШифрует пароли
DПерезагружает плату