Google AssistantからSesame 3を操作する
Google AssistantからSesame 3を操作できるようにする。
2021/6/23現在、Sesame3は承認待ちのようでGoogle Assistantから操作することができない。
WebAPIは既に公開されているようなので、これをGoogle Assistantから使えるようにする。
具体的にはGoogle Assitant -> IFTTT -> Google Apps Script -> Sesame WebAPIというふうに接続する。
公式DocumentにWebAPIのサンプルがある。
一番下にNode.JS用のコードがあるので、これをGoogle Apps Script用に書き換える。
let wm2_cmd = async () => {
let sesame_id = "3DE4DE72-AAF9-25C1-8D0F-C9E019BB060C"
let key_secret_hex = 'a13d4b890111676ba8fb36ece7e94f7d'
let cmd = 83 //(toggle:88,lock:82,unlock:83)
let base64_history = Utilities.base64Encode("test2");
let sign = generateRandomTag(key_secret_hex)
let after_cmd = UrlFetchApp.fetch(`https://app.candyhouse.co/api/sesame2/${sesame_id}/cmd`, {
method: 'post',
headers: {
'x-api-key': `M10YD4NKnP3BzIraDzINg9vcjOzEc2uP3DWb2HJn`
},
contentType: "application/json",
muteHttpExceptions: true,
payload: JSON.stringify({
'cmd': cmd,
'history': base64_history,
'sign': sign
})
});
}
function generateRandomTag(secret) {
// * key:key-secret_hex to data
let key = CryptoJS.enc.Hex.parse(secret)
// message
// 1. timestamp (SECONDS SINCE JAN 01 1970. (UTC)) // 1621854456905
// 2. timestamp to uint32 (little endian) //f888ab60
// 3. remove most-significant byte //0x88ab60
const date = Math.floor(Date.now() / 1000);
const dateDate = new DataView(new ArrayBuffer(4));
dateDate.setUint32(0, date, true);
const message = CryptoJS.enc.Hex.parse(dateDate.getUint32(0).toString(16).slice(2, 8));
return CryptoJS.CMAC(key, message).toString();
}
function doGet(e) {
wm2_cmd();
return "";
}
sesame_id、key_secret_hex、x-api-keyを自分のものに変更し、「コード.gs」に記述していく。
sesame_idの取得
セサミアプリを開きセサミ本体を選択、設定画面下部にUUIDがあるので、これをsesame_idに入力する。
key_secret_hexの取得
セサミアプリで鍵のシェアを開くとQRコードが現れる。
これをQRコードリーダーで読み込むと、「ssm://t=sk&sk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&l=0&n=セサミ」というURIが取得できるので、これのskを取り出す。
以下のサイトでskをデコードする。
入力形式はBASE64、出力形式にHEX(16進数 小文字)を指定する。
デコードされた文字列の3文字目から12文字を取り出し、key_secret_hexに入力する。
x-api-keyの取得
https://dash.candyhouse.co/にアクセスし、ログインする。
API_KEY項目の値をx-api-keyに入力する。
cryptojs-extensionの「lib/cryptojs-aes.min.js」と「build/cmac.min.js」を追加し、以下のように順番を変える。
この時点でwm2_cmdを実行したら鍵が開くはず。
ウェブアプリとしてデプロイし、IFTTT経由でGoogle Assistantから利用できる。

コメント
コメントを投稿