カギカン終了でSwitchBotへ移行した話 〜スマートロックとしては優秀。でも代替サービスとして考えると話は別〜
これまで、小規模な共有スペース(利用者5名程度)の入退室管理にカギカンを利用していました。
目的はシンプルで、
- 誰が部屋を利用したか把握したい
- いつ鍵が開けられたか記録したい
- 鍵の閉め忘れを防ぎたい
というものでした。
今回、カギカンのサービス終了に伴いSwitchBotへ移行したのですが、思っていた以上に苦労したため、その記録を残しておこうと思います。
結論から言うと、
スマートロックとしてのSwitchBotに不満はない。しかし、カギカンの代替として考えると話は別。
というのが率直な感想です。
カギカンを選んでいた理由
カギカンではQrioを利用していました。
当時は個人向けのQrio Lockも自宅で利用しており、トラブルもなく運用できていたため、安心して導入できました。
導入工事も不要で、サムターン錠の上から取り付けるだけという手軽さも魅力でした。
月額費用はおよそ5,000円でしたが、法人向けサービスとして考えれば妥当な金額だと思っていました。
特に便利だったのは以下の点です。
- 誰が解錠したか記録できる
- 利用履歴を確認できる
- グループごとに権限管理ができる
- 解錠可能な時間帯を制御できる
個人利用であれば高額に感じるかもしれませんが、入退室管理システムとして見ると非常に使いやすいサービスでした。
運用中に一時的な不具合が発生したこともありましたが、問い合わせ後の対応は迅速で、大きな不満はありませんでした。
なぜSwitchBotを選んだのか
移行先としてSwitchBotを選んだ理由は単純です。
自宅でさまざまなSwitchBot製品を利用しており、大きなトラブルを経験していなかったからです。
また、ちょうど自宅へのロックUltra導入も検討していたため、何か問題が起きても対応しやすいだろうと考えていました。
今振り返ると、他のサービスも比較検討すべきだったかもしれません。
しかし、既に利用実績があり、運用イメージが描けていたことからSwitchBotを選択しました。
今回の要件
移行にあたり必要だった機能は次の2つです。
オートロック
施錠忘れによる備品の盗難リスクを減らしたい。
監視カメラは24時間稼働していましたが、それでも施錠忘れは避けたいと考えていました。
入退室記録
理想は自動記録ですが、最悪の場合は紙でも構いません。
ただし、毎回手書きで記録する運用はできるだけ避けたいという考えでした。
ロックUltraだけでは解決できなかったこと
まずSwitchBot ロックUltraを導入しました。
スマートロックとしては非常に優秀です。
しかし、カギカンの代替という視点で見ると問題がありました。
利用者を識別できない
アプリで解錠した場合、
「アプリ解錠」
という記録は残るものの、
「誰が解錠したか」
までは判別できませんでした。
公式サポートへ確認したところ、
- 指紋認証
- 顔認証
- 専用NFCカード
などを利用すれば個人識別は可能とのことでした。
ただし追加機器が必要になります。
また、今回は生体情報を運用に組み込みたくなかったため、顔認証や指紋認証の導入は見送りました。
解錠履歴をエクスポートできない
これは正直かなり驚きました。
SwitchBotには、
- プラグミニの消費電力履歴
- Hub 2の温湿度履歴
など長期間のデータを扱う機能があります。
そのため当然、解錠履歴もエクスポートできるものだと思っていました。
ところが実際には簡単には取り出せませんでした。
少なくともカギカンで行っていたような運用をそのまま移行することはできませんでした。
API連携を検討した
そこで次に考えたのがAPI連携です。
SwitchBotにはクラウドAPIが用意されています。
ただし実運用を考えると悩ましい部分がありました。
例えば、
- サーバを用意する
- APIを受ける仕組みを作る
- 利用者管理を実装する
- ログを保存する
といった作業が必要になります。
クラウドでも自宅サーバでも実現はできます。
しかし公開環境で運用する以上、
- セキュリティアップデート
- アクセス管理
- 障害対応
などを継続しなければなりません。
小規模な共有スペースのために、そこまでの運用コストをかけるのは本末転倒だと感じました。
実はiPhone上では実装できた
実は途中まで実装しました。
iPhone上で動作するa-Shellを利用し、PythonコードからSwitchBot APIを呼び出して解錠できるところまで確認しています。
さらにa-Shellはショートカットと連携できるため、
- LINEへ記録を送信
- APIで解錠
をワンタップで実行することも可能でした。
しかし、
- APIキーの管理
- a-Shellの長期的な信頼性
- 他利用者への展開
などを考えると、運用として採用するには少し不安が残りました。
そのため最終的には見送りました。
Siriショートカット作戦
もっと簡単な方法として、Siriショートカットを利用しようと考えました。
SwitchBotの解錠操作とLINE送信を組み合わせれば、
解錠と記録を同時に実現できるのではないかと考えたのです。
そのためにHub 2を追加購入しました。
ところが実際に試してみると、
Siriショートカットでは施錠しかできない
解錠操作が提供されていませんでした。
おそらく誤操作対策だと思われますが、今回の用途では致命的でした。
結果として、Hub 2を購入した当初の目的は達成できませんでした。
最終的な運用
現在は非常にシンプルです。
iPhoneのホーム画面に
- SwitchBot解錠ウィジェット
- LINE送信用ショートカット
を並べています。
利用者は、
- SwitchBotで解錠
- LINE送信ボタンを押す
という流れで運用しています。
2タップ必要になりますが、
「紙に記録を書く」
よりはかなり楽になりました。
もし今後さらに改善するなら
利用者から
「2タップは面倒」
という声が出た場合は、API方式を再検討すると思います。
LAN内に小型端末を設置し、
- 利用者管理
- 解錠処理
- ログ保存
をまとめて行う仕組みであれば実現できそうです。
ただし、その場合は運用コストや保守コストとのトレードオフになります。
まとめ
今回の移行で改めて感じたのは、
「スマートロック」と「入退室管理システム」は似ているようで別物だということです。
SwitchBot ロックUltraは非常に優秀なスマートロックです。
オートロックや遠隔操作など、個人利用で求められる機能は十分備えています。
しかし、
- 誰が利用したか記録したい
- 利用履歴を管理したい
- 権限管理をしたい
という用途になると、カギカンが提供していた価値の大きさを改めて実感しました。
これからカギカンの代替としてSwitchBotを検討している方は、
「鍵が開けばよい」
のか、
「利用履歴まで管理したい」
のかを先に整理しておくことをおすすめします。
私自身、もっと簡単に移行できると思っていました。
しかし実際には、想像以上に運用面で考えることが多い移行となりました。
おまけ:検証時に使用したSwitchBot API関連メモ
今回の検証では、SwitchBot Cloud APIを利用して解錠処理の自動化も試しました。
最終的には運用面の理由から採用しませんでしたが、同じようなことを検討している方の参考になればと思い、調査時のメモを残しておきます。
SwitchBot APIキーの取得方法
SwitchBotアプリから開発者向け設定を開くことで取得できます。
執筆時点では、
- SwitchBotアプリを開く
- プロフィール画面を開く
- アプリバージョンの表示部分を10回タップする
ことで、開発者向けメニューが表示されます。
そこから以下の情報を確認できます。
- Token
- Secret
API利用時に必要となるため、安全に管理してください。
デバイス一覧の取得
まずは対象デバイスのDevice IDを取得する必要があります。
以下のコードで取得できます。
import hashlib import hmac import base64 import time import uuid import requests import json # 設定項目 token = '' secret = '' # 署名生成に必要なパラメータ t = str(int(round(time.time() * 1000))) nonce = str(uuid.uuid4()) string_to_sign = f"{token}{t}{nonce}" # HMAC-SHA256署名の計算 sign = base64.b64encode(hmac.new(secret.encode('utf-8'), msg=string_to_sign.encode('utf-8'), digestmod=hashlib.sha256).digest()) # ヘッダー構築 headers = { "Authorization": token, "sign": sign.decode('utf-8'), "nonce": nonce, "t": t, "Content-Type": "application/json; charset=utf8" } # リクエスト送信 response = requests.get("https://api.switch-bot.com/v1.1/devices", headers=headers) # 結果表示 print(json.dumps(response.json(), indent=2, ensure_ascii=False))
ロックUltraの解錠
Device IDが取得できたら、ロックUltraへ解錠コマンドを送れます。
以下は検証時に使用したコードです。
import hashlib import hmac import base64 import time import uuid import requests import json # ========================================== # 【設定項目】ご自身の情報に書き換えてください # ========================================== token = '' secret = '' device_id = '' # 先ほど取得したロックのID # ========================================== # 署名生成に必要なパラメータ t = str(int(round(time.time() * 1000))) nonce = str(uuid.uuid4()) string_to_sign = f"{token}{t}{nonce}" # HMAC-SHA256署名の計算 sign = base64.b64encode(hmac.new(secret.encode('utf-8'), msg=string_to_sign.encode('utf-8'), digestmod=hashlib.sha256).digest()) # ヘッダー構築 headers = { "Authorization": token, "sign": sign.decode('utf-8'), "nonce": nonce, "t": t, "Content-Type": "application/json; charset=utf8" } # 解錠コマンドのペイロード(JSONデータ) body = { "command": "unlock", "parameter": "default", "commandType": "command" } # リクエスト送信(POSTで解錠命令を送る) url = f"https://api.switch-bot.com/v1.1/devices/{device_id}/commands" response = requests.post(url, headers=headers, json=body) # 結果表示 print(json.dumps(response.json(), indent=2, ensure_ascii=False))
注意事項
今回紹介したコードは検証目的で利用したものです。
実運用する場合は以下の点に注意してください。
- APIキーをソースコードへ直接埋め込まない
- GitHubなどへ誤って公開しない
- 利用履歴の管理方法を事前に検討する
- API障害時の運用を決めておく
- 物理鍵によるバックアップ手段を確保しておく
また、APIを利用した仕組みは便利な反面、保守対象が増えます。
小規模運用の場合は、運用コストと得られるメリットのバランスを考えながら導入を検討することをおすすめします。