Tuya是使设备制造商和方案提供商能通过Tuya Cloud连接、管理和控制智能设备的IoT平台。
ThingsBoard中的Tuya Cloud集成支持:
- 将Tuya管理的设备连接至ThingsBoard
- 接收遥测与设备状态更新
- 从ThingsBoard向Tuya设备发送控制命令
- 可视化设备数据并集中管理设备
本指南描述如何使用真实设备Tuya Smart Plug配置端到端集成。
您也可使用Tuya虚拟设备进行测试。
前置条件
开始前请确保具备:
- 具有创建集成权限的ThingsBoard账户
- Tuya IoT Platform账户
- 至少一台Tuya设备(实体或虚拟)
- 已安装并登录的Tuya Smart App
安装智能设备控制应用
第一步是在您的移动设备上安装智能设备控制应用(Smart Life、Tuya Smart或其他),并在应用中注册您的Smart Plug设备。
Tuya云配置
创建云项目
下一步是在Tuya上注册账户并创建云项目。
- 进入Cloud选项卡 ⇾ Project Management。点击Create Cloud Project按钮。
- 在弹出窗口中,填写必填字段并点击”Create”。
- 在Authorize API Services窗口中进行其他设置,然后点击Authorize。
- 此时您的云项目已创建完成。请记住该窗口中的Access ID/Client ID和Access Secret/Client Secret值。这些值将在Tuya集成配置过程中使用。
启用Tuya消息服务
启用消息服务以便及时接收设备注册、数据上报和状态变更的消息。
- 进入Message Service选项卡。
- 切换开关以启用消息服务。
- 在弹出窗口中设置消息服务,配置Message Service Type和Alert Contact的相关设置。点击Ok。
- 消息服务已启用。
关联Tuya App账户
您需要使用Smart Life应用账户将设备关联到该项目。
- 进入Cloud选项卡 -> Project management。选择您的项目。
- 导航到Devices选项卡 -> 选择Link App Account选项卡。点击Add App Account。
- 选择Tuya Account Authorization选项。
- 使用Smart Life应用扫描二维码进行授权。
- 在弹出窗口中,选择Automatic Link并点击Ok。
- 此时您移动应用账户下的设备已添加到项目中。
- 导航到”All Devices”选项卡。您可以看到设备已添加到项目中。
请确保已启用消息规则(过滤器)以接收上行消息。最基本的过滤器(statusReport)即可满足测试需求:
- 进入 "Message Service" 选项卡。点击 "创建Messaging Rules" 按钮。
- 点击 "添加Message Filtering Rule" 按钮。
- 选择 "statusReport" 并点击 "Release Rule" 按钮。
- 启用messaging rule。
进入 "Message Service" 选项卡。点击 "创建Messaging Rules" 按钮。
点击 "添加Message Filtering Rule" 按钮。
选择 "statusReport" 并点击 "Release Rule" 按钮。
启用messaging rule。
ThingsBoard集成配置
接下来配置ThingsBoard平台与Tuya之间的集成。
1. 基本设置
- 登录您的ThingsBoard账户。
- 进入Integrations center ⇾ Integrations。
- 点击+(加号)按钮。
- 从列表中选择Tuya集成类型。
- 如需监控事件和排查问题,请启用debug mode。
启用调试模式可让您追踪与执行相关的事件、状态和潜在错误,大大简化开发和故障排查过程。
- 点击Next。
2. 上行数据转换器
上行数据转换器用于将设备传入的数据转换为ThingsBoard所需的显示格式。
- 输入转换器名称,名称必须唯一。
- 如需查看事件,请启用调试模式。
- 在Main decoding configuration部分,提供您自己的脚本或使用以下脚本。
可使用 TBEL(TBEL)或 JavaScript 开发用户自定义函数。
建议使用 TBEL,其在ThingsBoard 中的执行效率远高于 JS。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| // 从缓冲区解码上行消息
// payload - 字节数组
// metadata - key/value 对象
/** 解码器 **/
// 将 payload 解码为 JSON
var data = decodeToJson(payload);
var deviceName = data.?bizData.?devId != null ? data.?bizData.?devId : data.?devId;
var deviceType = 'Tuya device';
var telemetry = [];
if (data.status != null) {
for (var i = 0; i < data.status.length; i++) {
var res = {};
var code = data.status[i].code;
var value = data.status[i].value;
if (code == "cur_voltage" || code == "cur_power") {
value = data.status[i].value / 10;
} else if (code == "cur_current") {
value = data.status[i].value / 100;
}
res[code] = value;
telemetry.push(res);
}
} else {
telemetry = data;
}
var result = {
deviceName: deviceName,
deviceType: deviceType,
attributes: {},
telemetry: telemetry,
deviceName: deviceName,
};
/** 辅助函数 'decodeToString' 和 'decodeToJson' 已内置 **/
return result;
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| // 从缓冲区解码上行消息
// payload - 字节数组
// metadata - key/value 对象
/** 解码器 **/
// 将 payload 解码为 JSON
var data = decodeToJson(payload);
var deviceName = data.devId;
var deviceType = 'Tuya device';
var telemetry = [];
if (data.status != null) {
for (var i = 0; i < data.status.length; i++) {
var res = {};
var code = data.status[i].code;
var value = data.status[i].value;
if (code == "cur_voltage" || code == "cur_power") {
value = data.status[i].value / 10;
} else if (code == "cur_current") {
value = data.status[i].value / 100;
}
res[code] = value;
telemetry.push(res);
}
} else {
telemetry = data;
}
var result = {
deviceName: deviceName,
deviceType: deviceType,
attributes: {},
telemetry: telemetry
};
return result;
/** 辅助函数 **/
function decodeToString(payload) {
return String.fromCharCode.apply(String, payload);
}
function decodeToJson(payload) {
// 将 payload 转换为字符串
var str = decodeToString(payload);
// 将字符串解析为 JSON
var data = JSON.parse(str);
return data;
}
return result;
|
|
3. 下行数据转换器
下行转换器将出站RPC消息进行转换,然后由集成发送到您的设备。
您可以使用我们提供的下行转换器示例,也可以根据您的配置编写自己的转换器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| /** 编码器 **/
var command = {};
command["code"] = msg.method;
if (msg.params == "false" || msg.params == "true") {
command["value"] = Boolean.valueOf(msg.params);
} else {
command["value"] = msg.params;
}
var result = {
// 下行数据内容类型:JSON、TEXT 或 BINARY(base64 格式)
contentType: "JSON",
// 下行数据
data: JSON.stringify(command),
// 可选的 key/value 格式元数据对象
metadata: {
deviceId: metadata.deviceName
}
};
return result;
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| /** 编码器 **/
const command = {
code: msg.method,
value:
msg.params === "false" || msg.params === "true"
? msg.params === "true"
: msg.params
};
const result = {
contentType: "JSON",
data: JSON.stringify(command),
metadata: {
deviceId: metadata.deviceName
}
};
return result;
|
|
4. 连接
在最后一步中,填写以下字段:
- Region - 指定您所在的区域;
- Environment:
- 对于真实设备,选择PROD。
- 如果您想将虚拟设备连接到ThingsBoard并在购买前测试其运行情况,请选择TEST。
- Access Id和Access Key是Tuya分配的授权凭证。将之前复制的Access Id和Access Key粘贴到集成中。
- 点击Add创建集成。
规则链配置
集成配置完成并准备就绪后,需要进入Rule Chains,选择“Root Rule Chain”,在其中创建规则节点Integration Downlink。输入名称,选择之前创建的Tuya集成,然后点击Add。

