🔑

Sesame 3 / 4 APIを使う

2021/06/14に公開約2,800字2件のコメント

必要なもの

  • Sesame 3 or Sesame 4 本体
  • Sesame 3 / 4用アプリでのユーザー登録
  • UnixライクなOS(LinuxとかmacOSとか)
  • curl
  • Python 3

手順

API KEY と Client IDの取得

candy houseのダッシュボードにログインする。

https://partners.candyhouse.co/

メールアドレスを入力。

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

ダッシュボードにログインしてしばらく待つと API KEYClient 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用のライブラリなのですね。なにかの折に試してみます。

ログインするとコメントできます