Configuration Mode Client
Variables d'environnement
Le mode client lit le fichier .env à la racine du projet, que Docker Compose charge automatiquement (cp .env.local-client.example .env). L'environnement de développement (make up, make dev) utilise .env.local-client.
Configuration obligatoire
Credentials API MyElectricalData
# Client ID de votre compte (format: cli_xxxxxxxxx)
MED_CLIENT_ID=cli_xxxxxxxxxxxxxxxxxxxxxxxxx
# Client Secret de votre compte
MED_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Où trouver ces valeurs ?
- Connectez-vous à www.v2.myelectricaldata.fr
- Allez dans Paramètres > API
- Copiez les valeurs Client ID et Client Secret
Configuration optionnelle
Réseau et ports
# Port du frontend (défaut: 8100)
CLIENT_FRONTEND_PORT=8100
# Port du backend API (défaut: 8181)
CLIENT_BACKEND_PORT=8181
# Port PostgreSQL interne, docker-compose.yml seulement (défaut: 5433)
CLIENT_POSTGRES_PORT=5433
Timezone
# Timezone pour les dates et le scheduler (défaut: Europe/Paris)
TZ=Europe/Paris
Base de données
Le backend lit DATABASE_URL, que chaque fichier compose fixe :
| Compose | DATABASE_URL |
|---|---|
docker-compose.sqlite.yml (recommandé) | sqlite+aiosqlite:////app/data/myelectricaldata.db (fichier dans le volume myelectricaldata_data) |
docker-compose.yml | postgresql+asyncpg://…@postgres:5432/…, construite depuis les variables ci-dessous |
En SQLite, aucune variable de base n'est à renseigner. Le backend crée le fichier et son schéma au premier démarrage, et règle SQLite pour les écritures simultanées du scheduler et de l'interface (journal WAL, attente de 30 s sur un verrou).
Variables propres à docker-compose.yml :
# Credentials PostgreSQL local (défaut: client/client)
POSTGRES_USER=client
POSTGRES_PASSWORD=client
POSTGRES_DB=client
# Tuning PostgreSQL (pour Raspberry Pi)
POSTGRES_SHARED_BUFFERS=128MB
POSTGRES_WORK_MEM=8MB
Scheduler
Le planning n'est pas configurable : il suit les heures de publication d'Enedis et de RTE (heure de
TZ), pour une vingtaine d'appels par jour à la passerelle.
| Synchronisation | Quand |
|---|---|
| Données des PDL (conso, production, puissance max, contrat, adresse) | au démarrage, toutes les 30 min de 6h à 9h30, puis 12h et 18h |
| Exports planifiés (Home Assistant, MQTT, VictoriaMetrics) | après chaque synchronisation des PDL, et à leur propre intervalle |
| Tempo | toutes les heures de 7h à 23h, tant que la couleur du lendemain est inconnue |
| EcoWatt | 17h, vendredi 12h15, et 8h30 / 20h30 si J+3 est incomplet |
| Consommation France | 8h, 14h, 20h |
| Prévisions de production | 9h, 21h |
Une synchronisation des PDL encore en cours au créneau suivant n'est pas relancée en parallèle.
Hôtes acceptés
# Hôtes acceptés dans l'en-tête Host, séparés par des virgules (`*.domaine` accepté).
# Vide (défaut) : tous les hôtes, pour joindre l'interface par une IP du réseau local ou un domaine perso.
ALLOWED_HOSTS=med.maison.lan,192.168.1.10
La sonde de santé /ping n'est pas soumise à ce contrôle : le healthcheck Docker (localhost) et les
sondes Kubernetes (IP du pod) continuent de répondre.
Valeurs par défaut des formulaires d'export
Variables du conteneur frontend, lues au démarrage. Elles ne servent qu'à préremplir une nouvelle configuration d'export : une configuration enregistrée les remplace.
VITE_DEFAULT_MQTT_BROKER=mqtt.maison.lan
VITE_DEFAULT_MQTT_PORT=1883
VITE_DEFAULT_TOPIC_PREFIX=myelectricaldata # MQTT générique
VITE_DEFAULT_ENTITY_PREFIX=myelectricaldata # Home Assistant (topics et unique_id des entités)
VITE_DEFAULT_DISCOVERY_PREFIX=homeassistant
VITE_DEFAULT_HA_URL=http://homeassistant.local:8123
VITE_DEFAULT_VM_URL=http://victoriametrics:8428
Le préfixe d'entité Home Assistant (entity_prefix) permet à deux instances de publier sur le même
Home Assistant sans collision. Le changer sur une configuration existante crée de nouvelles
entités (sans l'historique des anciennes) et laisse les anciennes configurations retenues dans le
broker. Il ne peut contenir ni espace, ni /, # ou +.
Mode debug
# Activer les logs détaillés (défaut: false)
DEBUG=true
# Logs SQL (défaut: false)
DEBUG_SQL=true
Configuration des exports
Home Assistant
# URL de votre instance Home Assistant
HOMEASSISTANT_URL=http://homeassistant.local:8123
# Token d'accès longue durée
# Créer dans : Profil > Tokens d'accès longue durée
HOMEASSISTANT_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...
# Activer l'export automatique (défaut: false)
HOMEASSISTANT_ENABLED=false
# Intervalle d'export en minutes (défaut: 60)
HOMEASSISTANT_INTERVAL=60
MQTT
# URL du broker MQTT
MQTT_BROKER=mqtt://localhost:1883
# Ou avec authentification
MQTT_BROKER=mqtt://user:password@localhost:1883
# Topic de base (défaut: myelectricaldata)
MQTT_TOPIC_PREFIX=myelectricaldata
# Activer l'export automatique (défaut: false)
MQTT_ENABLED=false
# QoS level (défaut: 1)
MQTT_QOS=1
# Retain messages (défaut: true)
MQTT_RETAIN=true
VictoriaMetrics
# URL de l'API d'import
VICTORIAMETRICS_URL=http://localhost:8428
# Headers additionnels (format JSON)
VICTORIAMETRICS_HEADERS={"Authorization": "Bearer token123"}
# Activer l'export automatique (défaut: false)
VICTORIAMETRICS_ENABLED=false
Jeedom
# URL de votre instance Jeedom
JEEDOM_URL=http://jeedom.local
# Clé API Jeedom
# Trouver dans : Réglages > Système > Configuration > API
JEEDOM_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Activer l'export automatique (défaut: false)
JEEDOM_ENABLED=false
Exemple complet
# === OBLIGATOIRE ===
MED_CLIENT_ID=cli_abc123def456ghi789
MED_CLIENT_SECRET=jkl012mno345pqr678stu901vwx234yz
# === RÉSEAU ===
CLIENT_FRONTEND_PORT=8100
CLIENT_BACKEND_PORT=8181
TZ=Europe/Paris
# === SCHEDULER ===
SYNC_HOUR=6
SYNC_MINUTE=0
SCHEDULER_ENABLED=true
# === EXPORTS ===
# Home Assistant
HOMEASSISTANT_URL=http://192.168.1.100:8123
HOMEASSISTANT_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...
HOMEASSISTANT_ENABLED=true
HOMEASSISTANT_INTERVAL=60
# MQTT
MQTT_BROKER=mqtt://mosquitto:1883
MQTT_TOPIC_PREFIX=energy
MQTT_ENABLED=true
# VictoriaMetrics (désactivé)
VICTORIAMETRICS_URL=http://victoriametrics:8428
VICTORIAMETRICS_ENABLED=false
# Jeedom (désactivé)
JEEDOM_URL=http://jeedom.local
JEEDOM_API_KEY=xxx
JEEDOM_ENABLED=false
# === DEBUG ===
DEBUG=false
DEBUG_SQL=false
Configuration via l'interface
La plupart des paramètres d'export peuvent également être configurés depuis l'interface web :
- Accéder à http://localhost:8100/export
- Configurer chaque destination dans les onglets dédiés
- Tester la connexion avant d'activer
Les configurations sauvegardées via l'interface sont stockées dans la table export_configs de la base locale et prennent le pas sur les variables d'environnement.
Priorité des configurations
1. Interface web (export_configs) ← Priorité haute
2. Variables d'environnement (.env)
3. Valeurs par défaut ← Priorité basse
Validation de la configuration
Vérifier les variables chargées
docker compose -f docker-compose.yml exec backend \
python -c "from config.settings import settings; print(settings.model_dump())"
Tester la connexion à l'API
docker compose -f docker-compose.yml exec backend \
python -c "
import asyncio
from adapters.myelectricaldata import MyElectricalDataAdapter
async def test():
adapter = MyElectricalDataAdapter()
pdls = await adapter.get_pdls()
print(f'PDLs trouvés: {len(pdls)}')
for pdl in pdls:
print(f' - {pdl.usage_point_id}')
asyncio.run(test())
"
Tester les exports
# Test Home Assistant
docker compose -f docker-compose.yml exec backend \
python -c "
import asyncio
from services.exporters.home_assistant import HomeAssistantExporter
async def test():
exporter = HomeAssistantExporter()
result = await exporter.test_connection()
print(f'Connexion: {\"OK\" if result.success else \"ERREUR\"}')
if not result.success:
print(f'Message: {result.error}')
asyncio.run(test())
"
Rechargement de la configuration
Après modification de .env, recréer le backend (restart ne relit pas le fichier) :
docker compose -f docker-compose.yml up -d backend
Les modifications de configuration via l'interface web sont prises en compte immédiatement, sans redémarrage.