La consigne de repos absorbe les a-coups de la plaque
Valeurs negatives au point de raccordement, contacteur ferme. La mesure separe deux phenomenes que rien ne reliait. Le premier est bien la plaque qui cycle : sur la fenetre de midi, 9 % des echantillons negatifs, minimum -477 W, mediane -146. Le regulateur ne rattrape pas un delestage brutal d un kilowatt avec une consigne de repos a 200 W. Elle passe a 700 : la courbe monte de 500 W et le minimum devient +23 W. Le surcout va dans le bon sens, cette consigne ne s appliquant que contacteur ferme sans session reseau — c est-a-dire apres une coupure sur SOC bas ou une fermeture par la regle de protection, deux cas ou l on veut justement que le reseau contribue davantage. Le second, -2819 W pendant deux minutes, n a rien a voir : le debranchement du vehicule a supprime 2,2 kW d un coup alors que la batterie a 93 % n absorbait rien et que le MPPT produisait 4 kW. Aucune consigne n absorbe cela. Ce qui l evite est le correctif du matin sur la regle de protection : la demande sur le parc valait 741 W, le contacteur n aurait pas ete ferme, et sans reseau il n y a rien ou injecter. Golden 80/80, trois attendus mis a jour avec la mesure en commentaire. Et docker n est pas dans le PATH d une session SSH sur DSM : les commandes de deploiement appellent desormais /usr/local/bin/docker. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
61
HANDOFF.md
61
HANDOFF.md
@@ -4733,6 +4733,67 @@ redemarrage (verifie : 5 a 6 points chacun en quinze minutes), dont
|
||||
— c'est leur absence qui avait empeche d'etablir la semantique de ce dernier
|
||||
quand il a fausse une cloture de session.
|
||||
|
||||
### Injection furtive : deux phenomenes distincts, un seul se corrige ici
|
||||
Le proprietaire a observe des valeurs negatives au point de raccordement
|
||||
contacteur ferme — « -580 W furtivement, et aussi du -80, -320 » — voiture
|
||||
debranchee, batterie au-dessus de 80 %, et il l'attribue aux a-coups de la
|
||||
plaque chauffante. Mesure des deux fenetres fermees du 06/09 :
|
||||
|
||||
| fenetre | echantillons negatifs | minimum | mediane des negatifs | energie |
|
||||
|---|---:|---:|---:|---:|
|
||||
| 12:07-12:22 | 9 % | **-477 W** | -146 W | 3,5 Wh |
|
||||
| 13:34-13:42 | 17 % | **-2 819 W** | -1 655 W | 29,2 Wh |
|
||||
|
||||
**Ce sont deux choses differentes.**
|
||||
|
||||
La premiere est bien la plaque : le regulateur ne rattrape pas assez vite un
|
||||
delestage brutal de ~1 kW, et avec une consigne de repos a 200 W le point de
|
||||
fonctionnement passe sous zero. Correctif : **consigne de repos 200 -> 700 W**
|
||||
(`INPUT_PARSE`, borne elargie de [0,500] a [0,1500]). Toute la courbe monte de
|
||||
500 W : sur cette fenetre le minimum passe de -477 a **+23 W**, plus aucune
|
||||
excursion negative.
|
||||
|
||||
Le surcout est faible et va dans le bon sens : la consigne de repos ne
|
||||
s'applique que contacteur FERME sans session reseau EVCS — donc apres une
|
||||
coupure sur SOC bas, ou apres une fermeture par la regle de protection du parc.
|
||||
**Dans les deux cas on VEUT que le reseau contribue plus que 200 W.** Contacteur
|
||||
ouvert, elle n'a aucun effet.
|
||||
|
||||
La seconde n'a rien a voir avec la plaque, et **aucune consigne ne l'absorbe** :
|
||||
|
||||
| heure | reseau | maison | PV | EVCS | batterie |
|
||||
|---|---:|---:|---:|---:|---:|
|
||||
| 13:41:35 | 393 | 4 717 | 3 976 | 2 182 | -568 |
|
||||
| **13:41:40** | **-2 534** | 1 589 | 3 808 | **18** | -655 |
|
||||
| 13:42:30 | -1 594 | 2 013 | 4 024 | — | 25 |
|
||||
| 13:43:30 | -1 145 | 1 510 | 4 060 | — | 1 060 |
|
||||
|
||||
Le debranchement du vehicule supprime 2,2 kW d'un coup. La batterie, a 93 % de
|
||||
SOC, n'absorbe rien (elle DECHARGE encore a -655 W, plafond de charge abaisse
|
||||
par le BMS) et le MPPT produit toujours 4 kW : l'excedent part au reseau pendant
|
||||
**plus de deux minutes**, le temps que le systeme bride la production — la
|
||||
remontee du courant batterie de -655 a +1 060 W montre le rattrapage.
|
||||
|
||||
Ce qui l'evite est le correctif du meme jour sur la regle de protection : la
|
||||
demande sur le parc valait alors **741 W**, donc avec la regle corrigee le
|
||||
contacteur n'aurait jamais ete ferme — et sans reseau, il n'y a rien ou
|
||||
injecter. Le probleme se resout en amont, pas par la consigne.
|
||||
|
||||
Golden 80/80, trois attendus mis a jour dans le meme commit (200 -> 700) avec la
|
||||
mesure en commentaire. Mutation : retour a 200 -> les 3 memes echouent.
|
||||
|
||||
### Le binaire docker n'est pas dans le PATH en SSH sur DSM
|
||||
`sudo docker compose restart historisation` echoue sur
|
||||
`sudo: docker: command not found` : Synology ne met `/usr/local/bin` dans le
|
||||
chemin que pour les sessions interactives de son interface. Toute commande
|
||||
lancee a distance doit appeler `/usr/local/bin/docker`. Corrige dans
|
||||
`deploy/historisation/README.md` (note en tete + 9 occurrences) et
|
||||
`deploy/watchdog/compose.yaml`.
|
||||
|
||||
Pour memoire : l'acces SSH par cle a 10.10.10.22 fonctionne et `sudo` y est sans
|
||||
mot de passe — la demande de validation avant un `sudo` releve de la regle posee
|
||||
par le proprietaire, pas d'une incapacite.
|
||||
|
||||
### Reste ouvert
|
||||
- Detecteur de gel dans le service d'historisation : une grandeur qui ne bouge
|
||||
pas alors qu'une autre du meme bilan bouge = alerte. Non fait.
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# Mémoire de mesures EVCS
|
||||
|
||||
> ⚠️ **Sur le Synology, `docker` n'est PAS dans le `PATH` d'une session SSH.**
|
||||
> Il vit dans `/usr/local/bin/docker`, et DSM ne le met dans le chemin que pour
|
||||
> les sessions interactives de l'interface. Toute commande lancee a distance
|
||||
> doit donc l'appeler par son chemin complet, sinon elle echoue sur
|
||||
> `sudo: docker: command not found` — constate le 06/09/2026.
|
||||
> Depuis un terminal DSM ouvert a la main, `docker compose ...` suffit.
|
||||
|
||||
|
||||
Deux bases sur **10.10.10.22**, décidées le 04/09/2026 : on met les deux en
|
||||
service et on décide à l'usage s'il faut garder les deux.
|
||||
|
||||
@@ -24,8 +32,8 @@ libres.
|
||||
```sh
|
||||
cd /volume2/projects/EVCS/EVCS/deploy/historisation
|
||||
bash preparer-env.sh # génère .env avec des secrets aléatoires
|
||||
docker compose up -d
|
||||
docker compose logs -f
|
||||
/usr/local/bin/docker compose up -d
|
||||
/usr/local/bin/docker compose logs -f
|
||||
```
|
||||
|
||||
### D'où viennent les secrets
|
||||
@@ -49,9 +57,9 @@ d'attendre les anciens.
|
||||
Vérifications :
|
||||
|
||||
```sh
|
||||
docker compose exec postgres psql -U evcs -d evcs -c '\dt'
|
||||
/usr/local/bin/docker compose exec postgres psql -U evcs -d evcs -c '\dt'
|
||||
curl -s http://10.10.10.22:8086/health
|
||||
docker compose logs historisation --tail 5
|
||||
/usr/local/bin/docker compose logs historisation --tail 5
|
||||
```
|
||||
|
||||
### Ports : 5433, et pas 5432
|
||||
@@ -129,7 +137,7 @@ se corrige d'elle-même.
|
||||
besoin d'un `INSERT` sur cette seule table :
|
||||
|
||||
```sh
|
||||
sudo docker compose exec -T postgres psql -U evcs -d evcs -c \
|
||||
sudo /usr/local/bin/docker compose exec -T postgres psql -U evcs -d evcs -c \
|
||||
"GRANT INSERT ON evenement TO evcs_lecture;
|
||||
GRANT USAGE, SELECT ON SEQUENCE evenement_id_seq TO evcs_lecture;"
|
||||
```
|
||||
@@ -197,8 +205,8 @@ bien meilleure.
|
||||
```bash
|
||||
cd /volume2/projects/EVCS/EVCS/deploy/historisation
|
||||
bash preparer-grafana.sh # génère le mot de passe admin, l'affiche une fois
|
||||
sudo docker compose up -d grafana
|
||||
sudo docker compose logs -f grafana
|
||||
sudo /usr/local/bin/docker compose up -d grafana
|
||||
sudo /usr/local/bin/docker compose logs -f grafana
|
||||
```
|
||||
|
||||
⚠️ **`sudo` est obligatoire sur DSM** : l'utilisateur ordinaire n'a pas accès
|
||||
@@ -296,8 +304,8 @@ s'est vu qu'au journal du conteneur.
|
||||
**Et après tout déploiement du service :**
|
||||
|
||||
```bash
|
||||
sudo docker compose restart historisation
|
||||
sudo docker compose logs --since 2m historisation
|
||||
sudo /usr/local/bin/docker compose restart historisation
|
||||
sudo /usr/local/bin/docker compose logs --since 2m historisation
|
||||
```
|
||||
|
||||
⚠️ **`--since`, pas `--tail`.** Le service ne journalise que lorsqu'il a écrit
|
||||
|
||||
@@ -11,12 +11,12 @@
|
||||
# Mise en service :
|
||||
# cd /volume2/projects/EVCS/EVCS/deploy/watchdog
|
||||
# cp watchdog.env.exemple watchdog.env puis y coller la clé API n8n
|
||||
# docker compose up -d
|
||||
# docker compose logs -f
|
||||
# /usr/local/bin/docker compose up -d
|
||||
# /usr/local/bin/docker compose logs -f
|
||||
#
|
||||
# Vérification sans risque, avant de le laisser en service :
|
||||
# docker compose run --rm evcs-watchdog node tools/watchdog-evcs.mjs --once
|
||||
# docker compose run --rm evcs-watchdog node tools/watchdog-evcs.mjs --once --dry-run --simulate-dead
|
||||
# /usr/local/bin/docker compose run --rm evcs-watchdog node tools/watchdog-evcs.mjs --once
|
||||
# /usr/local/bin/docker compose run --rm evcs-watchdog node tools/watchdog-evcs.mjs --once --dry-run --simulate-dead
|
||||
|
||||
services:
|
||||
evcs-watchdog:
|
||||
|
||||
@@ -420,3 +420,11 @@ heure_reelle,etat,courant_mA,c1_mV,c2_mV,c3_mV,c4_mV,c5_mV,c6_mV,c7_mV,c8_mV,c9_
|
||||
2026-09-06T12:21:07.824Z,Y230202C30371425,,3414,3415,3411,3418,3413,3410,3414,3411,3415,3415,3415,3415,3401,3414,3407,17
|
||||
2026-09-06T12:21:07.919Z,Y230202C30371431,,3417,3416,3416,3416,3419,3416,3415,3415,3416,3395,3417,3416,3416,3415,3416,24
|
||||
2026-09-06T12:21:08.045Z,Y230202C30371427,,3418,3412,3417,3414,3401,3417,3413,3407,3417,3417,3415,3416,3420,3421,3406,20
|
||||
2026-09-06T12:31:08.092Z,Y230202C30371426,,3413,3414,3414,3415,3415,3414,3414,3414,3390,3414,3414,3414,3414,3414,3414,25
|
||||
2026-09-06T12:31:08.219Z,Y230202C30371425,,3417,3418,3413,3422,3416,3413,3417,3414,3418,3418,3418,3418,3401,3417,3409,21
|
||||
2026-09-06T12:31:08.315Z,Y230202C30371431,,3414,3414,3414,3414,3415,3414,3414,3413,3414,3389,3414,3414,3414,3414,3414,26
|
||||
2026-09-06T12:31:08.440Z,Y230202C30371427,,3418,3412,3417,3414,3398,3417,3413,3406,3417,3417,3415,3416,3421,3421,3403,23
|
||||
2026-09-06T12:41:08.479Z,Y230202C30371426,,3417,3416,3417,3417,3416,3417,3416,3417,3389,3416,3417,3416,3417,3417,3416,28
|
||||
2026-09-06T12:41:08.607Z,Y230202C30371425,,3413,3415,3410,3419,3413,3409,3414,3410,3415,3415,3415,3415,3397,3414,3405,22
|
||||
2026-09-06T12:41:08.702Z,Y230202C30371431,,3421,3419,3419,3419,3420,3420,3419,3419,3420,3393,3421,3419,3419,3419,3420,28
|
||||
2026-09-06T12:41:08.828Z,Y230202C30371427,,3423,3416,3421,3418,3402,3422,3417,3409,3422,3422,3420,3420,3425,3426,3407,24
|
||||
|
||||
|
@@ -478,7 +478,33 @@ const params = {
|
||||
// point de fonctionnement reste positif sur l'essentiel des excursions.
|
||||
// ⚠️ Ne supprime pas les pointes les plus fortes : une excursion de -356 W
|
||||
// passerait encore sous zero. Reduit leur nombre, ne les annule pas.
|
||||
gridSetpointIdleW: clamp(num(input.grid_setpoint_idle_w, 200), 0, 500),
|
||||
// CONSIGNE DE REPOS : 50 -> 200 (04/09) -> 700 (06/09).
|
||||
//
|
||||
// Elle ne s'applique que contacteur FERME sans session reseau EVCS — donc
|
||||
// apres une coupure sur SOC bas, ou apres une fermeture par la regle de
|
||||
// protection du parc. Contacteur ouvert, elle n'a aucun effet.
|
||||
//
|
||||
// A 200 W, une plaque chauffante qui cycle fait passer le point de
|
||||
// fonctionnement sous zero : mesure du 06/09 sur la fenetre 12:07-12:22,
|
||||
// 9 % des echantillons negatifs, minimum -477 W, mediane des negatifs
|
||||
// -146 W. Le regulateur ne rattrape pas assez vite un delestage brutal de
|
||||
// ~1 kW. A 700 W toute la courbe monte de 500 W : minimum +23 W, plus aucune
|
||||
// excursion negative sur cette fenetre.
|
||||
//
|
||||
// Le surcout est faible et va dans le bon sens : les DEUX seules raisons de
|
||||
// fermer le contacteur sans session EVCS sont « la batterie est a son
|
||||
// plancher » et « la maison demande plus que le parc ne sait donner ». Dans
|
||||
// les deux cas on VEUT que le reseau contribue plus que 200 W.
|
||||
//
|
||||
// ⚠️ Ne corrige PAS les gros a-coups. Le 06/09 a 13:41:40, le debranchement
|
||||
// du vehicule a supprime 2,2 kW d'un coup alors que la batterie, a 93 % de
|
||||
// SOC, n'absorbait rien et que le MPPT produisait 4 kW : -2 819 W pendant
|
||||
// plus de deux minutes, le temps que le systeme bride la production. Aucune
|
||||
// consigne n'absorbe cela. Ce qui l'evite est la correction du meme jour sur
|
||||
// la regle de protection (elle porte desormais sur `maison - PV`) : avec une
|
||||
// demande sur le parc de 741 W, le contacteur n'aurait pas ete ferme, et
|
||||
// sans reseau il n'y a rien ou injecter.
|
||||
gridSetpointIdleW: clamp(num(input.grid_setpoint_idle_w, 700), 0, 1500),
|
||||
|
||||
probeEnabled: low(input.probe_enabled || 'off') === 'on',
|
||||
probeMinutes: Math.max(1, num(input.probe_minutes, 3)),
|
||||
|
||||
@@ -1186,6 +1186,14 @@ export const scenarios = [
|
||||
// testait l'inverse de ce que son libelle annoncait — et il l'a signale en
|
||||
// renvoyant 5595. Ne jamais construire un contrefactuel en surchargeant une
|
||||
// clef deja presente.
|
||||
// ⚠️ ATTENDU MIS A JOUR LE 06/09/2026 : la consigne de repos est passee de
|
||||
// 200 a 700 W. Elle ne s'applique que contacteur FERME sans session reseau,
|
||||
// et a 200 W une plaque qui cycle faisait passer le point de fonctionnement
|
||||
// sous zero (mesure du 06/09, fenetre 12:07-12:22 : 9 % d'echantillons
|
||||
// negatifs, minimum -477 W, mediane des negatifs -146 W). Les deux seules
|
||||
// raisons de fermer le contacteur sans session EVCS sont « batterie au
|
||||
// plancher » et « la maison demande plus que le parc ne sait donner » :
|
||||
// dans les deux cas on veut que le reseau contribue plus que 200 W.
|
||||
id: 'consigne-sans-engagement-retombe-au-repos',
|
||||
label: "Même relevé mais SOC 70 au-dessus de la ligne : aucune session engagée → la consigne retombe à la valeur de repos",
|
||||
time: '2026-08-08T03:30:00+02:00',
|
||||
@@ -1204,7 +1212,7 @@ export const scenarios = [
|
||||
expect: {
|
||||
profile: 'night_hc',
|
||||
takeoverNeeded: false,
|
||||
gridSetpointW: 200,
|
||||
gridSetpointW: 700,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1994,7 +2002,7 @@ export const scenarios = [
|
||||
grid_setpoint_w: '4000',
|
||||
},
|
||||
expect: {
|
||||
gridSetpointW: 200,
|
||||
gridSetpointW: 700,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -2041,7 +2049,7 @@ export const scenarios = [
|
||||
grid_setpoint_w: '4000',
|
||||
},
|
||||
expect: {
|
||||
gridSetpointW: 200,
|
||||
gridSetpointW: 700,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user