前回から随分と間が空いてしまいましたが、GAS側のコードを掲載します。
やり方はTuyaからトークン取得→トークンを使ってコマンドを送る。
コマンドの種類やURLはTuya Developerの
[Device Management] → [Get Device Details]
こちらにDevice Idを貼り付けてPOSTすると右側に出ている[category]がデバイスのカテゴリです。
このカテゴリでデバイスのコマンドを探します。この場合は『dj』がカテゴリとなります。
[Cloud Development] →[Standard Instruction]
でカテゴリに応じたコマンドを見つけることができます。
あとは以下GASをコピペして利用して下さい。
最後にmain functionを実行すると思ったとおりの結果になると思います。
//TUYA API 設定 こちらに記載。 const clientId = "cliend_id"; const clientSecret = "client_secret"; const device_id = ["device_id"]; var url = "https://openapi.tuyacn.com/v1.0/token?grant_type=1"; var command_urls = device_id.map( (key) => `https://openapi.tuyacn.com/v1.0/devices/${key}/commands` ); //コマンド。こちらはデバイスのカテゴリに応じて変更。 var tuya_command = { off: [{ code: "switch_led", value: false }], scene: [ { code: "switch_led", value: true }, { code: "scene_data_v2", value: { scene_num: 4 } }, ], }; function mainfunction() { setScene(tuya_command["off"]); } //ここから function setScene(command) { var timeStamp = getTime().toString(); var token = retreiveAccessToken(clientId, clientSecret, timeStamp, url); var sign = calcSignWithToken(clientId, token, clientSecret, timeStamp); var headers = { client_id: clientId, access_token: token, t: timeStamp, sign: sign, sign_method: "HMAC-SHA256", "Content-Type": "application/json", }; var options = { method: "POST", headers: headers, payload: JSON.stringify({ commands: command, }), }; // Logger.log(`access_token: ${token}`); // Logger.log(`sign :${sign}`); // Logger.log(`timestamp:${timeStamp}`); res = command_urls.map((key) => UrlFetchApp.fetch(key, options)); Logger.log(res); } function retreiveAccessToken(clientId, clientSecret, timeStamp, url) { var easy_sign = calcSign(clientId, clientSecret, timeStamp); var headers = { client_id: clientId, sign: easy_sign, t: timeStamp, sign_method: "HMAC-SHA256", // Authorization: `Bearer $clientSecret`, }; var options = { method: "GET", headers: headers, payload: {}, }; res = UrlFetchApp.fetch(url, options); return JSON.parse(res).result.access_token; } function getTime() { var now = new Date().getTime(); return now; } function calcSign(clientId, clientSecret, timeStamp) { var str = clientId + timeStamp; var hash = Utilities.computeHmacSha256Signature(str, clientSecret); var signature = hash.reduce(function (str, chr) { chr = (chr < 0 ? chr + 256 : chr).toString(16); return str + (chr.length == 1 ? "0" : "") + chr; }, ""); return signature.toUpperCase(); } function calcSignWithToken(clientId, accessToken, clientSecret, timeStamp) { var str = clientId + accessToken + timeStamp; var hash = Utilities.computeHmacSha256Signature(str, clientSecret); var signature = hash.reduce(function (str, chr) { chr = (chr < 0 ? chr + 256 : chr).toString(16); return str + (chr.length == 1 ? "0" : "") + chr; }, ""); return signature.toUpperCase(); }