Patrick Schurig 66aa71c990
All checks were successful
Build & Deploy docs / build-deploy (push) Successful in 2m40s
mise a jour
2026-06-06 09:51:43 +02:00

148 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Récap — Générateur de schémas unifilaires ETM-PowerSync
État au terme de la session. Sert de point d'entrée pour reprendre le projet.
---
## 1. Objectif
Assembler de petits **schémas unifilaires** pour les fiches de documentation,
à partir d'une **bibliothèque de symboles** dessinés dans Inkscape. Cible : des
schémas de quelques blocs (doc), pas des unifilaires complets d'installation.
## 2. Principe : « assembler des blocs, pas router »
- Chaque **bloc** est un glyphe compact avec des **ports nommés** sur ses bords.
- Une **scène** (fichier JSON) liste les blocs avec leur position `(x,y)` et les
**liens** entre ports nommés.
- L'**assembleur** place les blocs et relie les ports par des traits droits ou
en L. **Aucun routage automatique** : c'est l'auteur de la scène qui pose les
blocs, ce qui reste simple parce que les schémas de doc sont petits.
Conséquence : ajuster un schéma = déplacer un bloc d'une ligne dans le JSON. Les
symboles et l'assembleur ne changent pas.
## 3. Format d'un symbole (résumé du `GABARIT-blocs.md`)
- **viewBox = corps + pattes.** Le corps est inséré de **8 px** ; chaque port
est une **patte de 8 px** terminée par une pastille **sur le bord** de la
viewBox (c'est ce bord qui sert d'alignement à l'assemblage).
- **Placement** : puissance en **haut/bas** (axe d'empilement), comms & signaux
sur les **côtés** (face à leur destination), relais en **bas**.
- **Entraxe DC = 68 px** (ports à `centre ± 34`), identique entre blocs voisins
(`cof_dc.OUT1/2``onduleur.PV1/2`).
- **Encodage** : pastille = `<circle inkscape:label="term:NOM">` ; zone texte =
`<text inkscape:label="lbl:nom">` (vide, remplie par l'assembleur) ; type =
déduit du **nom de fichier** (`symbol-cof-dc.svg``cof_dc`).
- **Dans Inkscape** : sélectionner la pastille → `Ctrl+Shift+O` → champ
**Étiquette** → taper `term:…`**Entrée** (obligatoire) → `Ctrl+S`.
## 4. Code couleur / types de liens
| Type de lien | Couleur | Trait |
|---|---|---|
| `power` (puissance, ponts) | navy `#0d2b3b` | plein |
| `can` (CAN/BMS) | bleu `#31a3dd` | pointillé |
| `rs485` (Modbus) | orange `#e69500` | pointillé |
| `eth` (Ethernet) | cyan `#00b4d8` | pointillé |
| `relais` (SG-Ready, ECS…) | jaune `#caa000` | pointillé fin |
| `pwr` (alim auxiliaire) | rouge `#e6194b` | plein |
| `pe` (terre) | vert `#00ff00` | plein |
## 5. Mise à la terre — deux méthodes
- **Terre locale** (`"to":"GND"`) : chaque `PE` se termine par un symbole ⏚
posé sur place, écarté et orienté selon le côté du port. Pour les schémas
denses/éparpillés (cas général). Pas de fil qui traverse.
- **Rail** (`"to":"DGT.RAIL"`) : la barrette `dgt` est une barre ; chaque `PE`
tombe droit dessus à son aplomb (pas de numérotation). Pour une **rangée de
coffrets** côte à côte. `DGT.TERRE → prise_terre.TERRE`.
## 6. Chaîne d'outils
- **`extract.py`** — parcourt les `symbol-*.svg`, résout les transformations
Inkscape, lit les `inkscape:label` (`term:`/`lbl:`), déduit le type du nom de
fichier, et écrit **`library.json`** (coordonnées monde de chaque port + zones
texte). À lancer après chaque modif de symbole.
- **`stack2.py`** — l'assembleur. Lit une **scène** JSON et produit le schéma
SVG. Gère : placement libre `(x,y)`, injection `repere`/`display` dans les
zones `lbl:`, liens typés, cibles spéciales `DGT.RAIL` et `GND`, connecteurs
droits ou en L (`horizfirst`).
- **`block-template.svg`** — bloc vierge à dupliquer comme base.
- **`GABARIT-blocs.md`** — règle le **dessin** des blocs.
- **`REGLES-cablage.md`** — règle le **câblage** des scènes.
### Format d'une scène
```json
{
"w": 580, "h": 540,
"blocks": [
{"id":"U1","block":"symbol-onduleur.svg","at":[216,30],
"repere":"Ond1","display":{"puissance":"10 kW"}}
],
"links": [
{"from":"U1.OND","to":"Q1.OND","type":"power","horizfirst":true},
{"from":"U1.PE","to":"GND","type":"pe"}
]
}
```
## 7. Règles de câblage (résumé du `REGLES-cablage.md`)
1. **Arrivée** : `Linky → Disj. différentiel principal → Smartmeter → TGBT.IN`.
Le smartmeter (= notre `compteur`) est en tête de TGBT + RS485 vers onduleur.
2. **Smartmeter ≠ Linky** : le smartmeter est à nous ; le Linky est au
distributeur (amont, hors câblage).
3. **PV (DC)** : `String → COF-DC → Onduleur` (entraxe 68).
4. **Batterie série** : `BMS.DC_BAT → BAT1.DC_IN`, `BAT1.DC_OUT → BAT2.DC_IN`…,
`COM` en parallèle.
5. **Raccordement onduleur** (port `OND`) :
- simple : `OND → COF-AC.AC_IN → COF-AC.AC_OUT → TGBT.OND`
- backup : `OND → TGBT.OND` **et** `AC_IN → COF-BCKP.OND`
6. **Backup** : critère = présence d'un `cof_backup`. Avec → `SECOURU`/`CONSO`
séparés vers le TGBT ; sans → pont `TGBT.SECOURS ── TGBT.CONSO`.
7. **Ethernet** : plus d'un appareil ETH → insérer un `switch_eth` ; sinon lien
direct.
8. **Terre** : tous les `PE` → DGT (ou ⏚ local) → prise de terre.
## 8. Inventaire des symboles
### Validés (passent l'extracteur, ports corrects)
- `string_pv` (`DC1`, `PE`) et `2string_pv` (`DC1`, `DC2`, `PE`)
- `cof_dc` (`IN1`, `IN2`, `OUT1`, `OUT2`, `PE`)
- `compteur` / smartmeter (`L_IN`, `L_OUT`, `BUS`)
- `onduleur` (`PV1`, `PV2`, `BAT`, `OND`, `BMS`, `RS485`, `ETH`, `PE`)
- `onduleur_bckp` (idem + `AC_IN`)
- `microonduleur` / `microonduleur_2pv` (`AC_IN`, `OND`, `PE`)
- `bms` (`DC_INV`, `DC_BAT`, `COM`, `BMS`)
- `cof_backup` (`OND` en bas, `RESEAU`, `SECOURU`, `CONSO`, `PE`)
- `tgbt` (`SECOURU`, `CONSO`, `OND`, `OUT1``OUT3`, `PE`)
- `dgt` (`RAIL_L`, `RAIL_R`, `TERRE`) et `prise_terre` (`TERRE`)
### À corriger
- **`cof_ac`** : n'a plus que `AC_IN` → rajouter `AC_OUT` (bas) + `PE`.
- **`bloc_batterie`** : encore `DC`/`COM` → passer à `DC_IN` (haut) / `DC_OUT`
(bas) / `COM` pour l'empilage série.
### Détails cosmétiques
- Onduleur : texte visible « AC-OUT » à renommer « OND » (l'étiquette du port
est déjà bonne).
- Repères qui frôlent le texte visible en haut de certains blocs (zone
`lbl:repere` à décaler).
- Types `2string_pv` / `microonduleur_2pv` : à garder distincts ou normaliser
en `string_pv` / `microonduleur` (décision en attente).
## 9. ToDo — nouveaux composants à créer
- **Borne de recharge** (IRVE) — versions **RS485** et **ETH**.
- **PAC** — versions **SG-Ready**, **RS485**, **ETH**.
- **ECS** avec commande **HC/HP** (jour/nuit).
- **Routeur solaire**.
(+ finir `cof_ac` et l'ajustement `bloc_batterie`, puis monter une **fiche
complète** de bout en bout appliquant toutes les règles.)
schemas/library.json : quand tu lanceras l'extracteur, il va créer ce fichier (le cache des ports). Pense à l'ajouter au .gitignore du repo — c'est le seul truc à ne pas versionner (il se régénère sans risque).