SignagePlayer · Modelo signage
Propósito
SignagePlayer representa un reproductor físico de Digital Signage vinculado al network discovery. Nodo central del pipeline: recibe playlists y schedules vía adapters de vendor, expone una URL pública de descarga identificada por publish_token (UUID inmutable), y registra heartbeat y screenshot para proof-of-play. Scope org-only con unique_together sobre (organization, device_profile).
Contrato
Campos:
| Campo | Tipo | Nullable | Descripción |
|---|---|---|---|
publish_token | UUIDField | No | UUID único, auto, inmutable. URL Scheduled Download |
organization | FK(core.Organization) | No | Propietario (CASCADE) |
display_name | CharField(200) | No | Nombre legible |
location | CharField(200, blank) | No | Ubicación física |
device_profile | FK(network.DeviceProfile) | Sí | Perfil de red (IP principal) |
monitoring_target | FK(monitoring.MonitoringTarget) | Sí | Target (IP alternativa) |
adapter | FK(SignageVendorAdapter) | Sí | Adapter de vendor |
api_credentials | JSONField(default={}) | No | Cifrado via CredentialManager |
display_info | JSONField(default={}) | No | Resolución, orientación, modelo, firmware |
status | CharField(choices) | No | online/offline/error/maintenance |
current_playlist | FK(Playlist) | Sí | Playlist activa |
current_schedule | FK(Schedule) | Sí | Schedule activo |
last_screenshot | CharField(500, blank) | No | Ruta último screenshot |
last_heartbeat | DateTimeField(null) | Sí | Último heartbeat |
groups | M2M(racks.RackGroup, blank) | No | Grupos de racks |
created_at / updated_at | DateTimeField | No | Auto |
Meta:
ordering:["display_name"].unique_together:["organization", "device_profile"].- Índices:
(organization, status),(organization, last_heartbeat).
Dependencias entrantes
| Modelo / Módulo | Archivo | Descripción |
|---|---|---|
SignageOperation | signage/models.py | FK player — historial con rollback |
PlaybackLog | signage/models.py | FK player — proof-of-play |
ContentDeployment | signage/models.py | M2M players — deployments |
ClientShareLink | signage/models_portal.py | M2M — portal cliente |
signage/api/players.py | CRUD REST | Endpoints player |
signage/api/display_control.py | Acciones | Control pantalla via adapter |
signage/api/deployments.py | Deployment | Filtra players para ContentDeployment |
monitoring/api/signage/deploy.py | get_or_create | Crea/obtiene player al publicar |
signage/tasks.py | Queryset | Marca stale/unknown por heartbeat |
signage/services/proof_of_play/screenshot.py | Queryset | Captura screenshots online |
signage/services/proof_of_play/collector.py | Queryset | Recolecta logs online |
monitoring/api/signage/summary.py | Queryset | Resumen de estado |
Dependencias salientes
core.Organization— propietario (CASCADE).network.DeviceProfile— IP principal en deployment.monitoring.MonitoringTarget— IP alternativa.SignageVendorAdapter— protocolo, auth, capabilities.Playlist(current_playlist) — playlist activa.Schedule(current_schedule) — schedule activo.racks.RackGroup— agrupación lógica.core.security.CredentialManager— descifradoapi_credentialsen deploy.signage/services/adapters/registry.get_adapter()— factory por slug (spinetix,brightsign,samsung,lg,generic_snmp).
Ejemplos
- Deploy a player:
execute_deployment()iteradeployment.players, resuelve IP desdedevice_profileomonitoring_target, descifraapi_credentials, instancia adapter viaget_adapter(slug, ip, creds, config)y llamapush_content()+set_playlist()/set_schedule()async. - URL pública:
views_publish.pyresuelve player porpublish_tokenconselect_relatedy sirve sin auth. - Creación desde monitoring:
monitoring/api/signage/deploy.py→SignagePlayer.objects.get_or_create(organization=org, device_profile=profile). - Stale:
signage/tasks.pymarcaofflinesilast_heartbeatsupera umbral.
Related
entity--signage--model--mediaasset— assets referenciados en playlists deployadas.entity--signage--model--playlist— colecciones asignadas comocurrent_playlist.entity--network--model--deviceprofile— perfil de red que aporta IP física.concept--signage--deployment— pipeline completo de publicación.
Véase también
- [[entity—signage—model—mediaasset]]
- [[entity—signage—model—playlist]]
- [[entity—network—model—deviceprofile]]
- [[concept—signage—deployment]]
Referenciado desde
- Agente · dev-signage
- Digital Signage — Flujo SpinetiX
- El PIN del portal de clientes de Signage se guardaba en claro en la base de datos
- Fuga cross-tenant en el publicador anónimo de signage (playlist_id sin validar)
- MediaAsset · Modelo signage
- Servicio publish_misses — enlaces de publicación de Signage rechazados (v1.124.0, task #276)
- SpinetiX HMP Integration Guide — CreaRack Pro
- Validación de capturas disponibles en Signage y control por player