Patrick Schurig 846c0c7525 feat(i18n): traduire ce qu'on écrit, garder verbatim ce que la machine affiche
Signalé sur /de/appareils/bornes/goecharger/ : la page était allemande sur deux
lignes et anglaise sur tout le reste. Le diagnostic a séparé deux choses que
j'avais mises dans le même sac le 2026-10-12.

LA LIGNE DE PARTAGE, écrite en tête du générateur :

  • les LIBELLÉS QUE NOUS ÉCRIVONS (en-têtes de colonnes, titres de section,
    oui/non, « Documentation fabricant ») → TRADUITS. Ils ne désignent rien à
    l'écran, l'anglais n'y était qu'une friction. REF devient REF_I18N, trois
    jeux de 20 libellés.

  • le CONTENU VENANT DE NYMEA (noms de modèles, clés de registres, libellés de
    champs comme « MAC address », unités) → VERBATIM, en anglais. Ce sont
    exactement les chaînes que l'installateur lit DANS L'APP, qui tourne en
    en_US. Les traduire rendrait la doc inutilisable pour retrouver un champ à
    l'écran.

Et la pièce qui change l'expérience plus que la traduction elle-même : une note
`verbatim`, générée dans la langue de la page, en tête du bloc de référence.
Sans elle le mélange FR/EN passe pour une traduction bâclée ; avec elle c'est
une convention que le lecteur comprend.

L'injection devient sensible à la langue : `locale_of()` déduit la langue du
suffixe du fichier et `process()` rend le bloc en conséquence. Sans ça le même
bloc partait à l'identique dans les trois versions.

TAGLINES ET TITRES — i18n/devices.yaml, 52 entrées

Le tagline vivait en paragraphe libre, écrit UNE SEULE FOIS à la création de la
page : il restait donc en anglais sur les trois versions, y compris la
FRANÇAISE. Il entre dans le bloc badges, donc il est régénéré, donc traduisible
pour toujours. 52 taglines en fr et de ; l'anglais retombe sur l'amont.

Les traductions vivent dans le dépôt de DOC et pas dans les meta.json : trois
des cinq dépôts plugins sont des dépôts nymea amont que l'AGENTS.md interdit de
modifier. Repli sur l'amont pour toute entrée absente.

Deux titres s'affichaient en FRANÇAIS sous /de/ et /en/ — « Compteur ABB B2x »,
« Borne ABB Terra AC » : corrigés, dans la page et dans la nav.

Deux coquilles AMONT corrigées au passage, repérées en relisant les 57 entrées :
meta.json annonçait « Bestel » pour Vestel et « Easeex » pour Easee. Signalées
comme corrections, pas comme traductions, dans i18n/devices.yaml.

48 FICHES FR ÉTAIENT DANS UN ANCIEN FORMAT, ET MENTAIENT

Trouvé en vérifiant : 48 fiches FR n'avaient pas de marqueur `__badges_*__`.
Leurs badges étaient du HTML figé, écrit une fois — goecharger affichait
« NIGHTLY » alors que PORTING_STATUS dit `stable` depuis. Elles sont migrées au
format canonique : badges générés, donc exacts, plus titre localisé, tagline et
intertitre. Reste `hvac/homeconnect.md`, orpheline (plugin hors PORTING_STATUS).

NAV : UN CONSTAT QUI ÉVITE DE REFAIRE L'ESSAI

`literate-nav` ne lit que son `nav_file` : la substitution par suffixe de
mkdocs-static-i18n ne s'y applique PAS. Un `SUMMARY.de.md` généré n'était lu par
personne et la barre latérale allemande gardait les noms français. Testé, puis
retiré — et la raison est écrite dans le générateur pour que personne n'y
revienne. Les libellés de nav passent par `nav_translations` : 31 éléments
traduits par langue au lieu de 29.

RÉFÉRENCE API : LAISSÉE EN ANGLAIS, DÉLIBÉRÉMENT

Les 23 pages de l'API n'ont pas de variante par langue. Leur traduire les
libellés aurait fait voir du FRANÇAIS aux lecteurs /de/ et /en/ par le repli —
une régression. Créer 46 variantes pour traduire dix libellés aurait triplé
28 000 mots de contenu généré pour un gain nul : le reste de la page (noms de
méthodes, de champs, de types, descriptions) est l'API elle-même, et ce sont les
chaînes qu'on écrit dans ses requêtes. À la place, une note explique dans les
trois langues POURQUOI cette référence est en anglais.

Vérifié : build --strict sans avertissement, les deux générateurs rendent « Doc à
jour » en --check, et la fiche goecharger relue dans les trois langues.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 08:42:21 +02:00

