Hack the Watch — come abbiamo liberato i dati di un braccialetto cinese

13 June 2026 11 minuti di lettura Ludovico
Hack the Watch — come abbiamo liberato i dati di un braccialetto cinese

Come abbiamo liberato i dati di un braccialetto cinese - uomo + AI, a quattro mani

Un braccialetto da pochi euro misura il tuo cuore, il tuo sangue, il tuo sonno. Poi però quei dati li tiene in ostaggio dentro la sua app. Questa è la storia di come ce li siamo ripresi - e di come, lavorando in coppia con un'intelligenza artificiale, abbiamo trasformato un giocattolo chiuso in un sistema aperto, nostro, modificabile a piacere.

TL;DR (per chi ha fretta)

  • Abbiamo preso un comune braccialetto fitness H59, di quelli che funzionano solo con l'app proprietaria QWatch Pro.
  • Abbiamo scoperto che l'USB serve solo a caricarlo: i dati viaggiano via Bluetooth Low Energy (BLE).
  • Abbiamo decodificato il protocollo con cui braccialetto e app si parlano - in parte ascoltando il dispositivo, in parte spiando il traffico dell'app.
  • Ora leggiamo battito, pressione, ossigenazione, stress, passi e storico senza l'app, e li salviamo in un nostro database.
  • Abbiamo costruito LudoHealt: un applicativo (Python + MySQL + dashboard web) che sincronizza il braccialetto e mostra i grafici. Dati nostri, editabili, esportabili.
  • Il bello: è nato da una collaborazione uomo-AI. Intuizione, contesto e decisioni dall'umano; decodifica byte-per-byte, codice e analisi dei pacchetti dall'AI (Claude Opus). Insieme, in una sera.
  • Il codice è open source e disponibile su GitHub: chiunque può leggerlo, usarlo e migliorarlo.

1. Il problema: i tuoi dati non sono davvero tuoi

Compri un braccialetto. Lo indossi. Lui misura cose intime: quante volte batte il tuo cuore, quanto ossigeno hai nel sangue, com'è la tua pressione, come dormi, quanto sei stressato.

Poi apri l'app ufficiale e... i dati sono lì dentro. In una scatola chiusa. Niente esportazione seria, niente accesso al "grezzo", spesso un passaggio dal cloud del produttore. Vuoi farci un grafico tuo? Incrociarli con altro? Tenerli per dieci anni? Costruirci un allarme personalizzato? Non puoi. I dati che racconta il tuo corpo non li governi tu, li governa un'app.

A noi questa cosa dà fastidio. E quando una cosa ti dà fastidio e sei un po' smanettone, la smonti.

2. L'idea: riprendersi i dati

Obiettivo dichiarato fin dall'inizio:

Bypassare l'app QWatch Pro e avere i dati puliti in un nostro database, dove possiamo farne quello che vogliamo.

Niente cloud altrui, niente formati chiusi. Una tabella in un database che controlliamo noi, e una pagina che li disegna. Sembra semplice. Per arrivarci, però, bisogna prima capire come parla il braccialetto. E lì comincia il divertimento.

3. Primo colpo di scena: l'USB non serve (per i dati)

L'istinto dice: "è collegato via USB, leggiamo l'USB". Sbagliato.

Quando abbiamo guardato cosa vede il computer sulla porta USB, la risposta è stata: niente. Nessun dispositivo dati, nessuna porta seriale. Il cavo USB di questi braccialetti serve solo alla ricarica (a volte sono addirittura solo due piedini di alimentazione).

🔍 Per i profani: è come una lampada da tavolo. Il cavo le dà corrente, ma non ci "parli" attraverso il cavo. Il braccialetto chiacchiera in un altro modo.

Quell'altro modo è il Bluetooth Low Energy (BLE): la stessa tecnologia degli auricolari, dei sensori smart, delle serrature elettroniche. È via BLE che l'app QWatch Pro legge tutto. Quindi il piano cambia: non dobbiamo "leggere l'USB", dobbiamo diventare noi l'app, parlando BLE al posto suo.

4. Ascoltare il braccialetto: BLE e GATT

