# HAT-Sensoren InfluxDB Daemon Setup

Dieser Daemon läuft kontinuierlich im Hintergrund und schreibt HAT-Sensordaten automatisch in InfluxDB.

## Daemon starten

### Manuell (zum Testen)

```powershell
# Standard: Alle 10 Sekunden, immer schreiben
php bin/console app:hats-influx-daemon

# Mit angepasstem Intervall (z.B. 5 Sekunden)
php bin/console app:hats-influx-daemon --interval=5

# Nur bei Änderungen schreiben (spart Ressourcen)
php bin/console app:hats-influx-daemon --only-changes

# Nur einen spezifischen Datalogger überwachen
php bin/console app:hats-influx-daemon --datalogger-id=1
```

## Als Windows Service einrichten

### Option 1: NSSM (Non-Sucking Service Manager) - Empfohlen

1. **NSSM herunterladen:**
   - Download von https://nssm.cc/download
   - Entpacken Sie die Datei (z.B. nach `C:\nssm`)

2. **Service installieren:**
   ```powershell
   # Als Administrator ausführen
   cd C:\nssm\win64
   .\nssm.exe install HatsInfluxDaemon
   ```

3. **Service konfigurieren:**
   - **Path:** `C:\php\php.exe` (oder Ihr PHP-Pfad)
   - **Startup directory:** `C:\dev\projekt_fleet_monitoring`
   - **Arguments:** `bin/console app:hats-influx-daemon --only-changes`
   - **Service name:** `HatsInfluxDaemon`
   - **Display name:** `HAT Sensoren InfluxDB Daemon`
   - **Description:** `Kontinuierliche Aufzeichnung von HAT-Sensordaten in InfluxDB`

4. **Service starten:**
   ```powershell
   .\nssm.exe start HatsInfluxDaemon
   ```

5. **Service verwalten:**
   ```powershell
   .\nssm.exe stop HatsInfluxDaemon      # Stoppen
   .\nssm.exe restart HatsInfluxDaemon    # Neustart
   .\nssm.exe remove HatsInfluxDaemon    # Entfernen
   ```

### Option 2: Windows Task Scheduler (Einfacher, aber weniger robust)

1. **Task Scheduler öffnen:**
   - Windows + R → `taskschd.msc`

2. **Neue Aufgabe erstellen:**
   - Klicken Sie auf "Aufgabe erstellen"

3. **Allgemein:**
   - Name: `HAT Sensoren InfluxDB Daemon`
   - Beschreibung: `Kontinuierliche Aufzeichnung von HAT-Sensordaten`
   - ✅ "Unabhängig von der Benutzeranmeldung ausführen"
   - ✅ "Mit höchsten Privilegien ausführen"

4. **Trigger:**
   - Neu → "Bei Start des Computers"
   - ✅ "Aktiviert"

5. **Aktionen:**
   - Neu → "Programm starten"
   - Programm: `C:\php\php.exe` (Ihr PHP-Pfad)
   - Argumente: `bin/console app:hats-influx-daemon --only-changes`
   - Starten in: `C:\dev\projekt_fleet_monitoring`

6. **Bedingungen:**
   - ✅ "Aufgabe nur starten, wenn Computer im Netzbetrieb ist"
   - ❌ "Computer zum Ausführen dieser Aufgabe aktivieren"

7. **Einstellungen:**
   - ✅ "Aufgabe so schnell wie möglich nach einem verpassten Start ausführen"
   - ✅ "Aufgabe beenden, wenn sie nicht mehr ausgeführt wird: 0 Stunden"

**Hinweis:** Task Scheduler ist weniger ideal für kontinuierliche Prozesse. NSSM ist die bessere Lösung.

## Als Debian/Linux Systemd Service einrichten

### Schritt 1: Service-Datei kopieren

Die Service-Datei `hats-influx-daemon.service` ist bereits im Projekt enthalten. Kopieren Sie sie nach `/etc/systemd/system/`:

```bash
# Als root oder mit sudo
sudo cp hats-influx-daemon.service /etc/systemd/system/
```

### Schritt 2: Service-Datei anpassen

Bearbeiten Sie die Service-Datei und passen Sie die Pfade an:

```bash
sudo nano /etc/systemd/system/hats-influx-daemon.service
```

**Wichtige Einstellungen anpassen:**

1. **WorkingDirectory:** Pfad zu Ihrem Projekt
   ```ini
   WorkingDirectory=/var/www/projekt_fleet_monitoring
   ```

2. **User/Group:** Benutzer der den Service ausführt (meist `www-data`)
   ```ini
   User=www-data
   Group=www-data
   ```

3. **ExecStart:** PHP-Pfad und Command-Optionen
   ```ini
   ExecStart=/usr/bin/php bin/console app:hats-influx-daemon --only-changes
   ```
   
   **PHP-Pfad finden:**
   ```bash
   which php
   # oder
   /usr/bin/php --version
   ```

4. **ReadWritePaths:** Pfad zu var-Verzeichnis für Logs/Cache
   ```ini
   ReadWritePaths=/var/www/projekt_fleet_monitoring/var
   ```

### Schritt 3: Berechtigungen setzen

