Por que importa la bajada
La mayoria de los despliegues de BLE Tag son solo de subida: el tag emite telemetria y la pasarela escucha. Pero un sistema real de seguimiento de activos necesita que la pasarela responda: empujar configuracion, disparar un zumbador, pedir una ubicacion inmediata o revocar una clave. Un BLE Tag que solo emite es la mitad del sistema. Este articulo cubre las tres rutas de bajada y como hacerlas seguras.
Ruta 1: escritura GATT conectada
La pasarela (o un telefono de mantenimiento) abre conexion y escribe una caracteristica de control.
- Intervalo de conexion 7.5-100 ms; para comandos esporadicos, 100-200 ms mantiene bajo el consumo medio.
- Usa una sola caracteristica `Control` (write-without-response para fuego-y-olvida, write para ACK).
- Carga: `[Cmd:1B][Len:1B][Payload:N][CRC:2B]`.
- Coste: un evento de conexion cuesta 3-8 mA durante 1-5 ms; agrupa comandos.
Ruta 2: comando por difusion sin conexion
Para control uno-a-muchos, difunde un comando firmado en un canal ADV dedicado.
ADV: 0x16 (Service Data) UUID propia
Bytes: [Cmd][Seq][TargetMask][Sig:8B]
- Los tags en modo escaneo lo reciben sin conectar; escala a miles.
- Riesgo: replay. Incluye siempre `Seq` monotono y un TTL corto.
Ruta 3: recuperacion periodica (el tag tira)
El tag despierta, escanea un beacon de la pasarela con URL de configuracion y la obtiene por HTTP/CoAP. Menor consumo, mayor latencia.
ACK y reenvio
| Modo | Latencia | Consumo | Escala |
|---|---|---|---|
| GATT write + ACK | baja | medio | 1:1 |
| Broadcast cmd | muy baja | bajo | 1:N |
| Fetch | alta | minimo | N:1 |
Reenvia con backoff exponencial (1s, 2s, 4s); tope 3 intentos.
Seguridad
- Firma todo comando con ECDSA (P-256) con clave de pasarela; el tag verifica antes de actuar.
- Derivacion por tag `K_i = HKDF(master, tag_id)` para que un tag filtrado no falsifique otros.
- Rechaza `Seq` <= ultimo visto.
- Limite: ignora mas de 1 comando por 500 ms por origen.
Presupuesto de bajada
Un tag que escucha comandos por difusion paga coste de escaneo: 3 canales al 100% ~ 5-8 mA. Para durar anos con CR2032, escaneo en ventanas (ej. 200 ms cada 10 s) ~ 0.1 mA medio. Equilibra capacidad y bateria.
Lista practica
- GATT write para mantenimiento 1:1, difusion para actualizaciones masivas.
- Firma y numera siempre los comandos.
- Escaneo en ventanas; nunca 100% en pila boton.
- Prueba replay reenviando un comando antiguo capturado; debe descartarse.
La bajada correcta de BLE Tag es invisible para el usuario, pero decide si tu flota se controla o solo se vigila.