サードパーティとして、GATT プロファイル仕様が公開されていない Bluetooth Low Energy デバイスからのデータを正しく解釈する実行可能な方法はありますか?
BLE デバイスは、体重、BMI、体脂肪、水分補給レベルをサポートする体重計です。私の理解では、たとえば血圧デバイスや心拍数モニター ( https://developer.bluetooth.org/gatt/profiles/Pages/ProfilesHome.aspx ) のように、体重計に採用された GATT プロファイルはありません。
次のツールを使用します。
- iPod (iOS 6.1.3) と各種 BLE ユーティリティ アプリ (Ti BLE Multitool、LightBlue、および BLE Utility)
- Android (4.3) タブレット (Dell Venue 8 3830) と nRF マスター コントロール パネル、および Xamarin で開発されたカスタム ソリューション
体重計で利用可能な GATT サービスをスキャン、検索、接続、読み取ることができます。上記のツールはすべて、同じサービス情報を提供してくれます。スケールで検出された 5 つのサービスがあります。
- 汎用アクセス (0x1800)
- 汎用属性 (0x1801)
- デバイス情報 (0x180A)
- バッテリーサービス (0x180F)
- カスタム 128 ビット UUID を持つ不明なサービス
上記のツールはすべて、バッテリー情報やデバイス名の取得など、既知のサービスから読み取ることができます。私の推測では、カスタム UUID を持つ不明なサービスは、スケール データを提供するサービスです。
このサービスには、カスタム UUID に関する 5 つの不明な特性があります。
- 特性 1 は読み取り/書き込み
- 特性 2 が読み取られる
- 特性 3 は読み取り/書き込み
- 特徴4はNotify
- 特性 5 が読み取られる
上で指定したツールを使用して特性 1、2、および 3 から読み取ると、それぞれが独自の値を返しますが、その値は決して変わりません。たとえば、特性 1 を読み取ると、常に 20 オクテット 0x01-0x05-0x06-0x07-0x08 と 15 0x00 オクテットの値が返されます。特性 1 の後続の読み取りでは、常にその値が返されます。特性 2 読み取りは、常に 20 オクテット 0x02 および 19 オクテット 0x00 オクテットの値を返します。等々。
特性 5 を読み取ると、値が返されないか、より一般的には Android でペアリング リクエストが発行されるようです。一般的なペアリング コード (0000 や 1234 など) は有効ではありません。
特性 4 は、実際にスケール データを送信しているように見えます。上記のツールを使用して通知を有効にすると、アプリケーションは 13 オクテットを取得します。例えば:
- FF-16-09-00-03-04-01-00-83-6F-F4-18-0F
- FF-16-09-00-03-04-01-00-3E-88-F4-18-E3
- FF-16-09-00-03-04-01-00-C8-89-F4-18-6E
明らかに、これらの値はすべて同じオクテットのセットで始まります。ただし、主な問題は、これらのオクテットが何を表しているのか、実際にそうである場合、体重/bmi/水分補給/体脂肪値にどのように変換されるのかということです.
このスケールは、Ti CC2541 チップ ( http://www.ti.com/product/cc2541 ) を使用して構築されています。
Ti の SmartRF Protocol Packet Sniffer と CC2540 USB 評価モジュール キットを併用すると、iPhone 5S (iOS 7.1) と体重計の間を行き来するパケットをキャプチャできます。これにより、いくつかの追加の洞察が得られましたが、ほとんどの場合、他のツールを使用して既に観察したことを示していますが、それは低レベルではあります. パケット スニファーによって提供される追加情報は、依然として同じ疑問につながります: 体重計が送信しているこれらのオクテットのセットは何を表し、どのように体重/bmi/etc に変換されるのでしょうか? Bluetooth コア仕様のドキュメントを利用して、標準機能のオクテットが何を意味するのかを理解するのに役立ちましたが、実際のスケール データを理解するのには役立ちません。
私は Bluetooth の開発に非常に慣れていないため、この演習は基本的にテクノロジの短期集中コースになりました。どんな助けでも大歓迎です。
ありがとう。