CreaRack-SL

Servicio Yodeck Adapter — Push de contenido API cloud

Descripción

Adapter que integra contenido de CreaRack con la plataforma Yodeck cloud (https://api.yodeck.com/v1). Yodeck es una CMS de digital signage basada en cloud que administra players físicos a través de una API REST documentada.

Ubicación: signage/services/adapters/yodeck.py
Clase: YodeckAdapter(SignageDeviceAdapter)
Método de autenticación: Token en header Authorization: Token <api_token> (Yodeck’s documented scheme)
Método de push: POST /media/ (multipart form-data)

Firma pública

class YodeckAdapter(SignageDeviceAdapter):
    """Yodeck cloud REST API adapter (api.yodeck.com)."""
    
    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
    async def reboot(self) -> bool

Componentes y flujos

Inicialización

  • Entrada: ip (identificador del player en Yodeck, p.ej. el monitor ID), credentials dict con:
    • api_key o token: Token de API workspace
    • api_label o username (opcional): Prefijo del token para workspaces multi-tenant
  • Construcción de headers: Authorization: Token <label>:<api_key> o Token <api_key>.
  • Base URL: https://api.yodeck.com/v1 (configurable via adapter_config['base_url']).

get_status() → dict

  • Endpoint: GET /monitors/ (lista de players del workspace)
  • Lógica: Toma el primer monitor disponible (sin filtrado por IP específico; Yodeck usa monitor IDs internos).
  • Retorna: Dict con:
    • online: bool (campo is_online)
    • playback_state: str (campo status)
    • current_content: str (campo now_playing)
    • firmware: str (campo software_version)
    • uptime: int (0 — no disponible en API)

push_content(file_path, destination="") → bool

  • Entrada: Ruta local del archivo (p.ej. SMIL, vídeo), nombre remoto opcional.
  • Endpoint: POST /media/
  • Payload: multipart form-data con:
    • name: Nombre del media en la plataforma (destination si se proporciona, senó basename del archivo)
    • file: Contenido binario
  • Retorna: True si HTTP 200–201, False en error o timeout (15s).
  • Errores: Logueados en logger.error().

set_playlist(playlist_data) → bool

  • Endpoint: POST /playlists/
  • Entrada: Dict JSON con estructura de playlist Yodeck (campos específicos según doc oficial).
  • Retorna: True si sin error en la respuesta.

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: since (timestamp opcional para filtrar registros posteriores).
  • Retorna: Lista de dicts con eventos de reproducción del media (p.ej. ID, timestamp, duración).

reboot() → bool

  • Endpoint: POST /monitors/reboot/
  • Retorna: True si sin error.

Fuentes de datos y llamadas HTTP

MétodoEndpointAuthDescripción
GET/monitors/Header TokenLista de players, toma primero para status
POST/media/Header TokenUpload multipart de archivo de contenido
POST/playlists/Header TokenCrear/actualizar playlist
POST/schedules/Header TokenCrear/actualizar schedule
GET/proof-of-play/Header TokenLogs de reproducción probada
POST/monitors/reboot/Header TokenReboot del player

Todas las llamadas usan aiohttp con timeout de 15s (exceptuando upload, que es 120s).

Estado de verificación

⚠ NO verificado contra hardware real. Endpoints y estructura de payloads siguen la documentación pública de Yodeck (https://www.yodeck.com/docs/… + https://app.yodeck.com/api-docs/), pero nombres exactos de campos en DTOs pueden requerir ajuste fino al probar contra un workspace/player 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—signagelive-adapter]]
  • [[entity—signage—service—iadea-adapter]]
  • [[entity—signage—service—generic-snmp-adapter]]