Добавлен gRPC-контракт proto/device_control (TurnOn/TurnOff/SetLevel), общий Go-модуль proto/ для переиспользования сгенерированного кода. device-control-service принимает команды по gRPC, обновляет desired_state в Redis и публикует их в MQTT; слушает devices/+/telemetry и devices/+/ack для отметки живости устройства и обновления reported_state; горутина health-check переводит устройство в offline по таймауту и публикует событие в RabbitMQ (device.status_changed) для будущего notification-service. Проверено сквозным тестом через docker compose: grpcurl TurnOn/SetLevel меняет desired_state и уходит в MQTT, mosquitto_pub с ack обновляет reported_state и статус, health-check автоматически переводит устройство в offline по истечении таймаута.
49 lines
1.3 KiB
Bash
49 lines
1.3 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
|
|
|
|
# --- Laravel app (stage 2) ---
|
|
APP_KEY=
|
|
APP_URL=http://localhost:8000
|