🔑
Sesame 3 / 4 APIを使う
必要なもの
- Sesame 3 or Sesame 4 本体
- Sesame 3 / 4用アプリでのユーザー登録
- UnixライクなOS(LinuxとかmacOSとか)
- curl
- Python 3
手順
API KEY と Client IDの取得
candy houseのダッシュボードにログインする。
メールアドレスを入力。

メールアドレス宛にワンタイムトークンが届くので入力。

ダッシュボードにログインしてしばらく待つと API KEY と Client ID が生えてくる。 API KEY をメモする。

状態の取得
curlコマンドで取得できる。 your_api_key にはダッシュボードで取得した API KEY を入力すること。
curl \
-X GET \
-H "X-API-KEY: your_api_key" \
https://app.candyhouse.co/api/sesame2/your-sesame-uuid
{
"batteryPercentage":100,
"batteryVoltage":6.116129032258065,
"position":232,
"CHSesame2Status":"locked",
"timestamp":1623645891
}
秘密鍵の取得
Sesame 3アプリの このセサミの鍵をシェア からQRコードを取得する。
このとき、ゲストキーではなく、マネージャかオーナーを選択すること。

表示されたQRコードをQRコード読み取りアプリなどを使ってテキストを取得する。

次のような文字列が得られる。
ssm://UI?t=sk&sk=xxxx&l=0&n=%E5%8B%9D%E6%89%8B%E5%8F%A3
クエリ文字列部分を Python urllib モジュールでパースする。
>>> import urllib.parse
>>> urllib.parse.parse_qs('t=sk&sk=xxxx&l=0&n=%E5%8B%9D%E6%89%8B%E5%8F%A3')
{
't': ['sk'],
'sk': ['xxxx'],
'l': ['0'],
'n': ['勝手口']
}
| パラメタ | 意味(推測) |
|---|---|
| t | データ種別 |
| sk | 秘密鍵など |
| l | 鍵の権限 (0=オーナー, 1=管理者, 2=ゲスト) |
| n | 操作対象のセサミの名称 |
sk パラメタをBASE64デコードする。
import base64
sk = 'xxxx'
sk_bytes = base64.b64decode(sk)
sk パラメタは mochipon さんの実装によると次の意味になる。
| byte offset | 意味 |
|---|---|
| 0 | 機器 (0=Sesame 3, 1=WiFi Module 2, 2=Sesame Bot, 3=Sesame Cycle) |
| 1-16 | 秘密鍵16bytes |
| 17-81 | 公開鍵64bytes |
| 82-83 | 鍵インデックス |
| 84-99 | Sesame Device UUID |
秘密鍵のHEX文字列を取得する。
secret_key_hex = sk_bytes[1:17].hex()
解錠操作
Pysesame3 がよく出来ているのでこれを使う。
from pysesame3.auth import WebAPIAuth
from pysesame3.lock import CHSesame2
# アカウントの API KEY
auth = WebAPIAuth(apikey="your-api-key")
# Sesame 3 の UUID
your_key_uuid = "sesame-uuid"
# 前段の手順で取得した秘密鍵の HEX 文字列
your_key_secret = "secret-key-hex"
device = CHSesame2(
authenticator=auth,
device_uuid=your_key_uuid,
secret_key=your_key_secret,
)
# 解錠処理。 `My Script` はヒストリに記録される文字列。
device.unlock(history_tag="My Script")
Discussion
ありがとうございます Python触ったことがなく Pysesame3の使い方がさっぱりだったのでとても助かりました
できれば同様に Pysesameos2 についても書いていただければありがたいです
pysesameos2を存じませんでした。情報ありがとうございます。
BT用のライブラリなのですね。なにかの折に試してみます。