README.md
# openWB SimpleAPI - HTTP zu MQTT Bridge
 
Eine hochperformante HTTP-zu-MQTT-Bridge für openWB Wallboxen mit vollständiger SimpleAPI-Kompatibilität und erweiterten Features.
 
## 🚀 Features
 
- ✅ **Vollständige openWB SimpleAPI Kompatibilität** - Alle originalen Parameter unterstützt
- ✅ **51+ Parameter** - Umfassende Unterstützung für Chargepoint, Counter, Battery und PV
- ✅ **Auto-ID Feature** - Automatische Auswahl der niedrigsten verfügbaren ID
- ✅ **Performance-Optimiert** - Batch MQTT-Aufrufe für < 0.1s Antwortzeiten
- ✅ **Template-basierte Settings** - Erweiterte openWB-Template-Manipulation
- ✅ **Raw & JSON Output** - Flexible Ausgabeformate
- ✅ **GET & POST Support** - Beide HTTP-Methoden unterstützt
- ✅ **Direkte MQTT-Kommunikation** - Native PHP-MQTT ohne externe Dependencies
 
## 📦 Installation
 
### Voraussetzungen
- PHP 7.4+ mit sockets-Extension
- Apache Webserver
- openWB System mit MQTT Broker
- mosquitto-clients (für MQTT-Kommunikation)
 
### Setup
```bash
# 1. Repository klonen
git clone https://github.com/openWB/simpleAPI.git
simpleAPI über den Webserver verfügbar machen, z.B.
mv simpleAPI /var/www/html/simpleAPI
 
## Verwendung
 
### Lesende Anfragen
 
**Alle Daten eines Ladepunkts:**
```bash
curl "http://IPADRESSE/simpleAPI/web/simpleapi.php?get_chargepoint_all=3"
```
 
**Auto-ID Feature - niedrigste verfügbare ID:**
```bash
curl "http://IPADRESSE/simpleAPI/web/simpleapi.php?get_chargepoint_all=auto"
# oder ohne Angabe einer ID:
curl "http://IPADRESSE/simpleAPI/web/simpleapi.php?get_chargepoint_all="
```
 
**Spannung Phase 1 (Raw-Ausgabe):**
```bash
curl "http://IPADRESSE/simpleAPI/web/simpleapi.php?get_chargepoint_voltage_p1=3&raw=true"
```
 
**Batterie-Daten:**
```bash
curl "http://IPADRESSE/simpleAPI/web/simpleapi.php?battery=2"
```
 
**Kombination mehrerer Werte:**
```bash
curl "http://IPADRESSE/simpleAPI/web/simpleapi.php?get_chargepoint_all=3&battery=2"
```
 
## Alle verfügbaren Parameter
 
### Chargepoint (Ladepunkt) Parameter
 
| Parameter | Beschreibung | Beispiel |
|-----------|-------------|----------|
| `get_chargepoint_all` | Alle Daten | `?get_chargepoint_all=2` |
| `get_chargepoint_voltages` | Alle Spannungen | `?get_chargepoint_voltages=2` |
| `get_chargepoint_voltage_p1/p2/p3` | Spannung einzelne Phase | `?get_chargepoint_voltage_p1=2` |
| `get_chargepoint_currents` | Alle Ströme | `?get_chargepoint_currents=2` |
| `get_chargepoint_current_p1/p2/p3` | Strom einzelne Phase | `?get_chargepoint_current_p1=2` |
| `get_chargepoint_powers` | Alle Leistungen | `?get_chargepoint_powers=2` |
| `get_chargepoint_power` | Gesamtleistung | `?get_chargepoint_power=2` |
| `get_chargepoint_imported` | Gesamtenergie geladen | `?get_chargepoint_imported=2` |
| `get_chargepoint_exported` | Gesamtenergie zurückgespeist | `?get_chargepoint_exported=2` |
| `get_chargepoint_soc` | Batteriestand (%) | `?get_chargepoint_soc=2` |
| `get_chargepoint_state_str` | Status-Text | `?get_chargepoint_state_str=2` |
| `get_chargepoint_fault_str` | Fehler-Text | `?get_chargepoint_fault_str=2` |
| `get_chargepoint_fault_state` | Fehler-Code | `?get_chargepoint_fault_state=2` |
| `get_chargepoint_phases_in_use` | Verwendete Phasen | `?get_chargepoint_phases_in_use=2` |
| `get_chargepoint_plug_state` | Stecker angeschlossen | `?get_chargepoint_plug_state=2` |
| `get_chargepoint_charge_state` | Ladevorgang aktiv | `?get_chargepoint_charge_state=2` |
| `get_chargepoint_chargemode` | Lademodus | `?get_chargepoint_chargemode=2` |
 
### Counter (Zähler) Parameter
 
| Parameter | Beschreibung | Beispiel |
|-----------|-------------|----------|
| `get_counter` | Alle Zähler-Daten | `?get_counter=0` |
| `get_counter_voltages` | Alle Spannungen | `?get_counter_voltages=0` |
| `get_counter_voltage_p1/p2/p3` | Spannung einzelne Phase | `?get_counter_voltage_p1=0` |
| `get_counter_currents` | Alle Ströme | `?get_counter_currents=0` |
| `get_counter_current_p1/p2/p3` | Strom einzelne Phase | `?get_counter_current_p1=0` |
| `get_counter_powers` | Alle Leistungen | `?get_counter_powers=0` |
| `get_counter_power` | Gesamtleistung | `?get_counter_power=0` |
| `get_counter_power_factors` | Leistungsfaktoren | `?get_counter_power_factors=0` |
| `get_counter_imported` | Gesamtenergie bezogen | `?get_counter_imported=0` |
| `get_counter_exported` | Gesamtenergie eingespeist | `?get_counter_exported=0` |
| `get_counter_daily_imported` | Tagesenergie bezogen | `?get_counter_daily_imported=0` |
| `get_counter_daily_exported` | Tagesenergie eingespeist | `?get_counter_daily_exported=0` |
| `get_counter_frequency` | Netzfrequenz | `?get_counter_frequency=0` |
| `get_counter_fault_str` | Fehler-Text | `?get_counter_fault_str=0` |
| `get_counter_fault_state` | Fehler-Code | `?get_counter_fault_state=0` |
 
### Schreibende Anfragen
 
**Lademodus ändern:**
```bash
curl -X POST -d "chargemode=pv&chargepoint_nr=3" \
     "http://IPADRESSE/simpleAPI/web/simpleapi.php"
