- Projeto para ler localmente dados de saúde e atividade do smart ring Colmi R02 de baixo custo, com o objetivo de uso 100% offline sem app em nuvem
- Compatível com Colmi R02, R06 e R10, e traz a regra prática de que, se a descrição do produto mencionar o uso do app QRing, há chance de ser compatível
- Até agora já houve engenharia reversa de frequência cardíaca em tempo real, SPO2, logs de passos, frequência cardíaca e sono, ajuste de hora e até medição de “estresse”, mas ainda resta trabalho na interpretação dos logs de passos
- A CLI, após instalação com
pipx, pode executar varredura BLE, medições em tempo real, sincronização com SQLite, consulta de informações do dispositivo, envio de comandos brutos, reinicialização e ajuste de hora
- A comunicação usa BLE GATT e estrutura de pacotes de 16 bytes, com acesso possível sem binding nem chave de segurança; isso é conveniente, mas a avaliação de privacidade fica por conta do usuário
Cliente offline para smart rings da linha Colmi R02
- colmi_r02_client é um cliente Python open source para ler dados de smart rings da linha Colmi R02
- O projeto enfatiza uso 100% open source e 100% offline
- O Colmi R02 é um smart ring ou wearable fitness na faixa de US$ 20 e inclui os seguintes sensores
- acelerômetro
- rastreamento de passos
- rastreamento de sono
- gestos
- frequência cardíaca (HR)
- saturação de oxigênio no sangue (SPO2)
- O autor diz que conheceu o anel por meio do trabalho ATC_RF03 de atc1441 e da cobertura do Hackaday
Dispositivos compatíveis e onde comprar
- Os dispositivos totalmente compatíveis são os seguintes
- Colmi R02
- Colmi R06
- Colmi R10
- Há uma regra prática de que, se a listagem do produto indicar o uso do app QRing, existe chance de compatibilidade com este cliente
- É fornecido um link de compra no AliExpress; se o link estiver fora do ar, basta pesquisar por “COLMI R02”
- Há relato de compra na “Colmi official store” por CAD 22 com frete incluso
Recursos com engenharia reversa e trabalho pendente
- Os recursos que já funcionam ou foram analisados até agora são os seguintes
- frequência cardíaca em tempo real e SPO2
- logs de passos
- logs periódicos de frequência cardíaca
- ajuste do horário do ring
- configuração da frequência dos logs de HR
- logs de SPO2
- rastreamento de sono
- medição de “estresse”
- Ainda não está totalmente claro como o dia é dividido nos logs de passos
- Os recursos planejados são os seguintes
- adicionar mais recursos de CLI
- saída mais amigável para dados de frequência cardíaca e passos
- uma interface web simples
Uso pela linha de comando
- É fortemente recomendada a instalação do pipx para gerenciar pacotes Python como programas independentes
- O comando de instalação é o seguinte
pipx install git+https://github.com/tahnok/colmi_r02_client
- A busca por rings próximos é feita com
colmi_r02_util scan
colmi_r02_util scan
Found device(s)
Name | Address
--------------------------------------------
R02_341C | 70:CB:0D:D0:34:1C
- Com o endereço BLE em mãos, é possível ler a frequência cardíaca em tempo real
colmi_r02_client --address=70:CB:0D:D0:34:1C get-real-time heart-rate
Starting reading, please wait.
[81, 81, 79, 79, 79, 79]
- Os dados do ring podem ser sincronizados com SQLite
colmi_r02_client --address=3A:08:6A:6F:EB:EC sync
Writing to /home/wes/src/colmi_r02_client/ring_data.sqlite
Syncing from 2024-12-01 01:43:04.723232+00:00 to 2024-12-01 02:03:20.150315+00:00
Done
- O esquema do banco de dados está em database_schema.sql
- A ajuda mais recente da CLI pode ser consultada com
colmi_r02_client --help
- Os comandos incluem as seguintes funções
- consultar logs de frequência cardíaca
- consultar e definir configuração de logs de frequência cardíaca
- consultar frequência cardíaca em tempo real
- consultar dados de passos
- consultar informações do dispositivo e nível de bateria
- enviar comandos brutos
- reinicializar o ring
- ajustar o horário do ring
- sincronizar dados do ring com SQLite
Biblioteca e documentação
Protocolo de comunicação BLE
- As notas brutas da análise estão organizadas em notes.tahnok.ca, e o ponto de partida é 2024-07-07 Smart Ring Hacking
- O ring pode ser lido e escrito via BLE
- Não é necessário binding nem chave de segurança para começar
- Isso pode não ser ideal do ponto de vista de segurança, mas o texto observa que o alcance do ring é muito pequeno e que a exposição de contagem de passos ou dados de frequência cardíaca não é considerada uma grande preocupação
- A decisão final fica a cargo do usuário
- O ring possui o seguinte serviço BLE GATT com este UUID
6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E
- Há duas characteristics importantes
- RX
6E400002-B5A3-F393-E0A9-E50E24DCCA9E: destino de escrita
- TX
6E400003-B5A3-F393-E0A9-E50E24DCCA9E: alvo de assinatura, onde são recebidas as respostas de pacotes enviadas pelo ring
- Essa estrutura é muito parecida com o Nordic UART Service e com comunicação UART/Serial em geral
Estrutura de pacotes de 16 bytes
- O ring se comunica com pacotes de 16 bytes tanto na transmissão quanto na recepção
- O primeiro byte sempre atua como comando, tag ou tipo
- Por exemplo, o pacote de solicitação do nível de bateria começa com
0x03
- O pacote de resposta também começa com
0x03
- O último byte é sempre o checksum/crc
- Os 14 bytes do meio são os subdata ou dados de payload
- Algumas requisições exigem interpretar várias respostas em conjunto para obter os dados
- A estrutura dos pacotes de requisição e resposta de funções específicas pode ser consultada no código-fonte de cada função
- Pares validados de requisição/resposta e interpretações legíveis por humanos dos dados também podem ser consultados nos testes
Links relacionados
1 comentários
Opiniões no Hacker News
Estou animado para mexer nisso. Acabei de pedir um. Já usei dois anéis Oura e não recomendo
Não sei o quanto isso vai ser confiável, mas custou US$ 14, não US$ 300, e não pede para eu pagar todo mês para acessar uma API meia-boca
Ou vendem o anel e incluem uma assinatura vitalícia gratuita, como a Garmin https://connect.garmin.com/, ou fazem leasing/aluguel do dispositivo por contrato e cobram uma mensalidade. Não dá para fazer os dois
O Oura começa em 469 CAD https://ouraring.com/product/rings/oura-ring-4/silver, e ainda soma 7,99 CAD por mês https://support.ouraring.com/hc/en-us/articles/360052018753-...
Estou esperando ansiosamente por um anel de monitoramento do sono parecido que dê para usar offline com algo como o Gadgetbridge
Será que existe algum anel parecido com NFC?
Não tenho uso para os recursos inteligentes de saúde; parecem brinquedos de saúde baseados em dados. Já o NFC teria centenas de usos, de pagamentos a acesso, transporte público etc.
Dá para colocar tokens de segurança para coisas como pagamentos ou abrir portas, mas isso pode ser bem complicado. Como a área de detecção do anel é pequena, às vezes é difícil achar a posição de recepção ao encostá-lo no celular
E o software é de baixo nível e trabalhoso. Acabei colocando meu anel acidentalmente em modo somente leitura permanente
Minha análise está em https://shkspr.mobi/blog/2024/02/giving-the-finger-to-mfa-a-...
As implementações em que o usuário consegue fazer isso têm segurança muito fraca e, embora ainda sejam comuns, estão sendo gradualmente eliminadas. Então não há caminho, a menos que seja um sistema que você gerencie diretamente ou que você seja muito amigo do pessoal de TI
Comprei um “V1” quando custava US$ 60 e, se você souber lidar com ele corretamente, funciona de verdade. Também vi anéis no AliExpress que dizem oferecer o mesmo recurso, mas ainda não testei pessoalmente
Parece que também existem anéis duplos NFC/RFID que podem ser usados como NFC comum e também para acesso predial em 125kHz
Será que existe um anel com toque ou botões físicos? Um botão giratório com clique seria ainda melhor. Como dispositivo de exibição, imagino vários LEDs RGB individuais, mas outras abordagens também serviriam
Quão seguros são esses dispositivos baratos? Preciso me preocupar com explosão da bateria? Encontrei um post dizendo que isso aconteceu com um anel Oura: https://www.reddit.com/r/ouraring/comments/s1fave/ring_batte...
O hardware está ficando realmente barato! Mas o software…
Comprei uma luminária de cabeceira de US$ 20 que tem iluminação LED, receptor Bluetooth, relógio e alarme, e até carregamento sem fio para iPhone. Também tem microfone, então poderia transmitir todas as minhas conversas para algum lugar; o propósito declarado é ouvir eu cantar e piscar as luzes de acordo com o tom
Ela também vem com um app conveniente para configurar o relógio e as luzes. Só que, por causa de uma falha de software, o alarme toca todas as noites à 01:00 AM. Não consegui desligar pelo app oficial, e parece algo que não foi feito por um programador de verdade. Ainda assim, deve haver algum bug na pilha Bluetooth que permita obter root na luminária e consertar eu mesmo… se eu tiver tempo
Seria ótimo se fabricantes de hardware sem marca colocassem pelo menos um kit mínimo de hacking na caixa do produto
Esses dispositivos inteligentes muitas vezes deixam uma porta de depuração na placa, fácil de acessar com um grampo
Olhando o pull request do GadgetBridge[0] mencionado por dingensundso, há um bom site em que a API BLE está bem documentada, incluindo os comandos: https://colmi.puxtril.com/
[0]: https://news.ycombinator.com/item?id=41834048
Parece interessante. Será que existe um anel parecido que também tenha sensor de temperatura? Seria divertido poder detectar, com um app open source, se a pessoa vai ficar doente um ou dois dias antes, como o anel Oura ou o novo app Vitals do Apple Watch
Ou será que alguém sabe se isso já é possível só com os sensores presentes neste anel?
É só escanear o dispositivo e ler os dados? Não há nenhuma autenticação, e a estrutura é simplesmente transmitir as medições sem fio para qualquer pessoa interessada?
Isso é um problema para coisas como teclados em que você digita senhas, mas, se for o vizinho espiando o termômetro da minha sala ou alguém espiando minha faixa de frequência cardíaca quando passo correndo, na prática não parece ser um grande problema
Nos velhos tempos ruins do Bluetooth, muitos dispositivos sem tela simplesmente deixavam o código de pareamento 000000 hardcoded. De qualquer forma, isso nem aumentava muito a segurança. Diferentemente de um dispositivo conectado à internet, ele não fica exposto, a qualquer momento, a bilhões de trolls no mundo todo
No fim, sem um app, ele é praticamente um dispositivo de coleta de dados puro, com o qual quase não dá para interagir. Poderiam ter feito com que ele entrasse em modo de pareamento ao tocar na superfície, mas, no momento, ele pareia com qualquer dispositivo que solicite
Espero que alguém crie um firmware customizado para este anel. Há algum trabalho no projeto ATC_RF03 linkado, mas ainda não sei se alguém continua trabalhando nisso
Legal. Já uso um Apple Watch, mas pedi um de US$ 18 no Temu
Gosto da ideia de algo com que eu possa fazer interface diretamente e extrair dados em tempo real, sem instalar um app de celular atuando como intermediário
Há alguns meses, neste vídeo do YouTube[1], descobri que todos os dispositivos de monitoramento do sono são bastante imprecisos quando comparados a um exame de polissonografia de verdade. Só que cada um é impreciso de um jeito diferente
[1]: https://www.youtube.com/watch?v=mjOYhxLJP90
Alguém sabe se o acelerômetro desses anéis é preciso o suficiente para detectar quedas? Estou pensando em pacientes idosos que recusam smartwatches ou dispositivos que “parecem coisa de idoso”
Há bastante conteúdo adicional bom de hacking em https://github.com/atc1441/ATC_RF03_Ring/issues/13
A propósito, @tahnok, faço engenharia reversa de BLE em dispositivos de grau médico no meu trabalho principal, então gostaria de hackear isso junto com você