# KosmoConnect Backend This directory contains the cloud backend services for KosmoConnect. ## Quick Start ### 1. Start Infrastructure Services You need Docker running on your machine. ```bash cd backend docker-compose up -d ``` This starts: - **TimescaleDB** on port `5432` - **Redis** on port `6379` - **RabbitMQ** on port `5672` (management UI on `15672`) - **Mosquitto MQTT** on port `1883` The first time TimescaleDB starts, it will automatically run the migration in `migrations/001_initial_schema.sql`. ### 2. Install Python Dependencies ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ### 3. Run the Services In terminal 1: ```bash ./run-dev.sh ingestion ``` In terminal 2: ```bash ./run-dev.sh api ``` - API docs: http://localhost:8002/docs - Ingestion health: http://localhost:8001/health ### 4. Simulate Data (No Hardware Needed) In terminal 3: ```bash cd .. python3 -m venv .venv source .venv/bin/activate pip install -r backend/requirements.txt python3 scripts/simulate-bridge.py --interval 5 ``` This publishes fake environmental readings every 5 seconds. The ingestion service will pick them up and write them to TimescaleDB. You can then query the API: ```bash curl "http://localhost:8002/api/v1/weather/latest" ``` ## Service Architecture | Service | Port | Responsibility | |---------|------|----------------| | API | 8002 | REST API for dashboard and web clients | | Ingestion | 8001 | Subscribes to MQTT, writes sensor data to TimescaleDB | | Gateway | 8003 | Web-to-mesh message queue, delivery tracking, and subscription enforcement | | Billing | 8004 | BTCPay Server integration for subscriptions and invoices | ## Database Schema - **nodes**: Registry of all enviro-nodes and infrastructure nodes - **enviro_readings**: Time-series hypertable for sensor data - **mesh_messages**: Delivery tracking for gateway messages - **users / subscriptions / allowed_nodes**: Subscriber management ## Environment Variables Copy `.env.example` to `.env` and customize: ```bash cp .env.example .env ``` | Variable | Default | Description | |----------|---------|-------------| | `DATABASE_URL` | `postgresql://kosmo:kosmo_dev_pass@localhost:5432/kosmoconnect` | TimescaleDB connection | | `MQTT_HOST` | `localhost` | MQTT broker host | | `MQTT_PORT` | `1883` | MQTT broker port | | `MQTT_TOPIC` | `kosmo/ingest/enviro` | Topic for enviro data |