16 KiB
Raw Blame History

SunSpec

STABLE NYMEA CONSUMER

Se connecter aux équipements SunSpec.

Guide d'installation à venir.

Référence

!!! info "Libellés de l'application" Les clés et libellés ci-dessous sont ceux affichés par l'application, en anglais. Ils sont laissés tels quels pour que vous les retrouviez à l'identique à l'écran.

Fabricant : SunSpec, SolarEdge, Fronius
Plugin : SunSpec

Modèles pris en charge

Modèle Rôle Transport Ajout Grandeurs
SunSpec Generic gateway Modbus TCP Auto-discovery / Manual 1
SunSpec single phase inverter solarinverter — Auto 13
SunSpec split phase inverter solarinverter — Auto 16
SunSpec three phase inverter solarinverter — Auto 18
SunSpec single phase meter Energy meter — Auto 8
SunSpec split phase meter Energy meter — Auto 18
SunSpec three phase meter Energy meter — Auto 21
SunSpec Storage battery, energystorage — Auto 16
SolarEdge gateway Modbus TCP Auto-discovery / Manual 1
SolarEdge battery energystorage — Auto 14
Fronius gateway Modbus TCP Auto-discovery / Manual 1

Détail par modèle

??? abstract "SunSpec Generic — sunspecConnection" Paramètres de découverte :

| Clé | Libellé | Type | Plage | Défaut |
| --- | --- | --- | --- | --- |
| `slaveId` | Slave ID | int | — | `1` |

_Réglages :_

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `address` | Host address | QString | — | — | non |
| `hostName` | Host name | QString | — | — | non |
| `macAddress` | MAC address | QString | — | — | non |
| `port` | Port | int | — | `502` | non |
| `slaveId` | Slave ID | int | — | `1` | non |
| `endianness` | Endianness | QString | — | `Big Endian` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |

??? abstract "SunSpec single phase inverter — sunspecSinglePhaseInverter" Réglages :

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `modelId` | Model | int | — | — | oui |
| `modbusAddress` | Modbus address | uint | — | `0` | oui |
| `manufacturer` | Manufacturer | QString | — | `Unkown` | non |
| `deviceModel` | Device model | QString | — | `Unkown` | non |
| `serialNumber` | Serial number | QString | — | `Unkown` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |
| `totalCurrent` | Total AC current | double | Ampere |
| `phaseVoltage` | Phase voltage | double | Volt |
| `currentPower` | AC power | double | Watt |
| `frequency` | Frequency | double | Hertz |
| `totalEnergyProduced` | AC energy | double | KiloWattHour |
| `voltageDc` | DC voltage | double | Volt |
| `currentDc` | DC current | double | Ampere |
| `currentPowerDc` | DC power | double | Watt |
| `cabinetTemperature` | Cabinet temperature | double | DegreeCelsius |
| `operatingState` | Operating state | QString | — |
| `error` | Error | QString | — |
| `version` | Version | QString | — |

??? abstract "SunSpec split phase inverter — sunspecSplitPhaseInverter" Réglages :

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `modelId` | Model | int | — | — | oui |
| `modbusAddress` | Modbus address | uint | — | `0` | oui |
| `manufacturer` | Manufacturer | QString | — | `Unkown` | non |
| `deviceModel` | Device model | QString | — | `Unkown` | non |
| `serialNumber` | Serial number | QString | — | `Unkown` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |
| `totalCurrent` | Total AC current | double | Ampere |
| `phaseACurrent` | Phase A current | double | Ampere |
| `phaseBCurrent` | Phase B current | double | Ampere |
| `phaseANVoltage` | Phase AN voltage | double | Volt |
| `phaseBNVoltage` | Phase BN voltage | double | Volt |
| `currentPower` | AC power | double | Watt |
| `frequency` | Line frequency | double | Hertz |
| `totalEnergyProduced` | AC energy | double | KiloWattHour |
| `voltageDc` | DC voltage | double | Volt |
| `currentDc` | DC current | double | Ampere |
| `currentPowerDc` | DC power | double | Watt |
| `cabinetTemperature` | Cabinet temperature | double | DegreeCelsius |
| `operatingState` | Operating state | QString | — |
| `error` | Error | QString | — |
| `version` | Version | QString | — |

