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

247
README.md
View File

@@ -0,0 +1,247 @@
# Smart Chain Oiler
Ein intelligenter, mikrocontrollergesteuerter Kettenöler für Motorräder. Bedient wird das System mit **nur einem Taster** und einer **RGBLED**. Alle erweiterten Einstellungen und Wartung erfolgen über ein **WebUI** (WiFiAccess Point, plattformunabhängig, keine App nötig). Der reguläre Betrieb läuft komplett autark Smartphone bleibt in der Tasche.
---
## Features
* **Automatische Schmierung**
* Normalmodus: Impuls alle **8000 m** (Standard, anpassbar)
* Regenmodus: Impuls alle **4000 m** (Standard, anpassbar)
* Metergenaue Distanzzählung **über Neustarts hinweg** (setzt nicht auf 0 zurück)
* **Modi**
* **Normal** / **Regen** (per Taster umschaltbar, letzter Modus wird gespeichert)
* **WashMode**: für xym (Standard **500m**) **alle 10m** ein Impuls; danach automatische Rückkehr zum vorherigen Modus
* **Prime/Entlüften**: feste Impulsanzahl (Standard **25 Pulse**) zum Spülen/Entlüften
* **WiFiAP**: Zugriff auf WebUI für Setup, Wartung, Updates
* **Virtuelle Tanküberwachung**
* Details zum Tankmodell & zur Pumpensteuerung siehe weiter unten.
* **Diagnose (DTC) & LiveStatus**
* DTCSchweregrade: **INFO**, **WARN (Orange)**, **CRITICAL (Rot, stoppt Pumpe)**
* Alle DTCs mit Klartext im WebUI; Push via WebSocket
* **Mehrere Geschwindigkeitsquellen**
* **Impuls/Pickup** (Tachosignal)
* **GPS** (seriell; Baudrate wählbar)
* **CAN** (KTMspezifisch)
* **OBD2 über CAN** (in Test)
* **OBD2 über KLine** (ab PCBRev1.4)
* **RGBLED Feedback**
* Farben: Grün (Normal), Blau (Regen), Pink blinkend (Prime), Türkis (Wash), Gelb (AP aktiv), Orange (Warnung), Rot (kritisch)
* Helligkeit **min/max** und Blinkmodus konfigurierbar
* **OTAUpdates**
* OTA (Port 8266, Passwort), mit optionaler OLEDProgressanzeige
* **Dateisystem & Kompatibilität**
* LittleFS mit **„required flash version“**Check; WebUITab zeigt Firmware, Flash und GitVersion
* **EEPROMArchitektur**
* Partitionen **CFG**/**PDS** mit Checksummen, SanityChecks & WearLeveling; passende DTCs bei Inkonsistenzen
---
## Tankmodell & Pumpensteuerung
* **Dosis pro Puls**: einstellbar in µl (Standard auf McCoi-Pumpe abgestimmt)
* **Virtuelles Tankmodell**: berechnet Füllstand und Restreichweite basierend auf Tankgröße und Dosiermenge
* **Warnung & Stopp**: Orange bei niedrigem Füllstand, Rot & Abschaltung bei 0%
* **Prime/Purge**: feste Pulsanzahl (Standard 25), konfigurierbar im WebUI
* **Wash-Mode**: spezielles Muster z.B. alle 10m ein Puls über definierte Gesamtdistanz
* **Pumpen-Timing**: auf die McCoi Spezial-Ölpumpe abgestimmt, für gleichmäßige Dosierung
---
## Hardware
* **MCU:** ESP8266 (Wemos D1 mini, ArduinoFramework)
* **PCB:** Revisionen 1.21.4 (ab **1.4**: OBD2 **KLine**)
* **Pumpe:**
* Ursprünglich **Dellorto Ölpumpe PLE8**
* Aktuell **McCoi SpezialÖlpumpe** **SoftwareAnsteuerung dieses Projekts ist auf diese Pumpe abgestimmt**. Dank hilfreicher Hinweise von Steffen Koberitz (McCoi) zur optimalen Ansteuerung; **keine Mitarbeit** an der PumpenHardwareentwicklung.
* **Option:** I²C OLEDDisplay 128×64 (Standard Arduino/„China“Module)
### Getestete Motorräder
* **KTM 890 Adventure R (2021)**
* **KTM 1290 Super Duke (2023)**
---
## Tankmodell & Pumpensteuerung
*Implementierung: `lubeapp.cpp`*
* **Dosierung (µl/Puls):** konfigurierbar im WebUI (Schlüssel: *amountPerDose\_microL*). Werte und Pulszeit sind **auf die McCoiPumpe abgestimmt**.
* **Virtueller Tank:** Tankgröße (ml) → Füllstand (%) → **Warnschwelle** (Orange) → **0%** stoppt die Pumpe (Rot). TankReset unter **Wartung**.
* **Prime/Purge:** feste Impulsanzahl (Standard **25**), zum Spülen/Entlüften; Start per Taster oder WebUI.
* **WashMode:** ImpulsPattern pro Strecke (Standard: **alle 10m** über **500m**), danach automatische Rückkehr zu Normal/Regen.
* **Persistenz:** Laufende Zähler & Tankstand werden **über Neustarts** mitgeführt (EEPROM/Flash + Sanity/Checksum).
---
## GPSQuelle (seriell)
*Implementierung: `gps.cpp`, TinyGPSPlus*
* **Parser:** TinyGPSPlus; Baudrate im WebUI wählbar.
* **Verwendung:** Geschwindigkeit/Distanz als Basis für Schmierintervalle, metergenau.
* **Fallback & DTC:** Kein GPS → DTCMeldung (je nach Konfiguration WARN/CRIT) und LEDSignalisierung; alternative Quellen (Impuls/CAN/OBD) bleiben nutzbar.
* **Praxis:** Geeignet, wenn kein Pickup/Tachosignal verfügbar ist oder als zusätzliche Prüfinstanz.
---
## Bedienung (Taster & LED)
> **Prinzip:** Taster gedrückt halten → **LEDFarbe beobachten** → bei gewünschter Farbe **loslassen**.
* **0,53,5s**: **Normal ↔ Regen** (Grün/Blau)
* **3,56,5s**: **WashMode** (Türkis)
* **6,59,5s**: **Prime/Entlüften** (Pink blinkend)
* **9,512,5s**: **WiFiAP** an/aus (Gelb)
```mermaid
flowchart LR
A[Button hold] --> B{HoldDauer}
B -->|0.53.5 s| C[Toggle Normal↔Regen]
B -->|3.56.5 s| D[WashMode aktiv]
B -->|6.59.5 s| E[Prime/Entlüften]
B -->|9.512.5 s| F[WiFiAP Toggle]
C --> G[LED: Grün/Blau]
D --> H[LED: Türkis]
E --> I[LED: Pink blinkend]
F --> J[LED: Gelb]
```
**LEDBedeutung (Auswahl):** Grün=Normal · Blau=Regen · Pink blinkend=Prime · Türkis=Wash · Gelb=AP aktiv · Orange=Warnung · Rot=Kritisch (Stopp)
---
## WebUI (WiFiAP)
**Stack:** WebSocket · JavaScript · Bootstrap · jQuery · responsive.
**Tabs & Funktionen:**
* **Home**: Tank % (Progressbar), aktueller Systemstatus, DTCTabelle
* **Wartung**: Tank **zurücksetzen**, Entlüften (Pulsezahl einstellen & starten), **Einmessen** (Pulsecounter), **LiveDebug** (Start/Stop), **Reboot**
* **Einstellungen**:
* **Signalquelle** (Impuls/CAN/GPS/…)
* **Impuls**: Reifenbreite, Verhältnis, Felgendurchmesser, Pulse/Umdrehung
* **CAN**: Modellwahl
* **GPS**: Baudrate
* **Dosierung**: Normal, Regen, Waschdistanz, Waschintervall
* **Öltank**: Kapazität (ml), Warnschwelle (%), Menge/Puls (µl)
* **LED**: Blinkmodus, Min-/MaxBrightness
* **WiFi**: SSIDListe, Passwort, AutoConnect
* **Speichern** (Hinweis: Wechsel der Signalquelle triggert Neustart)
* **Update**:
* Versionen: **Firmware**, **Benötigte FlashVersion**, **Installierte FlashVersion**, **GitRevision**
* **EEPROMBackup** (Download) & **Restore** (Upload `.ee.json`)
* **FirmwareUpdate** (Upload `.fw.bin` oder `.fs.gz`)
> Für den Alltag ist das WebUI nicht nötig; es dient Setup, TankReset und Diagnose/Updates.
### FrontendDateien
* `index.htm` (HauptUI)
* `static/js/websocket.js` (WebSocketClient & LiveUpdate)
* `static/js/script.js` (UIHelpers, z.B. PasswortToggle, FileLabel)
* `static/js/dtc_table.js` + `static/dtc_table.json` (DTCMapping mit Titel & Beschreibung)
* `post.htm` (Zwischenseite nach Speichern/Update)
### WebSocketProtokoll (Client ← Server)
* `NOTIFY:<type>;<message>` → UIToast/Alert
* `DEBUG:<text>` → LiveDebugFenster (append)
* `DTC:<dtcList>` → aktive DTCs, z.B. `ts,code,severity,active;...`
→ UI: **processDTCNotifications** & **fillDTCTable** (Titel/Beschreibung via `dtc_table.json`)
* `MAPPING_STATUS:<map>` → SchlüsselMapping für **STATUS**
* `MAPPING_STATIC:<map>` → SchlüsselMapping für **STATIC**
* `STATUS:<values>` → Laufzeitwerte, in UI gerendert
* `STATIC:<values>` → statische Werte (Konfiguration/Versionen)
> **WebSocketEndpoint:** `ws://<host>/ws`
### WebSocketProtokoll (Client → Server)
* Generischer UIEvent: `btn-<elementId>:<value>`
Beispiel: ButtonKlicks/Bestätigungen senden `btn-…` an den Server.
---
## Build & Flash (PlatformIO)
* **Projekt:** `platformio.ini` mit Environments für PCBRevisionen **1.2**, **1.3**, **1.4** (Serial/OTA)
* **DefaultEnv:** `pcb_rev_1-4_serial`
* **Filesystem:** LittleFS (automatisierte Vorbereitung via Pre/PostScripts)
* **OTA:** `espota` (Port 8266, Passwort aus `wifi_credentials.ini`)
* **GitRevision:** wird als Macro eingebettet (CodegenScript)
* **Libs (Auszug):** U8g2, Adafruit NeoPixel, Ticker, I2C\_EEPROM, ESPAsyncWebServeresphome, ArduinoJson 7, MCP\_CAN, TinyGPSPlus
### Beispiel
```bash
# Firmware bauen (StandardEnv)
pio run
# Seriell flashen (z.B. PCB Rev 1.4)
pio run -e pcb_rev_1-4_serial -t upload
# OTA flashen
pio run -e pcb_rev_1-4_ota -t upload
```
**Konfiguration über BuildFlags** (Auszug):
* `-DPCB_REV=…` (automatisch je nach Env)
* `-DFEATURE_ENABLE_OLED`, `-DATOMIC_FS_UPDATE`, `-DCAN_DEBUG_MESSAGE`
* WiFi/Passwörter via `wifi_credentials.ini` (`WIFI_SSID_CLIENT`, `WIFI_PASSWORD_CLIENT`, `ADMIN_PASSWORD`, `WIFI_AP_PASSWORD`)
### FlashVersion & Updatepfad
* Wenn „**Benötigte FlashVersion**“ ≠ „**Installierte FlashVersion**“: zuerst **FSImage** (`.fs.gz`) im WebUI unter **Update → FirmwareUpdate** hochladen; danach die eigentliche Firmware (`.fw.bin`).
---
## Diagnose (DTC)
* **WARN (Orange)**: Hinweis/Warnung, Betrieb läuft weiter
* **CRITICAL (Rot)**: kritischer Fehler, Öler stoppt
* DTCs erscheinen live im WebUI (Tabelle & DetailModal); zusätzlich LEDSignale
* **Vollständige DTCListe** inkl. Beschreibungen siehe **Manual.md**
---
## Roadmap / Status
* OBD2 über CAN & KLine: **in aktiver Testphase**
* GPSQuelle: **funktionsfähig**, weitere Feldtests
* Weitere Bikes/Modelle: CommunityFeedback willkommen
---
## Lizenz
- **Firmware & WebUI (Software):** [GNU GPLv3](COPYING.GPLv3)
- **PCB & Schaltpläne (Hardware):** [CERN OHL-S v2.0](LICENSE.CERN-OHL-S-2.0)
- **Dokumentation & Bilder:** [CC BY-NC-SA 4.0](LICENSE.CC-BY-NC-SA-4.0)
👉 Zusammenfassung: Basteln, Nachbauen, Lernen erlaubt ✅ kommerzieller Vertrieb oder Closed-Source-Nutzung verboten ❌. Details siehe [LICENSE.md](LICENSE.md).
---
## Autor & Dank
Entwickelt von **Souko „Shakaru“ Hiabuto**
Besonderer Dank an **Steffen Koberitz (McCoi)** für Hinweise zur optimalen Ansteuerung der McCoiPumpe.