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),credentialsdict con:api_keyotoken: Token de API workspaceapi_labelousername(opcional): Prefijo del token para workspaces multi-tenant
- Construcción de headers:
Authorization: Token <label>:<api_key>oToken <api_key>. - Base URL:
https://api.yodeck.com/v1(configurable viaadapter_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(campois_online)playback_state: str(campostatus)current_content: str(camponow_playing)firmware: str(camposoftware_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:
Truesi HTTP 200–201,Falseen 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:
Truesi sin error en la respuesta.
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:
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:
Truesi sin error.
Fuentes de datos y llamadas HTTP
| Método | Endpoint | Auth | Descripción |
|---|---|---|---|
| GET | /monitors/ | Header Token | Lista de players, toma primero para status |
| POST | /media/ | Header Token | Upload multipart de archivo de contenido |
| POST | /playlists/ | Header Token | Crear/actualizar playlist |
| POST | /schedules/ | Header Token | Crear/actualizar schedule |
| GET | /proof-of-play/ | Header Token | Logs de reproducción probada |
| POST | /monitors/reboot/ | Header Token | Reboot 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
- https://www.yodeck.com/docs/user-manual/introducing-yodecks-rest-api-seamless-integration-for-your-digital-signage-needs/
- https://app.yodeck.com/api-docs/
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]]