How aquapoly/aquadash works
AquaDash is a hydroponics monitoring and control application with a web dashboard, API-backed sensor and actuator management, and a camera/timelapse feature. The primary workflow is dashboard user → frontend page → backend API → domain/data operations, with camera requests routed to a separate camera client. The README also describes real-time monitoring, actuator scheduling, charts, and controls; some frontend and sensor-device wiring is unsampled, so those links are omitted or marked unverified.
Main entry points: main.py HTTP API · crud.py Domain operations · app Angular app · cam_client.py Camera API client
Components 30
Web dashboard
- Angular app
frontend/src/app - Status dashboard
frontend/src/app/pages/status-page/status-page.component.ts - Configuration page
frontend/src/app/pages/configuration-page/configuration-page.component.ts - Timelapse pages
frontend/src/app/pages/timelapse-page/timelapse-page.component.ts
Backend API
- HTTP API
backend/app/main.py - Domain operations
backend/app/crud.py - Domain models
backend/app/models.py - API schemas
backend/app/schemas.py - SQL database
backend/app/database.py - Actuator control
backend/app/services/actuator.py - Authentication
backend/app/security/authentification.py - Permissions
backend/app/security/permissions.py - Measurement export
backend/app/services/export_data.py - WebSocket manager
backend/app/ws_manager.py
Camera and timelapse
- Camera API client
backend/app/services/cam_client.py - Camera event listener
backend/app/services/cam_event_listener.py - Camera client service
backend/devices/camera/client/main.py - Timelapse manager
backend/devices/camera/client/timelapse_client.py - Camera socket client
backend/devices/camera/client/camera_client.py - Timelapse files
backend/devices/camera/client/timelapse_client.py - Camera host daemon
backend/devices/camera/host/camera_daemon.py - Physical camera
backend/devices/camera/host/physical_camera.py - Logical camera
backend/devices/camera/host/logical_camera.py - Timelapse contracts
backend/shared/timelapse_models.py
Sensor devices
- Sensor interfaces
Sensors/services/AtlasI2C.py - Sensor actuator service
Sensors/services/actuator.py - Sensor constants
Sensors/services/constants.py
Other components
- Dashboard user
- Camera service
- Hydroponic sensors
Connections 29
- Dashboard user → Angular app: uses
- Angular app → Status dashboard: routes to
frontend/src/app/app.routes.ts - Angular app → Configuration page: routes to
frontend/src/app/app.routes.ts - Angular app → Timelapse pages: routes to
frontend/src/app/app.routes.ts - HTTP API → Domain operations: calls
backend/app/main.py - HTTP API → SQL database: uses
backend/app/main.py - Domain operations → Domain models: queries
backend/app/crud.py - Domain operations → API schemas: uses
backend/app/crud.py - HTTP API → Actuator control: uses
backend/app/main.py - Domain operations → Authentication: uses
backend/app/crud.py - Domain operations → Permissions: uses
backend/app/crud.py - HTTP API → Measurement export: calls
backend/app/main.py - HTTP API → Camera API client: calls
backend/app/main.py - HTTP API → WebSocket manager: uses
backend/app/main.py - Camera API client → Camera service: HTTP requests
backend/app/services/cam_client.py - Camera client service → Camera socket client: uses
backend/devices/camera/client/main.py - Camera client service → Timelapse manager: uses
backend/devices/camera/client/main.py - Timelapse manager → Camera socket client: captures frames
backend/devices/camera/client/timelapse_client.py - Timelapse manager → Timelapse files: reads and writes
backend/devices/camera/client/timelapse_client.py - Camera host daemon → Physical camera: dispatches to
backend/devices/camera/host/camera_daemon.py - Camera host daemon → Logical camera: dispatches to
backend/devices/camera/host/camera_daemon.py - Camera event listener → Camera API client: uses
backend/app/services/cam_event_listener.py - Camera event listener → WebSocket manager: broadcasts through
backend/app/services/cam_event_listener.py - Sensor actuator service → Sensor constants: uses
Sensors/services/actuator.py - Sensor interfaces → Hydroponic sensors: interfaces with
- Status dashboard → HTTP API: requests data
- Configuration page → HTTP API: submits settings
- HTTP API → Timelapse contracts: uses contracts
backend/app/main.py - Camera API client → Timelapse contracts: uses contracts
backend/app/services/cam_client.py