【Sesame4】GolangでSesameAPIを使い、鍵を操作する

【Sesame4】GolangでSesameAPIを使い、鍵を操作する

1年ほど前にSesame4を購入したのですが、今更ながらAPIが提供されていることに気づきました。

APIを通して、鍵の操作ができるとなると、かなり出来ることが増えそうです。

 

APIから操作するにはWifiモジュールが必要となります。

 

以前の記事

 

やりたいこと

今回、私がやりたいことはStream Deckから鍵を操作することです。

Sesameアプリを使用することで、どこからでも鍵を操作できるものの、最近はアプリを開くのが手間に感じており、Stream Deckに登録しておけば、お客さんが訪ねてきた際に、すぐに開錠でき、楽になると思った次第です。

 

Stream Deckとは、配信者向けのデバイスで、事前に登録しておいた機能をボタン1つで実現できる優れたデバイスです。

私は、配信者ではありませんが、業務効率化のために購入しています。

 

準備

まずAPIを呼び出すために必要な情報を取得します。

 

下記の手順で行います。

  • 専用サイトで会員登録
  • デバイス登録用のQRコードを発行
  • デバイスを登録
  • APIキー、デバイスUUID、シークレットキーを取得

 

専用サイトで会員登録

下記のリンクにアクセスします。

https://biz.candyhouse.co/

 

登録方法は割愛します。

 

デバイス登録用のQRコードを発行

セサミアプリを開きます。

セサミ、ひらけゴマ !

セサミ、ひらけゴマ !
開発元:CANDY HOUSE
無料
posted withアプリーチ

該当デバイスを選択し、「このセサミの鍵をシェア」を選択します。

オーナー鍵、マネージャー鍵、ゲスト鍵が選択肢として表示されるので、オーナー鍵を選択します。

鍵が表示されたら、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
  }
]

 

開錠・施錠

signに入る値は、CONVERTED_SECRET_KEYという名前にしていますが、処理により変換されたシークレットキーが入ります。
そのままシークレットキーに置き換えても、処理がうまくいかないので、注意が必要です。
また、誤ったsign情報を渡されても他の情報があっていれば、200が返ってきてしまう仕様のようです....。
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ファイルを指定することで鍵の開閉が可能になります。

 

コメントを残す

CAPTCHA