動作イメージ
Fitbit versa3でsesame3を解錠するテスト。ポケットから鍵を出さなくていいのめちゃくちゃ快適… pic.twitter.com/SghrQwY8DI
— ♨︎ず (@zrnbtn) October 23, 2021
準備
下記の2つの作業が必要になります。
- Sesame3をWebhookで解錠できるようにする
- Versa3からWebhookを送信できるようにする
1. Sesame3をWebhookで解錠できるようにする
Sesame3ではWebAPIが提供されています。
これを直接叩けるといいのですが、鍵を開けるためにはタイムスタンプとAPI_KEYをAES-CMAC 署名して渡す必要があり、これをクライアント側で実装するのはかなり面倒です。
そこで、Sesame3のAPIをラップしたAPIを作成し、自身が管理しているWebサーバにこれを配置することで、シンプルなGETリクエストでSesame3を解錠できるようにします。
今回は、有志の方が開発してくださったAES-CMAC認証まわりをラップしてくれるライブラリを使用しました。
以下のようなCGIスクリプトを用意し、PythonをCGIとして実行できる外部からアクセス可能なWebサーバ上に配置します。(URLが漏洩すると家の鍵が勝手に開けられちゃうのでご注意ください)
# !/usr/local/bin/python3
import cgi
import cgitb
# DEBUG用(エラーログを画面に表示する)
# cgitb.enable()
print("Status: 200 OK")
print("")
from pysesame3.auth import WebAPIAuth
from pysesame3.lock import CHSesame2
# API_KEY
auth = WebAPIAuth(apikey="XXXXXXXXXXXX")
# Sesame3のUUID
your_key_uuid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
# 前段の手順で取得した秘密鍵の HEX 文字列
your_key_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
device = CHSesame2(
authenticator=auth,
device_uuid=your_key_uuid,
secret_key=your_key_secret,
)
## 解錠処理。 `My Script` はヒストリに記録される文字列。
device.unlock(history_tag="API")
このスクリプトを動作させるには pysesame3
をサーバのシステムにインストールしておく必要があるので、pip等を使用してインストールしておきます。
# pip3 install pysesame3
上記のopen_sesame.pyで伏せ字になっているAPI_KEY、UUID、KeySecretの取得については、key3さんの↓の記事を参考に取得し、設定します。
以上の作業を行ったあと作成したcgiにブラウザからアクセスすることで、部屋の鍵が開けられるようになったはずです。
2. Versa3からWebhookを送信できるようにする
Versa3/SenseにWebhookを送信するためのアプリ(just-webhook)をインストールします。
just-webhook by zrn-ns | Fitbit App Gallery
インストール後 just-webhookアプリの設定画面を開き、HTTPメソッド(GET)とURL(先程設置したcgiのURL)を指定します。
あとはVersa3/Sense上からjust-webhookアプリを起動するだけで、Sesame3の解錠が可能になります。
またVersa3/Senseの設定画面でサイドキーのショートカットにjust-webhookを設定することで、サイドキーを長押しするだけでSesame3を解錠することも可能です。
最後に
簡単にではありますが、Fitbit Versa3/SenseからSesame3を解錠する方法を解説しました。
just-webhookではIFTTTで生成したwebhookを呼び出すこともできるので、IFTTTに対応しているスマート家電などはFitbitから簡単に操作できそうですね。