Control4 · Zigbee · interoperabilidad

Le escribimos en la pantalla a un control remoto Control4, sin su procesador

Pusimos un juego a correr en la pantalla de un SR-260, manejado con las teclas del propio remoto, con cero equipos Control4 en la red. El juego es la excusa: lo que se probó es que esa pantalla es un destino de escritura legítimo desde Home Assistant. Y de la prueba salió algo que no existía en ninguna parte — la hoja de datos de esa pantalla.

1

El equipo que quedó sin cerebro

Una instalación Control4 sin controlador —porque se quemó, porque no se renovó la licencia, o porque el integrador que la puso ya no está— deja al dueño con hardware caro que dejó de responder. Los teclados, los dimmers y los remotos siguen ahí, siguen funcionando por radio, y no hay nada que les hable.

La pregunta que abrió esta línea de investigación es directa: ¿se puede rescatar ese hardware? No emulando un controlador, sino hablándole en su propio protocolo desde un sistema abierto.

Lo que hay que probar para que la respuesta sea sí

Que el lazo cierre en las dos direcciones: que el equipo Control4 nos hable, y que nosotros podamos hablarle a él.

2

La mitad que faltaba

La investigación anterior ya había cerrado el sentido de entrada: el botón rojo de un SR-260 enciende un dispositivo SONOFF, de otra marca, sin que exista un procesador Control4 en la instalación. El remoto habla; nosotros escuchamos.

Faltaba la salida, que es la mitad difícil: escribir nosotros en un equipo propietario. Y el mejor destino posible es la pantalla del remoto, porque el resultado se ve — no hay que creerle a un log.

Es la diferencia entre leer un idioma y escribirlo. Lo primero se puede hacer con un diccionario; lo segundo exige entender la gramática.
3

El descriptor miente: el remoto duerme

Cada dispositivo Zigbee publica un descriptor que dice qué sabe hacer. El del SR-260 declara mac_capability_flags = 140, y el bit 3 de ese valor significa receptor siempre encendido: un equipo al que se le puede escribir en cualquier momento.

No lo cumple. Una ráfaga de 30 escrituras con el remoto en reposo falló entera, con casi 15 segundos de espera por intento. Las mismas escrituras entran sin problema mientras el usuario tiene una tecla apretada.

Lo que se midió · 2026
en reposo
0 de 30 escrituras entregadas · ~14,7 s por intento
con tecla apretada
100 % de entrega
tick de tecla sostenida
487 ms ±15 — el protocolo documentado decía 100 ms
techo real
2,05 cuadros por segundo, y lo pone el remoto, no la red

El modelo real

Al remoto solo se le puede dibujar mientras está transmitiendo. Mantener una tecla apretada lo despierta cada 487 ms, y esa es toda la ventana que hay.

Ese dato no es una curiosidad del juego. Es lo que hay que saber antes de intentar cualquier integración con estos remotos: una etiqueta que se manda “cuando pasa algo” no llega, y el sistema parece roto sin estarlo.

4

La pantalla, medida

Ni la documentación de Control4 ni la comunidad tienen esto escrito. Salió de sondear la pantalla carácter por carácter, código por código.

Tabla de caracteres · qué se dibuja y qué no
20-37
38-4F
50-67
68-7E
A1-B8
nada
B9-D0
nada
D1-E8
nada
E9-FF
nada
la fuente tiene el glifo renglón en blanco

El ROM de caracteres se corta en 0x7E. No hay bloques, ni flechas, ni siluetas: cualquier dibujo tiene que hacerse con ASCII.

El resto de la hoja de datos
ancho
No hay ancho en caracteres. La fuente es proporcional y el corte es por píxeles: entran 30 puntos, o 17 mayúsculas
multilínea
El mensaje directo colapsa el salto de línea en un espacio
limpieza
Una escritura no borra la anterior: si el texto nuevo es más corto, la cola del viejo queda en pantalla
prohibidos
" \ ] — el delimitador y el escape del comando; se pierden en la trama
íconos
El byte de ícono no dibuja nada. 84 códigos probados, incluido el que usa un procesador Control4 real

Cada uno de esos renglones costó una prueba, y varios contradicen lo que decía la documentación de la que partimos. Cuando el hardware y el papel no coinciden, gana el hardware.