??? abstract "SunSpec three phase inverter — sunspecThreePhaseInverter" Réglages :

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `modelId` | Model | int | — | — | oui |
| `modbusAddress` | Modbus address | uint | — | `0` | oui |
| `manufacturer` | Manufacturer | QString | — | `Unkown` | non |
| `deviceModel` | Device model | QString | — | `Unkown` | non |
| `serialNumber` | Serial number | QString | — | `Unkown` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |
| `totalCurrent` | Total AC current | double | Ampere |
| `phaseACurrent` | Phase A current | double | Ampere |
| `phaseBCurrent` | Phase B current | double | Ampere |
| `phaseCCurrent` | Phase C current | double | Ampere |
| `phaseANVoltage` | Phase AN voltage | double | Volt |
| `phaseBNVoltage` | Phase BN voltage | double | Volt |
| `phaseCNVoltage` | Phase CN voltage | int | Volt |
| `currentPower` | AC power | double | Watt |
| `frequency` | Frequency | double | Hertz |
| `totalEnergyProduced` | AC energy | double | KiloWattHour |
| `voltageDc` | DC voltage | double | Volt |
| `currentDc` | DC current | double | Ampere |
| `currentPowerDc` | DC power | double | Watt |
| `cabinetTemperature` | Cabinet temperature | double | DegreeCelsius |
| `operatingState` | Operating state | QString | — |
| `error` | Error | QString | — |
| `version` | Version | QString | — |

??? abstract "SunSpec single phase meter — sunspecSinglePhaseMeter" Réglages :

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `modelId` | Model | int | — | `0` | oui |
| `modbusAddress` | Modbus address | uint | — | `0` | oui |
| `manufacturer` | Manufacturer | QString | — | `Unkown` | non |
| `deviceModel` | Device model | QString | — | `Unkown` | non |
| `serialNumber` | Serial number | QString | — | `Unkown` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |
| `currentPower` | Total real power | double | Watt |
| `totalEnergyProduced` | Total real energy exported | double | KiloWattHour |
| `totalEnergyConsumed` | Total real energy imported | double | KiloWattHour |
| `currentPhaseA` | Phase A current | double | Ampere |
| `voltagePhaseA` | Phase A voltage | double | Volt |
| `frequency` | Frequency | double | Hertz |
| `version` | Version | QString | — |

??? abstract "SunSpec split phase meter — sunspecSplitPhaseMeter" Réglages :

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `modelId` | Model | int | — | `0` | oui |
| `modbusAddress` | Modbus address | uint | — | `0` | oui |
| `manufacturer` | Manufacturer | QString | — | `Unkown` | non |
| `deviceModel` | Device model | QString | — | `Unkown` | non |
| `serialNumber` | Serial number | QString | — | `Unkown` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |
| `totalEnergyProduced` | Total real energy exported | double | KiloWattHour |
| `totalEnergyConsumed` | Total real energy imported | double | KiloWattHour |
| `currentPower` | Total real power | double | Watt |
| `energyConsumedPhaseA` | Energy consumed phase A | double | KiloWattHour |
| `energyConsumedPhaseB` | Energy consumed phase B | double | KiloWattHour |
| `energyProducedPhaseA` | Energy produced phase A | double | KiloWattHour |
| `energyProducedPhaseB` | Energy produced phase B | double | KiloWattHour |
| `totalCurrent` | Total AC current | double | Ampere |
| `currentPowerPhaseA` | Current power phase A | double | Watt |
| `currentPowerPhaseB` | Current power phase B | double | Watt |
| `currentPhaseA` | Phase A current | double | Ampere |
| `currentPhaseB` | Phase B current | double | Ampere |
| `lnACVoltage` | Line to Neutral AC Voltage | double | Volt |
| `voltagePhaseA` | Phase A voltage | double | Volt |
| `voltagePhaseB` | Phase B voltage | double | Volt |
| `frequency` | Frequency | double | Hertz |
| `version` | Version | QString | — |

??? abstract "SunSpec three phase meter — sunspecThreePhaseMeter" Réglages :

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `modelId` | Model | int | — | `0` | oui |
| `modbusAddress` | Modbus address | uint | — | `0` | oui |
| `manufacturer` | Manufacturer | QString | — | `Unkown` | non |
| `deviceModel` | Device model | QString | — | `Unkown` | non |
| `serialNumber` | Serial number | QString | — | `Unkown` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |
| `totalEnergyProduced` | Total real energy exported | double | KiloWattHour |
| `totalEnergyConsumed` | Total real energy imported | double | KiloWattHour |
| `currentPower` | Total real power | double | Watt |
| `energyConsumedPhaseA` | Energy consumed phase A | double | KiloWattHour |
| `energyConsumedPhaseB` | Energy consumed phase B | double | KiloWattHour |
| `energyConsumedPhaseC` | Energy consumed phase C | double | KiloWattHour |
| `energyProducedPhaseA` | Energy produced phase A | double | KiloWattHour |
| `energyProducedPhaseB` | Energy produced phase B | double | KiloWattHour |
| `energyProducedPhaseC` | Energy produced phase C | double | KiloWattHour |
| `currentPowerPhaseA` | Current power phase A | double | Watt |
| `currentPowerPhaseB` | Current power phase B | double | Watt |
| `currentPowerPhaseC` | Current power phase C | double | Watt |
| `currentPhaseA` | Phase A current | double | Ampere |
| `currentPhaseB` | Phase B current | double | Ampere |
| `currentPhaseC` | Phase C current | double | Ampere |
| `voltagePhaseA` | Phase A voltage | double | Volt |
| `voltagePhaseB` | Phase B voltage | double | Volt |
| `voltagePhaseC` | Phase C voltage | double | Volt |
| `frequency` | Frequency | double | Hertz |
| `version` | Version | QString | — |

