Dashboard de supervision temps réel pour batteries Indevolt / C3 Techno
SolidFlex 2000 ECO · SFA1800 · Micro-onduleurs Homiles via OpenDTU
📦 Installation · ⚙️ Configuration · 📖 Onglets · 🐳 Docker · ❓ FAQ
Onglet Temps réel — Flux d'énergie avec sélecteur de modèle. De gauche à droite : nœuds sources/charges, hub batterie central avec SOC et tendance, métriques clés en bas.
Navigation multi-onglets :
| Catégorie | Fonctionnalité |
|---|---|
| 📡 Temps réel | Polling toutes les 30s · Flux d'énergie animé · SOC avec tendance · Seuil flux réseau 10W |
| 🔋 Batteries | Contrôle mode direct · Planificateur horaire visuel drag & drop · Forçage charge/décharge |
| ☀️ Solaire | Micro-onduleurs OpenDTU (HM-400, HM-800) · Prévision forecast.solar · Météo Open-Meteo |
| 📊 Historique | Graphiques 7j avec zoom · Historique 30j multi-sélection avec barres groupées · Comparaison N vs N-1 |
| 📋 Journal | Détection coupures réseau, bypass, alertes SOC/temp · Export PDF horodaté |
| 💾 Persistance | Stockage serveur via sidecar Python (survit aux rechargements de page) |
| 🎨 Thème | Mode clair / sombre / auto (suit le système) · Bascule en un clic dans le header |
| 📱 Responsive | Mobile complet · Bottom nav fixe · Swipe entre onglets · Pinch-to-zoom |
- Docker Engine ≥ 20.x
- Docker Compose v2
- Accès réseau local à votre monitoring onduleur 5openDtu) et à la batterie Indevolt (même sous-réseau)
git clone https://github.com/struppy/indevolt-dashboard.git
cd indevolt-dashboardmkdir -p data/store
docker compose up -dhttp://VOTRE_IP_SERVEUR:8480
✅ Le dashboard est accessible depuis n'importe quel navigateur sur votre réseau local.
Ces paramètres sont à renseigner dans l'interface (onglet ⚙️ Paramètres), ou peuvent être pré-configurés en éditant html/index.html avant le premier lancement.
| Paramètre | Valeur par défaut | Description |
|---|---|---|
| Adresse IP | 192.168.1.71 |
IP locale de votre onduleur Indevolt |
| Port | 8080 |
Port HTTP de l'API locale |
| Modèle | SolidFlex ECO |
Voir modèles supportés ci-dessous |
| Modèle | Description |
|---|---|
| SolidFlex 2000 ECO (sans MPPT) | Mode ECO sans entrée solaire directe |
| SolidFlex 2000 ECO + OpenDTU | Mode ECO avec micro-onduleurs HM-400/HM-800 via OpenDTU |
| SolidFlex 2000 / PowerFlex 2000 (avec MPPT) | Avec contrôleur MPPT intégré |
| BK1600 / BK1600 Ultra | Gamme BK1600 |
| Paramètre | Défaut | Description |
|---|---|---|
| Latitude | 48.5734 |
Latitude de l'installation (Strasbourg par défaut) |
| Longitude | 7.7521 |
Longitude de l'installation |
| Puissance crête PV | 2000 W |
Somme des puissances des micro-onduleurs |
| Inclinaison panneaux | 35° |
Angle d'inclinaison du toit |
| Azimuth | 0° |
Orientation (0° = plein sud, -90° = est, +90° = ouest) |
| Paramètre | Défaut | Description |
|---|---|---|
| Seuil SOC alerte | 20% |
Notification batterie faible |
| Seuil température | 45°C |
Alerte surchauffe batterie |
| Limite export réseau | 500 W |
Alerte dépassement export |
| Paramètre | Défaut | Description |
|---|---|---|
| Prix import | 0.2516 €/kWh |
Tarif EDF/fournisseur import |
| Prix export | 0.13 €/kWh |
Tarif rachat surplus |
Si vous utilisez des micro-onduleurs avec OpenDTU :
- Activer OpenDTU dans Paramètres → renseigner l'IP de votre passerelle OpenDTU
- Les serials des micro-onduleurs sont à modifier dans
html/index.html:
// Chercher et remplacer ces serials par les vôtres
// (onglet Paramètres > OpenDTU > Serial visible sur l'étiquette de chaque micro-onduleur)
const HM400_SERIAL = '112182049764'; // ← Remplacer
const HM800_1_SERIAL = '114174940383'; // ← Remplacer
const HM800_2_SERIAL = '114174939600'; // ← Remplacer💡 Les serials se trouvent sur l'étiquette de chaque micro-onduleur ET dans l'interface web d'OpenDTU.
Vue synthétique de l'installation en temps réel.
Ce que vous voyez :
- Flux d'énergie : diagramme avec les 4 nœuds (Solaire, Sortie AC, Réseau, Sortie BKP) reliés au hub batterie central
- Hub batterie : SOC en anneau coloré (vert > 60%, orange > 30%, rouge < 30%), puissance instantanée, tendance SOC sur 5 minutes
- Métriques : Production solaire · Consommation totale · Import/Export réseau · Autonomie estimée · Économies du jour · Taux d'autoconsommation
- Mode opérationnel actif (Autoconsommation / Charge / Décharge / Programmé)
Indicateurs d'état :
- 🟢 Connecté — données fraîches
- 🟡 Données anciennes — connexion instable
- 🔴 Hors ligne — onduleur injoignable
Contrôle complet du mode de fonctionnement et suivi de santé.
Contrôle rapide :
- Boutons directs : Autoconsommation / Contrôle temps réel / Programmé
Planificateur horaire visuel :
- Timeline 24h avec créneaux colorés par mode
- Clic sur la timeline → ajoute un créneau
- Glisser-déposer pour déplacer · Handles pour redimensionner
- Snap automatique à 30 minutes
- 4 modes : Autoconsommation 🟢 · Charge forcée 🔵 · Décharge forcée 🟠 · Programmé 🟣
- SOC cible par créneau (arrêt automatique quand atteint)
Forçage immédiat :
- ⬆ Forcer charge jusqu'à X% SOC
- ⬇ Forcer décharge jusqu'à Y% SOC
- Arrêt automatique dès que le SOC cible est atteint
Suivi santé :
- Compteur de cycles (estimation sur 6 000 cycles de vie)
- Courbe de dégradation SOC max sur 60 jours
- Projection durée de vie restante
Supervision des micro-onduleurs et prévision météo.
Micro-onduleurs (OpenDTU) :
- État de chaque onduleur (En ligne / Hors ligne)
- Puissance AC instantanée · Production du jour
- Température · RSSI WiFi · Taux de succès radio
Prévision forecast.solar :
- Production estimée en kWh pour aujourd'hui, demain et J+2
- Courbe horaire de production prévue
- Basé sur la position réelle des panneaux (inclinaison + azimuth)
Météo Open-Meteo :
- Icônes météo WMO sur 3 jours
- Température min/max · Précipitations
- Rayonnement horaire (W/m²)
Paramètres PV directement dans l'onglet :
- Puissance crête, inclinaison, azimuth → mise à jour immédiate des prévisions
Analyse des données sur 7 jours et 30 jours.
Graphique temps réel (7 jours) :
- 4 courbes : SOC · Production solaire · Puissance batterie · Échanges réseau
- Zoom : boutons 5min / 10min / 15min / 30min / 1h / 2h
- Molette souris sur le graphique pour zoomer
- Pinch-to-zoom sur mobile
- Buffer 6h de données (point toutes les 30s)
Historique 30 jours :
- Graphique barres avec multi-sélection : combinez Production / Import / Export / Charge / Décharge
- Barres groupées côte à côte par jour — chaque catégorie a sa couleur dédiée
- Sélecteur de plage : 7j / 14j / 30j ou dates personnalisées
Comparaison hebdomadaire :
- Semaine N vs semaine N-1
- Tableau d'évolution avec flèches colorées (↑ mieux · ↓ moins bien)
Export :
- Rapport mensuel HTML téléchargeable (imprimable en PDF)
Choisissez l'apparence du dashboard selon vos préférences.
| Mode | Comportement |
|---|---|
| 🌓 Auto | Suit automatiquement les préférences de votre système (macOS / Windows / Android) |
| 🌙 Sombre | Thème sombre original — fond #0a0d0f, accents verts |
| ☀️ Clair | Thème clair optimisé — contrastes WCAG AA, graphiques adaptés |
Changer de thème :
- Bouton 🌓 dans le header — cycle Auto → Sombre → Clair en un clic
- Onglet Paramètres — sélecteur avec sauvegarde persistante
Les graphiques Canvas s'adaptent automatiquement : grilles, labels et légendes passent du blanc au noir selon le thème actif.
Référence des endpoints disponibles :
- API locale Indevolt (registres Modbus)
- Proxy nginx (routes disponibles)
- Endpoints sidecar Python (stockage persistant)
- Exemples de requêtes curl
Traçabilité complète de l'installation.
Détection automatique :
| Événement | Sévérité |
|---|---|
| ⚡ Coupure réseau (tension < 50V) | 🔴 Critique |
| ⚡ Retour réseau | ℹ️ Info |
| ↔ Passage en bypass | |
| 🔋 Franchissement seuil SOC bas | |
| 🔋 SOC critique (< 10%) | 🔴 Critique |
| 🌡 Dépassement seuil température | 🔴 Critique |
| ⚙ Changement de mode opérationnel | ℹ️ Info |
| 🔗 Connexion/déconnexion | ℹ️ Info |
| 📅 Activation créneau planifié | ℹ️ Info |
Fonctionnalités :
- Filtre par type d'événement
- Badge rouge sur l'onglet en cas d'alerte
- Persistance serveur (survit aux rechargements)
- Export PDF horodaté avec tableau complet
Tous les réglages de l'installation :
- Installation : IP, port, modèle, capacité (Wh), limite export réseau
- OpenDTU (activation, IP passerelle)
- Localisation météo (lat/lon)
- Alertes (SOC, température, alerte sonore)
- Tarifs électricité (import/export)
- Mode nuit (horaires automatiques)
- Thème clair / sombre / auto
- Notifications push navigateur
- Compteur de cycles (date de départ, cycles initiaux)
indevolt-dashboard/
├── docker-compose.yml # Orchestration nginx + sidecar Python
├── nginx/
│ └── default.conf # Proxy inverse + routes API
├── html/
│ └── index.html # Dashboard (fichier unique ~330 KB)
├── settings_api.py # Sidecar Python — persistance données
├── data/
│ └── store/ # Données JSON (créé automatiquement)
├── .gitignore
└── README.md
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "8480:80"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- settings-api
restart: unless-stopped
settings-api:
image: python:3.11-alpine
working_dir: /app
volumes:
- ./settings_api.py:/app/settings_api.py:ro
- ./data:/data:rw
command: python settings_api.py
restart: unless-stopped# Démarrer
docker compose up -d
# Voir les logs
docker compose logs -f
# Redémarrer après modification de index.html
docker compose restart nginx
# Arrêter
docker compose down
# Arrêter et supprimer les données
docker compose down -v| Port | Service | Description |
|---|---|---|
8480 |
nginx | Dashboard web (accès navigateur) |
8081 |
settings-api | API Python interne (non exposé hors Docker) |
- Le proxy nginx est configuré pour n'autoriser que les IPs du sous-réseau
192.168.1.x— il refuse les requêtes vers d'autres destinations (protection SSRF) - Aucune donnée n'est envoyée vers l'extérieur sauf :
api.open-meteo.com— météo (pas de clé API)api.forecast.solar— prévision production (pas de clé API)
- Le dashboard est conçu pour un usage LAN uniquement — ne pas exposer sur internet sans authentification
Le dashboard affiche "Non connecté" en permanence
Vérifiez que l'IP de l'onduleur est correcte dans Paramètres. Vérifiez que le serveur Docker est sur le même sous-réseau que l'onduleur. Testez
curl http://IP_ONDULEUR:8080/Indevolt.GetDatadepuis le serveur.
Les micro-onduleurs affichent 0 W
Activez OpenDTU dans Paramètres, renseignez l'IP de votre passerelle OpenDTU, et vérifiez que les serials correspondent à vos appareils (étiquette sur le boîtier).
La prévision solaire semble incorrecte
Ajustez la puissance crête (W), l'inclinaison et l'azimuth dans l'onglet Solaire. Ces 3 paramètres sont essentiels pour forecast.solar.
L'historique se vide après redémarrage
Vérifiez que le volume
./data:/data:rwest bien monté dans docker-compose.yml et que le dossierdata/store/existe sur l'hôte.
git pull
docker compose restart nginxLes données persistantes dans data/store/ ne sont pas affectées.
- 🗑️ Suppression onglet Comparatif — fonctionnalité multi-installations retirée (complexité architecturale incompatible avec un déploiement mono-site ; voir contexte)
- ✨ Paramètres installation unique — IP, port, modèle, capacité, limite export regroupés dans une section dédiée, synchronisés avec le live panel
- 🐛 Fix bandeau live — select modèle mis à jour en temps réel sans F5
- 🐛 Fix onglet API — bouton Indevolt cliquable, raccourcis restaurés, IP correcte
- ✨ Thème clair/sombre/auto — bascule header + sélecteur Paramètres, graphiques Canvas adaptatifs
- ✨ Historique multi-sélection — barres groupées côte à côte, légende colorée par catégorie
- 🐛 Fix graphiques vides à l'ouverture de l'onglet Historique (canvas invisible au chargement)
- 🐛 Fix seuil flux réseau abaissé 50W → 10W (point animé plus réactif)
- 🐛 Fix prix export à 0€ accepté (n'était pas sauvegardé)
- 🌍 Dates au format
dd-mm-yyyypartout (graphiques, CSV, noms de fichiers, rapports) - 🧹 Suppression du graphique 7j redondant dans l'onglet Paramètres
- Multi-installations, planificateur drag & drop, journal d'événements, comparatif hebdomadaire
- Forecast.solar, météo Open-Meteo, OpenDTU
- Persistance serveur via sidecar Python
L'onglet Comparatif permettait de superviser plusieurs onduleurs Indevolt en parallèle depuis un seul dashboard. Cette fonctionnalité a été retirée en v2.2 pour les raisons suivantes :
-
Complexité architecturale : la gestion multi-installations (paramètres globaux vs par installation, synchronisation du state, cycle de sauvegarde) générait des effets de bord difficiles à maîtriser — installations non persistées après reload, sélecteur non rafraîchi, paramètres écrasés.
-
Usage mono-site : le dashboard est typiquement déployé sur un serveur dédié à une installation physique unique. La comparaison multi-sites ne correspond pas au besoin opérationnel courant.
-
Maintenabilité : la dette technique accumulée rendait toute évolution risquée. Une suppression propre vaut mieux qu'un code fragile maintenu sous perfusion.
Si vous avez un besoin réel de supervision multi-sites, la solution recommandée est de déployer une instance du dashboard par onduleur, accessibles depuis des ports différents.
MIT — Libre d'utilisation, modification et distribution.
Fait avec ☕ pour la communauté Indevolt / C3 Techno
Ce projet n'est pas affilié à C3 Techno — utilisation de l'API locale à vos risques et périls
