docs: Home-Assistant-Status in api.md
Security Audit / Python Dependency Audit (push) Canceled after 0s
Security Audit / Node.js Dependency Audit (push) Canceled after 0s
Security Audit / Frontend Build (tsc + vite) (push) Canceled after 0s

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
patrickandClaude Sonnet 5.5 committed 2026-10-28 22:38:25 +01:00
1 parent ed5c52d8b3
commit c9f2725186
1 file changed
+82
+82
View File
@@ -29,6 +29,7 @@ In der Entwicklungsumgebung ist die interaktive Dokumentation unter `/docs` (Swa
19. [Admin · Mandanten & Reseller](#admin--mandanten--reseller)
20. [Sondervertretungen](#sondervertretungen)
21. [Admin · TLS](#admin--tls)
22. [Home-Assistant-Status](#home-assistant-status)
---
@@ -1800,3 +1801,84 @@ Internes Zertifikat erneuern (Hostname/IP, kein öffentlicher Certbot-Weg).
**Request:** `{ "hostname": "timemaster", "ip": "192.168.1.137" }`
**Response:** `TlsStatusOut`
---
## Home-Assistant-Status
Router-Präfix: `/time` (Status) bzw. `/users/me` (Token-Verwaltung)
Read-only JSON-Status der eigenen Arbeitszeit für einen REST-Sensor in Home
Assistant. **Kein JWT** (Access-Token läuft nach 30 min ab, Refresh rotiert):
Zugang über ein geheimes, rotierbares, opt-in Token in der URL (gehasht in
`users.ha_token_hash`, Migration 0048). Liefert ausschließlich die eigenen
Daten des Token-Inhabers. Ohne TLS ist das Token mitlesbar.
### `GET /time/ha/{token}`
- **Erforderliche Rolle:** öffentlich (kein JWT, Token in URL)
**Response:**
```json
{
"status": "out | working | break",
"stamped_in_since": "2026-10-28T07:30:00+00:00 | null",
"worked_today_min": 255,
"break_today_min": 30,
"month_worked_h": 80.5,
"month_expected_h": 84.0,
"month_balance_h": -3.5,
"updated_at": "2026-10-28T11:45:00+00:00"
}
```
Zeiten sind UTC. `month_*` zählt nur genehmigte Einträge (wie `/time/balance/me`).
---
### `GET /users/me/ha-token`
Status abfragen. Das Token selbst wird nie zurückgegeben.
- **Erforderliche Rolle:** authentifiziert (jede Rolle)
**Response:** `{ "enabled": true|false }`
---
### `POST /users/me/ha-token`
Erzeugt ein neues Token (rotiert ein bestehendes), URL **einmalig** in der Antwort.
Im Frontend: ProfilePage → „Home Assistant".
- **Erforderliche Rolle:** authentifiziert (jede Rolle)
**Response:** `{ "enabled": true, "url": "https://.../api/v1/time/ha/<token>" }`
---
### `DELETE /users/me/ha-token`
Deaktivieren (Token löschen).
- **Erforderliche Rolle:** authentifiziert (jede Rolle)
**Response:** `204 No Content`
### Home-Assistant-Konfiguration
URL in `secrets.yaml` ablegen (enthält das Token):
```yaml
sensor:
- platform: rest
name: Arbeitszeit
resource: !secret timemaster_ha_url
value_template: "{{ value_json.status }}"
json_attributes:
- worked_today_min
- break_today_min
- month_balance_h
- stamped_in_since
scan_interval: 60
```