# InfluxDB 1.x Integration für HAT-Sensordaten

Dieses Projekt enthält einen Service, der HAT-Sensordaten automatisch in eine InfluxDB 1.x Datenbank schreibt.

## Installation

1. **Dependencies installieren:**
   ```powershell
   composer install
   ```
   Der Service verwendet den bereits vorhandenen Symfony HTTP Client, keine zusätzliche Bibliothek erforderlich.

2. **InfluxDB-Konfiguration einrichten:**
   
   Fügen Sie folgende Umgebungsvariablen zu Ihrer `.env.local` Datei hinzu:
   
   ```env
   # InfluxDB 1.x Konfiguration
   INFLUXDB_URL=http://localhost:8086
   INFLUXDB_DATABASE=hat_sensors
   INFLUXDB_USERNAME=admin
   INFLUXDB_PASSWORD=password
   ```
   
   **Beispiel:**
   ```env
   INFLUXDB_URL=http://192.168.1.4:8086
   INFLUXDB_DATABASE=hat_sensors
   INFLUXDB_USERNAME=admin
   INFLUXDB_PASSWORD=my-password
   ```
   
   **Hinweis:** `INFLUXDB_USERNAME` und `INFLUXDB_PASSWORD` sind optional. Wenn Ihre InfluxDB keine Authentifizierung verwendet, können Sie diese weglassen.

## Verwendung

### Manuell über Command

Sie können HAT-Sensordaten manuell in InfluxDB schreiben:

```powershell
# Alle aktiven Datalogger verarbeiten
php bin/console app:write-hats-to-influx

# Einen spezifischen Datalogger verarbeiten
php bin/console app:write-hats-to-influx 1

# Explizit alle Datalogger verarbeiten
php bin/console app:write-hats-to-influx --all
```

### Kontinuierlich als Daemon (Empfohlen)

Für kontinuierliche Aufzeichnung verwenden Sie den Daemon-Command:

```powershell
# Daemon starten (läuft kontinuierlich)
php bin/console app:hats-influx-daemon --only-changes
```

**Siehe `DAEMON_SETUP.md` für detaillierte Anleitung zur Einrichtung als Windows Service oder Linux systemd Service.**

### Einmalig per Command

Für einmalige Schreibvorgänge:

```powershell
php bin/console app:write-hats-to-influx
```

### Programmgesteuert im Code

Sie können den Service auch direkt in Ihrem Code verwenden:

```php
use App\Service\InfluxDbService;
use App\Service\DataloggerApiService;
use App\Entity\Datalogger;

// In einem Controller oder Service
$apiService = DataloggerApiService::createForDatalogger($httpClient, $datalogger);
$hatsData = $apiService->readHats();

$success = $influxDbService->writeHatsData($datalogger, $hatsData);
```

## Datenstruktur in InfluxDB

Die Daten werden in InfluxDB mit folgender Struktur gespeichert:

**Measurement:** `hat_sensors`

**Tags:**
- `datalogger_id`: ID des Dataloggers
- `datalogger_name`: Name des Dataloggers
- `hat_name`: Name des HAT-Moduls
- `measurement_type`: Typ der Messung (temperature, pressure, voltage, current, resistance, unknown)
- `stack`: Stack-Level (optional)
- `channel`: Kanal-Nummer (optional)
- `unit`: Einheit der Messung (optional)

**Fields:**
- `value`: Der Hauptmesswert (calibrated_value, normalized_value oder raw_value)
- `raw_value`: Roher Wert (falls vorhanden)
- `normalized_value`: Normalisierter Wert (falls vorhanden)

**Beispiel:**
```
hat_sensors,datalogger_id=1,datalogger_name=Vehicle-01,hat_name=HAT5,measurement_type=temperature,stack=0,channel=0,unit=°C value=23.5,raw_value=23.4 1699123456000000000
```

## Fehlerbehandlung

Der Service loggt Fehler automatisch, wenn ein Logger-Service konfiguriert ist. Bei Fehlern wird `false` zurückgegeben, bei Erfolg `true`.

## InfluxDB 1.x Setup

Falls Sie InfluxDB 1.x noch nicht installiert haben:

1. **InfluxDB 1.x installieren:**
   - Download von https://portal.influxdata.com/downloads/ (Version 1.x)
   - Oder per Docker: `docker run -p 8086:8086 influxdb:1.8`

2. **Datenbank erstellen:**
   ```bash
   # InfluxDB CLI starten
   influx
   
   # Datenbank erstellen
   CREATE DATABASE hat_sensors
   
   # Optional: Retention Policy setzen
   CREATE RETENTION POLICY "default" ON "hat_sensors" DURATION 90d REPLICATION 1 DEFAULT
   ```

3. **Authentifizierung (optional):**
   ```bash
   # In influx.conf aktivieren:
   [http]
     auth-enabled = true
   
   # Benutzer erstellen:
   CREATE USER admin WITH PASSWORD 'your-password' WITH ALL PRIVILEGES
   GRANT ALL ON hat_sensors TO admin
   ```

## Weitere Informationen

- [InfluxDB 1.x Dokumentation](https://docs.influxdata.com/influxdb/v1.8/)
- [Line Protocol Dokumentation](https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_tutorial/)
