最近、生活習慣病予防の為に家庭でエクササイズをすることと、VR+ヘルスケアのアプリケーションを自分自身で体感するため、Zwiftというサービスの利用をはじめました。
【動画あり】ロードバイク未経験者がZwiftを始めるにあたって揃えた機器を紹介
このZwiftをするにあたり、スマートトレーナーというガジェットを自転車の後輪部分に取り付けます。
このスマートトレーナーは、自転車で漕ぐデータをBluetooth接続でPCに送り、そのことによってZwiftのVRに存在する自分自身の自転車が進むのですが、ふと思いました。
このスマートトレーナーのデータをNode-REDで受けてDALI-APIを通して照明でアウトプットできないかと。
Node-REDとBluetooth機器を接続するライブラリ node-red-contrib-noble
Node-REDとBluetooth機器を接続するには、node-red-contrib-nobleというライブラリがオススメということでインストールしてみました。
node-red-contrib-noble – Node-RED
このライブラリをインストールすると、その他のフォルダに「Scan BLEs」というノードができるので、これとdebugノードをつなぐフローを作成します。
デプロイしてしばらく待つとデバッグ画面にBluetooth機器が表示されました。
Forerunner 235は、Garminのランニングウォッチ
HTC BS B3E8DCは、huaweiのAndroidスマートフォン
Uuid : 43249f4d84774476a959c1dddb8c0f89は、不明。
そして、Wahoo KICKR 6D85が、今回、Node-REDにつなぎたいとおもっているスマートトレーナーです。
Scanした後はうんともすんともいわない
無事にBluetoothデバイスが見つかったので、デバッグ画面に表示された「peripheralUuid」の値をScanBLEsノードにいれてみます。
さて、つぎは自転車のペダルを動かしてスマートトレーナーがデータを送るようにしてみましょう。
Node-REDのデバッグを確認します。
が、しかし!何も表示されません。以前、EnOcenaを試した時はすぐに表示されたのですがなぜでしょう?
Node-REDのserialノードを使ってEnOceanのスイッチデータを受信してみた
BluetoothにはPUSH型とPULL型のデバイスがある
ワンフットシーバスの田中正吾さんにこのコトを相談したところ、どうやらBluetoothのデバイスは、こちらからデータ出しなさい!というコマンドを送らないと出してこない場合があるという話を聞きました。
で、いろいろぐぐってみたら下記のサイトを発見。
nobleで複数のBLEデバイスを扱う際のちょい足しレシピ | Developers.IO
つまり、「BluetoothにはPUSH型とPULL型のデバイスがある」ということ。なので、スマートトレーナーからデータを取り出す場合には、データを取得するコマンドを送る必要があるそうな。
どうも、そこらへんのやり取りをするのがATT(アトリビュートプロトコル)だと。
Attribute Protocol(ATTプロトコル) | 基礎知識 | ROHM TECH WEB
メモ
ということで、BluetoothのATTプロトコルを勉強する必要がでてきました。
本当はパケットキャプチャして、スマートトレーナーからデータを取る時にMacからどんなコマンドが送られているのかがわかればいいのですが、ここらへんはおいおい確認していきます。
【シリアル接続】Mac でシリアルコンソールを利用してみた – Qiita
Serial – Modern Terminal for the Mac – Decisive Tactics, Inc.
まとめ
Node-REDをはじめたばかりのころは簡単にデータが取れると思っていましたが、普段私達が何気なくつかっている完成されたデバイスのデータを取ろうとすると、シリアル通信でどんなビットが送られているか?というのを理解しないとすすめない感じがしました。
次は、パケットキャプチャのWiresharkを使って、実際にどんなデータがやりとりされているか解読し、スマートトレーナーからデータを取り出す方法を調べてみようと思います。