Hito B · Honestidad de Adapters Signage (push real vs monitor-only)
Resumen
Segunda iniciativa del Plan Hardening post-Máster. Declara honestamente qué vendors de digital signage pueden enviar contenido a través de una API REST pública integrable, frente a aquellos que solo se monitorizan (SNMP) y controlan (display protocols), pero cuyo contenido se gestiona por su propio portal.
Hasta esta sesión (s96), el catálogo de adapters decía soportar push de contenido en los 12 vendors, pero solo 4 lo hacían de verdad. Los otros 8 resolvían a un fallback silencioso que reportaba éxito pero el contenido se perdía (Regla 13 “no fakes”).
Cambios principales
Nuevos Adapters con Push Real
Se implementan 3 adapters con integración de push de contenido real contra APIs REST públicas:
-
Yodeck (
signage/services/adapters/yodeck.py)- API:
https://api.yodeck.com/v1 - Auth: Token (header
Authorization: Token <api_token>) - Push:
POST /media/(formulario multipart) - Endpoints:
/monitors/,/playlists/,/schedules/,/proof-of-play/
- API:
-
Signagelive (
signage/services/adapters/signagelive.py)- API:
https://api.signagelive.com/v1 - Auth: OAuth (POST
/token→ Bearer token) - Push:
POST /media(FormData con file + name) - Endpoints:
/players,/media,/playlists,/schedules,/proof-of-play
- API:
-
IAdea (
signage/services/adapters/iadea.py)- API:
http://<ip>:8080/v2(local) - Auth: Token (GET param
?access_token=...) - Push:
PUT /user-data/<filename>(raw binary) - Endpoints:
/app/info,/app/start,/app/screenshot,/system/reboot
- API:
⚠ Nota crítica: Ninguno de los 3 adapters ha sido verificado contra hardware real. Se han construido siguiendo la documentación oficial de cada fabricante y validados con tests automáticos (mocks de aiohttp), pero requieren ajuste fino al probar en un equipo real.
Vendors marcados como Monitor-Only
Se marca honestamente como push_content: False y content_push_method: 'none' cinco vendors que no exponen una API REST pública de push de contenido:
- Crestron: XiO Cloud es device-management (≤1 req/5 min), no CMS.
- Philips: SICP/CMND son protocolos de control/display, no upload. Portal CMND es privado.
- Barco: TransForm N es CMS de control rooms, sin API de push de contenido en el dispositivo.
- Christie: Sin evidencia de API de push de contenido disponible.
- NEC/Sharp: SoC Android + SDK privado; contenido gestiona solo por su portal/SDK partner.
Estos 5 conservan toda su funcionalidad de monitorización (SNMP) y control (PJLink/MDC/LG/SICP/CIP); solo dejan de aparentar un push que nunca ocurría.
Cambios en Registry
signage/services/adapters/registry.py:
- Eliminado fallback silencioso: Antes, cualquier slug desconocido resolvía a
GenericSNMP, cuyopush_content()devolvíaFalsesin avisar. Ahora, un slug no registrado lanzaValueErrorexplícitamente. - Mapeo explícito de 12 vendors:
- 7 con push real:
spinetix,brightsign,samsung,lg,yodeck,signagelive,iadea - 5 monitor-only (resuelven a
GenericSNMP):crestron,philips,barco,christie,nec_sharp - 1 genérico:
generic_snmp
- 7 con push real:
- Helper
supports_real_push(slug: str) -> bool: Consulta la lista blanca de pushes reales. Usado por la API para indicar a la UI cuáles vendors pueden desplegar contenido.
Cambios en API
signage/api/players.py, endpoint list_adapters:
- Añade un campo
push_implemented: boola cada vendor en la respuesta. - Derivado del registry mediante
supports_real_push(slug). - Permite a la UI mostrar claramente qué vendors aceptan contenido vs. cuáles no.
signage/api/schemas.py, VendorAdapterOut:
- Nuevo campo
push_implemented: bool(default False). - Documentado como derivado del registry, distingue push real de status-only.
Migration
signage/migrations/0011_honest_monitor_only_adapters.py:
RunPythonque marca los 5 monitor-only concapabilities['push_content'] = Falseycontent_push_method = 'none'.- Reverse restaura los flags originales del seed 0002 (reversible).
Tests
tests/signage/test_adapters.py (16 nuevos tests):
- Registry sin fallback silencioso: slug desconocido →
ValueError. - Vendors monitor-only resuelven a
GenericSNMP. supports_real_push()retorna el valor correcto.- Los 3 adapters nuevos hacen un mock call al endpoint documentado (sin hardware).
Impacto al usuario
- Pantallas existentes (SpinetiX, BrightSign, Samsung, LG): Sin cambios funcionales; siguen enviando contenido como antes.
- Nuevos vendors de push (Yodeck, Signagelive, IAdea): Ahora disponibles. ⚠ Sin verificación E2E contra hardware real; el equipo operativo debe probar contra un dispositivo físico antes de usar en producción.
- Pantallas “monitor-only” (Crestron, Philips, Barco, Christie, NEC/Sharp): Dejan de prometer falsa capacidad de push. Siguen siendo válidas para monitorización (SNMP) y control (display protocols).
- API del UI: El campo
push_implementedpermite a la interfaz alertar si el usuario intenta enviar contenido a un vendor que no lo soporta.
Vías futuras
- Philips CMND: Posible integración si se negocia acceso al developer program.
- NEC/Sharp: Posible integración si se decide invertir en soporte del SDK del SoC Android.
Véase también
- [[entity—signage—service—yodeck-adapter]]
- [[entity—signage—service—signagelive-adapter]]
- [[entity—signage—service—iadea-adapter]]
- [[entity—signage—service—adapter-registry]]
- [[entity—signage—model—signage-vendor-adapter]]
- [[concept—signage—honestidad-api]]
- [[concept—product—regla-no-fakes]]