Слушает telemetry.new_reading (ручной ack/nack, реквизишн только при транспортных ошибках gRPC), кэширует активные automation_rules в памяти с периодическим обновлением из PostgreSQL (JOIN с devices — резолвит внутренние ID в external_id, которым оперируют MQTT/Redis/gRPC). Условия правил (>,<,>=,<=,=,!=) оцениваются обобщённо, без привязки к конкретным типам устройств. При срабатывании вызывает device-control-service по gRPC и публикует automation.rule_triggered в RabbitMQ. Проверено сквозным тестом через docker compose на полном пайплайне: mosquitto_pub → ingest-service (ClickHouse + telemetry.new_reading) → rule-engine-service (совпадение правила) → device-control-service (gRPC → Redis desired_state + MQTT-команда) → automation.rule_triggered. Показание ниже порога проверено отдельно — правило корректно не срабатывает.
53 lines
1.4 KiB
Bash
53 lines
1.4 KiB
Bash
# --- PostgreSQL (users, zones, devices, device_types, automation_rules) ---
|
|
POSTGRES_HOST=postgres
|
|
POSTGRES_PORT=5432
|
|
POSTGRES_DB=home_automation
|
|
POSTGRES_USER=home_automation
|
|
POSTGRES_PASSWORD=change_me
|
|
|
|
# --- ClickHouse (telemetry, time-series) ---
|
|
CLICKHOUSE_HOST=clickhouse
|
|
CLICKHOUSE_HTTP_PORT=8123
|
|
CLICKHOUSE_NATIVE_PORT=9000
|
|
CLICKHOUSE_DB=telemetry
|
|
CLICKHOUSE_USER=default
|
|
CLICKHOUSE_PASSWORD=change_me
|
|
|
|
# --- Redis (device shadow: desired/reported state, status, last_seen) ---
|
|
REDIS_HOST=redis
|
|
REDIS_PORT=6379
|
|
REDIS_PASSWORD=
|
|
REDIS_DB=0
|
|
|
|
# --- RabbitMQ (async events between Go services) ---
|
|
RABBITMQ_HOST=rabbitmq
|
|
RABBITMQ_PORT=5672
|
|
RABBITMQ_MANAGEMENT_PORT=15672
|
|
RABBITMQ_USER=home_automation
|
|
RABBITMQ_PASSWORD=change_me
|
|
|
|
# --- Mosquitto (MQTT broker, device <-> ingest/device-control) ---
|
|
MQTT_HOST=mosquitto
|
|
MQTT_PORT=1883
|
|
|
|
# --- device-control-service (gRPC) ---
|
|
DEVICE_CONTROL_GRPC_PORT=50051
|
|
DEVICE_CONTROL_MQTT_CLIENT_ID=device-control-service
|
|
DEVICE_CONTROL_HEALTHCHECK_TIMEOUT=60s
|
|
DEVICE_CONTROL_HEALTHCHECK_INTERVAL=15s
|
|
|
|
# --- ingest-service ---
|
|
INGEST_MQTT_CLIENT_ID=ingest-service
|
|
INGEST_MQTT_TOPIC=devices/+/telemetry
|
|
INGEST_BATCH_MAX_SIZE=500
|
|
INGEST_BATCH_FLUSH_INTERVAL=5s
|
|
INGEST_BATCH_FLUSH_TIMEOUT=10s
|
|
|
|
# --- rule-engine-service ---
|
|
DEVICE_CONTROL_HOST=device-control-service
|
|
RULE_ENGINE_CACHE_REFRESH_INTERVAL=15s
|
|
|
|
# --- Laravel app (stage 2) ---
|
|
APP_KEY=
|
|
APP_URL=http://localhost:8000
|