Ergänzung Active Button
This commit is contained in:
17
README.md
17
README.md
@@ -17,6 +17,7 @@ Browserbasiertes Digital-Signage-System für interne Info-Screens.
|
||||
- **Custom-URL-Button**: pro Screen konfigurierbarer Aktions-Button mit frei wählbarer Position (9 Positionen) im Player (öffnet URL in iframe-Overlay mit Zurück-Button oder per Direkt-Weiterleitung)
|
||||
- **Digital Voice Agent**: global konfigurierbarer Voice-Agent-Button pro Screen (9 Positionen, iframe-Overlay mit positionsgetreuem Zurück-Button, Typewriter-Tagline mit mehrsprachigen Wechseltexten, optionales Bild über dem Button)
|
||||
- **Stay-on-First**: Screen kann auf erstem Playlist-Element stehen bleiben (kein automatischer Refresh)
|
||||
- **Online/Offline-Status**: Player-Status wird via dateibasiertem Heartbeat ermittelt – grün (online) bei aktivem Player, rot (offline) nach 60s ohne Poll
|
||||
- **User-Verwaltung**: Mehrere User mit Rollen (Admin / Superuser / User), E-Mail als Login, Passwort-Hashing (scrypt), Berechtigungen pro Standort
|
||||
- **Passwort-Workflow**: First-Login-Änderung, Admin-Reset mit temporärem Passwort, Notfall-Login bei fehlendem Hash
|
||||
- **Admin Dashboard**: `/admin/dashboard` – Statistiken (Sites, Screens, User, Admins, Superuser) mit Sparkline-Charts + Trendanzeige, Aktivitätsverlauf
|
||||
@@ -41,6 +42,7 @@ Flask App (Server)
|
||||
├── config.json
|
||||
├── users.json
|
||||
├── history.json
|
||||
├── /tmp/signage-heartbeat/ (Heartbeat-Dateien für Online-Status)
|
||||
├── media/
|
||||
│ ├── <site>/
|
||||
│ │ ├── <screen>/
|
||||
@@ -185,7 +187,7 @@ Server läuft auf `http://localhost:5005` (gunicorn mit 4 Workern, non-root User
|
||||
| `POST /admin/<site>/upload-background` | Hintergrundbild für Willkommensseite hochladen |
|
||||
| `POST /admin/<site>/delete-background` | Hintergrundbild zurücksetzen |
|
||||
| `GET /player/<site>/<screen>` | Player-Ansicht |
|
||||
| `GET /playlist/<site>/<screen>/hash` | Playlist-Checksumme (für Auto-Reload) |
|
||||
| `GET /playlist/<site>/<screen>/hash` | Playlist-Checksumme (für Auto-Reload) + Heartbeat (Online-Status) |
|
||||
| `GET /willkommen?site=<site>` | Willkommensseite-Formular (GET + POST) |
|
||||
| `POST /api/customer` | API-Endpunkt für Willkommensseite (JSON) |
|
||||
| `GET /change-password` | Passwort ändern (First-Login / nach Admin-Reset) |
|
||||
@@ -200,6 +202,17 @@ Server läuft auf `http://localhost:5005` (gunicorn mit 4 Workern, non-root User
|
||||
| `GET /media/priority/<file>` | Priority-Medien (global) |
|
||||
| `GET /media/<site>/background/<filename>` | Hintergrundbild der Willkommensseite |
|
||||
|
||||
### Heartbeat / Online-Status
|
||||
|
||||
Der Player ruft alle 5s `/playlist/<site>/<screen>/hash` auf. Der Server schreibt dabei einen Timestamp nach `/tmp/signage-heartbeat/<site>/<screen>`. Im Admin-Dashboard wird geprüft, ob dieser Timestamp < 60s alt ist → grüner "Online"- oder roter "Offline"-Button pro Screen.
|
||||
|
||||
```bash
|
||||
# Heartbeat-Dateien anzeigen
|
||||
ls -la /tmp/signage-heartbeat/*/
|
||||
```
|
||||
|
||||
Nach einem Server-Neustart werden alle Screens kurz rot, bis die Player wieder pollen (max. 60s).
|
||||
|
||||
### Admin Portal
|
||||
|
||||
```
|
||||
@@ -357,6 +370,8 @@ Maximal 3 Kunden eingeben → Logos werden via OpenAI + Brandfetch gesucht → `
|
||||
- `load_users()` / `save_users()` / `get_user()` – User aus `users.json`
|
||||
- `init_user_db()` – initialen Admin aus `config.json` anlegen
|
||||
- `get_accessible_sites(cfg, user)` – Standorte nach User-Berechtigung filtern
|
||||
- `record_heartbeat(site, screen)` – Heartbeat-Datei schreiben (wird vom Player-Poll getriggert)
|
||||
- `screen_is_active(site, screen)` – Prüft ob Heartbeat < 60s alt ist
|
||||
- `admin_required` / `site_access_required` – Zugriffs-Dekoratoren
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user