Files
home_automatization/services/ingest-service

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 кэширует правила) — это естественное развитие, пока не реализовано.

Запуск

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 и т.д.