4.2.13 MQTT通道文件测点寄存器参数配置

测点寄存器配置用于给出存储测点数据的地址信息,包括序号、点号、是否可写。对于每个通道,都需要对具体测点的寄存器信息进行以下配置:

  • 序号:u64类型,用正整数表示。序号是通道配置中给各个测点的编号,一般从1开始连续对测点进行编号。
  • 点号:正如在测点文件配置中所描述的那样,通信通道的点号与测点的点号一一对应完成对接。
  • 是否可写:bool类型,使用FALSE/TRUE表示该测点是否可写。
  • Json过滤:Json文本,当“是否Json”为TRUE时有效。通过Json过滤,可以按所定义的Json文本对Json内容进行过滤。当不需要过滤时,填写{}
  • Json字段:字符串类型,多层嵌套json用“/”表示。通过Json字段,可以按字符串匹配解析“json字段”并转换成测点的数值。
  • Json写模板:Json文本,当“是否Json”为TRUE时有效。通过写模板,可以自定义控制器下发的MQTT报文格式。
  • Json写字段:字符串类型,多层嵌套json用“/”表示。通过Json写字段,可以将测点的数值转换为Json报文。

举例说明

1. 接收数据的自定义Json格式

MQTT接收数据的自定义Json格式,可以通过“Json过滤”和“Json字段”实现,具体例子如下:

MQTT通道文件测点寄存器参数配置如下:

序号测点号是否可写Json过滤Json字段
1400001TRUE{}point/value
2400002TRUE{"deviceType":"SXBLQ","identifier":"data"}tags/TAG_4FEA

当接收到Json文本 {"point":{"pointId":400001,"value":666}},按Json字段匹配到"point"下的"value",并将所对应的值“666”赋值到400001测点。

当接收到Json文本 {"deviceType":"SXBLQ","identifier":"data","tags":{"TAG_4FEA":"100", "TAG_4FEB":"0.4"}},首先,按“Json过滤”过滤{"deviceType":"SXBLQ","identifier":"data"}信息;然后,按Json字段匹配到"tags"下的"TAG_4FEA",并将所对应的值“100”赋值到400002测点。

2. 下发数据的自定义Json格式

MQTT下发数据的自定义Json格式,可以通过“Json写模板”和“Json写字段”实现,具体例子如下:

MQTT通道文件测点寄存器参数配置如下:

序号测点号是否可写Json过滤Json字段Json写模板Json写字段
1400001TRUE{"point":{"pointId":400001,"value":23}}point/value

当测点400001的值修改为123时,将下发Json报文 {"point":{"pointId":400001,"value":123}}

此外,下发数据的自定义Json格式支持双层body写,即通过在“Json写字段”中用;分割,实现同时写入值和时间戳。示例如下:

序号测点号是否可写Json过滤Json字段Json写模板Json写字段
1400002TRUE{"token": "234","timestamp": "%Y-%m-%dT%H:%M:%S.%3f%z","body": [{"dev": "DC_ACChargePile_2","body": [{"name": "tgPi1","val": "5","unit": "","datatype": "int"}]}]}body/_array/body/_array/val;timestamp

通过如上配置,可以同时修改body/body下的val值和timestamp值。

3.全量过滤匹配

对于复杂的Json格式,为高效接收目标数据,在接收数据的自定义Json格式基础上提供全量过滤匹配功能。具体的通过“Json过滤”和“Json字段”实现。示例如下:

对于如下一段Json文本,希望通过MQTT通信读取body/body下名为"tgPa"的值。

{
    "token":"123",
    "time":"2019-03-01T09:30:08.23+0800",
    "body": [{
            "dev": "DC_INV",
            "body": [{
                    "name":"tgPa",
                    "val": “220.331",
                    "quality":"1","timestamp":"2019-11-22T14:00:08.230+0800"
                    },
                    {
                    "name":"tgQa",
                    "val": "220.317",
                    "quality":"1","timestamp":"2019-11-22T14:00:08.230+0800“
                    }
                ]
            }]
}

则可以通过如下MQTT通道文件测点寄存器参数配置实现:

序号测点号是否可写Json过滤Json字段Json写模板Json写字段
1100001FALSE{"body":[{"body":[{"name":"tgPa","quality":"1"}],"dev":"DC_INV"}]}val

当接收到上述文本后,测点100001将采集到值220.331。