开发设备控制(Node.js SDK)

更新时间:2023-09-06 02:10:28下载pdf

本文介绍如何基于涂鸦云开发开放的能力和 SDK,开发一个控制 Powered by Tuya 的智能设备的程序。

前提条件

操作步骤

第一步:配置开发环境

本步骤基于 Tuya-connector-Nodejs SDK。Tuya-connector 集成了开发者在涂鸦云云对接(OpenAPI 或者消息订阅)项目过程中的云端连接和处理过程,可以让开发者如同本地开发一样,聚焦于自身的业务逻辑。克隆步骤如下:

  1. Tuya-connector-Nodejs 获取 SDK 地址。

  2. Projects > Get from VCS > URL,输入 SDK 地址,单击 Clone

    开发设备控制(Node.js SDK)
  3. View > Tool Windows > Terminal,打开终端,安装依赖包。支持以下两种方式。

    • yarn add @tuya/tuya-connector-nodejs

    • npm install @tuya/tuya-connector-nodejs

      开发设备控制(Node.js SDK)

第二步:编辑配置文件

开发前您可以在 example > index.ts 文件中配置环境变量。

  1. 在已创建项目的 概览 页面,获取用于 API 调用的 授权密钥,即 Access ID 和 Access Secret。

    开发设备控制(Node.js SDK)
  2. index.ts 文件配置环境变量。

    • baseUrlAPI 请求 数据中心地址。

    • accessKey授权密钥 中的 Acccess ID。

    • secretKey授权密钥 中的 Access Secret。

      开发设备控制(Node.js SDK)

    代码示例:

    const context = new TuyaContext({
        baseUrl: 'https://openapi.tuyacn.com',
        accessKey: 'xtu7m*****48ufo',
        secretKey: '479bcba6d*******d9c4e080f7',
    });
    

第三步:控制设备

完成环境编辑配置后,您可以开始代码开发。

本程序控制的设备为一个灯带,控制其开关的标准指令集为 switch_led。如果您是其它设备,需要查询标准指令集后修改代码。

  1. 创建 OpenAPI 接口。

    SDK 内封装部分接口,可以直接进行调用。

    代码块示例:

      const device_id = "vdevo162799080003567";
      const devicedetail = await context.device.detail({
        device_id: device_id,
      });
      if(!devicedetail.success) {
        new Error();
      }
      console.log("设备详情:",devicedetail);
    
  2. 创建自定义请求 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);
    });
    
  3. 接口调试。

    1. TypeScript 编译器编译 ts 文件。
      使用终端进入到对应文件夹,对 index.ts 文件进行编译。

      代码示例: tsc index.ts

      开发设备控制(Node.js SDK)
    2. node 执行编译后的 js 文件。

      代码示例: node index.js

      开发设备控制(Node.js SDK)

      执行结果

      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 }
      
    3. (可选)使用 ts-node 直接编译执行 index.ts 文件。

      需要安装 ts-node

      代码示例:ts-node index.ts

      开发设备控制(Node.js SDK)

      执行结果

      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 }
      

常见问题

调用接口出现错误码:1106,permission deny,如何解决?

详情请参考 permission deny(1106)报错排查