La Trydan non-Pro est en WiFi ESP32 sans repli filaire, et le lien s'est révélé inexploitable à deux mètres du point d'accès : 70 % de scrutations avortées, 12 bascules en injoignable en vingt minutes. Le modèle sort du catalogue ETM ; seule la Pro, qui a un port Ethernet, y reste. Ce que la journée laisse acquis l'est : sessionEnergy existe et est CONSTRUIT par le plugin (1.15.2+etm13 — incréments accumulés, remises à zéro détectées, redémarrage à l'ouverture de session), currentL1/L2/L3 est déployé, phaseCount vaut 3. Ce qui n'est pas acquis ne l'est pas : la remise à zéro de chargeEnergy observée pendant qu'un sessionEnergy continue. C'est la seule observation qui distingue la grandeur construite de l'alias, et elle n'a pas pu être prise. La ligne du §5 passe de « OUI, et c'est LE point » à « REPORTÉ — Trydan Pro », et l'app n'affiche aucun avancement de charge jusque-là. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SQbZKrWqsMFP1Lh2jjjd9f
14 KiB
Préparation du banc — arrivée V2C Trydan + Skoda Enyaq, 2026-08-28
Écrit la veille, depuis le code et le banc, pour que rien de ceci ne se découvre avec la
borne au mur. Le banc tourne 1.15.2+etm24.
Deux blocages trouvés la veille, et les deux étaient silencieux — ils ne produiraient aucune erreur, seulement des chiffres faux.
✅ ÉTAT AU SOIR DU 27 : la box est PRÊTE. Le plugin V2C
1.15.2+etm12est construit en arm64, posé, et la ThingClasstrydanse charge avecphaseCount(§2.1 corrigé). Le blocage §2.2 est un refus assumé, pas une tâche. Il ne reste que le câblage et l'appairage — §6.
⚠️ CORRECTION DU 28, APRÈS-MIDI — ce document a été dépassé par le déploiement du matin
Relevé
Integrations.GetThingssur.75, borne appairée et sous tension. Trois affirmations de ce document ne sont plus vraies, et deux d'entre elles décrivaient des blocages qui n'en sont plus :
Ce que le document dit Ce que la borne publie le 28 §2.1 — la classe déclare powerL1/L2/L3currentL1/L2/L3— 5,86 / 5,94 / 6,02 A. Le renommage (unité Ampère) est déployé ; les anciens noms ont disparu§6.4 — poser phaseCount = 3reste à fairefait : l'état vaut 3 sur la Trydan §2.2 — sessionEnergyn'est délibérément pas exposéeelle l'est : sessionEnergy = 4,229 kWhMais la levée du §2.2 n'est PAS acquise, et c'est le point à ne pas lire trop vite. Au moment du relevé,
sessionEnergyvalait exactementchargeEnergy— 4,229419231414795 des deux côtés. C'est précisément ce qu'on attend d'une session sans interruption : l'égalité ne distingue pas une grandeur construite d'un simple alias du registre0x0BC4 ChargeEnergy, dont le retrait par evcc reste la raison du refus initial.Le test qui tranche est nommé : une remise à zéro de
chargeEnergy— elle survient à l'arrêt de la charge, pas au débranchement, mesurée le 28 au matin (0,3456 kWh → 0, 119 s avant que le câble ne bouge) — avec unsessionEnergyqui, lui, continue. Tant qu'elle n'est pas observée, la condition C1 de LM-1009 reste entière et l'app n'affiche aucun avancement de charge.🔴 28 au soir — la campagne s'arrête, la trace ne viendra pas de cette borne
La Trydan non-Pro est en WiFi ESP32 sans repli filaire, et le lien s'est révélé inexploitable à deux mètres du point d'accès : 70 % de scrutations avortées, 12 bascules en injoignable en vingt minutes. Le modèle sort du catalogue ETM ; seule la Trydan Pro, qui a un port Ethernet, y reste.
Ce qui reste acquis de la journée est acquis : le champ existe, il est construit par le plugin (
1.15.2+etm13— incréments accumulés, remises à zéro détectées, redémarrage à l'ouverture de session),currentL1/L2/L3est déployé,phaseCountvaut 3. Ce qui n'est pas acquis reste non acquis : la remise à zéro observée avec unsessionEnergyqui continue. Elle se prendra sur une Trydan Pro, et l'app n'affiche aucun avancement jusque-là.
1. Ce qui n'est pas encore sur la box
✅ FAIT le 27 au soir. powersync-plugin-v2c 1.15.2+etm12 est construit en arm64 et posé
par deploy.sh. Vérifié sur la box : la ThingClass trydan est chargée, interfaces
evcharger, power, connectable, appairage par address/port ou découverte.
Le
.debdu canalpowersync-testingne convenait PAS : il n'existe qu'en amd64 (powersync-plugin-v2c 1.15.2+etm1 amd64), et l'index arm64 du canal ne porte queabbb2xeteastron. Un paquet amd64 ne s'installe pas sur le Pi. D'où la construction croisée.Le travail v2c n'était pas sur une branche
feature/v2c-trydan— il est déjà surfix/fronius-meter-sign-and-battery-presence, etv2cfigure dans le.pro.
Statut du plugin, à connaître : son propre brief le déclare « Partiel — PAS dans la matrice beta validée. Ne pas promettre tant que non testé sur borne réelle. » Demain EST ce test.
2. LES DEUX BLOCAGES
2.1 phaseCount n'existe pas — et le moteur supposera 1 phase
La ThingClass trydan déclare connected, pluggedIn, charging, power,
maxChargingCurrent, currentPower, powerL1/L2/L3 et une série d'états de diagnostic.
Périmé le 28 : ce sont désormais
currentL1/L2/L3, en ampères, nom et unité corrigés côté plugin — les ancienspowerL1/L2/L3étaient des ampères mal nommés, et aucun écran ne doit porter de conversion héritée de ce temps-là. Elle ne déclare pasphaseCount. Et il n'existe aucun registre de phases dans la carte Modbus V2C (0x0BC2–0x0BD5, 0x177A–0x1783) : le nombre de phases n'est pas lisible sur la borne.
EvCharger::phaseCount() retombe alors sur 1 quand l'état est absent (evcharger.cpp:147).
Conséquences en chaîne, toutes silencieuses, sur une Trydan triphasée :
| Grandeur | Calculée | Réelle | Effet |
|---|---|---|---|
minPowerW (plancher publié) |
6 × 230 × 1 = 1 380 W | 6 × 230 × 3 = 4 140 W | l'arbitre croit pouvoir démarrer à 1 380 W |
| conversion W → A | P / (230 × 1) |
P / (230 × 3) |
consigne 3× trop haute, écrêtée à maxA |
C'est exactement la famille de défaut que 3g-2 vient de fermer (relevé 3g-1 §3.4 : un plancher annoncé qui n'est pas celui qui gouverne le démarrage), rouverte par le plugin au lieu du moteur. Elle ne se verrait pas : la borne démarrerait, à un courant faux, et le waterfall allouerait un budget qu'elle ne consomme pas.
DÉCIDÉ (Patrick, la veille) : saisie à l'appairage. La Trydan du banc est triphasée — câbler en monophasé ferait tester autre chose que l'installation réelle, et le défaut est précisément celui que 3g-2 vient de fermer : silencieux, la borne démarre au mauvais courant.
✅ CORRIGÉ ET POSÉ — etm-powersync-plugins-modbus 1.15.2+etm12, commit 371eff6.
phaseCount est un réglage (settingsType, valeurs 1 ou 3, défaut 1), recopié dans un
état que le moteur lit, et réappliqué sur settingChanged — une borne recâblée se corrige
sans recréer le Thing. Vérifié sur la box : phaseCount type=Uint min=1 max=3 défaut=1.
Ce que le validateur de plugin a appris au passage : l'interface nymea
evchargerdéfinitphaseCountavec ses bornes (1 à 3), et refuse la classe qui l'omet. S'y conformer n'est pas une formalité — c'est ce qui fait lire l'état par le moteur à travers l'interface, plutôt que par une convention propre au plugin.
Le défaut est 1, comme le repli du moteur : une installation qui ne renseigne rien se comporte exactement comme avant le correctif. Donc le réglage doit être posé à 3 à l'appairage — c'est l'étape 5 du §6, et c'est le seul geste qui reste sur ce point.
Le repli « câbler en monophasé » est ÉCARTÉ : il ferait tester une installation qui n'est pas celle du client. Le correctif se fait avant le câblage.
2.2 sessionEnergy n'est délibérément PAS exposée — et c'est LM-1009 qui en dépend
⚠️ PÉRIMÉ LE 28 SUR LE FAIT, PAS SUR LE FOND. La borne publie
sessionEnergy(4,229 kWh) depuis le déploiement du matin. Mais elle publie la même valeur quechargeEnergy, ce qui ne prouve pas que la première survive là où la seconde est remise à zéro — voir le bandeau de tête. Tout ce qui suit reste donc à lire comme la raison du refus, et comme la validation qui reste à faire.
Le registre existe : 0x0BC4 ChargeEnergy, kWh de la session. Mais le brief du plugin l'interdit
explicitement : « NE PAS exposer en sessionEnergy », et la liste des interdits porte
« Exposer sessionEnergy depuis ChargeEnergy sans validation matérielle ».
La raison est bonne et vient d'ailleurs : evcc a RETIRÉ son interface ChargeRater pour la
Trydan (evcc-io/evcc#28047) — remontée d'énergie session jugée peu fiable côté firmware.
ChargeEnergy reste donc un état de diagnostic.
Conséquence directe sur l'attendu de demain : « sessionEnergy sur matériel réel » n'est
pas franchissable avec la V2C telle qu'elle est. Ce n'est pas un oubli, c'est un refus
documenté — et c'est demain qu'il peut être levé, parce que la validation demande précisément ce
qu'on aura : une borne réelle et un compteur de référence.
Ce que demain permet à la place, et qui a de la valeur :
- Valider
ChargeEnergycontre une référence — intégrercurrentPowerde la borne sur une charge complète et comparer au kWh annoncé. C'est la validation matérielle que le brief exige, et elle débloquesessionEnergypour de bon. Si l'écart est faible et stable, le câblage se fait ensuite en une ligne de JSON. - Exercer la condition C1 de LM-1009 pour de vrai : une borne sans
sessionEnergydoit dégrader visiblement. On aura le cas sur du matériel, dès le premier jour, sans le fabriquer. Et le piège à guetter est nommé : « pas mesurable » ne doit pas s'afficher « 0 kWh livré ».
3. La Skoda Enyaq — aucun plugin, donc voiture manuelle
Aucune intégration Skoda / VW nulle part dans l'espace de travail (recherche sur
skoda|enyaq|weconnect : zéro résultat). L'Enyaq ne rapportera pas son état de charge.
Elle sera donc un Thing genericCar — voiture simulée, batteryLevel inscriptible — ce
qui la place exactement sur le chemin décrit par LM-1009 : le moteur intègre la puissance de
la borne, applique un facteur de pertes, divise par la capacité déclarée, et réécrit
lui-même batteryLevel. Le pourcentage affiché demain sera une intégration, pas une lecture.
À saisir à la création (rien de tout ceci n'est deviné par le moteur) :
| Réglage | Valeur | Pourquoi |
|---|---|---|
capacity |
capacité utile réelle de l'Enyaq (~58 / 77 kWh selon version) | divise l'énergie intégrée → une capacité fausse fausse tout le pourcentage |
minChargingCurrent |
6 A | entre dans max(borne, voiture) du plancher |
phaseCount |
3 (Enyaq charge en triphasé 11 kW) | plafonne le nombre de phases visé — c'est evTargetPhases() qui le lit |
batteryLevel initial |
l'état réel au branchement, saisi à la main | point de départ de l'intégration ; faux au départ = faux pour toute la session |
C'est la démonstration vivante de LM-1009 : trois des quatre valeurs ci-dessus sont saisies à la main, et le pourcentage affiché en dépend entièrement. À noter dans le relevé.
4. Appairage de la V2C
- Transport : Modbus TCP, port 502. Il lui faut une adresse sur le LAN
192.168.1.0/24. - Découverte : la ThingClass déclare
createMethods: ["discovery", "user"]— découverte automatique ou saisie manuelle. Paramètres :macAddress,address,hostName,port. - IP de test documentée :
192.168.1.127. Libre ce soir — vérifié, aucune machine ne répond à cette adresse. - Le piège de la Terra AC, à ne pas rejouer : une borne qui ne répond pas à l'ARP tourne en
ThingSetupStatusInProgressindéfiniment. Premier geste après câblage, avant nymea :pingdepuis le banc, puisnc -z 192.168.1.127 502. Si l'ARP ne répond pas, le problème est réseau, pas logiciel. - Registre à ne jamais écrire :
Dynamic(0x177E) — casse la télémétrie de la borne. La neutralisation propre passe parPauseDynamic(0x1783).
5. Ce qui devient franchissable demain
| Attendu | Franchissable ? | Condition |
|---|---|---|
| LM-1204-b — deux bornes en ligne | OUI | V2C + wallbox simulée. Le critère qui justifie 3g depuis le début, enfin exerçable sans la Terra AC. |
| Le plancher réel — négociation de courant, délai d'établissement, véhicule qui refuse | OUI | et c'est ce qu'aucune wallbox simulée ne prouvera jamais |
minPowerW sans véhicule branché |
OUI | depuis +etm24 la borne est hors arbitrage — vérifier qu'elle n'apparaît pas dans loads[] et que le journal le dit |
EV_GRID_START |
PEUT-ÊTRE | il faut que le budget tombe dans [plancher × 0,5 ; plancher[. À guetter, pas à fabriquer |
sessionEnergy sur matériel réel |
ATTENDU RETIRÉ (Patrick, la veille) — le refus V2C est documenté, pas un oubli | remplacé par deux choses, §2.2 : ré-examiner ChargeEnergy borne et référence en main, et exercer C1 de LM-1009 sur ce cas réel plutôt que sur un cas fabriqué |
sessionEnergy survit-elle à une interruption ? (ajouté le 28) |
REPORTÉ — Trydan Pro | le champ est construit par le plugin, mais l'observation qui le prouve (remise à zéro de chargeEnergy, sessionEnergy qui continue) n'a pas pu être prise : lien WiFi inexploitable, campagne arrêtée le 28 au soir. Rien n'est acquis, et l'app n'affiche aucun avancement |
6. Liste de contrôle — ce qui reste
Fait le 27 au soir : construire le plugin arm64 · décider et implémenter
· phaseCountposer le plugin. Le moteur tourne 1.15.2+etm24, le plugin
1.15.2+etm12, et rien n'a bougé côté arbitrage après le redémarrage (chauffe-eau 3 500 W,
pac-terrain 3 000 W, degradedMode: false).
- Câbler la borne, lui donner
192.168.1.127. ping+nc -z 192.168.1.127 502depuis le banc, avant d'ouvrir nymea. C'est le geste qui distingue un problème réseau d'un problème logiciel — la Terra AC a coûté une session faute de l'avoir fait.- Appairer la Trydan, vérifier
connected: trueet uncurrentPowerqui bouge. PoserFait — vérifié le 28 : l'étatphaseCount= 3 dans les réglages du Thing.phaseCountde la Trydan vaut 3. Le défaut est 1 ; sans ce geste, le plancher publié sera de 1 380 W au lieu de 4 140. C'est le seul point où l'oubli est silencieux — à vérifier par leminPowerWpublié en télémétrie, pas de mémoire.- Créer la voiture
genericCaravec les quatre réglages du §3 — dontcapacityréelle etbatteryLevelde départ, saisis à la main. - Associer voiture ↔ V2C, mode
ChargingModeEco, et poser les rangs des deux bornes (par défaut elles arrivent toutes à 1 — cf.RELEVE_3g2.md§3.2). - Relevé : distinguer machine / test / lecture, comme
RELEVE_LOTD.mdl'exige.