# ESP32 Emulator Веб-морда, которая ведёт себя как настоящий ESP32-контроллер гроубокса для [платформы домашней автоматизации](https://git.cactoz.su/cacto/home_automatization) — отдельный репозиторий, никакого общего кода с основным проектом: единственная связь — MQTT-протокол, которому оба конца следуют одинаково. Один Go-бинарник: HTTP-сервер отдаёт единственную HTML-страницу с изображением платы (датчик + вентилятор + свет + помпа) и сам говорит по MQTT с брокером платформы. Браузер никогда не подключается к MQTT напрямую — только к этому серверу (JSON + Server-Sent Events). ## Что показывает страница - **Датчик** — слайдеры температуры/влажности + кнопка "Опубликовать показания" (публикует `devices/{external_id}/telemetry`, по одному сообщению на `sensor_type`, как и положено по формату ingest-service) - **Вентилятор / Свет / Помпа** — живой статус (вкл/выкл, уровень), который меняется САМ, когда платформа реально присылает команду через `devices/{external_id}/commands`; ручного переключения в UI нет осознанно — эмулятор демонстрирует "устройство слушается платформы", а не пульт дистанционного управления - `external_id`/`zone_id` каждого слота редактируемые — по умолчанию `sensor-1`/`fan-1`/`light-1`/`pump-1`, `zone_id=1`, чтобы сразу совпадать с `DemoGrowboxSeeder` основного репозитория ## Протокол (см. основной репозиторий, это не источник истины, а зеркало) | Топик | Кто публикует | Payload | |---|---|---| | `devices/{id}/telemetry` | эмулятор | `{"device_id","zone_id","sensor_type","value","timestamp"}` | | `devices/{id}/commands` | платформа | `{"action":"turn_on"\|"turn_off"\|"set_level","level"?}` | | `devices/{id}/ack` | эмулятор | `{"state":{"power":"on"\|"off"}}` или `{"state":{"level":N}}` | ## Запуск Локально (нужен доступ к тому же MQTT-брокеру, что слушает платформа): ```bash cp .env.example .env export $(cat .env | xargs) go run ./cmd/emulator ``` Открыть `http://localhost:8091`. Через Docker: ```bash docker build -t esp32-emulator . docker run --rm -p 8091:8091 -e MQTT_BROKER_URL=tcp://host.docker.internal:1883 esp32-emulator ``` ## Переменные окружения | Переменная | По умолчанию | Назначение | |---|---|---| | `MQTT_BROKER_URL` | `tcp://localhost:1883` | адрес брокера основной платформы | | `HTTP_PORT` | `8091` | порт веб-морды эмулятора |