Marcel Peterkau 17ce546255
All checks were successful
CI-Build/Kettenoeler/pipeline/head This commit looks good
bumped Firmware-Revision after Tag
2025-09-04 18:20:13 +02:00
2025-08-22 17:58:30 +02:00
2022-08-14 17:38:45 +02:00
2025-08-22 17:58:30 +02:00
2025-08-22 17:58:30 +02:00
2025-08-27 16:50:11 +00:00
2025-08-22 17:58:30 +02:00
2025-08-22 17:58:30 +02:00
2025-08-22 17:58:30 +02:00
2025-08-22 17:58:30 +02:00

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)
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

# 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

👉 Zusammenfassung: Basteln, Nachbauen, Lernen erlaubt kommerzieller Vertrieb oder Closed-Source-Nutzung verboten . Details siehe LICENSE.md.


Autor & Dank

Entwickelt von Souko „Shakaru“ Hiabuto

Besonderer Dank an Steffen Koberitz (McCoi) für Hinweise zur optimalen Ansteuerung der McCoiPumpe.

Description
No description provided
Readme 3.2 MiB
Firmware_1.6 Latest
2025-09-04 16:18:36 +00:00
Languages
C++ 33.1%
CSS 29.7%
Python 22%
C 5.5%
HTML 5.1%
Other 4.5%