Patrick Schurig f8c0f24c40 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
2026-08-26 17:17:02 +02:00
..

SunSpec

Connect nymea to SunSpec devices over Modbus TCP

Supported Things

  • SunSpec Inverter
    • Model ID 101 & 111 Single phase inverter
    • Model ID 102 & 112 Split phase inverter
    • Model ID 103 & 113 Three phase inverter
  • SunSpec Meter
    • Model ID 201 & 211 Single phase meter
    • Model ID 202 & 212 Split phase meter
    • Model ID 203 & 213 Three phase meter
  • SunSpec Storage
    • Model ID 124 (state of charge, status, setpoints)
    • Model ID 160 (instantaneous power, StCha / StDisCha blocks)
    • Model ID 120 (rated capacity, WHRtg)

Tested connections

  • SolarEdge (with custom battery)

Requirements

  • The package 'nymea-plugin-sunspec' must be installed.
  • The SunSpec device must support SunSpec over modbus TCP

More

https://sunspec.org


Exploitation — batterie visible mais non mesurable

Depuis 1.15.2+etm10, la thingClass SunSpec Storage déclare l'interface energystorage. C'est ce qui la rend visible au bilan de puissance de nymea (currentPowerStorage), à la réserve de recharge du véhicule, et à la réserve du waterfall. Avant, elle ne déclarait que battery et aucun des trois ne la trouvait.

L'état currentPower se lit dans le modèle 160, pas dans le modèle 124 qui n'a aucun registre de puissance. Conséquence à connaître avant de diagnostiquer une batterie « à zéro » :

Un onduleur SunSpec qui publie le modèle 124 sans modèle 160 porte l'interface energystorage avec un currentPower qui ne bougera jamais de zéro. C'est le cas des appareils SunSpec génériques. La batterie apparaît alors dans le bilan, comptée pour 0 W — ce qui se lit « ni charge ni décharge », et non « je ne sais pas ».

Ce cas est annoncé une fois par thing dans le journal de nymead, au démarrage ou au premier relevé qui suit la découverte. Deux formulations, selon la cause :

W | SunSpec: Storage "<nom>" has no model 160 on its connection: currentPower
    has no register to read and will stay at 0. This storage is visible to the
    energy balance but not measurable.

W | SunSpec: Storage "<nom>" has a model 160 but no StCha/StDisCha block:
    currentPower has nothing to read and will stay at 0.

La seconde forme est le cas d'un onduleur hybride sans batterie câblée : il publie N = 2 (les deux strings PV) et aucun bloc batterie.

À vérifier en premier sur un site où currentPowerStorage reste à zéro :

journalctl -u nymead | grep -i "will stay at 0"

Si la ligne est là, le défaut est dans ce que l'appareil publie, pas dans nymea. Si elle est absente, la batterie est mesurée et le zéro est une vraie mesure.

L'état capacity (kWh) vient de WHRtg du modèle 120. Quand la plaque signalétique ne l'implémente pas, l'état est laissé tel quel plutôt que remis à zéro : un zéro se lirait comme une mesure. Aucune règle du moteur ne lit capacity à ce jour.

Détail du raisonnement, de la mesure du signe et de l'écart assumé : DIVERGENCES.md, entrée D-9.