La prevision entre dans « La journee » et sur le telephone

Suite du correctif de l onglet Home Assistant. « La journee » avait le meme
angle mort : cadre sur le jour civil, il s arretait a l heure en cours.

Fenetre portee a la journee ENTIERE (dashboard() gagne un parametre `jusqu`),
serie « Encore attendu » en gris translucide a la suite des barres mesurees,
et colonne « Reste attendu » dans le bandeau du haut, a cote de « Solaire
produit ».

Sur le telephone, aucun panneau ajoute — un panneau de plus y est un ecran de
plus a faire defiler. « Soleil restant » rejoint le bandeau Maintenant, a cote
de Excedent ; « Soleil demain » rejoint La nuit qui vient, puisque c est lui
qui decide jusqu ou la batterie peut descendre.

Trois pieges, tous dans la meme direction. La mesure ne doit pas suivre la
fenetre dans le futur : ENERGIE_SQL construisait son axe entre les deux macros
puis reportait la derniere valeur connue, ce qui aurait rempli les heures a
venir avec la puissance de l instant et gonfle l energie du jour — sa borne
haute est desormais least($__timeTo(), now()). FULL OUTER JOIN et non LEFT :
une periode a venir n a aucune ligne de mesure. Et borne haute stricte, sans
quoi une barre « 18/09 00 h » apparaissait dans La journee.

L heure EN COURS n a volontairement pas de barre de prevision : elle est deja
mesuree pour ses minutes ecoulees.

73/73 requetes valides — mais ce controle prouve l execution, pas la grandeur.
Les deux requetes de La journee ont donc ete rejouees a la main avec la vraie
fenetre : 24 lignes, mesures jusqu a 02 h, prevision de 03 h a 23 h, somme des
barres 36,95 kWh contre 37,0 annonces par le bandeau. C est ce recoupement qui
a fait apparaitre le troisieme piege.

Corrige au passage la note du 08/09 sur l acces a l API Grafana : les
apostrophes du .env sont SIMPLES et non doubles, verifie a l octet.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
Tallagrand Thierry
2026-09-17 02:37:43 +02:00
parent a6baad54dc
commit 1541ccf7b4
5 changed files with 316 additions and 37 deletions

View File

