Slide 1

Slide 1 text

HTTPじゃ遅すぎる!
 SwitchBotを自作ハブで動かして学ぶBLE通信
 Shoichi Ochi @ 株式会社スマートバンク 
 KomeKaigi 2025


Slide 2

Slide 2 text

2 SmartBank, Inc. 
 Software Engineer 
 越智 翔一
 @ochi11181101
 @sho-work
 おち しょういち
 自己紹介


Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

4 今回お話しするのは、趣味の開発で学んだこと


Slide 5

Slide 5 text

5 アジェンダ
 1. 今回作ろうとしたシステムの背景
 2. システムの構成
 3. 作る過程で学んだBLEの仕様
 4. 自作してどれくらいコスト(お金)削減になったのか?
 5. レイテンシ計測


Slide 6

Slide 6 text

1.今回作ろうとしたシステムの背景


Slide 7

Slide 7 text

7 1. 今回作ろうとしたシステムの背景 
 子どもが冷蔵庫に入っているデザートを勝手に食べ て困ってるんだよね …
 冷蔵庫にチャイルドロックつければいいんじゃない? 
 うちの子どもずる賢いから、突破しそうなんだよなあ。 何か工夫できないかな? 
 OK!考えてみる👍
 ある日、友人から相談が…


Slide 8

Slide 8 text

8 1. 今回作ろうとしたシステムの背景 
 私: むむむ・・・


Slide 9

Slide 9 text

9 1. 今回作ろうとしたシステムの背景 
 私: そうだ! 顔認証で冷蔵庫の開閉ができるようにしよう!


Slide 10

Slide 10 text

2. システムの構成


Slide 11

Slide 11 text

11 2. システムの構成
 頭の中のイメージ
 顔認証
 出典: 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システム
 チャイルドロックの
 ボタン押下
 冷蔵庫に取り付ける


Slide 12

Slide 12 text

12 2. システムの構成
 頭の中のイメージ
 顔認証
 出典: 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システム
 チャイルドロックの
 ボタン押下
 冷蔵庫に取り付ける
 赤枠部分の構成を考える 


Slide 13

Slide 13 text

13 2. システムの構成
 チャイルドロックを押すIoTシステムを実装する手段を考える
 
 ・SwitchBot製品を使おう!


Slide 14

Slide 14 text

出典: https://www.switchbot.jp/
 14 2. システムの構成
 そもそもSwitchBotって何?
 既存の家電に後付けでスマート機能を加え られる、スマートホームブランド。 
 既存の物理ボタンを、後付けで 「アプリや外 部信号から操作可能」 にするための自動化 デバイス製品を提供している。 


Slide 15

Slide 15 text

15 今回使用するSwitchBot製品


Slide 16

Slide 16 text

出典: https://www.switchbot.jp/products/switchbot-bot
 16 2. システムの構成
 SwitchBotボット
 ・人間の指の代わりにボタンを押してくれる 


Slide 17

Slide 17 text

出典: https://www.switchbot.jp/products/switchbot-hub2
 17 2. システムの構成
 SwitchBotハブ
 ・クライアントとSwitchBot製品の間のゲートウェイとして機 能し、HTTP経由で操作可能にしてくれる 
 ・ハブとSwitchBot製品は、BLE通信で通信する
 BLE通信


Slide 18

Slide 18 text

出典: https://www.switchbot.jp/products/switchbot-hub2
 18 2. システムの構成
 SwitchBotハブ
 ・クライアントとSwitchBot製品の間のゲートウェイとして機 能し、HTTP経由で操作可能にしてくれる 
 ・ハブとSwitchBot製品は、BLE通信で通信する
 BLE通信
 BLE通信ってなんだろう? 


Slide 19

Slide 19 text

19 2. システムの構成
 BLE通信とは?
 ・BLEは、Bluetooth Low Energy の略
 データ送信量が少ない小型の
 IoTデバイスに適している!
 ・従来のBluetooth Classicと比較して
   ・消費電力が非常に低い 
   ・通信距離は短め 
   ・送信データは少量 


Slide 20

Slide 20 text

20 SwitchBot製品をどう使うか?


Slide 21

Slide 21 text

21 2. システムの構成
 今回の使用イメージ


Slide 22

Slide 22 text

22 2. システムの構成
 Web APIも存在している!


Slide 23

Slide 23 text

23 システム構成に落とし込む


Slide 24

Slide 24 text

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システム
 チャイルドロックの
 ボタン押下
 冷蔵庫に取り付ける
 赤枠部分の構成を考える 


Slide 25

Slide 25 text

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操作サーバー] -> [クラウド] -> [ハブ] の順番で通信が行われます。


Slide 26

Slide 26 text

26 2. システムの構成
 よし!これでいけそうだぞ!


Slide 27

Slide 27 text

