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から利用できる。
コメント
コメントを投稿