Files
home_automatization/.env.example
cacto 3eb84aae6c Реализация device-control-service: gRPC + MQTT + Device Shadow в Redis
Добавлен 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 по истечении таймаута.
2026-07-26 18:40:36 +05:00

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