0

さまざまなフィットネス バンドからデータを取得する方法について論文を書いています。現在、PC との Bluetooth 接続を使用して Mi Band 2 について調査を行っていますが、残念ながら BLE は私にとって新しい分野です。

Gadgetbridgemiband2-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)
4

1 に答える 1