主题
MQTT 接入
通道设置
参数说明:
名称 | 必填 | 说明 |
---|---|---|
地址 | 是 | MQTT Broker 的接入地址。 |
客户端标识 | 是 | ClientID |
心跳间隔 | 是 | KeepAlive 单位秒。 |
用户名 | 否 | - |
密码 | 否 | - |
数据格式 | 是 | MQTT 上传数据的格式。 |
Agent | 否 | 当数据格式为 KepServer 时必填,需要与 KepServer 中的设置保持一致。 |
订阅主题 | 否 | 当数据格式为 WinCC 或 自定义格式时有效。 |
格式转换 | 否 | 当数据格式为自定义时必填,用于通过脚本方式实现 MQTT 上传数据的解析。 |
点位寻址
除 TopLink-V3 外的其它数据格式,需要通过点位寻址来建立数据项与测点的映射关系。
点位寻址规则如下:
设备地址与点位地址拼接在一起,组成数据项标签地址。
即:数据项标签地址 = 设备地址+点位地址。
示例
如设备地址为“mydev1.”,某点位地址为“t1”,则该测点的完整地址为“mydev1.t1”。
数据格式
TopLink-V3
图扑物联网关采用的 MQTT 消息传输规范:网关接入协议TopLink-V3
WinCC
WinCC 提供了 MQTT 客户端功能,具体配置方式请参考:https://www.codenong.com/cs106290543/
WARNING
请确保 WinCC 中的 Tag 与测点地址保持一致,否则平台无法接收数据。
实时数据消息示例
json
{ "time": "2020-03-19T01:41:32.1782", "name": "tag1", "value": 123, "qualityCode": 76 }
自定义格式
使用自定义格式时,需要通过脚本方式实现数据格式转换。
订阅数据转换
订阅数据用于对上行数据进行格式转换,转换为平台可识别的数据格式。
点击【脚本编辑器】编写数据格式转换脚本。
入参说明
解析脚本的入参如下所示:
名称 | 类型 | 说明 |
---|---|---|
topic | String | topic 接收到消息的主题 |
payload | Object/Array | 通过 MQTT 订阅到的 json 对象 |
返回结果 用户可以结合入参编写脚本,返回符合平台要求的数据格式。
平台要求的返回格式是一个 JSON 对象数组,对象字段要求如下:
名称 | 类型 | 说明 |
---|---|---|
addr | String | 点位的实际地址,请参考点位通讯参数中关于“地址”的相关说明。 |
value | String/Number/Boolean | 点位值 |
time | Date | 时间戳 |
脚本示例1 假如 MQTT 上传的数据如下:
json
{
"device": "dev1",
"t1": 100,
"t2": 101
}
该数据上传了设备
dev1
中的t1
和t2
两个点位的值。
转换脚本如下:
javascript
return [
{ addr: payload.device+"t1", value: payload.t1, time: new Date() },
{ addr: payload.device+"t2", value: payload.t2, time: new Date() },
]
脚本示例2 假如 MQTT 上传的数据如下:
json
{
"ver" : "2.2.10",
"pKey" : "3309137155",
"sn" : "3309137155",
"ts" : 1715073900,
"devs" : [ {
"dev" : "HTYMK_FJ",
"ts" : 1715073900,
"d" : [ {
"m" : "Power_Total",
"ts" : 1715073900,
"v" : 338627.91
}, {
"m" : "Power_Rebeng",
"ts" : 1715073900,
"v" : 238356.11
}, {
"m" : "Heat_Rate_of_flow",
"ts" : 1715073900,
"v" : 0.0
}, {
"m" : "Heat_Total_flow",
"ts" : 1715073900,
"v" : 295769.0
}, {
"m" : "Heat_Total_heat",
"ts" : 1715073900,
"v" : 1206.0
} ]
} ]
}
转换脚本如下:
javascript
var points = []
payload.devs.forEach(item => {
item.d.forEach(p => {
points.push({
addr: item.dev + p.m,
value: p.v,
time: new Date(p.ts * 1000)
})
})
})
return points
发布数据转换
当用户执行指令下发操作时,将会触发 MQTT 的数据发布。
实现 MQTT 的数据发现,用户需要编写【转换脚本】,用于将要发布的数据转换为设备可识别的格式。
入参说明
转换脚本的入参如下所示:
名称 | 类型 | 说明 |
---|---|---|
deviceAddr | String | 测点的设备地址 |
pointAddr | String | 测点的点位地址 |
value | String | 下发值 |
返回结果 用户可以结合入参编写脚本,返回符合设备要求的数据格式。
名称 | 类型 | 说明 |
---|---|---|
topic | String | 数据发布的主题。 |
payload | Object/Array | 执行指令下发时发布的数据对象(平台会将 payload 转为 JSON 格式发布到 MQTT Broker)。 |
KepServer
如果使用 KepServer 则需要配置 IoT Gateway.Agent,具体步骤如下: 打开 KEPServer 配置管理器,新建一个“IoT Gateway Agent”,Agent Type 选择 MQTT Client
: 说明:
- 本教程中使用的 MQTT Broker Topic 为
kep/v1/real/gateway1
,其中kep/v1/real/
为固定格式,后面的 gateway1 为 Agent 名称,实际项目中用户可以将 gateway1 改为其它值。 - MQTT Broker URL 、Username 和 Password 要根据实际使用的 Broker 而定。
- 本教程中采用的是本地安装的 Mosquitto,因此 URL 为 tcp://localhost:1883。
Agent 创建完成后,双击新建的 Agent 节点,打开属性编辑器。 在常规设置中,将 Configuration 中的 Enabled 设置为“是”: 设置 Subscriptioins 支持控制指令下发:
检查或修改实时数据 Topic,该属性在创建 Agent 时已经设置好,本教程中不需要修改:
设置 KEPServer 向 MQTT 推送数据的消息格式,请使用默认的 Standard Template:
设置 MQTT 认证信息:
设置 Last Will,Topic 为 kep/v1/lwt/gateway1 其中
kep/v1/lwt/
为固定格式,后面的 gateway1 为 Agent 名称(与通道设置保持一致),实际项目中用户可以将 gateway1 改为其它值。 向 Agent 中添加需要转发的数据点:
- 点击“Add IoT Items”按钮,弹出“标记浏览器”;
- 选择需要转发的标记,点击应用;