In BLE ogni dispositivo espone una specie di "menù" di funzioni, chiamato GATT: un elenco di servizi, ognuno con dei caratteri (characteristics) che si possono leggere, scrivere o "ascoltare" (notifiche).

Facendo una scansione BLE dal computer, il braccialetto è saltato fuori subito: un nome corto, un segnale fortissimo (era a pochi centimetri) e un servizio rivelatore, lo 0xFEE7, tipico dei braccialetti-salute cinesi.

Connessi al dispositivo, il suo "menù" GATT ci ha mostrato la cosa più importante: un servizio chiamato Nordic UART Service:

Service 6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E (Nordic UART) Char 6E400002-... [scrittura] -> noi scriviamo COMANDI qui Char 6E400003-... [notifiche] <- il braccialetto risponde qui

🔍 Per i profani: immagina due tubi. In uno noi infiliamo bigliettini con domande ("dimmi il battito"), dall'altro escono i bigliettini con le risposte. Il difficile non è infilare i bigliettini: è capire in che lingua sono scritti.

Dal "biglietto da visita" del dispositivo abbiamo anche letto chi è: hardware H59, chip Nordic nRF52832. Un modello generico, venduto sotto mille marche diverse, tutte servite dalla stessa app QWatch Pro (di un fornitore cinese, QC Wireless).

5. Il dizionario segreto: l'anatomia di un pacchetto

Appena connessi, il braccialetto ha sputato fuori il primo "bigliettino":

73 0c 09 01 00 00 00 00 00 00 00 00 00 00 00 89

Sedici numeri. A prima vista, rumore. In realtà, una struttura precisa. La chiave l'abbiamo trovata sull'ultimo byte:

0x73 + 0x0c + 0x09 + 0x01 = 137 = 0x89

L'ultimo byte è la somma di tutti gli altri (un checksum, il controllo che il messaggio non sia corrotto). Da lì, tutto il protocollo si è rivelato:

byte 0 1 ............... 14 15 COMANDO dati (payload) CHECKSUM frame fisso da 16 byte checksum = (somma dei primi 15) AND 0xFF

Questo schema - frame da 16 byte, primo byte = comando, ultimo = checksum a somma - è la firma di una famiglia di firmware diffusissima (la stessa dei celebri anelli smart "Colmi"). Riconoscerla è stato l'aggancio decisivo: di colpo non eravamo più davanti a un dispositivo ignoto, ma a un dialetto di una lingua conosciuta.

🔍 Per i profani: è come ricevere lettere in una lingua sconosciuta e accorgersi che ogni lettera finisce sempre con un numero uguale alla somma delle parole. Capito il trucco, inizi a tradurre.

6. Real-time: leggere battito, pressione, SpO2, stress

Il comando per le misure "al volo" è il numero 105. Gli si dice cosa misurare con un secondo byte:

TipoCodice
Battito1
Pressione2
Ossigenazione (SpO2)3
Stress8
HRV (variabilità cardiaca)10

Il braccialetto risponde con un flusso di pacchetti. Il punto delicato è in quale byte si trova il valore buono. Non c'era documentazione: l'abbiamo ricavato osservando i byte reali mentre indossavamo il dispositivo.

Esempio, la pressione mentre la misura "si aggancia":

69 02 00 | 42 | 7d | 4c | 7e 03 ... 66 125 76 batt SIST DIAST

  • byte 4 = sistolica 125
  • byte 5 = diastolica 76
  • byte 3 = battito durante la misura 66

Cioè 125/76: una pressione vera, plausibile, identica a quella che mostra l'app. Con la stessa logica abbiamo decodificato battito (es. 66 bpm), SpO2 (es. 98%), stress (es. 42). Bypass completo: gli stessi numeri dell'app, ma letti da noi.

7. La mossa da hacker: spiare l'app

Le misure istantanee erano fatte. Restava lo storico: la curva del battito delle 24 ore, il sonno, i passi. Lì i comandi "indovinati" non bastavano più. Serviva la verità assoluta: vedere esattamente cosa si dicono l'app e il braccialetto.

Tecnica classica del reverse engineering BLE: l'HCI snoop log di Android.