完成上述步骤后,点击规则节点message type switch右侧的灰色圆圈,将其拖拽到Integration Downlink的左侧。在弹出窗口中添加“RPC Request to Device”链接,然后点击Add。保存Root Rule Chain。

上行消息
ThingsBoard Tuya集成创建完成后,您需要将Smart Plug断电后重新连接。设备将向集成发送包含遥测数据和属性的上行消息。
进入Entities ⇾ Devices。您应该能看到由集成自动创建的设备。
在本示例中,设备名称为SmartPlug268970。
Tuya Smart Plug仪表板
为了可视化Smart Plug数据并测试RPC命令,我们将创建Tuya Smart Plug仪表板。

- 打开Tuya Smart Plug仪表板。
- 进入Edit mode,更新Entity aliases - 在smartPlug别名中将您的设备指定为目标设备。

注意:您设备的时间序列数据键可能与所展示的不同。如有需要,请根据您设备的文档对每个部件进行相应替换。

如果一切配置正确,您将看到Smart Plug的状态指示灯(开/关)以及最近一小时的遥测数据:电压、功率和电流。

Smart Plug状态指示灯为绿色。尝试点击On/Off Round switch关闭Smart Plug。

Smart Plug状态指示灯变为灰色,电力消耗停止。

下一步
-
快速入门指南 - 快速了解ThingsBoard主要功能,约15-30分钟完成。
-
安装指南 - 学习如何在各种操作系统上部署ThingsBoard。
-
数据可视化 - 配置ThingsBoard复杂仪表盘的说明。
-
数据处理与操作 - 学习使用ThingsBoard规则引擎。
-
IoT数据分析 - 学习使用规则引擎执行基本分析任务。
-
高级功能 - 了解ThingsBoard高级功能。