added documentation

This commit is contained in:
2025-08-22 17:58:30 +02:00
parent 8393f24ae2
commit 12ee18adee
7 changed files with 1922 additions and 0 deletions

192
DEV.md Normal file
View File

@@ -0,0 +1,192 @@
# Developer Documentation Smart Chain Oiler
Diese Datei richtet sich an Entwickler\:innen, die das Projekt aufbauen, erweitern oder debuggen wollen. Ergänzend zur [README.md](README.md) (Überblick & Features) enthält dieses Dokument Details zu BuildProzess, Debugging, Protokollen und internen Architekturen.
---
## Build & Flash
### PlatformIO Environments
* `pcb_rev_1-2_serial`, `pcb_rev_1-2_ota`
* `pcb_rev_1-3_serial`, `pcb_rev_1-3_ota`
* `pcb_rev_1-4_serial`, `pcb_rev_1-4_ota`
Default: **pcb\_rev\_1-4\_serial**
### Serial Flash
```bash
pio run -e pcb_rev_1-4_serial -t upload
```
### OTA Flash
```bash
pio run -e pcb_rev_1-4_ota -t upload
```
* Port: 8266
* Auth: `ADMIN_PASSWORD` (aus `wifi_credentials.ini`)
### Filesystem Update (LittleFS)
* **Immer zuerst** FSImage flashen, wenn „Benötigte FlashVersion“ ≠ „Installierte“
* `.fs.gz` hochladen → danach `.fw.bin`
---
## Serial Console (115200 Baud)
Der ESP8266 bietet ein einfaches CLI (über UART oder USB). Nützliche Befehle:
| Befehl | Funktion |
| ------------------ | ------------------------------ |
| `help` | Liste aller Kommandos |
| `sysinfo` | Systeminfo (Versionen, Uptime) |
| `netinfo` | Netzwerkinfos (IP, WiFi) |
| `dtc_list` | Aktive DTCs anzeigen |
| `dtc_clear` | DTCListe zurücksetzen |
| `purge` | Entlüften/Pumpimpulse starten |
| `toggle_wifi` | WiFiAP ein/aus |
| `tank_refill` | Tankfüllstand zurücksetzen |
| `isr_debug on/off` | Debug-Ausgabe zu ImpulsISR |
---
## WebSocket API
### Endpoint
`ws://<host>/ws`
### Server → Client Events
* `NOTIFY:<type>;<msg>` → Toast/Alert im UI
* `DEBUG:<text>` → Debugausgabe
* `DTC:<list>` → aktive DTCs (Format: `ts,code,severity,active;…`)
* `MAPPING_STATUS:<map>` → Mapping Keys → Labels (Statuswerte)
* `MAPPING_STATIC:<map>` → Mapping Keys → Labels (Staticwerte)
* `STATUS:<values>` → Livewerte (z. B. Distanzzähler, Tank %)
* `STATIC:<values>` → Konfiguration, Versionen
### Client → Server Events
* Generisches Schema: `btn-<elementId>:<value>`
* Beispiel: `btn-refill:1` (Tankreset), `btn-purge:25` (25 Impulse)
---
## DTC Framework
Severity:
* **INFO** nur Anzeige im WebUI
* **WARN (Orange)** Hinweis, Betrieb läuft weiter
* **CRITICAL (Rot)** Pumpe gestoppt
DTCDefinitionen: siehe [`dtc_defs.txt`](dtc_defs.txt). Im WebUI werden Codes per `dtc_table.json` in Titel & Beschreibung gemappt.
---
## Tankmodell & Persistenz
* `amountPerDose_microL` definiert Ölmenge pro Puls
* Virtueller Tank (ml, Warnschwelle %, Restreichweite)
* Daten persistiert in EEPROM/Flash (Partition PDS)
* Sanity/ChecksumPrüfungen → passende DTCs
---
## Speed Sources
* **Impuls/Pickup:** via Interrupt (konfigurierbar: Puls/Umdrehung, Reifenmaße)
* **GPS (TinyGPSPlus):** Baudrate wählbar, Distanzberechnung
* **CAN (KTMspezifisch):** tested mit KTM 890 Adventure R & 1290 SuperDuke
* **OBD2 CAN/KLine:** in Testphase (PCB ≥ 1.4 für KLine)
---
## LED Control
* Implementiert in `ledcontrol.cpp`
* Farben + Muster (`led_colors.h`)
* BrightnessRange konfigurierbar (WebUI)
* DTC Severity → LED Orange/Rot
---
## Codegen & Versionsverwaltung
* `struct2json.cpp` wird **automatisch generiert** (nicht manuell editieren)
* GitRevision via `codegen/git_rev_macro.py` eingebettet
* FlashVersion Check: „Benötigte vs. Installierte FlashVersion“ (WebUIUpdateTab)
---
## Hardware PinMapping & PCB Revisionen
### PowerPfad (Rev 1.4)
* **+12V Eingang** → **VerpolschutzDiode****StepDown auf 5V** → versorgt **Wemos D1 mini**
* **3,3V** wird vom **Wemos** bereitgestellt (per LDO) und speist Peripherie (CAN, KLine, OLED, EEPROM, WS2812DataLevel ok am D3)
* **Pumpe**: LowSideMOSFET mit **Freilaufdiode** (Entstörung gegen induktive Spannungsspitzen)
### Wemos D1 mini (ESP8266) Pins
| Funktion | BoardPin | GPIO | Bemerkung |
| ---------------------------------- | --------- | ------ | ------------------------------------------------------------------------------------------- |
| **Pumpe (MOSFET, LowSide)** | D0 | GPIO16 | Schaltausgang für Pumpentreiber |
| **I²C SCL (OLED/EEPROM)** | D1 | GPIO5 | U8g2 + I2CEEPROM auf gleichem Bus |
| **I²C SDA (OLED/EEPROM)** | D2 | GPIO4 | PullUps auf 3,3V vorhanden |
| **WS2812 LED Data** | D3 | GPIO0 | Serieller Widerstand im Datenpfad |
| **CockpitTaster** | D4 | GPIO2 | gegen **GND**, Schutzdiode, interner PullUp |
| **SPI SCK (MCP2515)** | D5 | GPIO14 | CANController |
| **SPI MISO (MCP2515)** | D6 | GPIO12 | shared mit internen Leitungen, siehe KLine/UART Hinweis |
| **SPI MOSI (MCP2515)** | D7 | GPIO13 | CANController |
| **CS / CEN / Impuls (per Jumper)** | D8 | GPIO15 | **JumperFunktion**: CS für MCP2515 **oder** **CEN\_KLine** **oder** **ImpulsEingang** |
| **UART0 TX** | TX (J44) | GPIO1 | geht an USBUART **und** an KLineTransceiver (aktiv nur wenn **CEN\_KLine** gesetzt) |
| **UART0 RX / GPSEingang** | RX (J43) | GPIO3 | USBUART **und** GPSEingang; GPSFrames werden vom Parser konsumiert, Rest an CLI geroutet |
> **Hinweis zu KLine:** Der MC33660 wird über **CEN\_KLine** (D8, per LötJumper) nur aktiviert, wenn gesendet/empfangen werden soll. Dadurch bleibt die serielle Konsole (USB) im Normalbetrieb verfügbar.
### CAN / OBDKLine / GPS Anschlüsse
* **CAN:** MCP2515 (SPI) + MCP2551, Signale **CAN\_H**/**CAN\_L** nach außen geführt
* **KLine:** MC33660, UART0 TX/RX zugeschaltet über **CEN\_KLine**
* **GPS (seriell):** UART0 RX an **J4Pin3**, Baudrate im WebUI wählbar; nur RX genutzt
### PCBRevisionen
* **Rev1.2:** Basis (Pumpe, Taster, LED, optional OLED/I²C)
* **Rev1.3:** Verbesserte CANIntegration/PowerPfad
* **Rev1.4:** KLineTransceiver, JumperMux auf **D8** (CS/CEN/Impuls), GPSHeader (J4)
\-------------------|------|-----------------|-------------------------------------------|
\| Taster | D3 | GPIO0 | PullUp, ISRAbfrage |
\| RGBLED (WS2812) | D4 | GPIO2 | Adafruit NeoPixelLib |
\| Pumpe (MOSFET) | D1 | GPIO5 | LowSide Treiber |
\| CANCS | D8 | GPIO15 | MCP2515 CS |
\| CANINT | D0 | GPIO16 | Interrupt vom MCP2515 |
\| OBD2 KLine | D7 | GPIO13 | ab PCB Rev 1.4, Pegelwandler erforderlich |
\| GPS RX | D6 | GPIO12 | Seriell, TinyGPSPlus |
\| OLED I²C SCL | D5 | GPIO14 | U8g2Lib |
\| OLED I²C SDA | D2 | GPIO4 | U8g2Lib |
> Hinweis: tatsächliches Mapping je nach `config.h` und PCBRevision. Tabelle zeigt Standardzuordnung Rev1.4.
### PCB Revisionen
* **Rev 1.2:** Basisfunktionen, kein OBD2Support
* **Rev 1.3:** Verbesserte CANIntegration, stabileres PowerDesign
* **Rev 1.4:** zusätzlicher Pegelwandler für **OBD2 KLine**, vorbereitet für GPSModul
---
## Known Limitations / TODO
* OBD2 CAN/KLine: nur Basisfunktionen, erweiterte PIDUnterstützung offen
* GPS: bei schlechtem Empfang kann DTC „NO GPS SIGNAL“ spammen
* OLED: nur BasicStatusanzeigen; keine volle UI
---