【要約】SwitchBot顔認証PadのイベントをESP32で受ける [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者は、SwitchBot製品の仕様により、顔認証イベントを外部システムへ直接通知できない課題に直面した。
- SwitchBotハブ経由では、スマートロックの動作結果しか取得できない。
- 顔認証Pad単体でのイベント取得は、製品の仕様上困難である。
- 既存の電気錠を利用する場合、スマートロックの物理的な設置が困難または不向きである。
- SwitchBotハブ経由では、スマートロックの動作結果しか取得できない。
- 顔認証Pad単体でのイベント取得は、製品の仕様上困難である。
- 既存の電気錠を利用する場合、スマートロックの物理的な設置が困難または不向きである。
// Approach
開発者は、顔認証Padが認証成功時にBLEでLockへコマンドを送る挙動を利用し、ESP32を「偽のLock」として動作させる手法を採用した。
- SwitchBotクラウドAPIからAES-128-CTRの暗号鍵を取得。
- ESP32をBLE GATTサーバーとして実装し、Padの登録手順を再現。
- Padの接続制限を回避するため、MACアドレスのOUIをSwitchBot製に偽装。
- IVの不一致を防ぐため、NVSを用いてIVを永続化。
- 受信したLOCK_OPパケットから認証方式とスロットIDを抽出。
- SwitchBotクラウドAPIからAES-128-CTRの暗号鍵を取得。
- ESP32をBLE GATTサーバーとして実装し、Padの登録手順を再現。
- Padの接続制限を回避するため、MACアドレスのOUIをSwitchBot製に偽装。
- IVの不一致を防ぐため、NVSを用いてIVを永続化。
- 受信したLOCK_OPパケットから認証方式とスロットIDを抽出。
// Result
開発者は、顔認証イベントを任意のURLへHTTP POSTする仕組みをXIAO ESP32-C6で実現した。
- 「誰が」「どの方式で」認証したかをJSON形式で取得可能。
- Home AssistantやDiscord等、外部サービスとの柔軟な連携が可能。
- 認証成功時にPadのUIを正常に完了させる応答処理も実装。
- 「誰が」「どの方式で」認証したかをJSON形式で取得可能。
- Home AssistantやDiscord等、外部サービスとの柔軟な連携が可能。
- 認証成功時にPadのUIを正常に完了させる応答処理も実装。
Senior Engineer Insight
> 本手法は、製品のプロトコルを解析し、エコシステムの制約を突破する極めて実践的なアプローチである。しかし、製品の仕様変更に対して極めて脆弱である。また、MACアドレスの偽装や暗号鍵の取得など、セキュリティ上の境界を越える実装が含まれる。商用環境への導入は推奨できず、あくまで高度な個人自動化のための技術として評価すべきである。