Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信

Avatar for Shoichi Ochi Shoichi Ochi
November 01, 2025

HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信

KomeKaigi 2025 登壇資料

リポジトリのリンクは以下です。
https://github.com/sho-work/self-made-switchbot-hub-sample

Avatar for Shoichi Ochi

Shoichi Ochi

November 01, 2025
Tweet

Other Decks in Programming

Transcript

  1. 2 SmartBank, Inc. 
 Software Engineer 
 越智 翔一
 @ochi11181101


    @sho-work
 おち しょういち
 自己紹介

  2. 3

  3. 19 2. システムの構成
 BLE通信とは?
 ・BLEは、Bluetooth Low Energy の略
 データ送信量が少ない小型の
 IoTデバイスに適している!


    ・従来のBluetooth Classicと比較して
   ・消費電力が非常に低い 
   ・通信距離は短め 
   ・送信データは少量 

  4. 25 2. システムの構成
 To Be
 顔認証
 出典: https://www.monotaro.com/p/8464/9384/?cq_med=pla&cq_plt=gp&utm_medium=cpc&utm_source=google&utm_campaign=246-833-4061_6466659573_shopping& utm_content=143821372074&utm_term=_619707712308_x_pla-2420318707147&utm_id=84649384&gad_source=1&gad_campaignid=6466659573&gbraid=0AAAAAD NqOHA003DUFsyM0J1bvT00XwpjQ&gclid=Cj0KCQjwvJHIBhCgARIsAEQnWlBve_dtJBCDfeoAvjAo-uyHn_3UyEiHwLrCMf0u9X0F2V15izUyJ54aAl3EEALw_wcB


    顔認証&
 SwitchBot操作
 サーバー
 チャイルドロック
 のボタン押下
 SwitchBot
 HTTPリクエスト
 ※ SwitchBot
 ハブ
 BLE通信
 ※ 厳密にはSwitchBot ハブ自体にリクエストするのではなく、前段のSwitchBotクラウドにリクエストしています。
 したがって、[SwitchBot操作サーバー] -> [クラウド] -> [ハブ] の順番で通信が行われます。

  5. 29 2. システムの構成
 ボトルネックは赤枠部分のHTTP通信
 顔認証
 出典: https://www.monotaro.com/p/8464/9384/?cq_med=pla&cq_plt=gp&utm_medium=cpc&utm_source=google&utm_campaign=246-833-4061_6466659573_shopping& utm_content=143821372074&utm_term=_619707712308_x_pla-2420318707147&utm_id=84649384&gad_source=1&gad_campaignid=6466659573&gbraid=0AAAAAD NqOHA003DUFsyM0J1bvT00XwpjQ&gclid=Cj0KCQjwvJHIBhCgARIsAEQnWlBve_dtJBCDfeoAvjAo-uyHn_3UyEiHwLrCMf0u9X0F2V15izUyJ54aAl3EEALw_wcB
 顔認証&


    SwitchBot操作
 サーバー
 チャイルドロック
 のボタン押下
 SwitchBot
 HTTPリクエスト
 ※ SwitchBot
 ハブ
 BLE通信
 ※ 厳密にはSwitchBot ハブ自体にリクエストするのではなく、前段のSwitchBotクラウドにリクエストしています。
 したがって、[SwitchBot操作サーバー] -> [クラウド] -> [ハブ] の順番で通信が行われます。
 SwitchBotクラウドに HTTPリクエストしてるので遅延が発生する 
 

  6. 36 2. システムの構成
 To Be: BLE通信構成
 顔認証
 顔認証&
 SwitchBot操作
 サーバー


    SwitchBot
 BLE通信
 顔認証
 顔認証&
 SwitchBot操作
 サーバー
 SwitchBot
 HTTPリクエスト
 ※ SwitchBot
 ハブ
 BLE通信
 As Is: ハブを使うHTTP通信構成

  7. 37 2. システムの構成
 To Be: BLE通信構成
 顔認証
 顔認証&
 SwitchBot操作
 サーバー


    SwitchBot
 BLE通信
 SwitchBotハブが不要になった。 
 顔認証
 顔認証&
 SwitchBot操作
 サーバー
 SwitchBot
 HTTPリクエスト
 ※ SwitchBot
 ハブ
 BLE通信
 As Is: ハブを使うHTTP通信構成

  8. 41 3. 作る過程で学んだBLEの通信仕様 
 セントラルとペリフェラル
 ・セントラル: 
 スマートフォンやパソコンなど 
 ・ペリフェラル:

    
 BLE機能がついたセンサ機器( SwitchBot製品など)
 出典: https://www.tjsys.co.jp/focuson/clme-bluetooth/bt-difference.htm 

  9. 47 3. 作る過程で学んだBLEの通信仕様 
 [GAP] 1. Advertise(アドバタイズ)
 ペリフェラルからのブロードキャスト通信のこと。 
 これは1対1の通信ではなく、近くにいる複数のセントラルが同

    時に受け取れる。
 アドバタイズでは、一定間隔ごとにデータを送信する 
 出典: https://www.musen-connect.co.jp/blog/course/trial-production/ble-beginner-2/

  10. 52 3. 作る過程で学んだBLEの通信仕様 
 GATT(ガット)
 ・接続後にデータを読み書きするための構造と手順を定めたルール 
 ・セントラルとペリフェラルで接続を確立したあとの話 
 


    GATT通信では、以下の2つの概念でデータのやり取りをする 
 ・Characteristic(キャラクタリスティック) 
 ・Service(サービス)
 Characteristic READ
 Service
 Characteristic WRITE

  11. 53 3. 作る過程で学んだBLEの通信仕様 
 [GATT]: Characteristic(キャラクタリスティック)
 ・ペリフェラルに保存されている実際のデータをやり取りする “箱”のようなもの
 ・セントラルはこの箱を通してデータを読み取ったり、書き込んだりする 


    ・以下の3つのデータを持つ
 ・Declaration: 何ができるか(Read/Write/※Notify)を定義する。
 ・Value:実際にやりとりするデータ本体。セントラルはこれを読み書きする。 
 ・Descriptor:補足情報。例えば、データの単位( ℃、bpm)や人間向けの説明など。 
 
 ※ これを設定すると、ペリフェラルがセントラルにcharacteristicの変更を通知できる。
 センサー値(温度、心拍数など)が変わった時に通知できるので便利。

  12. 60 5. レイテンシ計測
 前提: レイテンシ比較対象
 パターンA: 自作ハブ (PC → Bot)

    
 パターンB: SwitchBotハブ経由 (PC → Cloud → Hub → Bot)

  13. 62 5. レイテンシ計測
 パターンA: 自作ハブ (PC → Bot) 
 t0:

    コマンド送信開始時刻 
 t1: 応答受信時刻
 レイテンシ = (t1 - t0)

  14. 63 5. レイテンシ計測
 パターンB: SwitchBotハブ経由 (PC → Cloud → Hub

    → Bot)
 
 t0: HTTPリクエスト送信開始時刻 
 t1: HTTPレスポンス受信時刻 
 レイテンシ = (t1 - t0) + (BLE latency)
 ※ BLE latencyはパターンAで算出したものを代入する 
 (この場合、BLE latencyを計測するのは困難なため) 

  15. 64 5. レイテンシ計測
 パターンB: SwitchBotハブ経由 (PC → Cloud → Hub

    → Bot)
 
 t0: HTTPリクエスト送信開始時刻 
 t1: HTTPレスポンス受信時刻 
 レイテンシ = (t1 - t0) + (BLE latency)
 ※ BLE latencyはパターンAで算出したものを代入する 
 (この場合、BLE latencyを計測するのは困難なため) 
 ※ CloudとHubの間の時間も計測不可能なため無視する 
 ここに要した時間は無視