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から利用できる。





コメント

このブログの人気の投稿

fontconfigの設定

VLCでBlu-rayを再生

UEFIのブートオーダーを一時的に変更する