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),credentialsdict con:api_keyotoken: Token de acceso (GET param)
- Base URL: Construida como
http://{ip}:8080/v2. - Token: Almacenado en
self._tokenpara 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óncurrentContent: Contenido que se está reproduciendofirmwareVersion: Versión del firmware del playeruptime: Tiempo activo (opcional)
- Retorna: Dict con:
online: bool(True si respuesta 200)playback_state: str(del campoplaybackState)current_content: str(del campocurrentContent)firmware: str(del campofirmwareVersion)uptime: int(del campouptime, 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:
Truesi HTTP 200–201,Falseen 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:
Truesi 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:
Truesi 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:
Truesi sin error.
Fuentes de datos y llamadas HTTP
| Método | Endpoint | Auth | Descripción |
|---|---|---|---|
| GET | /app/info | GET param token | Info de la app player |
| PUT | /user-data/<filename> | GET param token | Upload binario de archivo |
| POST | /app/start | GET param token | Iniciar/apuntar playlist o schedule |
| GET | /app/screenshot | GET param token | Captura de pantalla actual |
| POST | /system/reboot | GET param token | Reboot 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
| Aspecto | Yodeck | Signagelive | IAdea |
|---|---|---|---|
| Ubicación | Cloud | Cloud | Local (LAN) |
| Port | 443 (HTTPS) | 443 (HTTPS) | 8080 (HTTP) |
| Auth | Token header | OAuth Bearer | Token GET param |
| Content model | Media + Playlist | Media + Playlist | SMIL scripts |
| Schedule model | Separate endpoint | Separate endpoint | Dentro 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
- https://support.iadea.com/hc/en-us/articles/216221563-REST-API-tutorial
- https://www.a-smil.org/index.php/REST_Push_API
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]]