更新时间: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)报错排查。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