1. Introdução
As pessoas usam pulseiras de fitness por várias razões, posso assumir algumas delas:
- Para manter a forma e cumprir os objetivos da atividade;
- Porque é uma coisinha elegante;
- Experimentar consigo mesmo ou se conhecer melhor.
Uso uma pulseira de fitness pelo motivo número 3. Neste artigo, quero falar sobre como você pode extrair dados de uma pulseira e tentar obter algumas dependências.
Os métodos para extrair esses dados funcionam para o Mi Band 1 , 1S e possivelmente 2 (o aplicativo para 2 parece ser o mesmo).
Extração de dados
Para extrair dados da pulseira, primeiro você precisa obter o banco de dados no telefone SQLite no qual as métricas coletadas estão armazenadas. No caso do Android, isso é feito de maneira extremamente simples. Consulte o tópico no fórum xda-developers , scripts para o banco de dados atual :
- Conectamos um telefone Android com a depuração USB ativada a um computador;
- Fazemos um backup do aplicativo:
adb backup -f mi.ab -noapk -noshared com.xiaomi.hm.health
; - Crie
dd if=mi.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > mi.tar
dd if=mi.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > mi.tar
; - Descompacte o arquivo
tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log
do banco de dados: tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log
tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log
; - Copie o banco de dados:
cp -f apps/com.xiaomi.hm.health/db/origin_db* ./db/
.
Como resultado, obtemos um banco de dados SQLite com o nome de arquivo db/origin_db_[0-9]+$
, que armazena as métricas do Mi Band.
Carregamento e análise de dados
Para estudar os dados, na minha opinião, é conveniente usar o notebook IPython: Xiaomi_Mifit_miband_data.ipynb
As métricas são armazenadas na tabela DATE_DATA:
df = pd.read_sql_query("SELECT * from DATE_DATA", con)
Colunas na tabela que são de interesse:
Dados agregados diários
Os dados agregados são armazenados como JSON:
{"slp":{"usrEd":-1440,"lt":457,"st":1464376080,"wk":15,"dp":30,"usrSt":-1440,"ed":1464406200},"v":5,"goal":8000,"stp":{"rn":2,"cal":257,"runDist":256,"wk":69,"ttl":5244,"runCal":13,"dis":3817}}
Os dados são divididos em 2 partes: sono ( slp ) e atividade ( stp ). Para o sono, o horário de início e término é armazenado - st, ed , bem como o tempo de sono profundo e leve em minutos - lt, dp . O tempo de vigília entre o início e o fim do sono também é armazenado - sem . Para a atividade, o número total de "etapas" ttl é armazenado - a soma das leituras do sensor primário para o dia e outras quantidades derivadas func(ttl, , )
.
Dados brutos de atividade e frequência cardíaca
Os dados brutos da atividade são armazenados a cada minuto (por dia 1440) e representam 3 valores por minuto. O primeiro valor é um sonho e um valor de 0 a 127 (mas, no meu caso, um máximo de 126), o segundo e o terceiro são atividades com um valor de 0 a 255 (eu tenho um máximo de atividade2 - 189, atividade3 - 240).
O pulso é armazenado a cada minuto e varia de 0 a 255.
Como os dados brutos se agregam por dia
O agregado mais simples é o número de etapas por dia - a soma dos valores da atividade3 por dia. É mais difícil dormir: nunca aprendi como transformar dados brutos do sono em dados agregados. Nos fóruns, foi expressa a idéia de que o valor da atividade1 == 4 é sono profundo e 5 é leve, mas não é tão simples quanto nas etapas para estabelecer um relacionamento entre dados agregados e dados brutos.
Análise de dados
Em primeiro lugar, o quanto eu dormi durante o ano. Esse valor acabou sendo ~ (7 + - 1) horas. Tudo parece estar bem com isso.

Outra coisa óbvia - durmo o suficiente nos fins de semana:

E se você chama a relação de sono profundo com qualidade de luz, acontece que eu tenho a melhor qualidade de sono na quinta-feira e, ao mesmo tempo, sono profundo é 23% do tempo total de sono. E na sexta-feira - a pior qualidade de sono, tenho medo de adivinhar o porquê.

O número máximo de "etapas" que eu faço na sexta e no sábado:

Ao mesmo tempo, meu ambiente é o dia em que durmo pouco e ando pouco, não há explicações óbvias na categoria "trabalho em casa", então isso é algo novo para mim.
Espero que alguém dos proprietários das populares pulseiras da banda Mi também queira se estudar e contar sobre suas características.