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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
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

More Decks by Shoichi Ochi

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の間の時間も計測不可能なため無視する 
 ここに要した時間は無視