Home assistantにSesame 5 Proを登録できまして、ロック・アンロックもできるようにになりました。
セサミの他のガジェット、セサミタッチ・オープンセンサー・セサミボットは残念ながらWeb APIが無いので今のところHome assistantで扱えそうもない。セサミボットを操作できるようになったら良かったけど、現状は無理っぽい。
Sesame スマートロックから情報取得
Web APIでセサミの履歴や施錠解錠の操作方法などこちらで解説してあります。
今うちあるのはセサミ 5 Proで、Home assistantに登録していきます。
API key・UUID・Secret Keyの3つが必要
Home assistantでセサミ鍵を登録・操作するためには以下の3つが必要です。
- API Key:ID(メルアド)のAPI Key
- UUID:セサミ5やセサミ4など機器ごとのID
- Secret Key:セサミ5やセサミ4など機器ごとのシークレットキー
APIはユーザーごとのキーで、UUID・Secret Keyはセサミ5など機器ごとのキーになります。
参考にしたのは以下の2つのページ
UUID取得
まずはUUID取得、UUIDはセサミアプリを起動させてセサミ 5 Proを選択、右上の縦点3つをタップすると以下の画面になる。
UUIDは一番下の行、コピーはできないので手動でメモするか画像スキャンする。
UUID:1120041x-xxxx-xxxx-xxxx-xxxxxxxxxxxx
APIとSecret Keyを取得
セサミ5ProのQRコード取得
続いてSecret Keyを取得するのにQRコードが必要なので、「このセサミの鍵シェア」を選択してQRコードが表示されたらスクリーンショットを撮ってPCにコピーする。
QRコードはオーナーのを取得する。
APIとSecret Keyを取得するページ
ここ↓でもAPI取得できるけどこれは違った。
こっちからAPIとSecret Keyを取得する。
こちら↑セサミIDでログインするとAPI Keyが表示されます。
Secret Key取得
続いてSecret Keyを取得します。
上記QRコードアイコンをクリックして先ほどスクリーンショットで撮ったQRコードをアップロードするとDevice Secret Keyの欄にキーが表示される。
正常動作するかテスト
UUIDとSecret Keyを入力できたら「ステータス取得を実行」ボタンを押すと、下にデータが表示されれば成功。
履歴取得とデバイスを操作ボタンも押してみましょう。
デバイス操作ボタンは押すごとにセサミ5Proの鍵が開いたり閉じたりします。
Pythonスクリプト 作成&テスト
APIを使ってうまく操作できそうなので、https://doc.candyhouse.co/ja/SesameAPIを参考にPythonスクリプトを書いていきます。
以下のスクリプトをHome assistantのサーバーにアップして、セサミが動作するかテストしてみます。
(注:APIキー、UUID、Secretキーをスクリプトに直接書いていて、セキュリティが低くなりますので、Home assistantのconfiguration.yamlに書いたほうが良いのかもしれません。)
#!/usr/bin/env python3
# encoding: utf-8
import json
import base64, datetime, json, requests, sys
from Crypto.Cipher import AES
from Crypto.Hash import CMAC
# APIキー、UUID、Secretキー
api_key = "WVAzmWMxxxxxxxxxxxxxxxxxxxxxxxxxx"
secret = "97a264xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
uuid = "1120041x-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
def main():
try:
command = sys.argv[1]
except IndexError:
print("Usage: sesame <status|lock|unlock|toggle>")
sys.exit(1)
if command == "lock":
cmd = 82
elif command == "unlock":
cmd = 83
elif command == "toggle":
cmd = 88
elif command == "status":
cmd = None
else:
print("Invalid command")
sys.exit(1)
history = base64.b64encode("Python".encode()).decode()
cmac = CMAC.new(bytes.fromhex(secret), ciphermod=AES)
cmac.update(int(datetime.datetime.now().timestamp()).to_bytes(4, "little", signed=False)[1:4])
sign = cmac.hexdigest()
headers = {"x-api-key": api_key}
if cmd is not None:
url = f'https://app.candyhouse.co/api/sesame2/{uuid}/cmd'
body = {
"cmd": cmd,
"history": history,
"sign": sign
}
res = requests.post(url, json.dumps(body), headers=headers)
else:
url = f'https://app.candyhouse.co/api/sesame2/{uuid}'
res = requests.get(url, headers=headers)
if res.status_code == 200:
if cmd == 82:
print(json.dumps({"status": "locked"}))
elif cmd == 83:
print(json.dumps({"status": "unlocked"}))
else:
print(res.status_code, res.text)
if __name__ == "__main__":
main()
Pythonスクリプトを設置して実行権限を与える。
sudo chmod 755 /home/khadas/script/sesame5pro.py
以下のようにシェルで実行するとセサミが動作するか確認しましょう。
statusはJsonで鍵の情報↓を返してくれます。
python3 /home/khadas/script/sesame5pro.py status
200 {"batteryPercentage":87,"batteryVoltage":5.947214076246334,"position":22,"CHSesame2Status":"locked","timestamp":1707025077,"wm2State":true}
python3 /home/khadas/script/sesame5pro.py lock
python3 /home/khadas/script/sesame5pro.py unlock
python3 /home/khadas/script/sesame5pro.py toggle
toggleは鍵が開いている時は閉じて、閉じている時は開けてくれます。
PythonスクリプトをDockerにコピー
先ほど作ったhomeassistantのDockerコンテナにPythonスクリプトをコピーします。
sudo docker cp /home/khadas/script/sesame5pro.py 1bde9cd526e6:/config/
セサミ鍵 動作テスト
ちゃんと動くかテストしたら♪ できました。
シェルから実行
sudo docker exec -it homeassistant python3 sesame5pro.py unlock
sudo docker exec -it homeassistant python3 sesame5pro.py lock
sudo docker exec -it homeassistant python3 sesame5pro.py status
Docker コンテナ内部から実行
こちらもちゃんと動く。
sudo docker exec -it homeassistant /bin/bash
python3 sesame5pro.py unlock
python3 sesame5pro.py lock
python3 sesame5pro.py status
Dockerコマンド(おまけ)
コンテナ
$ sudo docker container ls #稼働中のコンテナ
$ sudo docker ps #稼働中のコンテナ
$ sudo docker ps -a #停止しているコンテナ
$ sudo docker rm [コンテナID] #コンテナ削除 消えない場合は-fで削除
イメージ
$ sudo docker images
$ sudo docker rmi [イメージID] #イメージ削除 消えない場合は-fで削除
Home assistantのconfiguration.yaml設定
configuration.yamlに以下を追加する。
ここでハマった、センサーの部分はrestにして直接ステータスの情報をapp.candyhouse.coに取りに行かないとダメみたい。
(打ち消し線の部分はコマンドラインでpython3 sesame5pro.py statusでステータス情報を取りに行ったらうまく行かなかった。)
shell_command:
control_lock: 'python3 sesame5pro.py lock'
control_unlock: 'python3 sesame5pro.py unlock'
get_status: 'python3 sesame5pro.py status'
sensor:
- platform: rest
name: "sesame status"
resource: https://app.candyhouse.co/api/sesame2/11200411-UUID
headers:
x-api-key: WVAzmWMxxxxxxxapi_key
value_template: '{{ value_json.CHSesame2Status }}'
json_attributes:
- batteryPercentage
- batteryVoltage
- position
- CHSesame2Status
- timestamp
scan_interval: 100
sensor:
- platform: command_line
name: sesame_status
command: 'python3 sesame5pro.py status'
value_template: "{{ value | json_extract('CHSesame2Status') }}"
scan_interval: 60
lock:
- platform: template
name: sesame_lock
value_template: "{{ states('sensor.sesame_status') }}"
lock:
service: shell_command.control_lock
unlock:
service: shell_command.control_unlock
追加方法はFile editorからconfiguration.yamlを選んでファイルの下のほうに追加。
configuration.yaml追加・保存したら再起動しましょう。開発者ツールをインストールしてある場合は以下のように操作するとチェック・再起動ができる。
configuration.yamlを編集した場合は再起動は必須です。
開発者ツールで動作確認
左メニューの開発者ツール >サービスでShell Command: get_statusやShell Command: control_unlock・Shell Command: control_lockを見つけて「サービスの呼び出し」を押すとセサミが動作しました。
Statusの場合は↓このような表示になる。
エンティティ
開発者ツール > 状態でsensor.sesame_statusを動作しているかチェックする。
うまくいきました。
オーバービューに登録
あとはsensor.sesame_statusをオーバービューに登録するだけ。
ロック・アンロックの状態、鍵開け締めがHome Assistantでできるようになりました。
カギ以外のセサミはWeb APIは無い
ここ↓にAndroidとiOSの操作方法はあるが、セサミボットはWeb APIでは操作できないみたい。
コメント