# Smart Chain Oiler Ein intelligenter, mikrocontroller‑gesteuerter Kettenöler für Motorräder. Bedient wird das System mit **nur einem Taster** und einer **RGB‑LED**. Alle erweiterten Einstellungen und Wartung erfolgen über ein **WebUI** (WiFi‑Access 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 **8 000 m** (Standard, anpassbar) * Regenmodus: Impuls alle **4 000 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) * **Wash‑Mode**: für xy m (Standard **500 m**) **alle 10 m** ein Impuls; danach automatische Rückkehr zum vorherigen Modus * **Prime/Entlüften**: feste Impulsanzahl (Standard **25 Pulse**) zum Spülen/Entlüften * **WiFi‑AP**: Zugriff auf WebUI für Setup, Wartung, Updates * **Virtuelle Tanküberwachung** * Details zum Tankmodell & zur Pumpensteuerung siehe weiter unten. * **Diagnose (DTC) & Live‑Status** * DTC‑Schweregrade: **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** (KTM‑spezifisch) * **OBD2 über CAN** (in Test) * **OBD2 über K‑Line** (ab PCB‑Rev 1.4) * **RGB‑LED 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 * **OTA‑Updates** * OTA (Port 8266, Passwort), mit optionaler OLED‑Progressanzeige * **Dateisystem & Kompatibilität** * LittleFS mit **„required flash version“**‑Check; WebUI‑Tab zeigt Firmware‑, Flash‑ und Git‑Version * **EEPROM‑Architektur** * Partitionen **CFG**/**PDS** mit Checksummen, Sanity‑Checks & Wear‑Leveling; 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 10 m ein Puls über definierte Gesamtdistanz * **Pumpen-Timing**: auf die McCoi Spezial-Ölpumpe abgestimmt, für gleichmäßige Dosierung --- ## Hardware * **MCU:** ESP8266 (Wemos D1 mini, Arduino‑Framework) * **PCB:** Revisionen 1.2–1.4 (ab **1.4**: OBD2 **K‑Line**) * **Pumpe:** * Ursprünglich **Dellorto Ölpumpe PLE 8** * Aktuell **McCoi Spezial‑Ölpumpe** – **Software‑Ansteuerung dieses Projekts ist auf diese Pumpe abgestimmt**. Dank hilfreicher Hinweise von Steffen Koberitz (McCoi) zur optimalen Ansteuerung; **keine Mitarbeit** an der Pumpen‑Hardwareentwicklung. * **Option:** I²C OLED‑Display 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 McCoi‑Pumpe abgestimmt**. * **Virtueller Tank:** Tankgröße (ml) → Füllstand (%) → **Warnschwelle** (Orange) → **0 %** stoppt die Pumpe (Rot). Tank‑Reset unter **Wartung**. * **Prime/Purge:** feste Impulsanzahl (Standard **25**), zum Spülen/Entlüften; Start per Taster oder WebUI. * **Wash‑Mode:** Impuls‑Pattern pro Strecke (Standard: **alle 10 m** über **500 m**), danach automatische Rückkehr zu Normal/Regen. * **Persistenz:** Laufende Zähler & Tankstand werden **über Neustarts** mitgeführt (EEPROM/Flash + Sanity/Checksum). --- ## GPS‑Quelle (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 → DTC‑Meldung (je nach Konfiguration WARN/CRIT) und LED‑Signalisierung; 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 → **LED‑Farbe beobachten** → bei gewünschter Farbe **loslassen**. * **0,5–3,5 s**: **Normal ↔ Regen** (Grün/Blau) * **3,5–6,5 s**: **Wash‑Mode** (Türkis) * **6,5–9,5 s**: **Prime/Entlüften** (Pink blinkend) * **9,5–12,5 s**: **WiFi‑AP** an/aus (Gelb) ```mermaid flowchart LR A[Button hold] --> B{Hold‑Dauer} B -->|0.5–3.5 s| C[Toggle Normal↔Regen] B -->|3.5–6.5 s| D[Wash‑Mode aktiv] B -->|6.5–9.5 s| E[Prime/Entlüften] B -->|9.5–12.5 s| F[WiFi‑AP Toggle] C --> G[LED: Grün/Blau] D --> H[LED: Türkis] E --> I[LED: Pink blinkend] F --> J[LED: Gelb] ``` **LED‑Bedeutung (Auswahl):** Grün = Normal · Blau = Regen · Pink blinkend = Prime · Türkis = Wash · Gelb = AP aktiv · Orange = Warnung · Rot = Kritisch (Stopp) --- ## WebUI (WiFi‑AP) **Stack:** WebSocket · JavaScript · Bootstrap · jQuery · responsive. **Tabs & Funktionen:** * **Home**: Tank % (Progressbar), aktueller Systemstatus, DTC‑Tabelle * **Wartung**: Tank **zurücksetzen**, Entlüften (Pulsezahl einstellen & starten), **Einmessen** (Pulsecounter), **Live‑Debug** (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-/Max‑Brightness * **WiFi**: SSID‑Liste, Passwort, Auto‑Connect * **Speichern** (Hinweis: Wechsel der Signalquelle triggert Neustart) * **Update**: * Versionen: **Firmware**, **Benötigte Flash‑Version**, **Installierte Flash‑Version**, **Git‑Revision** * **EEPROM‑Backup** (Download) & **Restore** (Upload `.ee.json`) * **Firmware‑Update** (Upload `.fw.bin` oder `.fs.gz`) > Für den Alltag ist das WebUI nicht nötig; es dient Setup, Tank‑Reset und Diagnose/Updates. ### Frontend‑Dateien * `index.htm` (Haupt‑UI) * `static/js/websocket.js` (WebSocket‑Client & Live‑Update) * `static/js/script.js` (UI‑Helpers, z. B. Passwort‑Toggle, File‑Label) * `static/js/dtc_table.js` + `static/dtc_table.json` (DTC‑Mapping mit Titel & Beschreibung) * `post.htm` (Zwischenseite nach Speichern/Update) ### WebSocket‑Protokoll (Client ← Server) * `NOTIFY:;` → UI‑Toast/Alert * `DEBUG:` → Live‑Debug‑Fenster (append) * `DTC:` → aktive DTCs, z. B. `ts,code,severity,active;...` → UI: **processDTCNotifications** & **fillDTCTable** (Titel/Beschreibung via `dtc_table.json`) * `MAPPING_STATUS:` → Schlüssel‑Mapping für **STATUS** * `MAPPING_STATIC:` → Schlüssel‑Mapping für **STATIC** * `STATUS:` → Laufzeitwerte, in UI gerendert * `STATIC:` → statische Werte (Konfiguration/Versionen) > **WebSocket‑Endpoint:** `ws:///ws` ### WebSocket‑Protokoll (Client → Server) * Generischer UI‑Event: `btn-:` Beispiel: Button‑Klicks/Bestätigungen senden `btn-…` an den Server. --- ## Build & Flash (PlatformIO) * **Projekt:** `platformio.ini` mit Environments für PCB‑Revisionen **1.2**, **1.3**, **1.4** (Serial/OTA) * **Default‑Env:** `pcb_rev_1-4_serial` * **Filesystem:** LittleFS (automatisierte Vorbereitung via Pre/Post‑Scripts) * **OTA:** `espota` (Port 8266, Passwort aus `wifi_credentials.ini`) * **Git‑Revision:** wird als Macro eingebettet (Codegen‑Script) * **Libs (Auszug):** U8g2, Adafruit NeoPixel, Ticker, I2C\_EEPROM, ESPAsyncWebServer‑esphome, ArduinoJson 7, MCP\_CAN, TinyGPSPlus ### Beispiel ```bash # Firmware bauen (Standard‑Env) 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 Build‑Flags** (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`) ### Flash‑Version & Updatepfad * Wenn „**Benötigte Flash‑Version**“ ≠ „**Installierte Flash‑Version**“: zuerst **FS‑Image** (`.fs.gz`) im WebUI unter **Update → Firmware‑Update** 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 & Detail‑Modal); zusätzlich LED‑Signale * **Vollständige DTC‑Liste** inkl. Beschreibungen siehe **Manual.md** --- ## Roadmap / Status * OBD2 über CAN & K‑Line: **in aktiver Testphase** * GPS‑Quelle: **funktionsfähig**, weitere Feldtests * Weitere Bikes/Modelle: Community‑Feedback 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 McCoi‑Pumpe.