IoT Devices · Superpantalla
Ejemplos de API de Super Screen: WebSocket LAN
Consulta regiones por WebSocket LAN, correlaciona respuestas con mid y trata tiempos de espera antes de publicar. Los ejemplos usan el protocolo de pantalla, separado de la API de dispositivos.
Antes de ejecutar el ejemplo
Usa Node.js 24 o un cliente WebSocket compatible en la red del reproductor. Confirma el puerto con /ping y define SCREEN_IP, SCREEN_PORT y SCREEN_CONTROL_CODE en el entorno. El código debe ser el de seis dígitos habilitado; no es una clave de /api/iot/v1.
La primera solicitud solo consulta las regiones. El tiempo de ocho segundos es ilustrativo, no una garantía. Imprime la respuesta correlacionada sin registrar URL ni código. Pruébalo en una pantalla de ensayo antes de añadir acciones.
Node.js: listar regiones y correlacionar la respuesta
Guárdalo como screen-query.mjs y ejecuta node screen-query.mjs tras configurar el entorno. mid tiene ocho caracteres y ts está en milisegundos. Las respuestas de otras solicitudes no completan esta.
import { randomBytes } from 'node:crypto';
const host = process.env.SCREEN_IP;
const port = Number(process.env.SCREEN_PORT);
const token = process.env.SCREEN_CONTROL_CODE ?? '';
if (!host || !/^[a-zA-Z0-9.-]+$/.test(host) ||
!Number.isInteger(port) || port < 1 || port > 65535 ||
!/^\d{6}$/.test(token)) {
throw new Error('Set SCREEN_IP, SCREEN_PORT and SCREEN_CONTROL_CODE');
}
const endpoint = new URL(`ws://${host}:${port}/order`);
endpoint.search = new URLSearchParams({ token, rid: 'energy-pilot', rname: 'Energy pilot' }).toString();
const mid = randomBytes(4).toString('hex');
const socket = new WebSocket(endpoint);
let done = false;
function finish(failed) {
if (done) return;
done = true;
clearTimeout(timer);
process.exitCode = failed ? 1 : 0;
socket.close();
}
const timer = setTimeout(() => {
console.error('Reply timeout; verify state before retrying a control action');
finish(true);
}, 8000);
socket.addEventListener('open', () => {
if (!done) socket.send(JSON.stringify({
mid, data: { screen: { action: 'list' } }, ts: Date.now(),
}));
});
socket.addEventListener('message', (event) => {
if (done) return;
let reply;
try { reply = JSON.parse(String(event.data)); } catch { return; }
if (!reply || typeof reply !== 'object' || reply.mid !== mid) return;
console.log(JSON.stringify(reply, null, 2));
finish(reply.ret === 'error');
});
socket.addEventListener('error', () => {
if (!done) console.error('Connection failed; check network, port and control code');
finish(true);
});
socket.addEventListener('close', () => {
if (!done) {
console.error('Connection closed before a correlated reply');
finish(true);
}
});Publica contenido después de consultar la región
Usa una región devuelta por la consulta. Los datos siguientes abren la guía energética del sitio para comprobar conectividad; sustitúyela por tu panel después. Añade mid y ts nuevos para LAN y los campos entregados para nube. No envíes comandos de pantalla a la API de dispositivos.
{"web":{"area":"a1","url":"https://iotdevices.org/zh/solutions/energy-management","interval":60}}
{"web":{"area":"a1"}}Trata errores sin dar por hecha la ejecución
ret: error indica fallos como invalid param, unsupported o device is in remote mode. Un timeout deja el resultado desconocido. Consulta el estado antes de repetir acciones; no dupliques voz u otros efectos. Conserva mid, dispositivo, hora y respuesta depurada, y verifica la pantalla aparte.