# Twin Center koppelen — bring-up checklist

Stap-voor-stap om ModelRailPro voor het eerst met de echte Fleischmann Twin Center te laten
praten (P50X, serieel). Werk van boven naar beneden; bij elke stap staat wat je moet zien.

## 0. Wat je nodig hebt
- [ ] Raspberry Pi (of mini-pc/laptop) met Node 18+.
- [ ] Kabel van de Twin Center seriële poort (RS232) naar de Pi — meestal een
      **USB-naar-serieel-adapter** (FTDI/Prolific). De Pi ziet die als `/dev/ttyUSB0`.
- [ ] De Twin Center in **P50X- of P50/P50X-mixed-modus** (zie handleiding/Special Options).
- [ ] Eén testloc op de baan met bekend DCC-adres (bv. een ESU-decoder op adres 3).

## 1. Adapter herkennen
```bash
ls -l /dev/serial/by-id/      # toont je USB-serieel kabel
dmesg | tail                  # na inpluggen: "ttyUSB0 ..." of "ttyACM0 ..."
```
Noteer het pad (bv. `/dev/ttyUSB0`).

## 2. Baudrate
Twin Center serieel is vaak **19200 8N1**, soms **2400**. Probeer eerst 19200.
Als je rommel/geen antwoord krijgt → probeer 2400.

## 3. Node + serialport
```bash
cd modelrailpro
npm i serialport        # eenmalig (native module; op de Pi)
```

## 4. Losse telegrammen testen (vóór de hele app)
Gebruik het diagnose-tool. Elk commando print de verstuurde bytes (→) en het antwoord (↩).
```bash
node tools/p50x-test.js --port /dev/ttyUSB0 --baud 19200 power on
```
- [ ] **Verwacht:** `→ 78 a7` en kort daarna een antwoord (vaak `↩ 00` = OK). Railspanning aan.
```bash
node tools/p50x-test.js --port /dev/ttyUSB0 drive 3 40 fwd
```
- [ ] **Verwacht:** loc 3 gaat rijden. Bytes `→ 78 80 03 00 29 a0`.
```bash
node tools/p50x-test.js --port /dev/ttyUSB0 func 3 0 on     # licht
node tools/p50x-test.js --port /dev/ttyUSB0 drive 3 0 fwd   # stoppen
node tools/p50x-test.js --port /dev/ttyUSB0 turnout 1 thrown
node tools/p50x-test.js --port /dev/ttyUSB0 estop
```
- [ ] Rijden, licht, wissel en noodstop doen wat je verwacht.

## 5. Terugmelding (s88) bekijken
```bash
node tools/p50x-test.js --port /dev/ttyUSB0 sensors
```
Rijd ondertussen een loc over een bezetmelder. **Noteer de ruwe `↩`-bytes** — daarmee
verifiëren we de XEvtSen-framing en zetten we de juiste parser/mapping vast.

## 6. De hele app starten
```bash
DCC_MODE=twincenter TC_PORT=/dev/ttyUSB0 TC_BAUD=19200 node server.js
```
Open op je telefoon `http://<pi-adres>:3000` (zelfde wifi). Rijden/wissels/noodstop nu via de PWA.

## Problemen?
- **Geen antwoord:** verkeerde baudrate, verkeerde poort, of niet in P50X-modus.
- **`↩` met rare bytes:** baudrate mismatch (19200 ↔ 2400).
- **Wissel verkeerd om / schakelt niet:** XTrnt-statusbit moet mogelijk omgedraaid; meld de
  `→`/`↩`-bytes, dan stel ik `turnout()` bij.
- **Bezetmelding klopt niet:** stuur de ruwe `sensors`-output; dan zet ik de XEvtSen-parser
  + blok↔contact-mapping definitief.

## Wat ná verificatie nog vastgezet wordt
- XTrnt-statusbit (rechtdoor/afbuigend) tegen jouw LDT-decoders.
- XEvtSen-framing + koppeling s88-contact → blok (veld `sensor` per blok in `data/roster.json`).
