属性下发规则
约 953 字大约 3 分钟
属性下发规则
当云平台向设备端下发属性后,会触发设备的属性下发规则。
属性下发规则目前支持以下操作:
- 自定义数据下发函数
自定义数据下发函数
该操作用于在属性下发后,自动生成自定义数据下发。可通过云函数动态生成自定义数据下发的消息内容。
选项
- 云函数:动态生成下发的自定义数据消息。
- 推送方式:选择设备接入平台使用的协议,可选 MQTT 或 TCP。
- 自定义数据流:选择设备通过哪个自定义数据流接收消息,请填写在设备类型中已创建的自定义数据流标识符。
云函数参数
push_attributes
:设备下发的属性集合,作为参数传入函数。
云函数返回值
object
:构造下发自定义数据的消息。null
:表示不下发自定义数据到设备。
下发自定义数据的消息 object
格式,根据自定义数据流的数据格式不同,分为以下几种:
HEX
数据格式:
{
"type": "hex",
"msg": "02030010000185FC"
}
生成以上的自定义数据消息,云函数如下:
module.exports = function (push_attributes) {
/**
* push_attributes: 下发的属性对象,作为函数参数传入。
* data: 构造下发的自定义数据对象,下发到硬件。
*/
var data = {
"type": "hex",
"msg": "02030010000185FC"
}
return data;
}
Plaintext
文本格式
{
"type": "text",
"msg": "location,1,5,6,0"
}
生成以上的自定义数据消息,云函数如下:
module.exports = function (push_attributes) {
/**
* push_attributes: 下发的属性对象,作为函数参数传入。
* data: 构造下发的自定义数据对象,下发到硬件。
*/
var data = {
"type": "text",
"msg": "location,1,5,6,0"
}
return data;
}
JSON
格式
{
"type": "json",
"msg": {
"command": "openLock",
"led": "ON",
"stat": "011001"
}
}
生成以上的自定义数据消息,云函数如下:
module.exports = function (push_attributes) {
/**
* push_attributes: 下发的属性对象,作为函数参数传入。
* data: 构造下发的自定义数据对象,下发到硬件。
*/
var data = {
"type": "hex",
"msg": {
"command": "openLock",
"led": "ON",
"stat": "011001"
}
}
return data;
}
示例:将开关量属性下发自动转为 Modbus RTU 06 指令
客户在项目中遇到个别 RS485 继电器不支持标准的 05 功能码(写线圈寄存器)下发控制,而是采用了 06 功能码(写入保持寄存器),这种情况下,无法直接利用平台 Modbus 智能转换来下发控制,可以创建属性下发规则,选择自定义数据下发函数操作,编写一个简单的规则云函数,如下:
function relay2Modbus06(data, addr, bool) {
if (bool === true) {
data.msg = Cloud.ModbusRTU.writeRegister(addr, 1);
} else if (bool === false) {
data.msg = Cloud.ModbusRTU.writeRegister(addr, 0);
}
}
module.exports = function (push_attributes) {
/**
* push_attributes: 下发的属性对象,作为函数参数传入。
* data: 构造下发的自定义数据对象,下发到硬件。
*/
var data = {
type: "hex",
msg: ""
}
// 设置从站地址为 1
Cloud.ModbusRTU.setUnitId(1);
// 分别检查多个继电器的开关量属性,将其转化为 Modbus RTU 06 指令。注意:仅支持一次下发一个继电器开关属性。
relay2Modbus06(data, 1, push_attributes.relay1);
relay2Modbus06(data, 2, push_attributes.relay2);
relay2Modbus06(data, 3, push_attributes.relay3);
relay2Modbus06(data, 4, push_attributes.relay4);
return data;
}
当平台向设备下发属性,例如:
{
"relay1": true
}
通过以上规则,会自动转换为以下自定义数据流消息:
01060001000119CA
为了方便调试规则云函数,建议您学习使用在线调试工具。阅读 每日调用上亿次的消息规则云函数,如何在线测试?