5

El hallazgo que llegó de mirar el equipo, no el manual

Con una sola línea de texto y sin glifos gráficos, el resultado iba a ser pobre. La documentación del protocolo tenía además una advertencia: no usar el menú de listas, porque suprime los eventos de los botones.

La advertencia era exagerada, y casi mata el mejor diseño. Suprime dos teclas, no todas. El disparador para revisarla fue una observación de sentido común: con un procesador Control4 de verdad, la tecla Watch del remoto muestra una lista de fuentes en varios renglones. Si el equipo sabe hacer eso, se puede usar.

Lo que se midió al probarlo
renglones
Tres: un título de texto libre más dos filas
teclas
Siguen emitiendo eventos con la lista en pantalla, sin pérdidas
velocidad
489 y 493 ms entre repintados — idéntica al mensaje directo
regalo
La fila seleccionada se dibuja en video inverso: una barra sólida, gratis

Por qué importa más que el juego

Tres renglones de texto libre y una barra de resalte, repintables dos veces por segundo, es una interfaz de usuario completa en un equipo que se creía de solo lectura.

6

El resultado, en la pantalla del remoto

Cuadro a cuadro · lo que se ve en el LCD
DINO 95 2/2
d
Y
DINO 96 2/2
d Y

La barra blanca es el piso: es la fila seleccionada del menú, dibujada en video inverso por el propio remoto. El dino salta cambiando de renglón, y el cactus le pasa por debajo.

Pantalla del control remoto Control4 SR-260 mostrando el juego en marcha, con el marcador en 42

Cómo se juega

sostener Play
Correr — cada despertar del remoto avanza el mundo un paso
soltar Play
Saltar, y el mundo avanza también
OFF
Apagar el juego y limpiar la pantalla

No se juega con el botón rojo: ese es una de las teclas que cierran cualquier lista en pantalla. Se descubrió chocando contra ello.

Demo sobre hardware real

Banco propio: un SR-260, un coordinador Zigbee genérico y Home Assistant. Ningún equipo Control4 más.

7

Qué se lleva de acá un integrador

El juego no le sirve a nadie en producción. Lo que sirve es lo que hizo falta para construirlo:

rescate
Un sitio con Control4 huérfano puede seguir operando desde un sistema abierto, con sus teclados y remotos vivos y con la pantalla usable
diagnóstico
Saber que el remoto duerme y que solo recibe al transmitir explica fallas que de otro modo parecen “el equipo está roto”
interfaz
Tres renglones escribibles convierten al remoto en un display de estado para cualquier sistema, no solo para Control4
método
Todo está medido en hardware propio, con los números y las condiciones anotados. Se puede repetir

El código es libre y está publicado, con la lógica del juego separada de la parte de red: 26 pruebas automáticas corren sin radio, sin Home Assistant y sin remoto. Tres de esas pruebas existen por errores encontrados sobre el hardware real, y están para que no vuelvan.

8

Lo que no afirmamos

Una investigación que exagera su alcance produce decisiones confiadas y equivocadas. Los límites, escritos con la misma letra que los resultados:

un modelo
Verificado en un SR-260. Otros remotos Control4 no están probados
una versión
No afirmamos compatibilidad con cualquier firmware del remoto ni con cualquier coordinador Zigbee
no es un producto
Es un prototipo de investigación sobre hardware propio. No es un driver, ni un instalador, ni una integración soportada
depende de terceros
Los quirks que traducen el protocolo son un proyecto externo con su propia licencia; no se redistribuyen acá

La regla del laboratorio

Si el documento y el hardware no coinciden, gana el hardware: se anota y se corrige el documento. En esta investigación pasó dos veces, y las dos veces el documento estaba mal.

Investigación de interoperabilidad realizada sobre hardware propio, con fines de compatibilidad y soporte técnico. Control4, SR-260 y Snap One se mencionan únicamente para identificar el producto probado de forma independiente. Aurora no está afiliada a Control4 / Snap One ni cuenta con su respaldo. Los quirks de ZHA utilizados derivan de un proyecto externo bajo licencia Apache-2.0 y no se redistribuyen. El código propio de esta investigación es libre bajo licencia MIT.