Descripción
Adapter que integra contenido de CreaRack con la plataforma Signagelive cloud (https://api.signagelive.com/v1). Signagelive es una CMS de digital signage basada en cloud con soporte para múltiples tipos de players. Su Network API utiliza un flujo OAuth simplificado.
Ubicación: signage/services/adapters/signagelive.py
Clase: SignageliveAdapter(SignageDeviceAdapter)
Flujo de autenticación: OAuth (POST /token → Bearer token)
Método de push: POST /media (multipart form-data con Bearer)
Firma pública
class SignageliveAdapter(SignageDeviceAdapter):
"""Signagelive Network API adapter (cloud, OAuth bearer)."""
def __init__(self, ip: str, credentials: dict, adapter_config: dict) -> None
async def get_status(self) -> dict
async def push_content(self, file_path: str, destination: str = "") -> bool
async def set_playlist(self, playlist_data: dict) -> bool
async def set_schedule(self, schedule_data: dict) -> bool
async def get_playback_logs(self, since: str = "") -> list
Componentes y flujos
Inicialización
- Entrada:
ip(no usado directamente; Signagelive es cloud-only),credentialsdict con:client_idousername: Identificador del clienteclient_secretoapi_keyopassword: Secreto del cliente
- Base URL:
https://api.signagelive.com/v1(configurable viaadapter_config['base_url']). - Token: Lazily loaded en la primera llamada autenticada.
Autenticación OAuth (privado)
- Endpoint:
POST /token - Payload:
client_id=<id>&client_secret=<secret>(form data) - Respuesta: JSON con
access_token→ guardado enself._token. - Headers posteriores:
Authorization: Bearer <token>. - Timeout: 15s; si falla, retorna error dict.
get_status() → dict
- Endpoint:
GET /players - Lógica: Lista players en la red, toma el primero.
- Campos esperados en respuesta:
itemsoplayers(array)- Cada player:
online,status,current_media,firmware_version
- Retorna: Dict con:
online: boolplayback_state: str(del campostatus)current_content: str(del campocurrent_media)firmware: struptime: int(0 — no disponible)
push_content(file_path, destination="") → bool
- Entrada: Ruta local del archivo, nombre remoto opcional.
- Pre-requisito: Token válido (re-autentica si es necesario).
- Endpoint:
POST /media - Payload: multipart form-data con:
name: Nombre del asset (destination si se proporciona, senó basename)file: Contenido binario
- Headers:
Authorization: Bearer <token>(derivado de_auth_headers()) - Retorna:
Truesi HTTP 200–201,Falseen error. - Timeout: 120s para upload.
set_playlist(playlist_data) → bool
- Endpoint:
POST /playlists - Entrada: Dict JSON con estructura Signagelive (campos según doc oficial).
- Auth: Bearer token.
- Retorna:
Truesi sin error.
set_schedule(schedule_data) → bool
- Endpoint:
POST /schedules - Entrada: Dict JSON con reglas de horario.
- Retorna:
Truesi sin error.
get_playback_logs(since="") → list
- Endpoint:
GET /proof-of-play - Parámetro opcional:
since(timestamp). - Respuesta: JSON con
items(array de registros de reproducción). - Retorna: Lista de dicts con eventos de reproducción.
Fuentes de datos y llamadas HTTP
| Método | Endpoint | Auth | Descripción |
|---|---|---|---|
| POST | /token | Credenciales form-data | Exchange para obtener Bearer token |
| GET | /players | Bearer | Lista de players, toma primero para status |
| POST | /media | Bearer | Upload multipart de contenido |
| POST | /playlists | Bearer | Crear/actualizar playlist |
| POST | /schedules | Bearer | Crear/actualizar schedule |
| GET | /proof-of-play | Bearer | Logs de reproducción probada |
Todas las llamadas usan aiohttp con timeout de 15s (exceptuando upload, que es 120s).
Manejo de autenticación
- Lazy loading: Token se obtiene solo cuando es necesario (primera llamada autenticada).
- Cache: Una vez obtenido, se reutiliza en las siguientes llamadas (no re-autentica cada vez).
- Error handling: Si el exchange falla, retorna un dict con clave
error.
Estado de verificación
⚠ NO verificado contra hardware real ni contra una cuenta Signagelive activa. Endpoints y estructura de payloads siguen la documentación pública de Signagelive (https://build.signagelive.com/network-api/ + https://support.signagelive.com/), pero nombres exactos de campos en DTOs pueden requerir ajuste fino al probar contra una red real.
Documentación oficial
- https://build.signagelive.com/network-api/
- https://support.signagelive.com/en/articles/137709-how-to-upload-content-to-signagelive
Véase también
- [[feature—signage—hito-b-honestidad-adapters]]
- [[entity—signage—service—adapter-registry]]
- [[entity—signage—model—signage-vendor-adapter]]
- [[entity—signage—service—yodeck-adapter]]
- [[entity—signage—service—iadea-adapter]]
- [[entity—signage—service—generic-snmp-adapter]]