🔍 Per i profani: è come mettere un registratore sul filo del telefono. Apri l'app, la usi normalmente, e nel frattempo registri ogni singola parola che si scambiano app e braccialetto. Poi te le riascolti con calma.

Procedura, in tre mosse:

  1. Su Android si attiva il log Bluetooth nelle opzioni sviluppatore.
  2. Si apre QWatch Pro e si fa una sincronizzazione completa, sfogliando tutti i grafici (così l'app è costretta a scaricare ogni tipo di dato).
  3. Si estrae il file registrato e lo si apre con strumenti di analisi (Wireshark, o un parser scritto su misura).

Risultato: la mappa completa dei comandi. Filtrando solo i pacchetti del braccialetto, ne è uscito il vocabolario intero. Ecco i comandi dello storico:

DatoComando
Battito storico (5 min)21
Passi / calorie / distanza (15 min)67
Riepilogo del giorno72
Pressione20
Stress55
HRV57

E la regola per chiederli: [comando, indice_del_giorno] (0 = oggi, 1 = ieri...), con risposta a più pacchetti incatenati. Da "tentativi alla cieca" eravamo passati a leggere la risposta giusta.

8. Quello che il braccialetto non dice (ma noi sappiamo)

C'è un comando, il numero 1, che imposta l'orologio interno. Nella sua risposta, il braccialetto allega una mappa delle proprie capacità: una sequenza di bit che dichiara cosa sa fare davvero. Decodificandola abbiamo scoperto verità che il marketing non racconta:

  • Temperatura corporea: NON supportata. La confezione la cita, il sensore non esiste. (Fine della caccia a un dato fantasma.)
  • ✅ SpO2, pressione, HRV, stress, sonno: supportati.

E una distinzione fondamentale, emersa dai test:

  • Hanno uno storico sul dispositivo (si scarica tutto in un colpo): battito, passi, stress, HRV, sonno.
  • Sono solo "del momento" (nessuno storico): pressione e SpO2. Il "123/89" che vedi nell'app è semplicemente l'ultima misura puntuale, non una serie continua.

Bonus: abbiamo anche attivato il log automatico del battito 24/7, così il dispositivo accumula la curva da solo, e a ogni sincronizzazione ce la prendiamo.

🔍 Per i profani: alcune cose il braccialetto se le scrive in un diario (e il diario glielo possiamo sfogliare); altre le sa dire solo se gliele chiedi in quel preciso istante. Bello sapere la differenza: te lo dice il dispositivo stesso, basta saperglielo chiedere.

9. LudoHealt: il nostro applicativo

Capito il protocollo, l'abbiamo trasformato in un prodotto vero, battezzato LudoHealt. Architettura semplice e robusta:

Braccialetto (Bluetooth) Collettore (Python) Database MySQL H59 scarica storico "ludohealt" + misure on-demand Dashboard web (PHP + grafici) il telefono la apre nel browser

I pezzi:

  • Collettore in Python (libreria bleak per il BLE): si connette, scarica lo storico (battito, passi) e fa le misure on-demand (battito, SpO2, pressione, stress), poi scrive tutto su database.
  • Database MySQL ludohealt: tre tabelle pulite. Dati nostri, modificabili con una semplice query.
  • Dashboard web in PHP con grafici (Chart.js): card con gli ultimi valori, curve di battito/passi/pressione/SpO2/stress, un selettore di periodo (oggi, 24 ore, 7 giorni, 30 giorni, personalizzato) e i bottoni per sincronizzare con un clic. Si apre anche dal telefono, sulla stessa rete.

Un dettaglio elegante: le misure ottiche (battito, SpO2) a volte non "agganciano" subito perché il sensore vuole pelle e immobilità. Per non lasciare mai vuota la scheda del battito, la dashboard usa un fallback intelligente: se la misura istantanea salta, mostra comunque l'ultimo valore dal log 24/7. Piccole attenzioni che fanno la differenza tra un esperimento e un prodotto.

Codice open source su GitHub

Tutto il codice di LudoHealt - il collettore Python, lo schema del database e la dashboard web - è open source e pubblicato su GitHub. Chiunque può scaricarlo, studiarlo, adattarlo al proprio braccialetto e contribuire con miglioramenti. Niente scatole chiuse, nemmeno per il nostro stesso strumento.
Guarda la repo qui: https://github.com/LudovicoPiccolo/OpenH59

10. Il vero protagonista: la collaborazione uomo + AI

Qui sta il punto che ci rende, diciamolo, fieri.

Questo progetto non l'ha fatto "un'AI da sola", né "un umano da solo". È nato da un dialogo:

  • L'umano ha portato l'intuizione e il contesto che nessun log può dare: "questo dato nell'app lo vedo, quindi da qualche parte c'è"; "il braccialetto l'ho rimesso oggi dopo un mese" (frase che ha spiegato di colpo perché lo storico era quasi vuoto). Ha preso le decisioni di architettura e guidato le priorità.
  • L'AI (Claude Opus) ha fatto il lavoro pesante di precisione: ha macinato i pacchetti byte per byte, ha riconosciuto la famiglia del protocollo, ha scritto il codice, ha analizzato il log di traffico dell'app ricavandone la mappa dei comandi, ha decodificato dove si nasconde la sistolica e dove la diastolica.

Da soli, ognuno dei due si sarebbe arenato. L'umano senza l'AI avrebbe perso giorni a fissare byte esadecimali; l'AI senza l'umano non avrebbe mai saputo che "il braccialetto era stato tolto per un mese". Insieme, in una sera, abbiamo aperto una scatola chiusa.

Non è "l'AI che sostituisce l'uomo". È l'uomo che, con l'AI, fa in poche ore quello che prima richiedeva un team e settimane. È una leva, non un rimpiazzo. E usarla bene è la nuova competenza.

11. Una nota su etica e legalità (perché siamo fighi, non pirati)

Lo diciamo chiaro: qui non si è "bucato" niente di nessun altro.

  • Il braccialetto è nostro.
  • I dati sono quelli del nostro corpo.
  • Non abbiamo violato server, account o dati altrui: abbiamo solo interpretato la conversazione tra due nostri dispositivi.

Questo è reverse engineering per interoperabilità e proprietà del dato personale: legittimo, sano, e per molti versi un atto di igiene digitale. La vera domanda non è "perché lo hanno fatto?", ma "perché dovrebbe essere difficile accedere ai dati del proprio corpo?".

12. Cosa possiamo fare adesso (e prima era impossibile)

Avere i dati grezzi, nostri ed editabili, sblocca tutto:

  • 📊 Grafici e analisi a modo nostro, su qualsiasi arco temporale.
  • 🔗 Incrociare i dati del braccialetto con altro (peso, alimentazione, allenamenti).
  • 📤 Esportare in CSV, Excel, dove vogliamo. Nessun lock-in.
  • Allarmi e automazioni personalizzati (es. "avvisami se il battito a riposo sale per tre giorni").
  • Niente cloud altrui: i dati restano a casa nostra.
  • 🧠 Dati per l'AI: una base pulita su cui far ragionare un modello per intuizioni sulla nostra salute.

Conclusione

Un braccialetto da quattro soldi, un'app che faceva da muro, una serata di lavoro a quattro mani con un'intelligenza artificiale. Risultato: il muro non c'è più. I dati del nostro corpo sono liberi, leggibili, nostri.

La tecnologia che indossiamo dovrebbe lavorare per noi, non tenerci alla porta. Stavolta l'abbiamo convinta a collaborare. E la cosa più interessante non è il braccialetto: è il metodo. Curiosità umana + potenza di calcolo dell'AI = la capacità di aprire, capire e ricostruire quasi qualsiasi cosa.

La prossima scatola chiusa è avvisata.

Hack the Watch - diario di un pomeriggio in cui un umano e un'AI hanno smontato un braccialetto e rimesso al loro posto i dati: nelle mani di chi li produce, cioè noi.

Il tuo competitor sta già digitalizzando. E tu?

Mentre leggi questo articolo, qualcuno nel tuo settore sta automatizzando processi, conquistando clienti online e tagliando i costi.
Ogni giorno che aspetti è un vantaggio regalato alla concorrenza.

73% delle PMI che non digitalizzano chiudono entro 5 anni
Voglio digitalizzare adesso

Consulenza gratuita • Risposta entro poche ore