6 Commits

Author SHA1 Message Date
Patrick Schurig
e88c283243 feat(i18n): le bloc de référence passe en anglais, et --lang devient réel
Le vocabulaire des deux générateurs sortait en français en dur. Il est
externalisé dans un dict REF par générateur, EN ANGLAIS, un seul jeu servi
identique dans les trois langues.

La raison est une MESURE, pas un goût : nymea ne sert aucune traduction sur
notre parc. Vérifié le 2026-10-12 sur le banc `hems` —
Integrations.GetThingClasses rend la MÊME charge utile au sha256 près
(243 340 octets) pour fr_FR, de_DE et en_US, et nymea-plugins-translations
n'est pas installé. Les noms de modèles, de registres et d'unités sont donc
déjà en anglais ; traduire les seuls en-têtes de colonnes autour aurait
fabriqué des pages bilingues sans rien gagner. Côté API c'est plus direct
encore : méthodes, champs, types et `description` viennent d'introspect.json.

Ce qui se TRADUIT, en revanche, c'est la prose et la navigation. D'où deux
ajouts côté fiches appareils :

- SCAFFOLD : l'échafaudage de prose par langue (titre de catégorie, intertitre
  « Référence », mention de guide à venir). Sans lui, chaque nouvel appareil
  créerait sa fiche dans la seule langue par défaut, et fallback_to_default la
  servirait EN FRANÇAIS sous /de/ et /en/ — par le simple fait d'être créée.
- CATEGORY_LABELS_I18N pour les titres de pages d'index de catégorie.

`--lang` existait depuis la CI mais n'était PAS lu (« Conservé pour
compatibilité CI »). Il désigne maintenant la langue par défaut — celle dont
les fichiers n'ont pas de suffixe — et `--locales` dit lesquelles générer.
ensure_device_pages() et ensure_category_indexes() bouclent dessus, et ne
réécrivent JAMAIS une page existante : la prose traduite à la main survit aux
régénérations. Vérifié : second passage, « Doc à jour », 0 page régénérée.

Les messages de diagnostic (ERREUR, AVERTISSEMENT, BLOQUANT) restent en
français : ils s'adressent au mainteneur, pas au site.

Note de méthode : la validation par ast.parse() ne voit pas une erreur de table
des symboles (`global` après usage). compile() la voit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 06:38:45 +02:00
827de2c4d8 mise a jour 2026-06-06 09:51:43 +02:00
a7dedb3366 feat: badges origine centralisés, TOC masqué sur les index de catégorie
All checks were successful
Build & Deploy docs / build-deploy (push) Successful in 1m54s
- render_header_badges() fonction partagée pour canal + origine + stabilité
- Marqueur __badges_<plugin>__ dans les 9 fiches (5 manuelles + 4 auto)
- Marqueur __index_<cat>__ dans les 3 index manuels (compteurs, bornes, smart)
- Front matter hide: [toc] sur tous les index de catégorie
- .badge.experimental ajouté dans extra.css (waveshare)
- process() gère __badges_ keys via render_header_badges()
- build_category_index_page() inclut hide:toc front matter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 15:42:04 +02:00
0f2be2e000 feat: badge origine + catalogue complet PORTING_STATUS (60 plugins)
All checks were successful
Build & Deploy docs / build-deploy (push) Successful in 1m47s
Partie 1 — Dimension « origine » (3ème badge)
- gen_device_reference.py : ORIGIN_BADGES dict, resolve_origin() déduit
  l'origine depuis repo: (nymea-* → NYMEA, etm-* → ETM) ou champ origin:
  explicite ; colonne Origine ajoutée dans matrice et index de catégorie ;
  badge origine dans l'en-tête des fiches générées
- extra.css : styles .badge.origin-nymea (gris-bleu), .badge.origin-etm
  (vert), .badge.origin-tiers (orange)
- compatibilite.md : légende étendue aux 3 dimensions (canal, origine, stab.)
- Catégorie « generic » ajoutée (Types génériques nymea)

Partie 2 — Catalogue complet PORTING_STATUS.yaml
- 9 entrées validées conservées avec leurs canaux (stable/testing/nightly)
- 41 nouveaux plugins énergie activés (channel: nightly) : onduleurs PV
  (sma, solax, sungrow, huawei, kostal, mtec, wattsonic, sunspec, bosswerk,
  solarlog), IRVE (easee, goecharger, evbox, everest, v2xeamberelectric,
  amperfied, mennekes, webasto, pcelectric, phoenixconnect, inro),
  HVAC (tado, homeconnect, stiebeleltron, idm, drexelundweiss, alphainnotec,
  mypv), compteurs (powerfox, bgetech, inepro, schrack, vestel, senseair),
  smartdevices (shelly, tasmota, tuya, gpio, usbrelay, usbrly82, mqttclient,
  modbuscommander, unipi), tarifs (awattar, tempo, spothinta),
  generic (genericenergy, genericheatingcooling, genericcar)
- 60 plugins domotique/hors-périmètre commentés (réactivables via # → -)
- 50 fiches générées + 2 index créés (tarifs/, generic/)
- mkdocs build --strict OK, --check exit 0 (idempotent)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 15:02:25 +02:00
e6d9225a4a feat: génération complète des fiches appareils depuis PORTING_STATUS + JSON
Some checks failed
Build & Deploy docs / build-deploy (push) Failing after 13m43s
Le générateur crée désormais entièrement les fiches inexistantes (titre,
badges, section générée BEGIN/END) et les index.md de catégorie manquants.
Les fiches rédigées manuellement (eastron, abb-b2x, abb-terra, keba,
waveshare) sont préservées — seul le contenu entre marqueurs est réinjecté.

- gen_device_reference.py : ensure_device_pages() + ensure_category_indexes()
  créent les .md manquants dans le format exact de process() → idempotent
- render_matrix() : inclut tous les canaux (nightly sans JSON = ligne stub)
- generate_summary() : intègre check mode + inclut toutes les entrées nav
- process()/repl() : gère __index_<cat>__ et nightly sans JSON → stub
- load_plugins/load_meta : logging explicite pour JSON vides ou non parsables
- Supprimer stubs manuels hvac/{daikinairco,sgready,simpleheatpump,index}.md
  et onduleurs/{fronius,index}.md → remplacés par fichiers générés
- 9 appareils dans la matrice et dans le SUMMARY.md, mkdocs build --strict OK

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 13:05:23 +02:00
9eee067829 feat: docs-as-code — générateur, literate-nav, badges, CI Gitea Actions
- PORTING_STATUS.yaml : source de vérité canal APT + placement nav
- scripts/gen_device_reference.py : génération matrice + fiches + SUMMARY.md
  depuis integrationplugin*.json + meta.json ; nightly sans JSON = invisible
- mkdocs.yml : plugin literate-nav, nav 6 sections, Appareils via SUMMARY.md
- .gitea/workflows/docs.yml : CI complet — fetch JSON (branche auto-détectée),
  génération, build --strict, check idempotence, rsync deploy
- Badges HTML (stable/testing/nightly + consumer/community + ok/part/road)
- Fiches appareils : Eastron, ABB B2x, ABB Terra, Keba, Waveshare
- requirements.txt : mkdocs-material, mkdocs-literate-nav, PyYAML

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 08:53:54 +02:00