# Gabarit des blocs — schémas ETM-PowerSync Règles pour dessiner un bloc dans Inkscape de façon à ce que l'assembleur (`stack2.py`) le place et le relie sans routage. Tout est porté par le SVG. ## 1. Modèle géométrique - **viewBox = corps + pattes.** Le corps du symbole est inséré de **8 px** de chaque côté où il y a des ports. Les pastilles tombent **sur le bord de la viewBox**, reliées au corps par une **patte de 8 px**. - Conséquence : la boîte englobante (viewBox) est ce qui s'aligne à l'empilement, mais visuellement le fil se raccorde à distance du dessin. - Pastille = ``. Patte = `` de la couleur du signal. ``` ┌───── viewBox ─────┐ │ �· patte (8px) │ ← pastille sur le bord, corps en retrait │ ┌─────────────┐ │ │ │ CORPS │ │ │ └─────────────┘ │ └───────────────────┘ ``` ## 2. Placement des ports Un port sort **du côté qui fait face à ce qu'il relie** : | Côté | Usage | |---|---| | Haut / Bas (sur l'axe) | Puissance (l'empilement vertical) | | Gauche / Droite | Comms & signaux, face à l'équipement relié | | Bas | Relais / sorties vers les charges en aval | - **Entraxe DC = 68 px** (ports à `centre ± 34`). À respecter pour que `cof_dc.OUT1/OUT2` ↔ `onduleur.PV1/PV2` s'alignent en deux verticales droites. - Pour empiler des blocs identiques sans écart (ex. blocs batterie), viewBox serrée + ports haut/bas → `GAP=0` les fait se toucher. **Empilement série (blocs batterie)** : `DC_IN` en haut, `DC_OUT` en bas, sur le même axe vertical. La mise en série se câble en chaîne : ``` BMS.DC_BAT → BAT1.DC_IN BAT1.DC_OUT → BAT2.DC_IN BAT2.DC_OUT → BAT3.DC_IN (dernier DC_OUT libre) ``` Le `COM` reste sur le côté (gauche) et chaîne en parallèle vers le BMS. ## 3. Code couleur | Signal | Couleur | Trait | |---|---|---| | Puissance | `#0d2b3b` (navy) | plein | | CAN / BMS | `#31a3dd` (bleu) | pointillé | | RS485 | `#e69500` (orange) | pointillé | | Ethernet | `#00b4d8` (cyan) | pointillé | | Relais | pastille `#fec113`, patte/fil `#caa000` | pointillé fin | | PWR (alim) | `#e6194b` (rouge) | plein | | PE (terre) | `#00ff00` (vert) | plein | ## 4. Dictionnaire des noms de ports (`term:…`) | Type | Terminaux | |---|---| | `compteur` | `L_IN`, `L_OUT`, `BUS` (= smartmeter, tête TGBT) | | `linky` | `L_OUT` (point de livraison, en amont) | | `disjoncteur` / `differentiel` | `L_IN`, `L_OUT` | | `tgbt` | `IN`, `SECOURS`, `CONSO`, `OUT1`–`OUT3`, `PE` | | `cof_dc` | `IN1`, `IN2`, `OUT1`, `OUT2`, `PE` | | `cof_ac` | `AC_IN`, `AC_OUT`, `PE` | | `cof_backup` | `OND`, `RESEAU`, `SECOURU`, `CONSO`, `PE` | | `onduleur` | `PV1`, `PV2`, `BAT`, `OND` (départ TGBT) (+ `BMS`, `RS485`, `ETH` ; `AC_IN` si backup) | | `string_pv` | `DC` (1 string) / `DC1`, `DC2` (2 strings) | | `microonduleur` | `AC_IN`, `OND` | | `bcu` (ex-BMS) | `DC_INV`, `DC_BAT`, `COM` | | `bloc_batterie` | `DC_IN`, `DC_OUT`, `COM` (empilable en série) | | `hems` | `C1`–`C4`, `RS485_1`, `RS485_2`, `ETH`, `USB1`, `USB2`, `PWR` | | `switch_eth` | `SW1`–`SW4` | | `dgt` | `PE` (collecte, non numérotée), `TERRE` (vers piquet) | | `prise_terre` | `TERRE` (symbole ⏚) | Noms : MAJUSCULES, underscore, sans accent. Numérotation à partir de 1. ## 5. Zones texte injectables (`lbl:…`) | Nom | Exemple | Types | |---|---|---| | `repere` | `-U1`, `-A1` | tous (injecté depuis l'`id` de la scène) | | `puissance` | `10 kW`, `<10kVA`, `15kVA` | onduleur, cof_ac, tgbt | | `courbe_calibre` | `C 50A` | disjoncteur | | `sensibilite` | `30 mA` | differentiel | | `tension` | `DC 1000V` | cof_dc | | `string_desc` | `8 × 425Wc` | string_pv | | `capacite` | `9,6 kWh` | bloc_batterie | ## 6. Encodage dans le SVG - En-tête : déclarer les namespaces `xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"` et `xmlns:etm="https://etm-powersync.fr/ns/schema"`. - Type : ``. - Terminal : sur la pastille, `inkscape:label="term:AC_OUT"` (réglable dans Inkscape via *Propriétés de l'objet → Étiquette*). - Zone texte : sur le ``, `inkscape:label="lbl:puissance"`. `inkscape:label` survit au round-trip Inkscape. **Ne pas** utiliser `etm:` sur les éléments dessinés (Inkscape les efface quand on les édite). ## 7. Workflow 1. Dupliquer `block-template.svg` comme base. 2. Dessiner le corps (inséré de 8 px), poser les pattes + pastilles aux bords. 3. Étiqueter chaque pastille `term:…`, chaque texte injectable `lbl:…`, renseigner le `type`. 4. Lancer l'extracteur → `library.json` se met à jour. 5. L'assembleur consomme une scène (`blocks` + `links` typés) → schéma SVG.