DERMS is an open-source software platform for managing, monitoring, and optimising Distributed Energy Resources (DERs) — including battery storage systems, solar PV arrays, EV charging hubs, and demand-response loads. Built on FastAPI, PostgreSQL, Redis, and MQTT, DERMS enables Virtual Power Plant (VPP) operators to aggregate and dispatch flexible capacity across multiple sites, maximise revenue from energy markets, and maintain grid stability through intelligent scheduling.
| Feature | Description |
|---|---|
| Real-time monitoring | Sub-second telemetry ingestion via MQTT; Redis-backed state cache |
| ML load forecasting | 24-hour probabilistic forecasts with scikit-learn gradient-boosted models |
| Battery optimisation | Rule-based heuristics + LP dispatch; Reinforcement Learning (experimental) |
| Grid integration | OpenADR 2.0 / IEEE 2030.5 demand-response client |
| REST API | FastAPI with OpenAPI docs, Bearer auth, and rate limiting |
| Simulation mode | Full system simulation without real hardware |
- Python 3.11+
- Docker & Docker Compose 2.20+
# 1. Clone the repository
git clone https://github.com/AUREX-ML/DERMS.git
cd DERMS
# 2. Create and activate a virtual environment
python3.11 -m venv .venv
source .venv/bin/activate
# 3. Install dependencies
pip install -r requirements.txt
# 4. Configure environment
cp .env.example .env
# Edit .env with your database, Redis, and MQTT settings
# 5. Start all services
docker-compose up --buildThe API is now available at http://localhost:8000
Swagger UI: http://localhost:8000/docs
# Run a 1-hour simulation with 20 synthetic DER assets
python scripts/run_simulation.py --duration 3600 --resources 20 --seed 42curl -X POST http://localhost:8000/api/v1/resources \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"name": "Site Alpha — Battery Bank 1",
"type": "battery",
"site_id": "site-alpha",
"capacity_kw": 500.0
}'curl -X POST http://localhost:8000/api/v1/optimize \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"horizon_hours": 24, "objective": "maximize_revenue"}'DERMS follows a layered architecture:
DERs (batteries, solar, EVs) → MQTT Telemetry → Redis Cache
↓
ML Forecasting → Optimizer
↓
FastAPI REST API
↓
Grid Operator (OpenADR)
See docs/architecture.md for the full diagram and component descriptions.
src/
├── api/ # FastAPI routes
├── core/ # DERMS engine + optimizer
├── models/ # Pydantic DER models + forecaster
├── services/ # Telemetry (MQTT) + grid interface
└── utils/ # Config (pydantic-settings) + logger
tests/
├── unit/ # Model and optimizer unit tests
└── integration/ # API end-to-end tests
docs/ # Architecture, API reference, getting started
scripts/ # Simulation runner + data seeder
notebooks/ # EDA notebook
Contributions are welcome! Please read CONTRIBUTING.md before opening a pull request. We follow Conventional Commits and require all CI checks to pass.
Please do not open public issues for security vulnerabilities. See SECURITY.md for our private disclosure process.
DERMS is released under the Apache 2.0 License.
| Name | Role | Contact |
|---|---|---|
| AUREX-ML | Project Owner | @AUREX-ML |
For general questions, open a Discussion.