Positionen Action Button und DVA Button hinzugefügt
This commit is contained in:
58
README.md
58
README.md
@@ -10,12 +10,14 @@ Browserbasiertes Digital-Signage-System für interne Info-Screens.
|
||||
- Bilder, Videos (MP4/H.264), HTML-Seiten, URL-Playlist-Einträge
|
||||
- **Multi-Standort**: Standorte (sites) gruppieren Screens
|
||||
- **Priority-Playlist**: globale Inhalte wirken auf alle Player
|
||||
- **Willkommensseite**: bis zu 3 Kundenlogos via OpenAI + Brandfetch
|
||||
- **Willkommensseite**: bis zu 3 Kundenlogos via OpenAI + Brandfetch, pro Standort konfigurierbares Hintergrundbild
|
||||
- Pro Screen eigene Playlist mit Drag-&-Drop-Reihenfolge
|
||||
- Auto-Reload bei Playlist-Änderungen
|
||||
- Newsticker pro Screen
|
||||
- **Custom-URL-Button**: pro Screen konfigurierbarer Aktions-Button oben links im Player (öffnet URL in iframe-Overlay mit Zurück-Button oder per Direkt-Weiterleitung)
|
||||
- Tab-basierte Admin-UI pro Screen: Playlist, Einstellungen, Medien (Tabler Tabs)
|
||||
- **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)
|
||||
- Tab-basierte Admin-UI pro Screen: Playlist, Einstellungen, Aktionen, Digital Voice Agent, Medien (Tabler Tabs)
|
||||
- Priority-Seite ebenfalls mit Tabs: Playlist und Medien
|
||||
- Dark Mode (localStorage-persistiert)
|
||||
- CI-konformes Admin-UI (CANCOM-Design: `brand-surface`, `nav-surface` rot)
|
||||
@@ -74,6 +76,7 @@ signage/
|
||||
│ └── _styles.html # Zentrale CSS (Variablen, Dark Mode)
|
||||
├── static/
|
||||
│ ├── cancom.svg
|
||||
│ ├── dva.png
|
||||
│ └── wallpaper.png
|
||||
└── AGENTS.md
|
||||
```
|
||||
@@ -114,13 +117,15 @@ docker compose up -d
|
||||
|
||||
| Route | Beschreibung |
|
||||
|-------|-------------|
|
||||
| `GET /` | 404 – kein Root-Endpunkt |
|
||||
| `GET /` | Weiterleitung zum Login |
|
||||
| `GET /login` | Admin-Login |
|
||||
| `GET /logout` | Ausloggen |
|
||||
| `GET /admin` | Redirect zum ersten konfigurierten Standort |
|
||||
| `GET /admin/<site>` | Admin-Dashboard für einen Standort |
|
||||
| `GET /admin/<site>/priority` | Priority-Playlist (separate Seite) |
|
||||
| `POST /admin/<site>/update/<screen>` | Screen-Einstellungen speichern |
|
||||
| `POST /admin/<site>/update/<screen>` | Allgemeine Screen-Einstellungen speichern (Intervall, Newsticker, Bilder/Videos, stay_on_first) |
|
||||
| `POST /admin/<site>/update-actions/<screen>` | Aktionen-Einstellungen speichern (Custom-URL) |
|
||||
| `POST /admin/<site>/update-voice/<screen>` | Voice-Agent-Einstellungen speichern (Enabled, Label, Target, Position, Bild) |
|
||||
| `POST /admin/<site>/upload/<screen>` | Medien hochladen |
|
||||
| `POST /admin/<site>/add-url/<screen>` | URL zur Playlist hinzufügen |
|
||||
| `POST /admin/<site>/delete/<screen>/<filename>` | Datei löschen |
|
||||
@@ -129,12 +134,15 @@ docker compose up -d
|
||||
| `GET /admin/<site>/add-screen?name=<name>` | Neuen Screen anlegen |
|
||||
| `GET /add-site?name=<name>` | Neuen Standort anlegen |
|
||||
| `POST /admin/<site>/delete-site` | Standort + alle Screens/Medien löschen |
|
||||
| `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 /willkommen?site=<site>` | Willkommensseite-Formular (GET + POST) |
|
||||
| `POST /api/customer` | API-Endpunkt für Willkommensseite (JSON) |
|
||||
| `GET /media/<site>/<screen>/<file>` | Medien-Datei ausliefern |
|
||||
| `GET /media/priority/<file>` | Priority-Medien (global) |
|
||||
| `GET /media/<site>/background/<filename>` | Hintergrundbild der Willkommensseite |
|
||||
|
||||
### Admin-Portal
|
||||
|
||||
@@ -142,12 +150,14 @@ docker compose up -d
|
||||
http://localhost:5005/admin/<standort>
|
||||
```
|
||||
|
||||
- Screens konfigurieren (Tab-basiert: Playlist, Einstellungen, Medien)
|
||||
- Screens konfigurieren (Tab-basiert: Playlist, Einstellungen, Aktionen, Digital Voice Agent, Medien)
|
||||
- Medien hochladen / löschen
|
||||
- Playlist per Drag & Drop sortieren
|
||||
- Priority-Playlist verwalten (ebenfalls mit Tabs)
|
||||
- Willkommensseite generieren (bis zu 3 Kundenlogos)
|
||||
- Custom-URL-Aktionsbutton pro Screen konfigurieren (iframe-Overlay oder Weiterleitung)
|
||||
- Willkommensseite generieren (bis zu 3 Kundenlogos, Hintergrundbild pro Standort)
|
||||
- Custom-URL-Aktionsbutton pro Screen konfigurieren (Position, iframe-Overlay oder Weiterleitung)
|
||||
- Digital Voice Agent pro Screen konfigurieren (Position, Bild ein/aus, Typewriter-Tagline)
|
||||
- Stay-on-First-Modus pro Screen (kein automatischer Refresh)
|
||||
- Standorte anlegen & löschen
|
||||
|
||||
### Player-URL
|
||||
@@ -167,15 +177,23 @@ http://localhost:5005/player/stuttgart/lobby
|
||||
http://localhost:5005/willkommen?site=stuttgart
|
||||
```
|
||||
|
||||
Maximal 3 Kunden eingeben → Logos werden via OpenAI + Brandfetch gesucht → `welcome.html` wird in der Lobby-Playlist vorne eingefügt.
|
||||
Maximal 3 Kunden eingeben → Logos werden via OpenAI + Brandfetch gesucht → `welcome.html` wird in der Lobby-Playlist vorne eingefügt. Pro Standort kann ein eigenes Hintergrundbild hochgeladen werden (Fallback auf `static/wallpaper.png`).
|
||||
|
||||
---
|
||||
|
||||
### Globale Konfiguration
|
||||
|
||||
| Feld | Typ | Beschreibung |
|
||||
|------|-----|-------------|
|
||||
| `server_url` | string | Öffentliche Server-URL für Player-Links |
|
||||
| `voice_agent_url` | string | URL des Digital Voice Agents (global, read-only im Admin) |
|
||||
|
||||
## Konfiguration (`config.json`)
|
||||
|
||||
```json
|
||||
{
|
||||
"server_url": "http://signage.ccmake.de",
|
||||
"voice_agent_url": "https://voice-agent.example.com",
|
||||
"admin": { "username": "...", "password": "..." },
|
||||
"sites": {
|
||||
"stuttgart": {
|
||||
@@ -190,9 +208,21 @@ Maximal 3 Kunden eingeben → Logos werden via OpenAI + Brandfetch gesucht → `
|
||||
"custom_url_enabled": false,
|
||||
"custom_url": "https://...",
|
||||
"custom_url_label": "Infos",
|
||||
"custom_url_target": "overlay"
|
||||
"custom_url_target": "overlay",
|
||||
"custom_url_position": "top-left",
|
||||
"stay_on_first": false,
|
||||
"voice_agent_enabled": true,
|
||||
"voice_agent_show_image": false,
|
||||
"voice_agent_label": "Digitaler Assistent",
|
||||
"voice_agent_target": "overlay",
|
||||
"voice_agent_position": "top-left"
|
||||
},
|
||||
"casino": { "playlist": [...], "interval": 15 }
|
||||
},
|
||||
"welcome_data": {
|
||||
"names": ["Firma A"],
|
||||
"logo_urls": ["https://..."],
|
||||
"background_url": null
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -219,6 +249,13 @@ Maximal 3 Kunden eingeben → Logos werden via OpenAI + Brandfetch gesucht → `
|
||||
| `custom_url` | string | URL des Aktions-Buttons |
|
||||
| `custom_url_label` | string | Button-Beschriftung |
|
||||
| `custom_url_target` | string | `"overlay"` (iframe) oder `"redirect"` |
|
||||
| `custom_url_position` | string | Position des Buttons: `top-left`, `top-center`, `top-right`, `middle-left`, `middle-center`, `middle-right`, `bottom-left`, `bottom-center`, `bottom-right` |
|
||||
| `stay_on_first` | bool | Player bleibt auf erstem Element stehen (kein Refresh) |
|
||||
| `voice_agent_enabled` | bool | Voice-Agent-Button im Player anzeigen |
|
||||
| `voice_agent_show_image` | bool | Bild (dva.png) über dem Button anzeigen |
|
||||
| `voice_agent_label` | string | Button-Beschriftung (Default: "Digitaler Assistent") |
|
||||
| `voice_agent_target` | string | `"overlay"` (iframe) oder `"redirect"` |
|
||||
| `voice_agent_position` | string | Position des Buttons: `top-left`, `top-center`, `top-right`, `middle-left`, `middle-center`, `middle-right`, `bottom-left`, `bottom-center`, `bottom-right` |
|
||||
|
||||
## Helper-Funktionen (`app.py`)
|
||||
|
||||
@@ -231,6 +268,7 @@ Maximal 3 Kunden eingeben → Logos werden via OpenAI + Brandfetch gesucht → `
|
||||
- `playlist_item_enabled(item)` – Enabled-Status prüfen
|
||||
- `load_priority_files()` – Priority-Playlist + Dateien laden
|
||||
- `prio_redirect(site)` – Redirect-Pfad zur Priority-Seite
|
||||
- `get_background_url(site)` – URL zum benutzerdefinierten Hintergrundbild oder `None`
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user