0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SESAME4のAPI設定

Posted at

スクリーンショット 2022-06-28 15.28.47.png
まずSESAMEのスマホアプリをインストールし、
スクリーンショット 2022-06-28 15.44.20.png
こちらをクリックし、下記画面からQRコードを取得してスクショ等で保存します。WiFiモジュール(別売り)も用意し登録しておきましょう。
スクリーンショット 2022-06-28 15.39.02.png
こちらへメールアドレスを入力して頂きAPIキーを取得します。
スクリーンショット 2022-06-28 15.56.15.png
下記画面になりAPIキーを確認したら、QRコード読み取りボタンから先ほど保存したQR画像を読み込むとUUIDとシークレットキーが取得できます。
スクリーンショット 2022-06-28 16.10.43.png
あとは環境変数に上記3点を入れればコードから使用出来るようになります。下記コードは、デバイスを操作ボタンを押した時と同じ動作が実行できるtoggle()関数です。

sesame.ts
import axios from 'axios'
import env from './env'

const aesCmac = require('node-aes-cmac').aesCmac;

export let toggle = async () => {

    const { sesameId, sesameApiKey, keySecretHex } = env.sesame
    let cmd = 82  //(toggle:88,lock:82,unlock:83)
    let history = "Toggled via API"
    let base64_history = Buffer.from(history).toString('base64');

    let sign = generateRandomTag(keySecretHex)
    let after_cmd = await axios({
        method: 'post',
        url: `https://app.candyhouse.co/api/sesame2/${sesameId}/cmd`,
        headers: { 'x-api-key': sesameApiKey },
        data: {
            cmd: cmd,
            history: base64_history,
            sign: sign
        }
    })
};

function generateRandomTag(secret: any) {
    let key = Buffer.from(secret, 'hex')
    const date = Math.floor(Date.now() / 1000);
    const dateDate = Buffer.allocUnsafe(4);
    dateDate.writeUInt32LE(date);
    const message = Buffer.from(dateDate.slice(1, 4));
    return aesCmac(key, message);
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?