Нужно проанализировать btsnoop_hci.log
Каждые 30 минут устройство отправляет уведомление со значением 0x0e от 00000010-0000-3512-2118-0009af100700. Тогда вы должны начать принимать ваши прошлые данные. Во-первых, вам нужно включить дескрипторы уведомлений для UUID_CHAR_ACTIVITY_DATA и так называемого UUID_CHAR_FETCH. Затем вам нужно получить количество пакетов из вашего последнего успешного получения данных. Таким образом, вы отправляете значение 0x0101 + datatime + tz в UUID_CHAR_FETCH. Ответ устройства со значением 0x100101 + packages_count + 1st_package_datetimetz, если нет пробелов, то 1st_package_datetimetz вы отправили ранее. Теперь вам нужно начать передачу прошлых данных, просто отправьте одно байтовое значение 0x02 в UUID_CHAR_FETCH, и устройство отправит уведомления от UUID_CHAR_ACTIVITY_DATA. Каждое значение уведомления о данных активности имеет номер очереди в первом байте и максимум 4 пакета данных в оставшихся байтах. Каждый отдельный пакет прошлых данных состоит из 4 байтов и имеет такой формат: активность_тип, интенсивность, шаги, сердечная скорость. Устройство хранит данные за каждую минуту. Как правило, на каждом событии 0x0e большую часть времени вы получаете 30 пакетов с 8 значениями уведомлений по 4 пакетам. После получения последнего уведомления устройство отправит уведомление об успехе 0x100201 из UUID_CHAR_FETCH. Я не знаю почему, но это нужно сделать на последнем 3-м шаге: отправить один байт 0x03 в UUID_CHAR_FETCH, а затем получить ответ об успешном завершении 0x100301. Это фактически все, что вам нужно, но Mi Fit дважды проверяет наличие новых пакетов данных, затем получает нулевой счет и затем выполняет третий 3-й шаг. Теперь необходимо отключить дескрипторы уведомлений со значением 0x0000. После всего этого ваш успех синхронизации данных будет больше для количества прошедших пакетов данных, которые вы получили * 60 секунд.
Если после команды 0x0101 у вас есть количество пакетов ответов = 0, устройство, очевидно, ничего не отправит вам после команды 0x02, а затем отправит сообщение 0x100201 :))
Я не знаю, что за 0x0102 + datatimetz. В моих btsnoop_hci.logs ответных пакетах count = 0 всегда.
Я думаю, что нет необходимости синхронизировать по событию 0x0e.
https://gist.github.com/Roxxor91/0d3ff17153270e447d01e7afd0c54e0f