@@ -5614,9 +5614,28 @@ tels quels a `curl`, d'ou le 401. Retirer les guillemets encadrants suffit :
```sh
V=$(sudo sed -n 's/^GRAFANA_ADMIN_PASSWORD=//p' .env | tr -d '\r\n')
PW=$(printf '%s' "$V" | sed -e 's/^"//' -e 's/"$//')
PW=$(printf '%s' "$V" | sed -e "s/^['\"]//" -e "s/['\"]$//")
```
⚠️ **CORRECTION du 17/09/2026 : ce sont des apostrophes SIMPLES, pas des
guillemets doubles** — verifie a l'octet (`od -c` sur le premier et le dernier
caractere). La commande ci-dessus a ete elargie aux deux formes ; celle que
j'avais ecrite le 08/09 ne retirait rien et rendait donc toujours 401.
⚠️ **ET GRAFANA BLOQUE LE COMPTE APRES QUELQUES ECHECS** :
`too many consecutive incorrect login attempts for user - login for user
temporarily blocked`. En sondant le mot de passe le 17/09 j'ai verrouille
`admin` pour quelques minutes — **le proprietaire ne pouvait plus se
connecter a son interface non plus**. Ne jamais essayer un mot de passe en
boucle sur cette API : extraire, verifier la longueur, essayer UNE fois.
Consequence pratique : une fois le compte bloque, un mot de passe CORRECT est
lui aussi refuse, donc l'echec ne prouve plus rien.
**Et l'API n'est pas necessaire pour verifier un tableau provisionne** : le
fournisseur lit les FICHIERS montes (`updateIntervalSeconds: 30`), pas l'API.
Il suffit donc de controler le contenu du fichier vu de l'interieur du
conteneur et l'absence de ligne `provision` en erreur dans son journal.
L'API repond alors du premier coup. Interroger un panneau se fait par
`/api/ds/query` depuis l'interieur du conteneur `evcs-grafana` :
@@ -6951,3 +6970,64 @@ la confiance dans la detection.**
---
*Document mis a jour le : 17/09/2026 (~02:20) — chien de garde : `startedAt` absent lu comme une panne, valeur de repos divergente, confirmation sur deux cycles*
## 71. Session du 17/09/2026 — La prevision entre dans les tableaux Grafana
Suite du correctif de l'onglet « Prevision vs reel » de Home Assistant : le
proprietaire a choisi **« La journee » d'abord, puis la ligne sur le
telephone**.
### « La journee » (`evcs-journee`)
Ce tableau avait exactement le meme angle mort : cadre sur `now/d`, il
s'arretait a l'heure en cours. Une journee dont on ne montre que la moitie
ecoulee ne repond pas a la question qu'on se pose en l'ouvrant a 10 h.
- Fenetre portee a **`now/d` → `now/d`** (la journee ENTIERE, fin du jour
comprise). `dashboard()` gagne un parametre `jusqu`.
- Le graphe horaire gagne une serie **« Encore attendu »**, gris translucide,
a la suite des barres mesurees.
- Le bandeau du haut gagne une colonne **« Reste attendu »**, a cote de
« Solaire produit ». Deux chiffres cote a cote : ce qui est fait, ce qui vient.
### « Sur le telephone » (`evcs-telephone`)
Aucun panneau ajoute — la contrainte de ce tableau est qu'un panneau de plus
est un ecran de plus a faire defiler. Les deux chiffres rejoignent donc des
bandeaux existants, chacun la ou il sert :
- **« Soleil restant »** dans *Maintenant*, a cote de « Excedent » : ce qui
reste a capter aujourd'hui ;
- **« Soleil demain »** dans *La nuit qui vient* : c'est lui qui decide jusqu'ou
la batterie peut descendre cette nuit.
Releve au deploiement : 60 % de batterie, marge +18,6, **37,0 kWh restants
aujourd'hui**, 4,6 kWh a couvrir, relais du solaire a 09 h, **28,4 kWh annonces
demain**.
### ⚠️ TROIS PIEGES RENCONTRES, tous dans la meme direction
1. **La mesure ne doit pas suivre la fenetre dans le futur.** `ENERGIE_SQL`
construisait son axe entre `$__timeFrom()` et `$__timeTo()` puis reportait la
derniere valeur connue. Etendre la fenetre a la fin du jour aurait rempli les
heures a venir avec la puissance de l'instant et **gonfle l'energie du jour**.
Sa borne haute est desormais `least($__timeTo(), now())`.
`BILAN_BASE` etait deja immunise : il derive ses bornes de `min(ts)/max(ts)`
des donnees, pas des macros.
2. **`FULL OUTER JOIN`, pas `LEFT`.** Une periode a venir n'a AUCUNE ligne de
mesure et une periode passee aucune prevision ; un `LEFT JOIN` depuis la
mesure aurait fait disparaitre toutes les barres de prevision.
3. **Borne haute STRICTE.** Avec `<=`, « La journee » affichait une barre
`18/09 00 h`. Une periode qui commence pile a la fin de la fenetre appartient
a la suivante.
Et une regle de contenu : **l'heure EN COURS n'a pas de barre de prevision**.
Elle est deja mesuree pour ses minutes ecoulees ; y superposer une prevision
d'heure pleine ferait compter deux fois la meme heure.
### Verification
`verifier-dashboards.mjs` : 73/73. Mais — troisieme rappel — il prouve qu'une
requete s'EXECUTE, pas qu'elle rend la bonne grandeur. Les deux requetes de
« La journee » ont donc ete rejouees a la main avec la vraie fenetre
(`date_trunc('day', now())` → +1 jour) : 24 lignes, mesures jusqu'a 02 h,
prevision de 03 h a 23 h, somme des barres 36,95 kWh contre 37,0 annonces par
le bandeau. C'est ce recoupement qui a fait apparaitre le piege n°3.
---
*Document mis a jour le : 17/09/2026 (~02:40) — prevision dans « La journee » et sur le telephone, 73/73*