Grafana : les deux bases se consultent, et les requetes sont verifiees
Trois tableaux de bord provisionnes depuis git, sur le modele de la regle R2
(le depot est la source de verite, l'interface ne peut pas les ecraser) :
La nuit SOC reel contre SOC exige par le bilan, et la marge entre les
deux. C'est la question qui avait demande une nuit d'archeologie
le 03/09.
Le solaire l'excedent (§36), la censure, et le mode declare par chacun des
sept chargeurs (§37) — le signal le plus direct dont on dispose.
Prevision l'ecart heure par heure, avec la bande de censure dessous : une
production sous la prevision peut vouloir dire mauvaise
prevision OU absence de preneur.
Les evenements de la table `evenement` deviennent des marqueurs verticaux sur
tous les graphiques — une courbe sans ses evenements ne s'interprete pas.
tools/verifier-dashboards.mjs rejoue CHAQUE requete pour de vrai (SQL contre
PostgreSQL, Flux contre InfluxDB, macros Grafana substituees), annotations
comprises puisqu'elles s'executent sur tous les panneaux. Sans lui une requete
cassee ne se voit qu'a l'ecran, panneau par panneau. 19/19 au deploiement.
Port 3001 et non 3000 : sonde avant d'ecrire la ligne, quelque chose ecoute
deja sur 3000 — la lecon du 5432 deja pris par le PostgreSQL de DSM.
Connexion PostgreSQL par le role evcs_lecture : un tableau de bord ne doit pas
pouvoir ecrire dans la memoire. Aucun secret duplique, aucun secret commite :
le provisionnement les reference par $VARIABLE depuis les deux .env.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
89
HANDOFF.md
89
HANDOFF.md
@@ -3438,3 +3438,92 @@ La premiere est plus propre — le role d'analyse reste strictement lecteur.
|
||||
|
||||
---
|
||||
*Document mis a jour le : 04/09/2026 (~07:35) — InfluxDB en service, 249 entites, memoire complete*
|
||||
|
||||
## 45. Session du 04/09/2026 — Grafana : les deux bases se consultent
|
||||
|
||||
### Ce qu'il y a a consulter, et ce qu'il n'y a pas
|
||||
Trois bases coexistent, et elles ne jouent pas le meme role :
|
||||
|
||||
| base | ou | contenu |
|
||||
|---|---|---|
|
||||
| PostgreSQL `evcs` | 10.10.10.22:**5433** | ce que le systeme CALCULE |
|
||||
| InfluxDB `evcs` | 10.10.10.22:8086 | ce que HA OBSERVE, ~1 pt/s, 113 grandeurs |
|
||||
| SQLite de HA | 10.10.10.17 | son historique brut (20 j) + statistiques (186 j) |
|
||||
|
||||
⚠️ Le PostgreSQL du port **5432** appartient a DSM. Ce n'est pas une base du
|
||||
projet — la confusion « j'ai deux bases postgres » vient de la.
|
||||
|
||||
**La SQLite de HA n'est PAS branchee a Grafana, et c'est deliberé** : il
|
||||
faudrait lire un fichier de 4,4 Go en mode WAL a travers un partage reseau
|
||||
pendant que HA ecrit dedans (lecture incoherente garantie), pour un gain nul —
|
||||
tout ce qui compte pour l'avenir arrive desormais dans InfluxDB a bien meilleure
|
||||
resolution. L'historique de HA se consulte dans HA.
|
||||
|
||||
### Deploiement
|
||||
Service `grafana` ajoute a `deploy/historisation/compose.yaml`, image
|
||||
`grafana-oss:11.3.0`, publie sur **3001**.
|
||||
⚠️ **3000 est deja occupe sur 10.10.10.22** — verifie par sonde AVANT d'ecrire
|
||||
la ligne, exactement la lecon du 5432 deja pris par le PostgreSQL de DSM.
|
||||
Telemetrie, verification de version et flux d'actualites desactives : cette
|
||||
installation doit fonctionner pendant une coupure Internet d'orage (§32).
|
||||
|
||||
`bash preparer-grafana.sh` genere le mot de passe admin (genere, pas choisi),
|
||||
l'affiche une fois, le laisse relisible dans le `.env` 600.
|
||||
|
||||
**Aucun secret n'est duplique** : le compose donne DEUX `env_file` a Grafana —
|
||||
`.env` de la pile (mot de passe admin) et `../../.env` du depot
|
||||
(`PG_LECTURE_PASSWORD`, `INFLUXDB_TOKEN`). Le provisionnement les reference par
|
||||
`$VARIABLE`, donc les fichiers YAML de sources de donnees sont commitables tels
|
||||
quels. C'etait le piege du POSTGRES_PASSWORD/PGPASSWORD tenus egaux a la main.
|
||||
|
||||
Connexion PostgreSQL par le role **`evcs_lecture`** : un tableau de bord ne doit
|
||||
pas pouvoir ecrire dans la memoire.
|
||||
|
||||
### Provisionnement = git, comme les nodes n8n (regle R2)
|
||||
`grafana/provisioning/` (sources + fournisseur) et `grafana/dashboards/`
|
||||
(les trois JSON) sont montes en LECTURE SEULE, `allowUiUpdates: false`. Une
|
||||
modification faite dans l'interface serait ecrasee au redemarrage, en silence —
|
||||
meme raison que « JAMAIS editer l'UI n8n ». Le generateur rejouable est
|
||||
`tools/gen-grafana-dashboards.py` ; Grafana relit le dossier toutes les 30 s.
|
||||
« Save as… » reste libre pour explorer (copie personnelle dans General).
|
||||
|
||||
### `tools/verifier-dashboards.mjs` — l'equivalent des golden pour les tableaux
|
||||
Rejoue **chaque** requete : SQL contre PostgreSQL, Flux contre InfluxDB, avec
|
||||
les macros de Grafana (`$__timeFilter`, `$__timeFrom/To`, `v.timeRangeStart`,
|
||||
`v.windowPeriod`) substituees comme il le fait. **Les annotations sont testees
|
||||
aussi** : elles s'executent sur tous les panneaux, donc une annotation cassee
|
||||
casse le tableau entier. Sortie non nulle au premier echec.
|
||||
Sans lui, une requete cassee ne se voit qu'a l'ecran, panneau par panneau.
|
||||
Etat au deploiement : **19/19**.
|
||||
|
||||
### Structure InfluxDB (relevee, a ne pas redecouvrir)
|
||||
L'integration `influxdb` de HA n'ecrit PAS une mesure par entite :
|
||||
- `_measurement` = **l'unite** (`W`, `A`, `V`, `%`, `kWh`, `°C`, `min`, `s`, `VA`, `Hz`, `°`)
|
||||
pour tout capteur numerique ; tags `entity_id` (**sans le prefixe de domaine**),
|
||||
`domain`, `installation` ; champ numerique `value`.
|
||||
- `_measurement` = **l'entity_id complet** (`sensor.…`, `switch.…`) pour les
|
||||
entites textuelles ; champ `state` = la chaine, `value` = 0/1 pour un switch.
|
||||
|
||||
Donc : `r._measurement == "W" and r.entity_id == "victron_pv_power_system" and r._field == "value"`,
|
||||
et pour les modes des chargeurs `r._measurement =~ /operation_mode$/ and r._field == "state"`.
|
||||
Les sept `*_operation_mode` (signal §37) et `switch.edf_general_ok_switch` sont
|
||||
bien presents.
|
||||
|
||||
### Les trois tableaux
|
||||
- **La nuit** (`evcs-nuit`) — SOC reel contre SOC exige par le bilan, **marge**
|
||||
(rouge sous zero : la batterie ne passera pas), decisions en frise, puissances,
|
||||
energie restant a couvrir, journal des evenements.
|
||||
- **Le solaire** (`evcs-solaire`) — production / maison / voiture et surtout
|
||||
**l'excedent** (§36), la censure avec son motif, **le mode declare par chacun
|
||||
des sept chargeurs** (§37), et un panneau au pas natif InfluxDB pour montrer
|
||||
ce que le pas de 60 s de PostgreSQL ne voit pas.
|
||||
- **Prevision contre reel** (`evcs-prevision`) — l'ecart heure par heure entre
|
||||
la prevision du matin meme et la production, **avec la bande de censure juste
|
||||
dessous** : une production sous la prevision peut vouloir dire mauvaise
|
||||
prevision OU absence de preneur, et seules les heures non bridees permettent
|
||||
de juger. C'est le biais de forme identifie au §42, qui demande des semaines.
|
||||
|
||||
Les evenements apparaissent en marqueurs verticaux sur **tous** les graphiques.
|
||||
|
||||
---
|
||||
*Document mis a jour le : 04/09/2026 (~08:30) — Grafana provisionne par git, 19/19 requetes verifiees*
|
||||
|
||||
Reference in New Issue
Block a user