SpinetiX HMP Integration Guide — CreaRack Pro
SpinetiX HMP Integration Guide — CreaRack Pro
Dispositivo: SpinetiX HMP400 (firmware 4.9.6, Feature Set “SYSTEMS”) Fecha investigación: 24-03-2026 Estado: ✅ Monitoreo SNMP + ✅ WebDAV upload + ✅ Scheduled Download (contenido en pantalla)
1. Resumen de Capacidades
| Protocolo | Estado | Puerto | Auth | Uso |
|---|---|---|---|---|
| SNMP v2c | ✅ Operativo | 161 | community public | Monitoreo (CPU, memory, uptime, bandwidth) |
| WebDAV PUT/GET/DELETE | ✅ Operativo | 80 | HTTP Basic | Upload/download ficheros en /content/ |
| Scheduled Download | ✅ FUNCIONAL | 80 (destino) | Sin auth (servidor público) | Publicación de contenido en pantalla |
| HTTP Web UI | ✅ Operativo | 80 | Browser-based | Configuración manual del dispositivo |
REST API /api/* | ❌ Error 500 | 80 | — | Requiere proyecto Elementi previo o Feature Set superior |
RPC /rpc | ✅ Operativo (JSON-RPC 1.0) | 80 | HTTP Basic | get_info/get_config/restart verificados vía F12 (s184). Los métodos “inestables” de la evaluación inicial eran nombres INVENTADOS (getSystemInfo, getSnapshot… no existen en el HMP) |
Status API /status/* | ✅ Operativo | 80 | HTTP Basic | GET /status/info (XML de salud; anuncia <screen><snapshotURI>) + GET /status/snapshot (JPEG de la pantalla actual) — base de los screenshots F5.3 por el bus |
| Network API | ❌ No útil | 1234 | — | Protocolo propietario para SpinetiX Fusion/ARYA |
| WebDAV PROPFIND | ❌ Timeout | 80 | — | Listar directorio no soportado |
2. SNMP — Monitoreo (Integrado)
OIDs del SpinetiX HMP400
Deep Discovery (one-time scan) — 6 categorías:
system(6 items): sysDescr, sysObjectID, sysName, sysLocation, sysContact, sysUpTimecpu(2 items): hrProcessorLoad (index 196608, NO index 1)host(4 items): hrSystemUptime, hrSystemDate, hrSystemNumUsers, hrSystemProcessesmemory(100 items): hrStorage walk completostorage(60 items): hrStorageDescr/Size/Used (Physical memory, Virtual, mounts/,/srv, etc.)interfaces(12 items): lo, eth0, sit0
Sentinel Polling (continuo cada 10-15s):
cpu_usage: OID1.3.6.1.2.1.25.3.3.1.2.196608(type gauge) — INDEX 196608memory_usage: OID1.3.6.1.2.1.25.2.3.1.6.1(type gauge, valor en KB raw)
Métricas en VictoriaMetrics (target_id=290):
snmp_extras_cpu_usage— % CPUsnmp_extras_memory_usage— KB memoria usada (raw)snmp_bandwidth_in_mbps/snmp_bandwidth_out_mbpsping_latency_ms/ping_packet_loss_percent
Particularidades
- hrProcessorLoad index 196608: No estándar. Deep discovery walk lo encuentra pero monitoring_oid debe apuntar al index exacto (migración 0044).
- memory_usage en KB raw: Frontend calcula % desde hrStorageSize/Used de “Physical memory” en stat cards.
- Null bytes
\u0000: Datos SNMP pueden contener null bytes.sentinel.pylos sanitiza antes de guardar en PostgreSQL jsonb. - sysObjectID:
1.3.6.1.4.1.29888.1.8(PEN 29888 = SpinetiX SA)
3. Scheduled Download — Publicación de Contenido (✅ CONFIRMADO)
Descubrimiento clave (24-03-2026)
El SpinetiX HMP descarga contenido desde un servidor HTTP externo via la función “Scheduled Download” (Control Center → Content → Scheduled Download).
Protocolo
- El SpinetiX envía
OPTIONS /(puede devolver 501, no afecta) - El SpinetiX descarga
GET /spx-listing.xml— índice de ficheros en formato WebDAV DAV:multistatus - El SpinetiX descarga cada fichero listado (
GET /project.svg,GET /imagen.jpg, etc.) - El SpinetiX ejecuta
project.svgcomo contenido principal en pantalla
Formato de spx-listing.xml
<?xml version="1.0" encoding="UTF-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/</D:href>
<D:propstat>
<D:prop>
<D:resourcetype><D:collection/></D:resourcetype>
<D:getlastmodified>2026-03-24T10:00:00Z</D:getlastmodified>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response>
<D:href>project.svg</D:href>
<D:propstat>
<D:prop>
<D:getcontentlength>512</D:getcontentlength>
<D:getcontenttype>image/svg+xml</D:getcontenttype>
<D:getlastmodified>2026-03-24T10:00:00Z</D:getlastmodified>
<D:getetag>"512-1711270800"</D:getetag>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response>
<D:href>imagen.jpg</D:href>
<D:propstat>
<D:prop>
<D:getcontentlength>2520521</D:getcontentlength>
<D:getcontenttype>image/jpeg</D:getcontenttype>
<D:getlastmodified>2026-03-24T10:00:00Z</D:getlastmodified>
<D:getetag>"2520521-1711270800"</D:getetag>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
Formato de project.svg
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:spx="http://www.spinetix.com/namespace/1.0/spx"
width="1920" height="1080" viewBox="0 0 1920 1080"
spx:displayDuration="indefinite">
<rect width="1920" height="1080" fill="black"/>
<image x="0" y="0" width="1920" height="1080"
xlink:href="imagen.jpg"
preserveAspectRatio="xMidYMid meet"/>
</svg>
Configuración en el SpinetiX
- Control Center → Content → Scheduled Download
- Server URI: URL del servidor de contenido (ej:
https://crearack.com/signage/player/42/) - Update: Manual / Hourly / Daily
- Click Apply
ETags y Smart Pull
El SpinetiX usa HTTP ETags y Last-Modified para detectar cambios. Solo descarga ficheros nuevos o modificados. El spx-listing.xml debe incluir ETags correctos para que el pull sea eficiente.
4. WebDAV — Upload Directo via Agent
Endpoints confirmados (puerto 80)
| Método | URL | Status | Descripción |
|---|---|---|---|
PUT | /content/{filename} | 201 Created | Subir fichero |
GET | /content/{filename} | 200 OK | Descargar fichero |
DELETE | /content/{filename} | 204 No Content | Eliminar fichero |
PROPFIND | /content/ | ❌ Timeout | No soportado |
Autenticación
- HTTP Basic:
admin:password(Base64 en headerAuthorization)
Pipeline de deploy (implementado)
CreaRack SaaS → Browser descarga media → POST Agent /signage/upload → Agent WebDAV PUT → SpinetiX /content/
Nota: Los ficheros en /content/ NO se muestran automáticamente en pantalla. Solo se reproducen si un proyecto (project.svg) los referencia. Para mostrar contenido se usa Scheduled Download (sección 3).
5. Arquitectura de Publicación para CreaRack (Plan)
Objetivo
CreaRack como CMS completo de señalización digital — sin depender de Elementi ni Cockpit.
Flujo de publicación transparente
Usuario sube media en CreaRack (Content tab)
↓
CreaRack genera project.svg + spx-listing.xml dinámicamente
↓
CreaRack sirve como servidor HTTP (endpoint público por player)
↓
SpinetiX descarga automáticamente via Scheduled Download
↓
Contenido visible en pantalla
Endpoints necesarios en CreaRack
| Endpoint | Propósito |
|---|---|
GET /signage/player/{player_id}/spx-listing.xml | Índice WebDAV dinámico |
GET /signage/player/{player_id}/project.svg | Proyecto SVG generado |
GET /signage/player/{player_id}/{filename} | Media assets |
GET /signage/portal/{token}/ | Portal de cliente con token |
Configuración one-time del SpinetiX
Solo necesita hacerse una vez por dispositivo:
- Crear SignagePlayer en CreaRack vinculado al DeviceProfile
- CreaRack genera URL única:
https://crearack.com/signage/player/{id}/ - Configurar en SpinetiX → Content → Scheduled Download → Server URI = esa URL
- Update: Hourly (o webhook para push inmediato)
Portal de clientes (futuro)
- CreaRack genera token único por cliente
- URL:
https://crearack.com/signage/portal/{token}/ - El cliente sube imágenes/vídeos directamente
- CreaRack regenera
project.svg+spx-listing.xml - El SpinetiX descarga automáticamente en el siguiente ciclo
6. RPC y Status API — la realidad verificada (s184, F12 contra un HMP400 real)
CORRECCIÓN (03-07-2026): la evaluación inicial de esta sección (“RPC inestable, no usar”) era errónea — probaba métodos con nombres inventados que el HMP nunca ha expuesto (
getSystemInfo,getNetworkStatus,getSnapshot,content.list…). La API real se verificó por F12 en s184 y es la base de los screenshots F5.3 en PROD (terminal/agent/network/signage_ops.py).
RPC (JSON-RPC 1.0)
- URL:
http://{ip}/rpc· POST · Content-Typeapplication/json - Formato:
{"method": "nombre", "params": {}, "id": 1}(JSON-RPC 1.0 — sin campojsonrpc; con"jsonrpc":"2.0"el HMP rechaza) - Métodos reales verificados:
get_info(modelo, firmware, uptime, serial),get_config,restart.
Status API
GET /status/info— XML de salud del player; anuncia la URI del screenshot en<screen><snapshotURI>.GET /status/snapshot— JPEG de lo que la pantalla muestra AHORA (no existe/screenshot). Es lo que usa el Agente para las capturas por el bus DeviceOps (cada 30 min + bajo demanda).
Lo que NO existe
- Proof-of-play: ni la RPC ni la Status API devuelven “qué se reprodujo y cuándo” — eso vive solo en los logs internos del player. El “proof-of-play” de CreaRack son los screenshots periódicos.
Recomendación vigente: Scheduled Download para contenido · SNMP para monitoreo · Status API para screenshots/salud · RPC 1.0 para info y restart.
7. REST API /api/* — No funcional
Todos los endpoints /api/media/, /api/playlist/, /api/playout/, /api/schedule/, /api/project/ devuelven 500 Internal Error. El código JavaScript spx-api.js (37KB) define estos endpoints pero la API interna no se inicializa sin un proyecto Elementi previo o Feature Set superior.
POST /api/publish devuelve 500, POST con XML devuelve 400. La API existe pero su backend interno no arranca.
8. Configuración del SpinetiX
Panel: Control Center (http://{ip}/)
Menú lateral:
- System, Display & Audio, Network, Content, Peripherals
- Advanced Applications: Interactivity, Touchscreen, Network API, APIs Security, Multiscreen, Firmware, RPC Concentrator, Pull Mode, Output Streaming, WebRTC
- Operations, Logs, About
Configuración requerida para CreaRack
- SNMP: Network → SNMP → Enable, community
public - Scheduled Download: Content → Scheduled Download → Server URI = URL de CreaRack
- CORS (opcional): Advanced Applications → APIs Security → Enable CORS requests
Configuración NO requerida
- Network API (puerto 1234) — solo para Fusion/ARYA
- Enable secure server / legacy unprotected server — no afecta a Scheduled Download
- RPC Concentrator — no necesario
9. Scripts de Test
Ubicación: static/downloads/
| Script | Propósito |
|---|---|
spx_rpc_test.py | Test RPC + WebDAV (PUT/GET/PROPFIND/DELETE) |
spx_rpc_test2.py | Probe de ~48 métodos RPC |
spx_rpc_test3.py | Test seguro de métodos confirmados |
spx_serve_project.py | Servidor HTTP local que sirve proyecto SpinetiX (spx-listing.xml + project.svg + media) |
spx_publish_probe.py | Probe de endpoints /api/publish |
spx_api_create.py | Test REST API media/playout/schedule |
spx_controlcenter.py | Probe de páginas del Control Center |
spx_download_api.py | Descarga y analiza spx-api.js |
spx_find_ui.py | Busca páginas con spx-api.js |
spx_port1234_test.py | Test de Network API puerto 1234 |
spx_inspect_api.py | Inspección de JS del SpinetiX |
spx_extract_playout.py | Extrae código de playout de spx-api.js |
spx_discover.js | Discovery desde consola F12 del browser |
10. Migraciones relacionadas
| Migración | Cambio |
|---|---|
0036_av_digital_signage_profiles | SpinetiX vendor profile inicial |
0043_enrich_av_deep_discovery_oids | Añade cpu, memory, host, sysUpTime |
0044_fix_spinetix_cpu_monitoring_oid | CPU OID index .1 → .196608 |
11. Agent v2.0.18
Nuevas routes para signage deploy:
| Endpoint | Método | Propósito |
|---|---|---|
/signage/deploy | POST | Deploy via URLs (Agent descarga + WebDAV PUT) |
/signage/upload | POST | Deploy via multipart (browser envía file + Agent hace WebDAV PUT) |
Mantenido por: Claude (Anthropic) + Equipo CreaRack Última actualización: 24-03-2026
Véase también
- [[crearack-tech—agents—dev-signage]] — agente técnico de Signage
- [[crearack-tech—guides—digital-signage-guide]] — guía de Digital Signage
- [[concept—signage—deployment]] — deployment de signage en pantallas
- [[entity—signage—model—signageplayer]] — modelo SignagePlayer
- [[entity—signage—model—mediaasset]] — modelo MediaAsset
- [[crearack—signage—que-es-signage]] — qué es Digital Signage