Files
Kettenoeler/README.md
2025-08-22 17:58:30 +02:00

248 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# 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.