更新时间:2024-06-20 06:20:46下载pdf
本文介绍如何基于涂鸦云开发开放的能力和 SDK,开发一个控制 Powered by Tuya 的智能设备的程序。
本步骤基于 Tuya-connector-Nodejs SDK。Tuya-connector 集成了开发者在涂鸦云云对接(OpenAPI 或者消息订阅)项目过程中的云端连接和处理过程,可以让开发者如同本地开发一样,聚焦于自身的业务逻辑。克隆步骤如下:
在 Tuya-connector-Nodejs 获取 SDK 地址。
在 Projects > Get from VCS > URL,输入 SDK 地址,单击 Clone。
 
在 View > Tool Windows > Terminal,打开终端,安装依赖包。支持以下两种方式。
yarn add @tuya/tuya-connector-nodejs
npm install @tuya/tuya-connector-nodejs
 
开发前您可以在 example > index.ts 文件中配置环境变量。
在已创建项目的 概览 页面,获取用于 API 调用的 授权密钥,即 Access ID 和 Access Secret。
 
在 index.ts 文件配置环境变量。
baseUrl:API 请求 数据中心地址。
accessKey:授权密钥 中的 Acccess ID。
secretKey:授权密钥 中的 Access Secret。
 
代码示例:
const context = new TuyaContext({
    baseUrl: 'https://openapi.tuyacn.com',
    accessKey: 'xtu7m*****48ufo',
    secretKey: '479bcba6d*******d9c4e080f7',
});
完成环境编辑配置后,您可以开始代码开发。
本程序控制的设备为一个灯带,控制其开关的标准指令集为 switch_led。如果您是其它设备,需要查询标准指令集后修改代码。
创建 OpenAPI 接口。
SDK 内封装部分接口,可以直接进行调用。
代码块示例:
  const device_id = "vdevo162799080003567";
  const devicedetail = await context.device.detail({
    device_id: device_id,
  });
  if(!devicedetail.success) {
    new Error();
  }
  console.log("设备详情:",devicedetail);
创建自定义请求 API 接口。
tuya-connector 提供了一些常用的接口封装, 声明了对应的入参和出参类型, 对于未覆盖的 API, 可自定义请求。
const { data } = await context.request({
  method: 'GET',
  path: '/v1.0/xx',
  body: {},
});
代码块示例:
  const commands = await context.request({
    path: `/v1.0/iot-03/devices/${device_id}/commands`,
    method: 'POST',
    body: {"commands":[{"code":"switch_led","value":true}]}
  });
  if(!commands.success) {
    new Error();
  }
  console.log("执行结果:",commands);
index.ts 完整代码示例
import { TuyaContext } from '@tuya/tuya-connector-nodejs';
const context = new TuyaContext({
  baseUrl: 'https://openapi.tuyacn.com',
    accessKey: 'xtu7m*****48ufo',
    secretKey: '479bcba6d*******d9c4e080f7',
});
const main = async () => {
 //定义设备 id
  const device_id = "vdev*******80003567";
  //查询设备明细
  const devicedetail = await context.device.detail({
    device_id: device_id,
  });
  if(!devicedetail.success) {
    new Error();
  }
  console.log("设备详情:",devicedetail);
//下发指令
  const commands = await context.request({
    path: `/v1.0/iot-03/devices/${device_id}/commands`,
    method: 'POST',
    body: {
      "commands":[{"code":"switch_led","value":true}]
    }
  });
  if(!commands.success) {
    new Error();
  }
  console.log("执行结果:",commands);
};
main().catch(err => {
  console.log(err);
});
接口调试。
TypeScript 编译器编译 ts 文件。
使用终端进入到对应文件夹,对 index.ts 文件进行编译。
代码示例: tsc index.ts
 
node 执行编译后的 js 文件。
代码示例: node index.js
 
执行结果
even@*******deMacBook-Air examples % node index.js
设备详情: {
  result: {
    active_time: 1627990800,
    asset_id: '1417*******823672832',
    category: 'dj',
    category_name: '光源',
    create_time: 1627990800,
    gateway_id: '',
    icon: 'smart/program_category_icon/dj.png',
    id: 'vdev*******80003567',
    ip: '',
    lat: '',
    local_key: '25bfe*******3a5b257',
    lon: '',
    model: '',
    name: 'smart bulb 800lm rgb+cct-vdevo',
    online: true,
    product_id: 'yju2*******ujr5zx',
    product_name: 'smart bulb 800lm rgb+cct',
    sub: false,
    time_zone: '+08:00',
    update_time: 1627990800,
    uuid: 'vdev*******080003567'
  },
  success: true,
  t: 1629363047422
}
执行结果: { result: true, success: true, t: 1629363047600 }
(可选)使用 ts-node 直接编译执行 index.ts 文件。
需要安装 ts-node。
代码示例:ts-node index.ts
 
执行结果
even@*******deMacBook-Air examples % node index.js
设备详情: {
  result: {
    active_time: 1627990800,
    asset_id: '1417*******823672832',
    category: 'dj',
    category_name: '光源',
    create_time: 1627990800,
    gateway_id: '',
    icon: 'smart/program_category_icon/dj.png',
    id: 'vdev*******80003567',
    ip: '',
    lat: '',
    local_key: '25bfe*******3a5b257',
    lon: '',
    model: '',
    name: 'smart bulb 800lm rgb+cct-vdevo',
    online: true,
    product_id: 'yju2*******ujr5zx',
    product_name: 'smart bulb 800lm rgb+cct',
    sub: false,
    time_zone: '+08:00',
    update_time: 1627990800,
    uuid: 'vdev*******080003567'
  },
  success: true,
  t: 1629363504545
}
执行结果: { result: true, success: true, t: 1629363504706 }
详情请参考 permission deny(1106)报错排查。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