Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shoichi Ochi
November 01, 2025
Programming
0
1.4k
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
KomeKaigi 2025 登壇資料
リポジトリのリンクは以下です。
https://github.com/sho-work/self-made-switchbot-hub-sample
Shoichi Ochi
November 01, 2025
Tweet
Share
More Decks by Shoichi Ochi
See All by Shoichi Ochi
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
73
高速化&コスト半減!? GitHub Actionsの サードパーティマネージドランナーの比較
occhi
1
390
Other Decks in Programming
See All in Programming
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
600
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
200
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2.4k
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.7k
dchart: charts from deck markup
ajstarks
3
990
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.8k
CSC307 Lecture 05
javiergs
PRO
0
490
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
0
830
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
1k
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
0
140
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
490
CSC307 Lecture 06
javiergs
PRO
0
680
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
310
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
310
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
67
Ruling the World: When Life Gets Gamed
codingconduct
0
130
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
130
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Google's AI Overviews - The New Search
badams
0
900
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
100
Transcript
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信 Shoichi Ochi @ 株式会社スマートバンク KomeKaigi 2025
2 SmartBank, Inc. Software Engineer 越智 翔一 @ochi11181101
@sho-work おち しょういち 自己紹介
3
4 今回お話しするのは、趣味の開発で学んだこと
5 アジェンダ 1. 今回作ろうとしたシステムの背景 2. システムの構成 3. 作る過程で学んだBLEの仕様 4. 自作してどれくらいコスト(お金)削減になったのか?
5. レイテンシ計測
1.今回作ろうとしたシステムの背景
7 1. 今回作ろうとしたシステムの背景 子どもが冷蔵庫に入っているデザートを勝手に食べ て困ってるんだよね … 冷蔵庫にチャイルドロックつければいいんじゃない? うちの子どもずる賢いから、突破しそうなんだよなあ。
何か工夫できないかな? OK!考えてみる👍 ある日、友人から相談が…
8 1. 今回作ろうとしたシステムの背景 私: むむむ・・・
9 1. 今回作ろうとしたシステムの背景 私: そうだ! 顔認証で冷蔵庫の開閉ができるようにしよう!
2. システムの構成
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システム チャイルドロックの ボタン押下 冷蔵庫に取り付ける
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システム チャイルドロックの ボタン押下 冷蔵庫に取り付ける 赤枠部分の構成を考える
13 2. システムの構成 チャイルドロックを押すIoTシステムを実装する手段を考える ・SwitchBot製品を使おう!
出典: https://www.switchbot.jp/ 14 2. システムの構成 そもそもSwitchBotって何? 既存の家電に後付けでスマート機能を加え られる、スマートホームブランド。 既存の物理ボタンを、後付けで
「アプリや外 部信号から操作可能」 にするための自動化 デバイス製品を提供している。
15 今回使用するSwitchBot製品
出典: https://www.switchbot.jp/products/switchbot-bot 16 2. システムの構成 SwitchBotボット ・人間の指の代わりにボタンを押してくれる
出典: https://www.switchbot.jp/products/switchbot-hub2 17 2. システムの構成 SwitchBotハブ ・クライアントとSwitchBot製品の間のゲートウェイとして機 能し、HTTP経由で操作可能にしてくれる ・ハブとSwitchBot製品は、BLE通信で通信する
BLE通信
出典: https://www.switchbot.jp/products/switchbot-hub2 18 2. システムの構成 SwitchBotハブ ・クライアントとSwitchBot製品の間のゲートウェイとして機 能し、HTTP経由で操作可能にしてくれる ・ハブとSwitchBot製品は、BLE通信で通信する
BLE通信 BLE通信ってなんだろう?
19 2. システムの構成 BLE通信とは? ・BLEは、Bluetooth Low Energy の略 データ送信量が少ない小型の IoTデバイスに適している!
・従来のBluetooth Classicと比較して ・消費電力が非常に低い ・通信距離は短め ・送信データは少量
20 SwitchBot製品をどう使うか?
21 2. システムの構成 今回の使用イメージ
22 2. システムの構成 Web APIも存在している!
23 システム構成に落とし込む
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操作サーバー] -> [クラウド] -> [ハブ] の順番で通信が行われます。
26 2. システムの構成 よし!これでいけそうだぞ!
27 2. システムの構成 いざ実装してみると・・・・ SwitchBotクラウドを経由するので、レイテンシーが気になる・・・😖
28 レイテンシー改善
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リクエストしてるので遅延が発生する
30 2. システムの構成 ハブを介さず、直接BLE 通信をしよう!
31 2. システムの構成 SwitchBotのBLE仕様はリポジトリとして公開されている!
32 2. システムの構成 通信仕様が分かれば、プログラムから通信できそう!
33 システム構成図に今回の変更を反映する
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通信
35 2. システムの構成 それぞれの構成を比較すると・・・
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通信構成
38 2. システムの構成 実際に使ってみると・・・ 体感的に、HTTPの時よりはレイテンシーが低くなった!
3. 作る過程で学んだBLEの通信仕様
40 通信する上での登場人物
41 3. 作る過程で学んだBLEの通信仕様 セントラルとペリフェラル ・セントラル: スマートフォンやパソコンなど ・ペリフェラル:
BLE機能がついたセンサ機器( SwitchBot製品など) 出典: https://www.tjsys.co.jp/focuson/clme-bluetooth/bt-difference.htm
42 デバイス間の通信仕様
43 3. 作る過程で学んだBLEの通信仕様 Profile ・デバイス間(セントラルとペリフェラル)がどのように通信するのかをまとめた仕様のこと ・主に以下の2つのProfileが存在する ・GAP(ギャップ): デバイス同士がどう接続・発見・認識するかを定めたルール
・GATT(ガット): 接続後にどんなデータをどうやり取りするかを定めたルール
44 3. 作る過程で学んだBLEの通信仕様 Profile ・デバイス間(セントラルとペリフェラル)がどのように通信するのかをまとめた仕様のこと ・主に以下の2つのProfileが存在する ・GAP(ギャップ): デバイス同士がどう接続・発見・認識するかを定めたルール
・GATT(ガット): 接続後にどんなデータをどうやり取りするかを定めたルール
45 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/
48 3. 作る過程で学んだBLEの通信仕様 [GAP] 1. Advertise(アドバタイズ) 実はSwitchBotのBLE仕様に書かれている、 「データ形式」もこの
Advertiseで送信される情報
49 3. 作る過程で学んだBLEの通信仕様 [GAP] 2. Scan セントラルが周囲のアドバタイズを探す
50 3. 作る過程で学んだBLEの通信仕様 [GAP] 3. Connect セントラルがペリフェラルに接続する
51 3. 作る過程で学んだBLEの通信仕様 [GAP] 4. Disconnect セントラルがペリフェラルとの接続解除をする ※ペリフェラルから接続を解除する場合もあります
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
4. 自作してどれくらいコスト(お金)削減になったのか?
56 4. 自作してどれくらいコスト(お金)削減になったのか? ハブを自作したので、ハブが不要になった! 出典: https://www.switchbot.jp/products/switchbot-hub-mini
57 4. 自作してどれくらいコスト(お金)削減になったのか? 約5500円節約になった!!🎉 出典: https://www.switchbot.jp/products/switchbot-hub-mini
5. レイテンシ計測
59 5. レイテンシ計測 まず最初に・・・・・ 計測できない部分があり、 正確にはレイテンシを計測できておりません🙇🙇🙇
60 5. レイテンシ計測 前提: レイテンシ比較対象 パターンA: 自作ハブ (PC → Bot)
パターンB: SwitchBotハブ経由 (PC → Cloud → Hub → Bot)
61 計測時間の定義
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の間の時間も計測不可能なため無視する ここに要した時間は無視
65 計測結果
66 5. レイテンシ計測 直BLE通信 vs HTTP経由
67 5. レイテンシ計測 直BLE通信 vs HTTP経由 大体3倍くらいの差があることがわかる・・・!
68 5. レイテンシ計測 定量的にレイテンシが改善されたことがわかった!🎉
69 まとめ
70 まとめ ・SwitchBot製品の概要と、その使い方 ・BLE通信にはProfileというものがあり、主なものに GAPとGATTがある ・SwitchBot製品はBLE通信で直接操作することもできる ・遠隔操作しないなら選択肢としてかなりアリ
71 まとめ 今回作成したシステムのリポジトリを公開したので、 良かったら覗いてみてください! https://github.com/sho-work/self-made-switchbot-hub-sample