跳至主要內容

属性下发规则

约 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

为了方便调试规则云函数,建议您学习使用在线调试工具。阅读 每日调用上亿次的消息规则云函数,如何在线测试?open in new window

更多示例