docs(sunspec): D-10 — la géométrie des modèles est figée à la découverte
Constaté en reconstruisant le banc le 2026-08-26. Le simulateur a été redémarré sans batterie puis de nouveau avec, sans jamais rompre la connexion TCP. Le plugin a continué de lire l'ancienne géométrie : `ProtocolError` toutes les 7 s sur le modèle 124 disparu, puis — une fois la batterie revenue — un `currentPower` FIGÉ à 0 pendant que les registres portaient StCha = 2000 W et ChaSt = Charging. Trois minutes de `thingPower` à 0.0 sur une batterie en charge. Un `systemctl restart nymead` force la redécouverte et la valeur repart immédiatement à 2000,0 W. Le défaut n'est donc ni dans le signe ni dans le mapping de D-9 : ceux-là sont justes et le prouvent dès que la découverte est refaite. Il est dans le fait qu'une liaison thing↔modèle est établie une fois et jamais reconsidérée — et le storage y est plus exposé que les autres things parce qu'il dépend maintenant de TROIS modèles au lieu d'un. Rare sur matériel, mais pas théorique : une mise à jour de firmware, ou une batterie ajoutée à un hybride déjà appairé, produisent la même transition. Le signal existe déjà et n'est pas exploité — le ProtocolError répété à une adresse jusque-là valide dit que la chaîne a bougé. Documenté, pas corrigé : cela touche au cycle de découverte, hors périmètre. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y3gzsuwENJfJtvuNDT3xGn
This commit is contained in:
parent
2bb3ff570b
commit
f8c0f24c40
@ -354,3 +354,49 @@ est en outre vérifiée **à la compilation** par `nymea-plugininfocompiler` :
|
||||
essayer `KiloWattHour` sur `currentPower` fait échouer le build avec
|
||||
« claims to implement interface "energystorage" but state "currentPower" has not
|
||||
matching unit ».
|
||||
|
||||
---
|
||||
|
||||
## D-10 — la géométrie des modèles est figée à la découverte (MESURÉ)
|
||||
|
||||
**Contexte.** Le plugin lie chaque thing à un `SunSpecModel` au moment de la
|
||||
découverte : identifiant de modèle, registre de départ, longueur. Les modèles
|
||||
compagnons du storage (160, 120) sont liés de la même façon, par
|
||||
`bindStorageCompanionModels()`.
|
||||
|
||||
**L'écart.** Rien ne redécouvre la chaîne tant que la **connexion** ne tombe pas.
|
||||
Si l'appareil change la FORME de sa chaîne sans rompre le TCP, le plugin
|
||||
continue de lire l'ancienne géométrie.
|
||||
|
||||
**Mesure du 2026-08-26.** Le simulateur `.211` a été redémarré sans batterie, puis
|
||||
de nouveau avec. Trois états successifs, connexion Modbus jamais rompue :
|
||||
|
||||
| moment | chaîne | ce que fait le plugin |
|
||||
|---|---|---|
|
||||
| avant | 160 `L=88` (4 blocs) · 124 présent | `currentPower` suit la batterie |
|
||||
| sans batterie | 160 `L=48` (2 blocs) · **124 absent** | `Read data block response error: ProtocolError` toutes les 7 s sur `"storage"` — il lit toujours 40355 |
|
||||
| batterie revenue | 160 `L=88` · 124 présent | les erreurs cessent, mais **`currentPower` reste figé à sa dernière valeur** |
|
||||
|
||||
`thingPower` du storage : `0.0` à 16:09, 16:10, 16:11 pendant que les registres
|
||||
portaient `StCha = 2000 W` et `ChaSt = Charging`. Un `systemctl restart nymead`
|
||||
force la redécouverte, et la valeur repart immédiatement — `2000.0` à 16:13.
|
||||
|
||||
**Ce que cela apprend.** Le défaut n'est ni dans le signe ni dans le mapping de
|
||||
D-9 : ceux-là sont justes, et le prouvent dès que la découverte est refaite.
|
||||
Il est dans le fait qu'une liaison thing↔modèle est établie une fois et jamais
|
||||
reconsidérée. Le storage y est plus exposé que les autres things parce qu'il
|
||||
dépend de **trois** modèles au lieu d'un.
|
||||
|
||||
**Portée réelle.** Au banc, c'est fréquent : tout redémarrage du simulateur avec
|
||||
d'autres options change la chaîne. Sur du matériel, c'est rare mais pas
|
||||
théorique — une mise à jour de firmware, ou une batterie ajoutée à un hybride
|
||||
déjà appairé, produisent exactement cette transition.
|
||||
|
||||
**Contournement aujourd'hui.** Redémarrer `nymead`, ou retirer et rajouter la
|
||||
connexion. La perte de la connexion TCP suffit aussi, puisqu'elle déclenche une
|
||||
redécouverte.
|
||||
|
||||
**Comment lever.** Redécouvrir périodiquement, ou sur erreur Modbus répétée à une
|
||||
adresse jusque-là valide — le `ProtocolError` toutes les 7 s du tableau ci-dessus
|
||||
est précisément le signal que la chaîne a bougé, et il est actuellement journalisé
|
||||
sans conséquence. Hors périmètre de D-9, qui ne touche pas au cycle de découverte.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user