python BLEにて Zwift STEERINGに接続し、エアロバイクのハンドルのデータを取得する方法

エアロバイクのデータをPythonで取得する方法。
Zwiftはペダル部分と、ハンドル部分で違うBluetoothのデバイスになっている。
今回はハンドル側のデータ取得について。

STEERINGというデバイスをペアリングしてハンドルのデータを取得する。
また、実機を持っていないのでESP32で自作する。
下記のURLを参照して作成可能。
github.com

で、python側は下記のようなコードにてハンドルの角度が取得できる。

import asyncio
from bleak import BleakClient
import struct

address = "E0:5A:1B:60:08:C6"
UUID = "347b0030-7635-408b-8918-8ff3949ce592" # STEERING_ANGLE_CHAR_UUID notify


async def run(address, loop):
    async with BleakClient(address, loop=loop) as client:
        x = await client.is_connected()
        print("Connected: {0}".format(x))
        for i in range(100):
            y = await client.read_gatt_char(UUID)
            print(struct.unpack('<f', y)[0])

loop = asyncio.get_event_loop()
loop.run_until_complete(run(address, loop))

BluetoothのBLE機能は今回初めて使ったけど対象のUUIDが判れば簡単ということが分かった。
本体側はUUIDが不明なので、そちらも解析出来たら公開することにする。