# 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 = `` ; zone texte = `` (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).