【Sesame4】GolangでSesameAPIを使い、鍵を操作する
1年ほど前にSesame4を購入したのですが、今更ながらAPIが提供されていることに気づきました。
APIを通して、鍵の操作ができるとなると、かなり出来ることが増えそうです。
APIから操作するにはWifiモジュールが必要となります。
以前の記事
やりたいこと
今回、私がやりたいことはStream Deckから鍵を操作することです。
Sesameアプリを使用することで、どこからでも鍵を操作できるものの、最近はアプリを開くのが手間に感じており、Stream Deckに登録しておけば、お客さんが訪ねてきた際に、すぐに開錠でき、楽になると思った次第です。
Stream Deckとは、配信者向けのデバイスで、事前に登録しておいた機能をボタン1つで実現できる優れたデバイスです。
私は、配信者ではありませんが、業務効率化のために購入しています。
準備
まずAPIを呼び出すために必要な情報を取得します。
下記の手順で行います。
- 専用サイトで会員登録
- デバイス登録用のQRコードを発行
- デバイスを登録
- APIキー、デバイスUUID、シークレットキーを取得
専用サイトで会員登録
下記のリンクにアクセスします。
登録方法は割愛します。
デバイス登録用のQRコードを発行
セサミアプリを開きます。
該当デバイスを選択し、「このセサミの鍵をシェア」を選択します。
オーナー鍵、マネージャー鍵、ゲスト鍵が選択肢として表示されるので、オーナー鍵を選択します。
鍵が表示されたら、QRコードをスクショします。
デバイスを登録
「ドア」ページへ遷移し、デバイスを登録します。
QRコードを押下後、先ほど取得したQRコードを選択します。
APIキー、デバイスUUID、シークレットキーを取得
「開発者向け」ページへ遷移し、
APIキーと、該当機種のデバイスUUID、デバイスシークレットキーを取得します。
APIを呼び出す
先ほど取得した情報を使用してAPIを呼び出します。
まずはcurlで呼び出せるか確認すると良いでしょう。
いくつか下記に呼び出し例を載せておきます。
{}で囲んだ部分は、自身の情報に置き換えて実行してください。
ステータス取得
バッテリー残量等の情報を参照することができます。
curl -s -H "x-api-key:{API_KEY}" https://app.candyhouse.co/api/sesame2/{DEVICE_UUID} |jq
期待されるResponse
{
"batteryPercentage": 100,
"batteryVoltage": 6.12316715542522,
"position": 18,
"CHSesame2Status": "unlocked",
"timestamp": 1714735429,
"wm2State": true
}
履歴取得
historyTagにはbase64 encodeされた値が入ります。
情報の反映には若干ラグがありそうな感じがします。
curl -s -H "x-api-key:{API_KEY}" "https://app.candyhouse.co/api/sesame2/{DEVICE_UUID}/history?page=1&lg=3" |jq
期待されるResponse
[
{
"recordID": 3927,
"type": 8,
"timeStamp": 1714719805184
},
{
"recordID": 3925,
"type": 1,
"timeStamp": 1714716797784,
"historyTag": "Y2FsbCBhcGkuIGNvbW1hbmQ6ODg="
},
{
"recordID": 3924,
"type": 8,
"timeStamp": 1714635694189
}
]
開錠・施錠
curl -X POST "https://app.candyhouse.co/api/sesame2/{DEVICE_UUID}/cmd" \
-H "x-api-key: {API_KEY}" \
-H "Content-Type: application/json" \
-d "{\"cmd\": 88, \"history\": \"$(echo -n 'curl call api. command:88' | base64)\", \"sign\": \"{CONVERTED_SECRET_KEY}\"}" \
-w "\nHTTP status: %{http_code}\n"
Golangから開錠施錠を行う
下記のGitHubレポジトリにサンプルを用意しました。
利用される際には、.env.exampleをコピーし、.envとし、自身の環境変数値を埋めてください、
https://github.com/k-takeuchi220/go-sesame
コメントで残していますが、コマンドは、下記のような定数値になっているようです。
Toggleの場合は、現在の開閉状態を判断して動作してくれるため、便利です。
const (
// CommandLock Command = 82
// CommandUnlock Command = 83
CommandToggle Command = 88
)
Stream Deckから呼び出す
(あまり興味ある方はいないと思いますが...)
先ほどのレポジトリをcloneした階層に下記のcommandファイルを配置しています。
#!/bin/sh
SCRIPT_DIR=$(cd $(dirname "$0") && pwd)
cd $SCRIPT_DIR
nohup go run . > /dev/null 2>&1 &
Stream Deckの設定からシステム > 開くにて、作成したcommandファイルを指定することで鍵の開閉が可能になります。