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字段 |
---|---|---|---|---|
1 | 400001 | TRUE | {} | point/value |
2 | 400002 | TRUE | {"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写字段 |
---|---|---|---|---|---|---|
1 | 400001 | TRUE | {"point":{"pointId":400001,"value":23}} | point/value |
当测点400001的值修改为123时,将下发Json报文 {"point":{"pointId":400001,"value":123}}
。
此外,下发数据的自定义Json格式支持双层body写,即通过在“Json写字段”中用;
分割,实现同时写入值和时间戳。示例如下:
序号 | 测点号 | 是否可写 | Json过滤 | Json字段 | Json写模板 | Json写字段 |
---|---|---|---|---|---|---|
1 | 400002 | TRUE | {"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写字段 |
---|---|---|---|---|---|---|
1 | 100001 | FALSE | {"body":[{"body":[{"name":"tgPa","quality":"1"}],"dev":"DC_INV"}]} | val |
当接收到上述文本后,测点100001将采集到值220.331。