Share
Embed
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
Shoichi Ochi
November 01, 2025
Transcript
71 slides
-
2 SmartBank, Inc. Software Engineer 越智 翔一 @ochi11181101
@sho-work おち しょういち 自己紹介 -
7 1. 今回作ろうとしたシステムの背景 子どもが冷蔵庫に入っているデザートを勝手に食べ て困ってるんだよね … 冷蔵庫にチャイルドロックつければいいんじゃない? うちの子どもずる賢いから、突破しそうなんだよなあ。
何か工夫できないかな? OK!考えてみる👍 ある日、友人から相談が… -
出典: https://www.switchbot.jp/ 14 2. システムの構成 そもそもSwitchBotって何? 既存の家電に後付けでスマート機能を加え られる、スマートホームブランド。 既存の物理ボタンを、後付けで
「アプリや外 部信号から操作可能」 にするための自動化 デバイス製品を提供している。 -
19 2. システムの構成 BLE通信とは? ・BLEは、Bluetooth Low Energy の略 データ送信量が少ない小型の IoTデバイスに適している!
・従来のBluetooth Classicと比較して ・消費電力が非常に低い ・通信距離は短め ・送信データは少量 -
24 2. システムの構成 As Is 顔認証 出典: 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
チャイルドロックを押 すIoTシステム チャイルドロックの ボタン押下 冷蔵庫に取り付ける 赤枠部分の構成を考える -
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操作サーバー] -> [クラウド] -> [ハブ] の順番で通信が行われます。 -
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リクエストしてるので遅延が発生する -
36 2. システムの構成 To Be: BLE通信構成 顔認証 顔認証& SwitchBot操作 サーバー
SwitchBot BLE通信 顔認証 顔認証& SwitchBot操作 サーバー SwitchBot HTTPリクエスト ※ SwitchBot ハブ BLE通信 As Is: ハブを使うHTTP通信構成 -
37 2. システムの構成 To Be: BLE通信構成 顔認証 顔認証& SwitchBot操作 サーバー
SwitchBot BLE通信 SwitchBotハブが不要になった。 顔認証 顔認証& SwitchBot操作 サーバー SwitchBot HTTPリクエスト ※ SwitchBot ハブ BLE通信 As Is: ハブを使うHTTP通信構成 -
41 3. 作る過程で学んだBLEの通信仕様 セントラルとペリフェラル ・セントラル: スマートフォンやパソコンなど ・ペリフェラル:
BLE機能がついたセンサ機器( SwitchBot製品など) 出典: https://www.tjsys.co.jp/focuson/clme-bluetooth/bt-difference.htm -
43 3. 作る過程で学んだBLEの通信仕様 Profile ・デバイス間(セントラルとペリフェラル)がどのように通信するのかをまとめた仕様のこと ・主に以下の2つのProfileが存在する ・GAP(ギャップ): デバイス同士がどう接続・発見・認識するかを定めたルール
・GATT(ガット): 接続後にどんなデータをどうやり取りするかを定めたルール -
44 3. 作る過程で学んだBLEの通信仕様 Profile ・デバイス間(セントラルとペリフェラル)がどのように通信するのかをまとめた仕様のこと ・主に以下の2つのProfileが存在する ・GAP(ギャップ): デバイス同士がどう接続・発見・認識するかを定めたルール
・GATT(ガット): 接続後にどんなデータをどうやり取りするかを定めたルール -
46 3. 作る過程で学んだBLEの通信仕様 GAP(ギャップ) デバイス同士がどう接続・発見・認識するかを定めたルール 以下の順番で処理が進む 1.
Advertise 2. Scan 3. Connect 4. Disconnect -
47 3. 作る過程で学んだBLEの通信仕様 [GAP] 1. Advertise(アドバタイズ) ペリフェラルからのブロードキャスト通信のこと。 これは1対1の通信ではなく、近くにいる複数のセントラルが同
時に受け取れる。 アドバタイズでは、一定間隔ごとにデータを送信する 出典: https://www.musen-connect.co.jp/blog/course/trial-production/ble-beginner-2/ -
52 3. 作る過程で学んだBLEの通信仕様 GATT(ガット) ・接続後にデータを読み書きするための構造と手順を定めたルール ・セントラルとペリフェラルで接続を確立したあとの話
GATT通信では、以下の2つの概念でデータのやり取りをする ・Characteristic(キャラクタリスティック) ・Service(サービス) Characteristic READ Service Characteristic WRITE -
53 3. 作る過程で学んだBLEの通信仕様 [GATT]: Characteristic(キャラクタリスティック) ・ペリフェラルに保存されている実際のデータをやり取りする “箱”のようなもの ・セントラルはこの箱を通してデータを読み取ったり、書き込んだりする
・以下の3つのデータを持つ ・Declaration: 何ができるか(Read/Write/※Notify)を定義する。 ・Value:実際にやりとりするデータ本体。セントラルはこれを読み書きする。 ・Descriptor:補足情報。例えば、データの単位( ℃、bpm)や人間向けの説明など。 ※ これを設定すると、ペリフェラルがセントラルにcharacteristicの変更を通知できる。 センサー値(温度、心拍数など)が変わった時に通知できるので便利。 -
54 3. 作る過程で学んだBLEの通信仕様 [GATT]: Service(サービス) Serviceは関連するCharacteristic(データの箱)を機能ごとにまとめたグループのこと。 Characteristicを「ファイル」とするなら、 Serviceはそれらを整理する「フォルダ」のようなもの。
ブザー鳴動回数キャラクタリスティック READ スマートブザー スマートブザー Service ブザー鳴動キャラクタリスティック WRITE -
60 5. レイテンシ計測 前提: レイテンシ比較対象 パターンA: 自作ハブ (PC → Bot)
パターンB: SwitchBotハブ経由 (PC → Cloud → Hub → Bot) -
62 5. レイテンシ計測 パターンA: 自作ハブ (PC → Bot) t0:
コマンド送信開始時刻 t1: 応答受信時刻 レイテンシ = (t1 - t0) -
63 5. レイテンシ計測 パターンB: SwitchBotハブ経由 (PC → Cloud → Hub
→ Bot) t0: HTTPリクエスト送信開始時刻 t1: HTTPレスポンス受信時刻 レイテンシ = (t1 - t0) + (BLE latency) ※ BLE latencyはパターンAで算出したものを代入する (この場合、BLE latencyを計測するのは困難なため) -
64 5. レイテンシ計測 パターンB: SwitchBotハブ経由 (PC → Cloud → Hub
→ Bot) t0: HTTPリクエスト送信開始時刻 t1: HTTPレスポンス受信時刻 レイテンシ = (t1 - t0) + (BLE latency) ※ BLE latencyはパターンAで算出したものを代入する (この場合、BLE latencyを計測するのは困難なため) ※ CloudとHubの間の時間も計測不可能なため無視する ここに要した時間は無視