Cómo Control4 “enmascara” su Zigbee — y cómo lo desciframos
Control4 no usa una red secreta. Usa el mismo Zigbee que Philips Hue o
Sonoff. Lo único que cambia es el idioma que habla en la última capa. Esta es la
explicación completa, con los bytes reales que capturamos en el laboratorio.
1
La idea en una frase
Toda red Zigbee funciona como sobres metidos dentro de sobres. Cada sobre es una
“capa” que envuelve al siguiente. Control4 usa exactamente los mismos sobres que todos…
hasta el último. En el sobre más interno, donde las demás marcas escriben en un idioma
estándar, Control4 escribe en su propio idioma privado.
Las 3 capas exteriores son idénticas en toda marca Zigbee. Solo cambia la carta del centro.
2
Las cuatro capas, lado a lado
Este es el diagrama clave de todo. A la izquierda, cualquier dispositivo Zigbee normal
(un Sonoff, un Hue). A la derecha, Control4. Las tres primeras capas son iguales.
Solo la de arriba —el idioma de aplicación— es distinta.
El “misterio” de Control4 vive en una sola capa. El radio y la malla son estándar.
Analogía: es el mismo sobre, el mismo cartero y la misma dirección
que usa todo el mundo. Pero adentro, la carta está escrita en un idioma que solo el
controlador Control4 (el “Director”) sabe leer.
3
Un comando real, de punta a punta
Sigamos un botón real: apretás Play en el control remoto SR260. Esto es lo
que pasa de verdad, paso por paso — cada dato de acá salió de nuestro laboratorio.
Del dedo al evento: el mismo dato cruza seis pasos. El “ajá” está en el recuadro azul de arriba.
4
Los 40 bytes por dentro
Esta es la trama del botón Play tal cual viaja, byte por byte. Fijate que casi todo
es texto que un humano puede leer — esa fue la sorpresa. Cada color es un campo con su
significado.
30
0
74
t
30
0
31
1
20
·
73
s
61
a
20
·
63
c
34
4
2e
.
7a
z
72
r
2e
.
62
b
62
b
20
·
31
1
64
d
20
·
30
0
30
0
30
0
30
0
20
·
30
0
30
0
30
0
30
0
20
·
30
0
30
0
30
0
30
0
30
0
30
0
30
0
30
0
0d
\r
0a
\n
0t = tipo: “anuncio”01 = número de secuenciasa = verbo: “estado”c4.zr.bb = “botón presionado”1d = botón 0x1d = Playrelleno / fin de línea
0t
Tipo de mensaje. “0t” = announce: el dispositivo avisa algo sin que se lo pidan. (Otros: 0s=set, 0g=get, 0r=report.)
01
Número de secuencia. Para llevar la cuenta de los mensajes.
sa
Verbo. “sa” = state announcement, un anuncio de estado.
c4.zr.bb
El namespace.zr = zigbee remote, bb = button begin (tecla que baja). Es el “sustantivo + acción”.
1d
El argumento. 0x1d en hexadecimal = 29 = la tecla Play en el mapa de 50 botones.
5
Cómo “cambia el idioma”
Acá se ve el truco entero. Para la misma acción, mirá qué manda un dispositivo
estándar contra qué manda Control4. No es que Control4 esté cifrado — es que habla otro
idioma, uno de texto en vez de códigos binarios.
Zigbee estándar (ZCL)
01 42 01
Tres bytes binarios. 01=cabecera,
42=secuencia, 01=comando “On”. Ilegible sin la tabla ZCL.
Compacto, pero opaco.
Control4 (ASCII propio)
0t01sac4.dmx.ls00 00 64
Texto legible. c4.dmx.ls = “light
state” (estado de luz), 64 = 100 en decimal = brillo al 100%. Más largo,
pero es literalmente un idioma con palabras.
Por qué lo hicieron así: un protocolo de texto es fácil de depurar
y de extender para el fabricante — agregás una “palabra” nueva sin romper nada. El costo es
que nadie más lo entiende… hasta que alguien arma el diccionario. Que es lo que hicimos.
6
Cómo lo desciframos nosotros (al revés)
Ingeniería inversa = ir de la trama al significado, sin manual. Estos son los seis
pasos que seguimos, y en qué punto estamos.
Pasos 1, 3 y 4 ya hechos en el lab (con capturas reales). El paso 2 sobre el EA-1 espera su llave. Pasos 5–6 = el repo de quirks.
1 · Capturar
El CatSniffer en modo monitor guarda cada trama del aire. Hecho — tenemos capturas en canal 13 y 14.
2 · Descifrar
La capa de red va cifrada con la llave Zigbee. En nuestra red la tenemos; en la del EA-1 hay que recuperarla (el gran pendiente de la Fase 3).
3 · Pelar
Wireshark + nuestro disector quitan radio→red→APS y dejan el contenido crudo. Hecho.
4 · Reconocer
El contenido no es ZCL binario: es texto ASCII legible. Ese fue el hallazgo que lo abre todo.
5 · Diccionario
Apretar cada botón, ver qué trama sale, y anotarlo. Así se arma el mapa de los 50 botones y los ~50 verbos.
6 · Traducir
El quirk convierte cada frase C4 en el evento estándar que Home Assistant entiende, en vivo.
7
La traducción final
El último paso, concreto: la frase de Control4 entra por un lado, y sale como un evento
que cualquier automatización de Home Assistant puede usar — sin saber ni una palabra
de Control4.
El quirk es un diccionario ejecutable. Traduce en ambos sentidos: eventos que entran y comandos que salen.
Lo que hay que llevarse
Control4 nunca escondió su red — usa el Zigbee de todos. Escondió su vocabulario,
en la última capa. Y un vocabulario no se rompe: se aprende, apretando botones y
anotando qué sale.
Por eso el mismo método sirve para cualquier marca “cerrada”:
el candado casi nunca está en la radio. Está en quién tiene el diccionario — y en quién
controla el coordinador.
▶
La prueba, en hardware real
Todo lo anterior, funcionando. Se aprieta el botón rojo de Control4 en el remoto SR260 —
y un módulo Sonoff (otra marca, incompatible con Control4) se enciende. El único puente es
Home Assistant con los quirks traduciendo el protocolo, sin ningún controlador Control4.
Demo de ~60 s, sin audio, con subtítulos.
Botón Control4 → Sonoff: dos marcas incompatibles hablando por los quirks.
El detalle completo —flasheo del CatSniffer, los quirks, el cableado,
el emparejamiento y la automatización— está en
la instalación
paso a paso →
Laboratorio Control4 Zigbee · datos y bytes tomados de capturas reales y del análisis del código.
Ingeniería inversa independiente, con fines de investigación e interoperabilidad. No afiliado a
Control4 / Snap One.