Cariflex EMS - Infrastructure Documentation
Architecture Overview
Network Architecture
Networks
| Network |
Subnet |
Purpose |
External |
traefik-public |
172.29.0.0/16 |
Public services (FM, Grafana) |
Yes |
openadr-internal |
192.168.240.0/24 |
OpenADR VTN/VEN communication |
No |
DNS/Hosts
| Service |
Domain |
Container |
Port |
| FlexMeasures |
cariflex.digitribe.fr |
flexmeasures-server |
5000 |
| Grafana |
grafana.digitribe.fr |
smart-city-grafana |
3000 |
| OpenADR VTN |
- |
openadr-vtn |
8080 |
| OpenADR VEN |
- |
openadr-ven |
- |
Firewall (UFW)
- Public ports: 80 (HTTP), 443 (HTTPS), 51820 (WireGuard)
- Internal networks: 172.16.0.0/12, 10.0.0.0/8, 192.168.0.0/16, 192.168.240.0/24
Docker Containers
Cariflex EMS Stack
| Container |
Image |
Network |
IP |
Port |
Status |
| flexmeasures-server |
lfenergy/flexmeasures:latest |
traefik-public |
172.29.0.x |
5000 |
✅ UP |
| flexmeasures-worker |
lfenergy/flexmeasures:latest |
traefik-public |
172.29.0.x |
- |
✅ UP |
| flexmeasures-db |
postgres:17 |
traefik-public |
172.29.0.x |
5432 |
✅ UP |
| flexmeasures-redis |
redis:7-alpine |
traefik-public |
172.29.0.x |
6379 |
✅ UP |
| openadr-vtn |
flexmeasures-openadr-vtn |
openadr-internal |
192.168.240.10 |
8080 |
✅ UP |
| openadr-ven |
flexmeasures-openadr-ven |
openadr-internal |
192.168.240.11 |
- |
✅ UP |
| smart-city-grafana |
grafana/grafana |
traefik-public |
- |
3000 |
✅ UP |
IP Address Allocation (phpIPAM)
Cariflex Subnet: 192.168.240.0/24
| IP |
Service |
Container |
MAC |
| 192.168.240.1 |
Gateway |
- |
- |
| 192.168.240.10 |
OpenADR VTN |
openadr-vtn |
- |
| 192.168.240.11 |
OpenADR VEN |
openadr-ven |
- |
| 192.168.240.128-254 |
Reserved |
- |
- |
Public Subnet (traefik-public): 172.29.0.0/16
| IP |
Service |
Domain |
| 172.29.0.x |
FlexMeasures |
cariflex.digitribe.fr |
| 172.29.0.x |
Grafana |
grafana.digitribe.fr |
Sensor Mapping
FlexMeasures Sensors
| ID |
Name |
Unit |
Type |
Source |
| 41-50 |
pv_01..10_power |
kW |
PV Production |
Simulator |
| 51-60 |
bat_01..10_power |
kWh |
Battery SOC |
Simulator |
| 61-70 |
ev_01..10_power |
kWh |
EV Charge |
Simulator |
| 81 |
irradiance |
W/m² |
Weather |
Open-Meteo |
| 82 |
temperature |
°C |
Weather |
Open-Meteo |
| 83 |
wind_speed |
m/s |
Weather |
Open-Meteo |
| 84 |
consumption_price |
EUR/MWh |
Price |
OpenADR VTN |
| 85 |
production_price |
EUR/MWh |
Price |
Simulated |
| 86 |
load_control_signal |
% |
DSR |
OpenADR VTN |
| 87 |
demand_response_signal |
dimensionless |
DSR |
OpenADR VTN |
S2 Resource Mapping
| S2 Resource |
FM Sensor |
Asset |
Min Power |
Max Power |
| battery_01-05 |
51-55 |
Bat_01-05 |
-50 kW |
+50 kW |
| ev_01-05 |
61-65 |
EV_01-05 |
-22 kW |
+22 kW |
OpenADR Protocol
VTN (Virtual Top Node)
- Container: openadr-vtn
- Port: 8080 (internal)
- Profile: OpenADR 2.0b
- Events: ENERGY_PRICE (24h), LOAD_CONTROL (4h)
- Schedule: Every 10 seconds poll
VEN (Virtual End Node)
Event Flow
- VTN creates events (price, load control)
- VEN polls VTN every 10s
- VEN receives oadrDistributeEvent
- VEN sends event responses (optIn)
- VEN posts data to FM API
- Grafana displays real-time data
S2 Protocol Integration
S2 Service
- Location: openadr-ven container (background process)
- Protocol: S2 (FRBC - Flexibility Resource Bank Control)
- Mapping: S2 resources -> FM sensors (51-65)
- Functions:
- process_load_control(): Converts OpenADR load control to S2 FRBC instructions
- process_demand_response(): Converts OpenADR demand response to S2 FRBC instructions
S2 Message Types
- FRBCInstruction: Power setpoint commands
- FRBCSystemDescription: Resource capabilities
- FRBCActuatorStatus: Resource status feedback
- FRBCStorageStatus: Battery/EV storage status
Backup Strategy
Automated Backups
- Script:
/home/eric/cariflex/scripts/full_backup.sh
- Location:
/home/eric/backups/cariflex/YYYYMMDD_HHMMSS.tar.gz
- Contents:
- PostgreSQL dump (flexmeasures DB)
- Redis dump (RDB file)
- FM config and templates
- OpenADR scripts and Dockerfiles
- Grafana dashboards (JSON)
- Docker container states
- Network configuration
Backup Retention
- Daily backups kept for 30 days
- Weekly backups kept for 12 weeks
- Monthly backups kept indefinitely
Deployment Environments
Development
- Host: Local VM or developer machine
- Docker Compose: Single node
- Data: Simulated
- URL: localhost
Test
- Host: Test server
- Docker Compose: Single node
- Data: Anonymized production data
- URL: test.cariflex.digitribe.fr
Production
- Host: Production server (this deployment)
- Docker Compose: Single node (scalable to Swarm/K8s)
- Data: Real-time production data
- URL: cariflex.digitribe.fr
Security
Credentials
| Service |
Username |
Password |
Location |
| FlexMeasures |
admin@digitribe.fr |
Digitribe972 |
FM DB |
| PostgreSQL |
flexmeasures |
Digitribe972 |
PostgreSQL |
| Redis |
- |
(disabled) |
Redis |
| Grafana |
admin |
admin |
Grafana DB |
SSL/TLS
- All public services use Let's Encrypt certificates
- Traefik handles SSL termination
- Internal services use HTTP (isolated network)
Monitoring
Health Checks
Logs
- Docker:
docker logs <container>
- FM:
/app/flexmeasures/logs/
- Grafana:
/var/log/grafana/
Troubleshooting
Common Issues
- Redis ACL error:
docker exec flexmeasures-redis redis-cli CONFIG SET requirepass ""
- OpenADR connection refused: Check UFW rules for 192.168.240.0/24
- Grafana no data: Check datasource UID matches PostgreSQL DS
- FM worker not running:
docker restart flexmeasures-worker
Useful Commands
References