# ingest-service (Go) Статус: реализован (MVP). Зона ответственности: - Подписка на MQTT-топики `devices/{device_id}/telemetry`. - Валидация/парсинг payload (device_id, sensor_type, value, timestamp). - Батч-запись сырых показаний в таблицу ClickHouse `telemetry`. - Публикация события «новое показание» в RabbitMQ для rule-engine-service. Не входит в зону ответственности: интерпретация того, что *означает* показание датчика (пороги, действия) — это задача rule-engine-service. Этот сервис только принимает и сохраняет данные. Про `zone_id`: payload телеметрии несёт `zone_id` напрямую (публикующее устройство/эмулятор само знает свою зону), а не ingest-service ищет его в PostgreSQL. Это удерживает зависимости ingest-service в рамках MQTT/ClickHouse/RabbitMQ, как и на диаграмме архитектуры в корневом README. Для реального парка устройств, которые не будут знать свою зону, понадобится lookup через реестр устройств (с кэшированием, как rule-engine кэширует правила) — это естественное развитие, пока не реализовано. ## Запуск ```bash cd services/ingest-service go test ./... go build ./cmd/ingest-service ``` Конфигурация читается из переменных окружения (см. секцию ingest-service в корневом `.env.example`). Через `docker compose up ingest-service` сервис обращается напрямую к контейнерам `mosquitto`/`clickhouse`/`rabbitmq`; для локального запуска через `go run` выставь `MQTT_HOST=localhost`, `CLICKHOUSE_HOST=localhost` и т.д.