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

119 lines
4.8 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.

# 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 = `<circle r="2.6">`. Patte = `<line stroke-width="1.2">` de la
couleur du signal.
```
┌───── viewBox ─────┐
<20>· 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 : `<metadata><etm:component type="onduleur"/></metadata>`.
- 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 `<text>`, `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.