```
 
**Auto-ID Feature beim Schreiben:**
```bash
# Schreibt an den Ladepunkt mit der niedrigsten ID
curl -X POST -d "chargemode=pv" \
     "http://IPADRESSE/simpleAPI/web/simpleapi.php"
```
 
**Ladestrom setzen:**
```bash
curl -X POST -d "chargecurrent=8.23&chargepoint_nr=3" \
     "http://IPADRESSE/simpleAPI/web/simpleapi.php"
```
 
### Authentifizierung
 
**Mit Bearer Token:**
```bash
curl -H "Authorization: Bearer your-token" \
     -X POST -d "chargemode=pv&chargepoint_nr=3" \
     "https://IPADRESSE/simpleAPI/web/simpleapi.php"
```
 
**Mit Username/Passwort:**
```bash
curl -X POST \
     -d "username=admin" \
     -d "password=admin123" \
     -d "chargemode=pv" \
     -d "chargepoint_nr=3" \
     "https://IPADRESSE/simpleAPI/web/simpleapi.php"
```
 
## Unterstützte Parameter
 
### Lesbare Parameter
 
| Parameter | Beschreibung | Beispiel |
|-----------|--------------|----------|
| `get_chargepoint_all` | Alle Ladepunkt-Daten | `?get_chargepoint_all=3` |
| `get_chargepoint_voltage_p1/p2/p3` | Spannung einzelne Phase | `?get_chargepoint_voltage_p1=3` |
| `get_chargepoint_voltages` | Alle Spannungen | `?get_chargepoint_voltages=3` |
| `get_chargepoint_current_p1/p2/p3` | Strom einzelne Phase | `?get_chargepoint_current_p1=3` |
| `get_chargepoint_currents` | Alle Ströme | `?get_chargepoint_currents=3` |
| `get_chargepoint_power` | Gesamtleistung | `?get_chargepoint_power=3` |
| `get_chargepoint_powers` | Leistung aller Phasen | `?get_chargepoint_powers=3` |
| `battery` | Batterie-Daten | `?battery=2` |
| `pv` | PV-Anlagen-Daten | `?pv=5` |
| `counter` | Zähler-Daten | `?counter=0` |
 
### Schreibbare Parameter
 
| Parameter | Werte | Beschreibung |
|-----------|-------|--------------|
| `chargemode` | instant, pv, eco, stop, target | Lademodus setzen |
| `chargecurrent` | 0, 6-32 | Ladestrom in Ampere |
| `minimal_pv_soc` | 0-100 | Min. SoC für PV-Laden |
| `minimal_permanent_current` | 0, 6-32 | Min. Dauerstrom für PV |
| `max_price_eco` | -100 bis 200 | Max. Preis für ECO-Laden |
| `chargepoint_lock` | 0, 1 | Ladepunkt sperren |
| `speicherbeachtung` | 1, 2, 3 | Speicherstrategie |
 
## Auto-ID Feature
 
Das Auto-ID Feature ist eine Erweiterung der openWB SimpleAPI. Wenn keine ID angegeben wird oder `auto` verwendet wird, wird automatisch die niedrigste verfügbare ID verwendet:
 
```bash
# Diese Aufrufe sind equivalent:
curl "http://IPADRESSE/simpleAPI/web/simpleapi.php?get_chargepoint_all="
curl "http://IPADRESSE/simpleAPI/web/simpleapi.php?get_chargepoint_all=auto"
 
# Findet automatisch den Ladepunkt mit der niedrigsten ID
curl -X POST -d "chargemode=pv" "http://IPADRESSE/simpleAPI/web/simpleapi.php"
```
 
## Konfiguration
 
 
### Authentifizierung aktivieren
 
```php
'auth' => [
    'enabled' => true,
    'require_https' => true,
    'tokens' => [
        'your-secret-token-here'
    ],
    'users' => [
        'admin' => password_hash('admin123', PASSWORD_DEFAULT)
    ]
]
```
 
### CORS für Web-Anwendungen
 
```php
'api' => [
    'cors_enabled' => true
]
```
 
## Entwicklung
 
### Logging aktivieren
 
```php
'debug' => true
```
 
### Tests ausführen
 
```bash
# Einfacher Funktionstest
curl "http://localhost/simpleapi.php?get_chargepoint_all=1&debug=true"
```
 
## Troubleshooting
 
 
 
### Häufige Probleme
 
1. **500 Internal Server Error**
   - Prüfen Sie die PHP-Logs
   - Autoloader korrekt installiert? (`composer install`)
   - Schreibrechte für Web-Verzeichnis?
 
2. **MQTT-Verbindung fehlgeschlagen**
   - MQTT Broker erreichbar?
   - Credentials korrekt?
   - Firewall-Einstellungen prüfen
 
3. **Authentifizierung fehlgeschlagen**
   - HTTPS bei Username/Passwort erforderlich
   - Token korrekt konfiguriert?