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)即可满足测试需求:
Navigate to the "Message Service" tab. Click the "Create Messaging Rules" button;
Click the "Add Message Filtering Rule" button;
Select "statusReport" and click "Release Rule" button;
Enable the messaging rule.
Navigate to the "Message Service" tab. Click the "Create Messaging Rules" button;
Click the "Add Message Filtering Rule" button;
Select "statusReport" and click "Release Rule" button;
Enable the 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规则引擎。
IoT数据分析 - 学习使用规则引擎执行基本分析任务。
高级功能 - 了解ThingsBoard高级功能。