??? abstract "SunSpec Storage — sunspecStorage" Réglages :

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `modelId` | Model | int | — | `0` | oui |
| `modbusAddress` | Modbus address | uint | — | `0` | oui |
| `manufacturer` | Manufacturer | QString | — | `Unkown` | non |
| `deviceModel` | Device model | QString | — | `Unkown` | non |
| `serialNumber` | Serial number | QString | — | `Unkown` | non |
| `revertTime` | Setpoint revert time | uint | 0–28800 | `0` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |
| `batteryCritical` | Battery critical | bool | — |
| `batteryLevel` | Battery level | int | Percentage |
| `storageStatus` | Status | QString | — |
| `chargingState` | Charging state | QString | — |
| `gridCharging` | Grid charging | bool | — |
| `enableCharging` | Charging | bool | — |
| `enableDischarging` | Discharging | bool | — |
| `chargingRate` | Charging rate | int | Percentage |
| `dischargingRate` | Discharging rate | int | Percentage |
| `controlHealthy` | Control healthy | bool | — |
| `chargeGradient` | Charging gradient | double | Percentage |
| `dischargeGradient` | Discharging gradient | double | Percentage |
| `currentPower` | Current power | double | Watt |
| `capacity` | Capacity | double | KiloWattHour |
| `version` | Version | QString | — |

??? abstract "SolarEdge — solarEdgeConnection" Paramètres de découverte :

| Clé | Libellé | Type | Plage | Défaut |
| --- | --- | --- | --- | --- |
| `slaveId` | Slave ID | int | — | `1` |

_Réglages :_

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `address` | Host address | QString | — | — | non |
| `hostName` | Host name | QString | — | — | non |
| `macAddress` | MAC address | QString | — | — | non |
| `port` | Port | int | — | `502` | non |
| `slaveId` | Slave ID | int | — | `1` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |

??? abstract "SolarEdge battery — solarEdgeBattery" Réglages :

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `modbusAddress` | Modbus address | uint | — | `0` | oui |
| `manufacturer` | Manufacturer | QString | — | `Unkown` | non |
| `deviceModel` | Device model | QString | — | `Unkown` | non |
| `serialNumber` | Serial number | QString | — | — | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |
| `batteryCritical` | Battery critical | bool | — |
| `batteryLevel` | Battery level | int | Percentage |
| `chargingState` | Charging state | QString | — |
| `ratedEnergy` | Rated energy | double | KiloWattHour |
| `averageTemperature` | Average temperature | double | DegreeCelsius |
| `instantaneousVoltage` | Instantaneous voltage | double | Volt |
| `instantaneousCurrent` | Instantaneous current | double | Ampere |
| `currentPower` | Instantaneous power | double | Watt |
| `maxEnergy` | Maximum energy | double | KiloWattHour |
| `capacity` | Available energy | double | KiloWattHour |
| `stateOfHealth` | State of health (SOH) | double | Percentage |
| `batteryStatus` | Battery status | QString | — |
| `version` | Version | QString | — |

??? abstract "Fronius — froniusConnection" Paramètres de découverte :

| Clé | Libellé | Type | Plage | Défaut |
| --- | --- | --- | --- | --- |
| `slaveId` | Slave ID | int | — | `1` |

_Réglages :_

| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `address` | Host address | QString | — | — | non |
| `hostName` | Host name | QString | — | — | non |
| `macAddress` | MAC address | QString | — | — | non |
| `port` | Port | int | — | `502` | non |
| `slaveId` | Slave ID | int | — | `1` | oui |
| `meterSlaveId` | Smart Meter slave ID | int | 0–247 | `200` | non |

_Grandeurs mesurées :_

| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `connected` | Connected | bool | — |