Corro en una NordicTrack T5, que no es nueva pero tampoco tan vieja, y como todo lo demás en mi casa, la quería en Home Assistant. Velocidad, inclinación, tiempo, todo, apareciendo solo en el momento en que me subo a la banda. Qué tan difícil podía ser. Habla Bluetooth, lo dice ahí mismo en la caja.
Bueno.
La mayoría de las caminadoras son fáciles. La mía no.
Casi todo el equipo de fitness que habla Bluetooth usa un estándar llamado FTMS, el Fitness Machine Service. Home Assistant lo lee de fábrica, Zwift lo lee, la mitad de las apps de tu teléfono lo leen. Si tu caminadora habla FTMS, terminas en cinco minutos y no necesitabas que yo escribiera esto.
Muchas máquinas NordicTrack, ProForm e iFit no hablan FTMS. La mía se
presenta por Bluetooth como I_TL en un servicio propietario de Nordic
Semiconductor (00001533-...), envuelto en un formato de mensajes propio que
absolutamente nada de lo que existe entiende. Así que Home Assistant se conecta,
echa un vistazo, no encuentra nada que reconozca, y se rinde en silencio. La
caminadora está ahí mismo hablando, y la casa está sorda.
Así que me senté a hacerle ingeniería inversa.
La parte difícil: nunca habla primero
Me costó una noche entera. Te conectas a la caminadora, te suscribes a sus notificaciones de la manera normal, y no recibes nada de vuelta. Silencio total. Parece rota.
La caminadora simplemente nunca ofrece nada por su cuenta. Solo responde cuando le preguntan, como muchas personas que yo conozco. El app del teléfono es el reloj: escribe un comando diminuto más o menos cada 200 milisegundos, o sea cinco veces por segundo. El chit chat es increíble. Cada una de esas escrituras pincha a la máquina para que dispare de vuelta una ráfaga corta de respuestas. Deja de preguntar y los datos se detienen. La banda puede ir volando bajo tus pies y por Bluetooth parece profundamente dormida.
En cuanto copié ese ritmo, mandando el mismo pinchacito cada 200 ms, los datos salieron a chorros.
Leyendo los números
La telemetría vuelve en una página que empecé a llamar 0x29. Después de alinear
mis propias capturas de paquetes con las de un par de personas que ya habían
hurgado en estas máquinas antes que yo, la decodificación resultó limpia:
- Velocidad: bytes 10 a 11, little-endian, dividido entre 100, da km/h
- Inclinación: bytes 12 a 13, little-endian, dividido entre 100, da porcentaje
- Tiempo transcurrido: byte 14, segundos tal cual
Lo comprobé contra la consola mientras caminaba. La pantalla marcaba 3 mph, los
bytes decían 482, que son 4.82 km/h. 5 mph volvía como 804. Una inclinación
del 6 por ciento leía 300. Exacto, siempre. Ese es el buen momento, cuando las
suposiciones se convierten en números que coinciden con la realidad.

De un truco en la laptop a una caja que simplemente funciona
Primero probé todo el asunto con un script de Python improvisado, apoyándome en
bleak para el Bluetooth. Una vez que estuvo sólido lo pasé a un ESP32-S3, un
chip del tamaño de una barrita de chicle. Escanea buscando la caminadora,
reproduce el handshake de arranque, corre el sondeo de 200 ms para siempre,
decodifica la página, y empuja todo a Home Assistant por MQTT con
autodescubrimiento, así que los sensores simplemente aparecen.
Ahora vive conectado a cualquier cargador USB cerca de la caminadora y nunca lo toco. Me subo, corro, y el entrenamiento llega solo a Home Assistant.
La parte de la que estoy calladamente orgulloso: también calcula las calorías a partir de mi peso corporal real, que saca de mi báscula inteligente, usando las ecuaciones metabólicas del ACSM. La caminadora por sí sola no puede hacer eso, porque no tiene idea de quién está parado encima. Mi casa sí.
¿Quieres una?
El firmware, la carcasa impresa en 3D, el panel de Home Assistant y la documentación completa del protocolo son todos de código abierto, así que si disfrutas decodificando Bluetooth a medianoche, adelante, ahí está todo:
- nordictrack_t5, el firmware del puente ESP32-S3, la carcasa y el panel, más las notas del protocolo Y si prefieres que la cajita simplemente llegue lista para enchufar, eso es exactamente el tipo de cosa que construyo y vendo. De cualquiera de las dos formas, tu caminadora deja de ser una isla tonta en la esquina.
