# YachtMemory Chain Force History v1.3

Diese Version korrigiert die Datenquelle der Kettenkraft-Historie und macht den gemeinsamen TelemetryMeasurementReader gegenüber Groß-/Kleinschreibung von Kategorien robust.

## Vollständige Austauschdateien

- `src/services/TelemetryMeasurementReader.php`
- `api/public/chain_force_history.php`
- `public_widgets/chain-force-history/index.php`
- `public_widgets/chain-force-history/widget.js`
- `public_widgets/chain-force-history/widget.css`

## Fachliches Mapping

- Datenbankkategorie: `chainforceavg20`
- Öffentlicher API-Schlüssel: `chainforce`
- Einheit: `kg`

Der Sensorwert ist bereits ein 20-Sekunden-Mittelwert. Die History-API aggregiert diese Werte anschließend je Zeitfenster mit AVG oder MAX.

## Installation

Aus dem Projektwurzelverzeichnis `/var/www/app.yachtmemory.net`:

```bash
cp yachtmemory_chain_force_history_v1_3/src/services/TelemetryMeasurementReader.php src/services/
cp yachtmemory_chain_force_history_v1_3/api/public/chain_force_history.php api/public/
mkdir -p public_widgets/chain-force-history
cp -a yachtmemory_chain_force_history_v1_3/public_widgets/chain-force-history/. public_widgets/chain-force-history/
```

## Syntaxprüfung

```bash
php -l src/services/TelemetryMeasurementReader.php
php -l api/public/chain_force_history.php
node --check public_widgets/chain-force-history/widget.js
```

## API-Test

```bash
curl -sS 'https://app.yachtmemory.net/api/public/chain_force_history.php?vessel=silent_sea&lang=de&range=1y&aggregation=max' \
| jq '{success, mapping: .metadata.source_mapping, statistics, coverage: .quality.coverage}'
```

Erwartetes Mapping:

```json
{
  "chainforce": "chainforceavg20"
}
```
