CreaRack-SL

Servicio Signagelive Adapter — Push de contenido Network API (OAuth)

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), credentials dict con:
    • client_id o username: Identificador del cliente
    • client_secret o api_key o password: Secreto del cliente
  • Base URL: https://api.signagelive.com/v1 (configurable via adapter_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 en self._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:
    • items o players (array)
    • Cada player: online, status, current_media, firmware_version
  • Retorna: Dict con:
    • online: bool
    • playback_state: str (del campo status)
    • current_content: str (del campo current_media)
    • firmware: str
    • uptime: 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: True si HTTP 200–201, False en 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: True si sin error.

set_schedule(schedule_data) → bool

  • Endpoint: POST /schedules
  • Entrada: Dict JSON con reglas de horario.
  • Retorna: True si 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étodoEndpointAuthDescripción
POST/tokenCredenciales form-dataExchange para obtener Bearer token
GET/playersBearerLista de players, toma primero para status
POST/mediaBearerUpload multipart de contenido
POST/playlistsBearerCrear/actualizar playlist
POST/schedulesBearerCrear/actualizar schedule
GET/proof-of-playBearerLogs 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

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]]