さまざまなフィットネス バンドからデータを取得する方法について論文を書いています。現在、PC との Bluetooth 接続を使用して Mi Band 2 について調査を行っていますが、残念ながら BLE は私にとって新しい分野です。
Gadgetbridgeやmiband2-python-testなどのプロジェクトを調べて、プロトコルを理解しようとしています。認証がどのように機能し、バッテリーや時刻情報などのデータを抽出する方法がわかりました。しかし、2日前から今までの細かいステップなど、過去のデータを取得するためのプロトコルがわかりません。
ヒントを与えたり、プロトコルの手順を説明したりして、誰かが私を助けてくれれば幸いです. 前もって感謝します!
私がプロトコルを理解している限り、それは今のところ私のコードです:
UUID_CHAR_ACTIVITY_DATA = "00000005-0000-3512-2118-0009af100700"
UUID_CHAR_FETCH = "00000004-0000-3512-2118-0009af100700"
CCCD_UUID = 0x2902
class MiBand2(Peripheral):
[...]
self.char_activity_data = self.getCharacteristics(uuid=UUID_CHAR_ACTIVITY_DATA)[0]
self.char_fetch = self.getCharacteristics(uuid=UUID_CHAR_FETCH)[0]
self.cccd_fetch = self.char_fetch.getDescriptors(forUUID=CCCD_UUID)[0]
def fetch_activity_data(self):
# \x01\x01 key?
# \xe2\x07 2018 year
# \x05 month
# \x03 year
# \x11 hour
# \x2f minute
# \x00\x08 timezone
value = b'\x01\x01\xe2\x07\x05\x03\x11\x2f\x00\x08'
self.cccd_fetch.write(b'\x01\x00', False)
self.char_fetch.write(value_from_wireshark, False)
for i in range(30):
self.waitForNotifications(1.0)
class AuthenticationDelegate(DefaultDelegate):
[...]
def handleNotification(self, hnd, data):
[...]
if hnd == self.device.char_fetch.getHandle():
if data[:3] == b'\x10\x01\x01':
self.device.char_activity_data.write(b'\x01\x00', False)
# After \x02 I receive \x10\x02\x01 instead of fitness data as I thought
self.device.char_fetch.write(b'\x02', False)