CreaRack-SL

Servicio IAdea Adapter — Push de contenido REST local (SMIL)

Descripción

Adapter que integra contenido de CreaRack con players IAdea locales (http://<ip>:8080/v2). IAdea es un fabricante de media appliances (players SMIL) que exponen una API REST local en el puerto 8080. A diferencia de Yodeck y Signagelive, es un endpoint local (LAN), no cloud.

Ubicación: signage/services/adapters/iadea.py
Clase: IAdeaAdapter(SignageDeviceAdapter)
Base URL: http://<ip>:8080/v2 (puerto local, IP del player)
Autenticación: Token en parámetro GET (?access_token=...)
Método de push: PUT /user-data/<filename> (raw binary)

Firma pública

class IAdeaAdapter(SignageDeviceAdapter):
    """IAdea SMIL player local REST API adapter (port 8080, token GET param)."""
    
    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 take_screenshot(self) -> bytes | None
    async def reboot(self) -> bool

Componentes y flujos

Inicialización

  • Entrada: ip (dirección IP del player en la LAN), credentials dict con:
    • api_key o token: Token de acceso (GET param)
  • Base URL: Construida como http://{ip}:8080/v2.
  • Token: Almacenado en self._token para reutilizar en todas las llamadas.

Parámetros GET (privado)

  • Método _params(extra=None): Construye dict {"access_token": self._token, ...extra}.
  • Aplicado a todas las llamadas HTTP como parámetro GET.

get_status() → dict

  • Endpoint: GET /app/info (con token GET param)
  • Lógica: Consulta información de la aplicación player.
  • Campos esperados en respuesta:
    • playbackState: Estado actual de reproducción
    • currentContent: Contenido que se está reproduciendo
    • firmwareVersion: Versión del firmware del player
    • uptime: Tiempo activo (opcional)
  • Retorna: Dict con:
    • online: bool (True si respuesta 200)
    • playback_state: str (del campo playbackState)
    • current_content: str (del campo currentContent)
    • firmware: str (del campo firmwareVersion)
    • uptime: int (del campo uptime, default 0)

push_content(file_path, destination="") → bool

  • Entrada: Ruta local del archivo (p.ej. SMIL, vídeo), nombre remoto opcional.
  • Endpoint: PUT /user-data/<remote_name>?access_token=...
  • Payload: Contenido binario crudo del archivo.
  • Lógica: Lee el archivo localmente, envía PUT con datos binarios.
  • Retorna: True si HTTP 200–201, False en error o timeout (120s).
  • Errores: Logueados.

set_playlist(playlist_data) → bool

  • Endpoint: POST /app/start
  • Entrada: Dict JSON con estructura de playlist (típicamente contiene URL de SMIL index).
  • Nota: IAdea es SMIL-driven; la “playlist” es realmente el SMIL que apunta el player.
  • Retorna: True si sin error en respuesta.

set_schedule(schedule_data) → bool

  • Endpoint: POST /app/start
  • Entrada: Dict JSON con datos de schedule.
  • Nota: Schedule en IAdea se expresa dentro del documento SMIL, no como endpoint separado.
  • Retorna: True si sin error.

take_screenshot() → bytes | None

  • Endpoint: GET /app/screenshot?access_token=...
  • Retorna: Contenido binario de la captura (típicamente PNG), o None si falla.
  • Timeout: 15s.

reboot() → bool

  • Endpoint: POST /system/reboot?access_token=...
  • Retorna: True si sin error.

Fuentes de datos y llamadas HTTP

MétodoEndpointAuthDescripción
GET/app/infoGET param tokenInfo de la app player
PUT/user-data/<filename>GET param tokenUpload binario de archivo
POST/app/startGET param tokenIniciar/apuntar playlist o schedule
GET/app/screenshotGET param tokenCaptura de pantalla actual
POST/system/rebootGET param tokenReboot del player

Todas las llamadas usan aiohttp.TCPConnector(force_close=True) para evitar problemas de conexión con dispositivos embebidos. Timeouts: 15s (default), 120s (upload).

Diferencias respecto a Yodeck / Signagelive

AspectoYodeckSignageliveIAdea
UbicaciónCloudCloudLocal (LAN)
Port443 (HTTPS)443 (HTTPS)8080 (HTTP)
AuthToken headerOAuth BearerToken GET param
Content modelMedia + PlaylistMedia + PlaylistSMIL scripts
Schedule modelSeparate endpointSeparate endpointDentro del SMIL

Estado de verificación

⚠ NO verificado contra hardware real. Endpoints y semantics siguen la documentación pública de IAdea (REST API tutorial + A-SMIL REST Push API), pero:

  • Exactitud de nombres de campos en respuestas JSON
  • Semántica de chunked upload para archivos grandes
  • Compatibilidad con modelos específicos de IAdea

…requieren validación contra un dispositivo 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—signagelive-adapter]]
  • [[entity—signage—service—generic-snmp-adapter]]