Subscribes to devices/+/telemetry, validates payloads, buffers writes into ClickHouse (flush on size or interval), and emits a per-reading event on RabbitMQ for rule-engine-service to consume later. Adds the initial Postgres and ClickHouse schema migrations, a Dockerfile, and wires the service into docker-compose. Verified end-to-end via docker compose + mosquitto_pub: row lands in ClickHouse and the event reaches the telemetry.new_reading queue. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
45 lines
1.1 KiB
Bash
45 lines
1.1 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=
|
|
|
|
# --- 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
|
|
|
|
# --- 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
|