All checks were successful
Build & Deploy docs / build-deploy (push) Successful in 2m40s
148 lines
6.7 KiB
Markdown
148 lines
6.7 KiB
Markdown
# 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).
|