27 2. システムの構成
 いざ実装してみると・・・・
 
 SwitchBotクラウドを経由するので、レイテンシーが気になる・・・😖


Slide 28

Slide 28 text

28 レイテンシー改善


Slide 29

Slide 29 text

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リクエストしてるので遅延が発生する 
 


Slide 30

Slide 30 text

30 2. システムの構成
 ハブを介さず、直接BLE 通信をしよう!


Slide 31

Slide 31 text

31 2. システムの構成
 SwitchBotのBLE仕様はリポジトリとして公開されている!


Slide 32

Slide 32 text

32 2. システムの構成
 通信仕様が分かれば、プログラムから通信できそう!


Slide 33

Slide 33 text

33 システム構成図に今回の変更を反映する


Slide 34

Slide 34 text

34 2. システムの構成
 BLE通信を使った構成
 顔認証
 出典: 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_shoppin g&utm_content=143821372074&utm_term=_619707712308_x_pla-2420318707147&utm_id=84649384&gad_source=1&gad_campaignid=6466659573&gbraid=0AAA AADNqOHA003DUFsyM0J1bvT00XwpjQ&gclid=Cj0KCQjwvJHIBhCgARIsAEQnWlBve_dtJBCDfeoAvjAo-uyHn_3UyEiHwLrCMf0u9X0F2V15izUyJ54aAl3EEALw_wcB
 顔認証&
 SwitchBot操作
 サーバー
 チャイルドロック
 のボタン押下
 SwitchBot
 BLE通信


Slide 35

Slide 35 text

35 2. システムの構成
 それぞれの構成を比較すると・・・


Slide 36

Slide 36 text

36 2. システムの構成
 To Be: BLE通信構成
 顔認証
 顔認証&
 SwitchBot操作
 サーバー
 SwitchBot
 BLE通信
 顔認証
 顔認証&
 SwitchBot操作
 サーバー
 SwitchBot
 HTTPリクエスト
 ※ SwitchBot
 ハブ
 BLE通信
 As Is: ハブを使うHTTP通信構成


Slide 37

Slide 37 text

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


Slide 38

Slide 38 text

38 2. システムの構成
 実際に使ってみると・・・
 
 体感的に、HTTPの時よりはレイテンシーが低くなった!


Slide 39

Slide 39 text

3. 作る過程で学んだBLEの通信仕様 


Slide 40

Slide 40 text

40 通信する上での登場人物


Slide 41

Slide 41 text

41 3. 作る過程で学んだBLEの通信仕様 
 セントラルとペリフェラル
 ・セントラル: 
 スマートフォンやパソコンなど 
 ・ペリフェラル: 
 BLE機能がついたセンサ機器( SwitchBot製品など)
 出典: https://www.tjsys.co.jp/focuson/clme-bluetooth/bt-difference.htm 


Slide 42

Slide 42 text

42 デバイス間の通信仕様


Slide 43

Slide 43 text

43 3. 作る過程で学んだBLEの通信仕様 
 Profile
 ・デバイス間(セントラルとペリフェラル)がどのように通信するのかをまとめた仕様のこと 
 ・主に以下の2つのProfileが存在する
 ・GAP(ギャップ): デバイス同士がどう接続・発見・認識するかを定めたルール 
 ・GATT(ガット): 接続後にどんなデータをどうやり取りするかを定めたルール 


Slide 44

Slide 44 text

44 3. 作る過程で学んだBLEの通信仕様 
 Profile
 ・デバイス間(セントラルとペリフェラル)がどのように通信するのかをまとめた仕様のこと 
 ・主に以下の2つのProfileが存在する
 ・GAP(ギャップ): デバイス同士がどう接続・発見・認識するかを定めたルール 
 ・GATT(ガット): 接続後にどんなデータをどうやり取りするかを定めたルール 


Slide 45

Slide 45 text

45 GAPとGATTの詳細


Slide 46

Slide 46 text

46 3. 作る過程で学んだBLEの通信仕様 
 GAP(ギャップ)
 デバイス同士がどう接続・発見・認識するかを定めたルール 
 以下の順番で処理が進む 
 1. Advertise
 2. Scan
 3. Connect
 4. Disconnect


Slide 47

Slide 47 text

47 3. 作る過程で学んだBLEの通信仕様 
 [GAP] 1. Advertise(アドバタイズ)
 ペリフェラルからのブロードキャスト通信のこと。 
 これは1対1の通信ではなく、近くにいる複数のセントラルが同 時に受け取れる。
 アドバタイズでは、一定間隔ごとにデータを送信する 
 出典: https://www.musen-connect.co.jp/blog/course/trial-production/ble-beginner-2/


Slide 48

Slide 48 text

48 3. 作る過程で学んだBLEの通信仕様 
 [GAP] 1. Advertise(アドバタイズ)
 実はSwitchBotのBLE仕様に書かれている、 
 「データ形式」もこの Advertiseで送信される情報


