# OBD Widgets - Android Widgets für OBD2-Daten

Eine Android-App zur Anzeige von OBD2-Daten als Widgets auf dem Home-Screen. Unterstützt verschiedene Widget-Typen (Analog, Digital, Balken) und kann mit Bluetooth OBD2-Adaptern verbunden werden.

## Features

- **Verschiedene Widget-Typen**: Analog (Tacho), Digital, Balken, Gauge
- **Konfigurierbare OBD-Parameter**: Speed, RPM, Batteriespannung, Kühlmitteltemperatur, etc.
- **Bluetooth OBD2-Integration**: Unterstützt ELM327-kompatible Adapter
- **Automatische Wiederverbindung**: Verbindet sich automatisch wieder bei Verbindungsabbruch
- **Testmodus**: Simuliert OBD-Daten ohne Bluetooth-Verbindung
- **Tasker/MacroDroid Integration**: Sendet Broadcasts bei Verbindung/Trennung
- **Skalierbare Widgets**: Widgets können in der Größe angepasst werden
- **Keine Background-App nötig**: Service läuft im Hintergrund, keine App muss geöffnet bleiben

## Anforderungen

- Android 14+ (API Level 34)
- Bluetooth-fähiges Gerät
- ELM327-kompatibler OBD2-Adapter

## Installation

1. Projekt in Android Studio öffnen
2. Gradle Sync durchführen
3. App auf Gerät oder Emulator installieren

## Verwendung

### Erste Einrichtung

1. **Bluetooth-Gerät auswählen**:
   - Öffnen Sie die App
   - Gehen Sie zu Einstellungen
   - Wählen Sie Ihr OBD2 Bluetooth-Gerät aus

2. **Widget hinzufügen**:
   - Long-Press auf Home-Screen
   - "Widgets" auswählen
   - "OBD Widgets" auswählen
   - Widget auf Home-Screen platzieren

3. **Widget konfigurieren**:
   - Tippen Sie auf das Widget
   - Wählen Sie Widget-Typ (Analog, Digital, Balken)
   - Wählen Sie OBD-Parameter (Speed, RPM, etc.)
   - Setzen Sie Min/Max-Werte
   - Optional: Benutzerdefinierte Bezeichnung

### Einstellungen

- **Testmodus**: Aktivieren Sie den Testmodus, um simulierte Daten ohne BT-Verbindung zu sehen
- **Automatisch verbinden**: Service verbindet sich automatisch beim Start
- **Wiederverbindungs-Intervall**: Zeit zwischen Verbindungsversuchen (Standard: 5 Sekunden)

### Widget-Typen

- **Analog**: Runder Tacho mit Nadel (vereinfacht als ProgressBar dargestellt)
- **Digital**: Große digitale Anzeige
- **Balken**: Horizontale Balkenanzeige mit Prozentanzeige
- **Gauge**: Ähnlich wie Analog

### OBD-Parameter

Verfügbare Parameter:
- **Speed**: Geschwindigkeit (km/h)
- **RPM**: Drehzahl (RPM)
- **Voltage**: Batteriespannung (V)
- **Coolant Temp**: Kühlmitteltemperatur (°C)
- **Intake Temp**: Ansauglufttemperatur (°C)
- **MAF**: Mass Air Flow (g/s)
- **Throttle**: Drosselklappenstellung (%)
- **Fuel Level**: Kraftstoffstand (%)

## Tasker/MacroDroid Integration

Die App sendet folgende Broadcasts:

- `com.obdwidgets.CONNECTED`: Wenn Verbindung hergestellt wurde
- `com.obdwidgets.DISCONNECTED`: Wenn Verbindung getrennt wurde
- `com.obdwidgets.CONNECTION_STATUS_CHANGED`: Bei Statusänderung (Extra: `status`)

### Tasker Beispiel

1. Erstellen Sie ein neues Profil
2. Event → System → Intent Received
3. Action: `com.obdwidgets.CONNECTED`
4. Fügen Sie Aktionen hinzu (z.B. Benachrichtigung, Task starten)

## Erweiterbarkeit

Die App ist für Erweiterungen ausgelegt:

### Neue OBD-Parameter hinzufügen

1. Öffnen Sie `OBDParameter.kt`
2. Fügen Sie einen neuen Enum-Wert hinzu:
```kotlin
NEW_PARAMETER(
    pid = "01XX",
    name = "New Parameter",
    unit = "unit",
    minValue = 0f,
    maxValue = 100f,
    formula = { bytes -> /* Berechnung */ }
)
```

### Neue Widget-Typen hinzufügen

1. Fügen Sie einen neuen Wert zu `WidgetType` Enum hinzu
2. Erstellen Sie ein neues Layout in `res/layout/widget_xxx.xml`
3. Implementieren Sie die Widget-Erstellung in `OBDWidgetProvider.kt`

### Neue OBD-Protokolle hinzufügen

1. Implementieren Sie das `OBDProtocol` Interface
2. Erstellen Sie eine neue Klasse (z.B. `STN11xxProtocol.kt`)
3. Verwenden Sie die neue Implementierung im `OBDService`

## Architektur

```
app/
├── model/              # Datenmodelle (OBDParameter, WidgetConfig, etc.)
├── obd/               # OBD-Protokoll-Implementierungen
├── service/           # OBDService (Foreground Service)
├── widget/            # Widget Provider
├── ui/                # Activities (Settings, Configuration)
└── receiver/          # Broadcast Receiver (Boot)
```

## Bekannte Einschränkungen

- Der analoge Tacho verwendet aktuell eine vereinfachte Darstellung (ProgressBar statt echter Tacho-Nadel)
- Widgets aktualisieren sich alle 1 Sekunde (konfigurierbar in `obd_widget_info.xml`)
- Bluetooth-Berechtigungen müssen manuell erteilt werden (Android 12+)

## Lizenz

Dieses Projekt ist für den persönlichen Gebrauch erstellt.

## Vergleich mit Torque Pro

Im Gegensatz zu Torque Pro:
- ✅ Keine Background-App muss geöffnet bleiben
- ✅ Widgets funktionieren unabhängig
- ✅ Service läuft im Hintergrund
- ✅ Automatische Wiederverbindung
- ⚠️ Aktuell weniger Parameter (aber erweiterbar)
- ⚠️ Keine Logging-Funktion (kann hinzugefügt werden)

## Support

Bei Problemen:
1. Prüfen Sie die Bluetooth-Verbindung
2. Aktivieren Sie den Testmodus zum Testen
3. Prüfen Sie die App-Berechtigungen
4. Starten Sie den Service manuell in den Einstellungen
