SmartWatchはBluetooth Low Energy (BLE) デバイスであるが、通信仕様として使っているサービス/キャラクタリスティック、UUID、送受信されるデータ形式などを、メーカーはその仕様を公開していないようである。使えるサービス/UUID の一覧などがデバイスへのペアリング/接続にてある程度得ることができないかを調査してみる。
BLE は、通信の仕組みとして、ペアリングなどのためのGAP (Generic Access Profile)、サービスやキャラクタリスティックのデータ交換のためのGATT (Generic Attribute Profile)を使い、各サービスやキャラクタリスティックはUUIDで識別している。
①VSCode+CoPilotにてPythonアプリを設計して調査する。AI_agentへの指示は以下である。
『デバイスに接続 してサービス一覧およびキャラクタリスティック一覧を確認し、どの UUID が通知 (Notify)、読み取り (Read)、書き込み (Write) 可能かをチェックする。そして該当の UUID に read / write を送って応答データ (バイト列) を解析するアプリ』
※ペアリング/接続して得られたUUIDの代表的な例
UUID: 0000f032-0000-1000-8000-00805f9b34fb
データ: bytearray(b'')
UUID: 0000fec9-0000-1000-8000-00805f9b34fb
データ: bytearray(b'-b\x06\xc5\x19O')
UUID: 0000fea1-0000-1000-8000-00805f9b34fb
データ: bytearray(b'\x01+\x12\x00')
UUID: 0000fea2-0000-1000-8000-00805f9b34fb
データ: bytearray(b'')
②更にAI_agentへ指示
『各キャラクタリスティックに対して「Read」「Write」「Notify」を試し、返ってくるデータ(バイト列)を表示する』
※一例として得られたデータの98がSpO2の値と一致していることが分かった。
UUID: 0000fec9-0000-1000-8000-00805f9b34fb
データ: bytearray(b'-b\x06\xc5\x19O')
16進: 2d6206c5194f
数値リスト: [45, 98, 6, 197, 25, 79]