```bash
# Service-Datei Berechtigungen
sudo chmod 644 /etc/systemd/system/hats-influx-daemon.service

# Projekt-Verzeichnis Berechtigungen (falls nötig)
sudo chown -R www-data:www-data /var/www/projekt_fleet_monitoring
sudo chmod -R 755 /var/www/projekt_fleet_monitoring
```

### Schritt 4: Service aktivieren und starten

```bash
# Systemd neu laden
sudo systemctl daemon-reload

# Service aktivieren (startet automatisch beim Boot)
sudo systemctl enable hats-influx-daemon

# Service starten
sudo systemctl start hats-influx-daemon

# Status prüfen
sudo systemctl status hats-influx-daemon
```

### Schritt 5: Service verwalten

```bash
# Status prüfen
sudo systemctl status hats-influx-daemon

# Stoppen
sudo systemctl stop hats-influx-daemon

# Starten
sudo systemctl start hats-influx-daemon

# Neustart
sudo systemctl restart hats-influx-daemon

# Service deaktivieren (startet nicht mehr beim Boot)
sudo systemctl disable hats-influx-daemon

# Logs in Echtzeit anzeigen
sudo journalctl -u hats-influx-daemon -f

# Letzte 100 Log-Zeilen
sudo journalctl -u hats-influx-daemon -n 100

# Logs seit heute
sudo journalctl -u hats-influx-daemon --since today
```

### Schritt 6: Automatischer Neustart

Der Service ist so konfiguriert, dass er automatisch neu startet:
- Bei System-Neustart (durch `enable`)
- Bei Absturz (durch `Restart=always`)
- Nach 10 Sekunden Wartezeit (`RestartSec=10`)

## Daemon-Optionen

### `--interval` / `-i`
Abfrage-Intervall in Sekunden (Standard: 10)

```powershell
php bin/console app:hats-influx-daemon --interval=5
```

### `--only-changes`
Nur bei Änderungen schreiben (spart Ressourcen und reduziert Datenmenge)

```powershell
php bin/console app:hats-influx-daemon --only-changes
```

**Empfohlen für Produktion!** Schreibt nur wenn sich Werte signifikant ändern (>0.01% oder >0.01 Einheiten).

### `--datalogger-id`
Nur einen spezifischen Datalogger überwachen

```powershell
php bin/console app:hats-influx-daemon --datalogger-id=1
```

## Monitoring

### Logs prüfen

**Debian/Linux (systemd):**
```bash
# Logs in Echtzeit anzeigen
sudo journalctl -u hats-influx-daemon -f

# Letzte 100 Zeilen
sudo journalctl -u hats-influx-daemon -n 100

# Logs seit heute
sudo journalctl -u hats-influx-daemon --since today

# Logs mit Zeitstempel
sudo journalctl -u hats-influx-daemon -f --no-pager
```

**Windows (NSSM):**
```powershell
# Logs anzeigen
C:\nssm\win64\nssm.exe get HatsInfluxDaemon AppStdout
C:\nssm\win64\nssm.exe get HatsInfluxDaemon AppStderr
```

### Status prüfen

Der Daemon gibt regelmäßig Statusmeldungen aus:
- ✅ Erfolgreiche Schreibvorgänge
- ⚠️ Warnungen (z.B. API nicht erreichbar)
- ❌ Fehler

## Fehlerbehebung

### Daemon startet nicht

1. **PHP-Pfad prüfen:**
   ```powershell
   php --version
   ```

2. **Projekt-Pfad prüfen:**
   ```powershell
   cd C:\dev\projekt_fleet_monitoring
   php bin/console app:hats-influx-daemon
   ```

3. **InfluxDB-Verbindung prüfen:**
   - Prüfen Sie die `.env.local` Konfiguration
   - Testen Sie die InfluxDB-Verbindung manuell

### Daemon schreibt keine Daten

1. **API-Verfügbarkeit prüfen:**
   - Prüfen Sie ob die Datalogger-APIs erreichbar sind
   - Testen Sie manuell: `php bin/console app:write-hats-to-influx`

2. **InfluxDB-Verbindung prüfen:**
   - Prüfen Sie ob InfluxDB läuft
   - Testen Sie die Verbindung mit InfluxDB CLI

3. **Logs prüfen:**
   - Schauen Sie in die Daemon-Logs nach Fehlermeldungen

### Daemon beendet sich automatisch

1. **Prüfen Sie die Logs** nach Fehlermeldungen
2. **Prüfen Sie die Ressourcen** (Speicher, CPU)
3. **Prüfen Sie ob PHP-Fehler auftreten**

## Performance-Tipps

1. **`--only-changes` verwenden:** Reduziert die Datenmenge erheblich
2. **Intervall anpassen:** 10 Sekunden ist ein guter Kompromiss
3. **Nur benötigte Datalogger überwachen:** Verwenden Sie `--datalogger-id` wenn möglich

## Automatischer Neustart

Sowohl NSSM als auch systemd starten den Service automatisch neu, wenn er abstürzt. Der Daemon ist darauf ausgelegt, robust zu sein und Fehler zu behandeln, ohne sich selbst zu beenden.