Slide 49

Slide 49 text

49 3. 作る過程で学んだBLEの通信仕様 
 [GAP] 2. Scan
 セントラルが周囲のアドバタイズを探す 


Slide 50

Slide 50 text

50 3. 作る過程で学んだBLEの通信仕様 
 [GAP] 3. Connect
 セントラルがペリフェラルに接続する 


Slide 51

Slide 51 text

51 3. 作る過程で学んだBLEの通信仕様 
 [GAP] 4. Disconnect
 セントラルがペリフェラルとの接続解除をする 
 ※ペリフェラルから接続を解除する場合もあります 


Slide 52

Slide 52 text

52 3. 作る過程で学んだBLEの通信仕様 
 GATT(ガット)
 ・接続後にデータを読み書きするための構造と手順を定めたルール 
 ・セントラルとペリフェラルで接続を確立したあとの話 
 
 GATT通信では、以下の2つの概念でデータのやり取りをする 
 ・Characteristic(キャラクタリスティック) 
 ・Service(サービス)
 Characteristic READ
 Service
 Characteristic WRITE


Slide 53

Slide 53 text

53 3. 作る過程で学んだBLEの通信仕様 
 [GATT]: Characteristic(キャラクタリスティック)
 ・ペリフェラルに保存されている実際のデータをやり取りする “箱”のようなもの
 ・セントラルはこの箱を通してデータを読み取ったり、書き込んだりする 
 ・以下の3つのデータを持つ
 ・Declaration: 何ができるか(Read/Write/※Notify)を定義する。
 ・Value:実際にやりとりするデータ本体。セントラルはこれを読み書きする。 
 ・Descriptor:補足情報。例えば、データの単位( ℃、bpm)や人間向けの説明など。 
 
 ※ これを設定すると、ペリフェラルがセントラルにcharacteristicの変更を通知できる。
 センサー値(温度、心拍数など)が変わった時に通知できるので便利。


Slide 54

Slide 54 text

54 3. 作る過程で学んだBLEの通信仕様 
 [GATT]: Service(サービス)
 Serviceは関連するCharacteristic(データの箱)を機能ごとにまとめたグループのこと。 
 Characteristicを「ファイル」とするなら、 Serviceはそれらを整理する「フォルダ」のようなもの。 
 ブザー鳴動回数キャラクタリスティック READ
 スマートブザー
 スマートブザー Service
 ブザー鳴動キャラクタリスティック WRITE


Slide 55

Slide 55 text

4. 自作してどれくらいコスト(お金)削減になったのか?


Slide 56

Slide 56 text

56 4. 自作してどれくらいコスト(お金)削減になったのか? 
 ハブを自作したので、ハブが不要になった!
 
 
 出典: https://www.switchbot.jp/products/switchbot-hub-mini


Slide 57

Slide 57 text

57 4. 自作してどれくらいコスト(お金)削減になったのか? 
 約5500円節約になった!!🎉
 出典: https://www.switchbot.jp/products/switchbot-hub-mini


Slide 58

Slide 58 text

5. レイテンシ計測


Slide 59

Slide 59 text

59 5. レイテンシ計測
 まず最初に・・・・・
 
 計測できない部分があり、
 正確にはレイテンシを計測できておりません🙇🙇🙇


Slide 60

Slide 60 text

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


Slide 61

Slide 61 text

61 計測時間の定義


Slide 62

Slide 62 text

62 5. レイテンシ計測
 パターンA: 自作ハブ (PC → Bot) 
 t0: コマンド送信開始時刻 
 t1: 応答受信時刻
 レイテンシ = (t1 - t0)


Slide 63

Slide 63 text

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


Slide 64

Slide 64 text

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


Slide 65

Slide 65 text

65 計測結果


Slide 66

Slide 66 text

66 5. レイテンシ計測
 直BLE通信 vs HTTP経由 


Slide 67

Slide 67 text

67 5. レイテンシ計測
 直BLE通信 vs HTTP経由 
 大体3倍くらいの差があることがわかる・・・! 


Slide 68

Slide 68 text

68 5. レイテンシ計測
 定量的にレイテンシが改善されたことがわかった!🎉


Slide 69

Slide 69 text

69 まとめ


Slide 70

Slide 70 text

70 まとめ
 ・SwitchBot製品の概要と、その使い方 
 ・BLE通信にはProfileというものがあり、主なものに GAPとGATTがある
 ・SwitchBot製品はBLE通信で直接操作することもできる 
 ・遠隔操作しないなら選択肢としてかなりアリ 
 
 


Slide 71

Slide 71 text

71 まとめ
 今回作成したシステムのリポジトリを公開したので、
 良かったら覗いてみてください!
 https://github.com/sho-work/self-made-switchbot-hub-sample