docs: API-ENDPOINTS + SCHEMA für Override und Wochenend-Sperre
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
fc94f56162
commit
db68c84d45
2 changed files with 117 additions and 0 deletions
|
|
@ -587,6 +587,93 @@ Der Scheduler prüft jede Minute, ob die aktuelle Uhrzeit mit `power_on_time` od
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Globaler Override
|
||||||
|
|
||||||
|
| Methode | Pfad | Auth | Beschreibung |
|
||||||
|
|---------|------|------|--------------|
|
||||||
|
| GET | `/api/v1/global-override` | authUser | Aktiven Override abrufen (204 wenn keiner aktiv) |
|
||||||
|
| POST | `/api/v1/global-override` | authUser | Override setzen + sofort MQTT an alle Screens |
|
||||||
|
| DELETE | `/api/v1/global-override` | authUser | Override aufheben |
|
||||||
|
|
||||||
|
**GET /api/v1/global-override**
|
||||||
|
|
||||||
|
Ruft den aktuell aktiven globalen Override ab.
|
||||||
|
|
||||||
|
**Response:** `200 OK` (wenn aktiv)
|
||||||
|
```json
|
||||||
|
{"type":"off","until":"2026-04-05T18:00:00+02:00","set_at":"2026-03-27T15:30:00+02:00"}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Response:** `204 No Content` (wenn kein Override aktiv)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**POST /api/v1/global-override**
|
||||||
|
|
||||||
|
Setzt einen globalen Override und sendet sofort MQTT-Befehle an alle Screens.
|
||||||
|
|
||||||
|
**Request-Body:**
|
||||||
|
```json
|
||||||
|
{"type":"off","until":"2026-04-05T18:00:00+02:00"}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Response:** `200 OK`
|
||||||
|
```json
|
||||||
|
{"type":"off","until":"2026-04-05T18:00:00+02:00","set_at":"2026-03-27T15:30:00+02:00"}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Fehler:**
|
||||||
|
- `400 Bad Request` — `type` nicht "on"/"off", oder ungültiges Zeitformat
|
||||||
|
- `500 Internal Server Error` — DB-Fehler
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**DELETE /api/v1/global-override**
|
||||||
|
|
||||||
|
Hebt den aktuellen globalen Override auf.
|
||||||
|
|
||||||
|
**Response:** `204 No Content`
|
||||||
|
|
||||||
|
**Fehler:**
|
||||||
|
- `500 Internal Server Error` — DB-Fehler
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Per-Screen Override
|
||||||
|
|
||||||
|
| Methode | Pfad | Auth | Beschreibung |
|
||||||
|
|---------|------|------|--------------|
|
||||||
|
| POST | `/api/v1/screens/{screenSlug}/override` | authScreen | Per-Screen "Einschalten bis" setzen oder löschen |
|
||||||
|
|
||||||
|
**POST /api/v1/screens/{screenSlug}/override**
|
||||||
|
|
||||||
|
Setzt oder löscht den per-Screen "Einschalten bis"-Override. Mit diesem Override bleibt ein Monitor bis zu
|
||||||
|
dem angegebenen Zeitpunkt eingeschaltet, selbst wenn der globale Schedule "aus" vorsieht.
|
||||||
|
|
||||||
|
**Auth:** Erforderlich. Screen-Zugriff erforderlich.
|
||||||
|
|
||||||
|
**Path-Parameter:**
|
||||||
|
- `screenSlug` — Slug des Screens
|
||||||
|
|
||||||
|
**Request-Body:**
|
||||||
|
```json
|
||||||
|
{"on_until":"2026-04-05T18:00:00+02:00"}
|
||||||
|
```
|
||||||
|
|
||||||
|
Um den Override zu löschen, `on_until` auf `null` setzen:
|
||||||
|
```json
|
||||||
|
{"on_until":null}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Response:** `204 No Content`
|
||||||
|
|
||||||
|
**Fehler:**
|
||||||
|
- `400 Bad Request` — Ungültiges Zeitformat oder ungültiges JSON
|
||||||
|
- `404 Not Found` — Screen nicht vorhanden
|
||||||
|
- `500 Internal Server Error` — DB-Fehler
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Message Wall
|
## Message Wall
|
||||||
|
|
||||||
### POST /api/v1/tools/message-wall/resolve
|
### POST /api/v1/tools/message-wall/resolve
|
||||||
|
|
|
||||||
|
|
@ -523,6 +523,36 @@ Regeln:
|
||||||
- `schedule_enabled = false` bedeutet: Zeitplan vorhanden, aber deaktiviert
|
- `schedule_enabled = false` bedeutet: Zeitplan vorhanden, aber deaktiviert
|
||||||
- Leere Zeitfelder bedeuten: kein Einschalt- bzw. kein Ausschaltbefehl
|
- Leere Zeitfelder bedeuten: kein Einschalt- bzw. kein Ausschaltbefehl
|
||||||
|
|
||||||
|
Neue Spalte in `screen_schedules` (Migration `006`):
|
||||||
|
- `override_on_until timestamptz` — Einschalten-Override: Monitor bleibt bis zu diesem Zeitpunkt eingeschaltet (null = kein Override)
|
||||||
|
|
||||||
|
### `global_override` (Migration 006)
|
||||||
|
|
||||||
|
Zweck:
|
||||||
|
|
||||||
|
- Speichert den globalen Display-Override (maximal eine Zeile)
|
||||||
|
|
||||||
|
Spalten:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
id INT PRIMARY KEY DEFAULT 1
|
||||||
|
type TEXT NOT NULL -- "on" oder "off"
|
||||||
|
until TIMESTAMPTZ NOT NULL -- Override aktiv bis zu diesem Zeitpunkt
|
||||||
|
set_at TIMESTAMPTZ NOT NULL DEFAULT now() -- Wann der Override gesetzt wurde
|
||||||
|
```
|
||||||
|
|
||||||
|
Constraint:
|
||||||
|
```sql
|
||||||
|
CHECK (id = 1)
|
||||||
|
```
|
||||||
|
|
||||||
|
Regeln:
|
||||||
|
|
||||||
|
- Die Tabelle enthaelt maximal eine Zeile (id = 1)
|
||||||
|
- `type` bestimmt den globalen Zielzustand (alle Screens)
|
||||||
|
- `until` gibt an, wann der Override automatisch aufgehoben wird
|
||||||
|
- Der Scheduler prueft jede Minute, ob der Override noch aktiv ist (aktuell <= until)
|
||||||
|
|
||||||
### `screen_snapshots`
|
### `screen_snapshots`
|
||||||
|
|
||||||
Zweck:
|
Zweck:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue