Control4 · Zigbee · ingeniería inversa · guía paso a paso

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.

RADIO · IEEE 802.15.4 (el aire, 2.4 GHz) RED · Zigbee PRO (la malla, el ruteo) TRANSPORTE · APS (a qué “buzón” llega) LA CARTA · el idioma aquí Control4 es diferente
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.

Sonoff / Hue (estándar) Control4 APLICACIÓN · ZCL 01 42 01 (binario) APLICACIÓN · ASCII propio 0t01 sa c4.zr.bb… ▲ AQUÍ ESTÁ TODA LA DIFERENCIA ▲ APS · transporte APS · transporte NWK · Zigbee PRO NWK · Zigbee PRO RADIO · 802.15.4 RADIO · 802.15.4 estas tres capas son idénticas — mismo Zigbee para todos
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.

👆 Play SR260 EN EL AIRE (texto ASCII) 0t01 sa c4.zr.bb 1d … perfil 0xC25C · cluster 0x0001 📡 antena capta CatSniffer 🧅 pelar los sobres radio → red → APS → payload 🔤 el quirk traduce ASCII C4 → evento estándar 🏠 Home Assistant entiende button = "play" · short_press
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 secuencia sa = verbo: “estado” c4.zr.bb = “botón presionado” 1d = botón 0x1d = Play relleno / 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)
0t01 sa c4.dmx.ls 00 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.

1 Capturar la antena oye el aire 2 Descifrar red con la llave Zigbee 3 Pelar capas quitar los sobres 4 ¡Es texto! reconocer el idioma 5 Diccionario 6 Traducir
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.

entra (idioma Control4) 0t01 sa c4.zr.bb 1d quirk traductor sale (idioma estándar) button="play" · short_press
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.