8.5 KiB
Info-Board Neu - Datenmodell
Ziel
Das Datenmodell trennt klar zwischen:
- Mandanten und Benutzern
- Bildschirmen und ihrer technischen Laufzeitinformation
- Medien und Playlists
- Steuerbefehlen und Rueckmeldungen
Das Modell ist so ausgelegt, dass:
- jede Firma nur ihren eigenen Monitor bzw. Kanal pflegt
- die Administration alle Monitore zentral sehen und steuern kann
- Offline-Betrieb der Player moeglich bleibt
- Zeitsteuerung mit
valid_fromundvalid_untilsauber abbildbar ist
Kernentitaeten
tenant
Repraesentiert eine Firma bzw. einen abgeschotteten Inhaltsbereich.
Felder:
idslugnameactivecreated_atupdated_at
Hinweise:
- ein Tenant kann spaeter mehrere Screens haben, auch wenn zunaechst meist 1:1 gearbeitet wird
- alle Medien und Playlists sind einem Tenant zugeordnet
user
Repraesentiert einen Benutzer der Firmen- oder Admin-Oberflaeche.
Felder:
idtenant_idnullable fuer globale Adminsusernameemailpassword_hashrole(admin,tenant_user)activelast_login_atcreated_atupdated_at
Regeln:
tenant_userdarf nur Daten des eigenen Tenants sehen und bearbeitenadmindarf alle Tenants und alle Screens verwalten
screen
Repraesentiert einen physischen Monitor bzw. einen Player-Client.
Felder:
idtenant_idslugnamedescriptionlocationhardware_nameenabledrotation(0,90,180,270)resolution_widthresolution_heightfallback_dirsnapshot_interval_secondsoffline_overlay_enabledcreated_atupdated_at
Hinweise:
- der
slugdient als technische Kennung fuer Konfiguration, API und MQTT fallback_dirbeschreibt die lokale oder synchronisierte Fallback-Quelle auf dem Client
screen_registration
Optionale Trennung zwischen fachlichem Screen und technischer Registrierung.
Felder:
idscreen_iddevice_uuidhostnameapi_token_hashmqtt_client_idlast_seen_atlast_ipplayer_versionos_versioncreated_atupdated_at
Zweck:
- Wiedererkennung eines konkreten Geraets
- sichere Kommunikation mit API und Broker
- technische Inventarisierung
media_asset
Repraesentiert ein verwaltetes Medium.
Felder:
idtenant_idscreen_idnullabletitledescriptiontype(image,video,pdf,web)source_kind(upload,remote_url)storage_pathnullable bei reinen Web-URLsoriginal_urlnullablemime_typechecksumsize_bytesenabledcreated_by_user_idcreated_atupdated_at
Regeln:
uploadbedeutet: Datei liegt im Medien-Storageremote_urlbedeutet: Quelle ist extern und wird vom Player oder Server gecachtscreen_idkann optional gesetzt werden, wenn ein Medium nur fuer einen Monitor gedacht ist
playlist
Repraesentiert eine logische Playlist eines Screens.
Felder:
idtenant_idscreen_idnameis_activedefault_duration_secondsfallback_enabledfallback_dirshuffle_enabledcreated_atupdated_at
Regeln:
- pro Screen gibt es in v1 genau eine aktive Playlist
- spaeter koennen mehrere Playlists mit Umschaltung moeglich werden
playlist_item
Repraesentiert einen einzelnen Eintrag in einer Playlist.
Felder:
idplaylist_idscreen_idorder_indexmedia_asset_idnullabletype(image,video,pdf,web,dir)srctitleduration_secondsload_timeout_secondscache_policy(required,prefer_cache,no_cache)on_error(skip,retry,fallback)retry_countvalid_fromnullablevalid_untilnullableenabledcreated_atupdated_at
Regeln:
media_asset_idwird bei verwalteten Medien gesetztsrcenthaelt den effektiven Pfad oder die URL, damit der Player auch ohne Join-Struktur arbeiten kanntype=direrlaubt definierte Verzeichnisreferenzen innerhalb der Playlist
playlist_item_dir_rule
Optionale Zusatzregel fuer type=dir.
Felder:
idplaylist_item_iddirectory_pathsort_mode(name_asc,name_desc,mtime_asc,mtime_desc,shuffle)per_item_duration_secondsrecursivefile_filternullable
Zweck:
- sauberere Modellierung fuer Verzeichnisbasierte Fallbacks oder Einschuebe
screen_status
Repraesentiert den letzten bekannten Laufzeitstatus eines Players.
Felder:
screen_idonlineserver_connectedmqtt_connectedlast_heartbeat_atlast_sync_atcurrent_playlist_idcurrent_playlist_item_idnullablecurrent_item_typenullablecurrent_item_labelnullablecurrent_item_started_atnullablecurrent_item_duration_secondsnullablecache_state(ok,stale,missing,error)overlay_state(online,degraded,offline)error_codenullableerror_messagenullableplayer_versionuptime_secondsfree_disk_bytesnullabletemperature_celsiusnullableupdated_at
Hinweise:
screen_statusist eine verdichtete Sicht fuer Dashboard und Ueberwachung- historische Verlaeufe koennen spaeter separat gespeichert werden
screen_snapshot
Repraesentiert eine Vorschauaufnahme des aktuellen Bildschirminhalts.
Felder:
idscreen_idcaptured_atstorage_pathwidthheightmime_typesource(scheduled,item_change,manual)
Regeln:
- in der UI wird typischerweise nur der letzte Snapshot angezeigt
- aeltere Snapshots koennen nach Zeit oder Anzahl aufgeraeumt werden
device_command
Repraesentiert einen an einen Screen gesendeten Befehl.
Felder:
idscreen_idcommand_type(reload,restart_player,reboot,display_on,display_off,refresh_snapshot,clear_cache)payload_jsonrequested_by_user_idrequested_atdelivery_state(queued,sent,acknowledged,failed,expired)delivered_atnullableacknowledged_atnullableresult_codenullableresult_messagenullable
Zweck:
- nachvollziehbare Fernsteuerung mit Audit-Trail
sync_state
Repraesentiert den Synchronisationsstand eines Screens.
Felder:
screen_idconfig_revisionplaylist_revisionmedia_revisionlast_successful_sync_atlast_failed_sync_atnullablelast_error_messagenullable
Zweck:
- Erkennung, ob ein Player auf dem aktuellen Stand ist
Beziehungen
- ein
tenanthat vieleusers - ein
tenanthat vielescreens - ein
tenanthat vielemedia_assets - ein
screenhat genau eine aktiveplaylistin v1 - eine
playlisthat vieleplaylist_items - ein
screenhat genau einen aktuellenscreen_status - ein
screenhat vielescreen_snapshots - ein
screenhat vieledevice_commands - ein
screenhat genau einen aktuellensync_state
Zugriffsregeln
Tenant-User
Ein tenant_user darf:
- nur den eigenen
tenantsehen - nur den eigenen
screenbzw. die dem Tenant zugeordneten Screens sehen - nur eigene Medien hochladen und pflegen
- nur eigene Playlists bearbeiten
- nur die Vorschau des eigenen Screens sehen
Ein tenant_user darf nicht:
- andere Tenants sehen
- globale Steuerkommandos senden
- andere Screens administrieren
Admin
Ein admin darf:
- alle Tenants, Screens, Medien und Playlists sehen
- globale Steuerbefehle senden
- Vorschau und Status aller Screens sehen
- neue Screens und Benutzer anlegen
Revisions- und Caching-Modell
Damit Offline-Betrieb einfach bleibt, arbeitet der Player nicht gegen beliebige Einzelobjekte, sondern gegen Revisionen.
Sinnvoll sind mindestens:
playlist_revisionmedia_revisionconfig_revision
Der Player kann damit erkennen:
- ob neue Konfiguration vorliegt
- ob Medien nachgeladen werden muessen
- ob die lokale Kopie noch gueltig ist
Beispiel fuer aktive Playlist-Auswertung
Ein playlist_item ist aktiv, wenn:
enabled = truevalid_fromleer oder in der Vergangenheit liegtvalid_untilleer oder in der Zukunft liegt
Wenn kein aktives Item existiert:
- greift die globale Fallback-Regel des Screens oder der Playlist
Beispiel fuer Admin-Steuerung
Wenn ein Admin reload ausloest:
- Ein
device_commandwird gespeichert - der Befehl wird per MQTT an den Screen signalisiert
- der Player fuehrt den Reload aus
- der Player sendet ein ACK
device_command.delivery_statewird aktualisiert
Offene spaetere Erweiterungen
- mehrere Screens pro Tenant in der Firmenoberflaeche
- Vorlagen und globale Playlists
- Historie der Statusdaten als Zeitreihe
- Geplante Kampagnen mit Prioritaeten
- serverseitige Konvertierung oder Transkodierung von Medien