服务名称:Iot-Fox-Publish北向服务
模块名称:iot-fox-publish
很多中小型集成商用户,他们项目的设备规模和数据规模也不大,然后自身也没有多少软件开发能力,也不会去找软件外包公司。
他们在进行项目的时候,基本上的业务流程是寻找第三方可用产品,然后快速的搭建自己的项目应用。
这时候,他们对第三方可用产品的诉求,是开箱、安装后,简单配置一下,就可以直接使用了。
物联网市场的市面上有很多的第三方物联网云平台产品,它们支持MQTT的接入。这些物联网平台能够对设备推送到MQTT服务器的数据,进行简单的解析并入库管理。
这些中小型集成商用户,就希望Fox-Edge有个简单的北向服务,将Fox-Edge通过MQTT接口推送到MQTT服务器,那么他们在外购的第三方物联网云平台上, 简单的配置数据格式转换,就完成了基本的边缘端到云端的数据接入问题。
针对这些中小集成商用户们的这个用户场景,iot-fox-publish北向服务 ,提供了MQTT的数据推送能力,方便他们跟第三方物联网平台快速对接。
该服务采用的是数据变更即推送的方式,它的数据推送速度非常高速 ,如果设备和数据规模比较大的话,会对北向网络和第三方云平台造成巨大的压力。
如果需要支持规模比较大的网络,那么使用iot-fox-cloud和Fox-Cloud 配合的方案,Fox-Edge与Fox-Cloud互相握手协商双方的数据推送行为, 这种方案性能高效,支持大规模设备的网络。
又或者,根据自己的具体业务场景,自行开发一个北向服务,确定符合自己项目需要的数据推送策略。
在组件仓库中,选择iot-fox-publish组件进行下载和安装
在Fox-Edge之中安装北向服务之后,iot-fox-publish服务会有默认的系统参数,作为该服务的工作参数。
该参数主要是如何进行数据推送给云端。
{
"extend": {
"extendField": "iot-fox-publish"
},
"topic": {
"publish": "/iot-fox-publish/gateway/{edgeId}/up",
"subscribe": "/iot-fox-publish/gateway/{edgeId}/down/#"
},
"remote": {
"mode": "mqtt",
"http": {
"host": ""
},
"mqtt": {
"host": "192.168.1.21",
"name": "Mica-Mqtt-Client",
"port": 1883,
}
},
"entities": {
"deviceValueEntity": {
"publish": true,
"interval": 3600
},
"deviceRecordEntity": {
"publish": true,
"interval": 10
},
"deviceValueExEntity": {
"publish": true,
"interval": 3600
}
}
}
{
"extend": {-----------------------------------------------------------设备上的扩展字段,用于标识哪些设备需要上传
"extendField": "iot-fox-base"
},
"topic": {------------------------------------------------------------跟云端服务约定的topic,可以修改成其他格式
"publish": "/iot-fox-base/gateway/{edgeId}/up",
"subscribe": "/iot-fox-base/gateway/{edgeId}/down/#"
},
"remote": {-----------------------------------------------------------访问云端的通讯方式和参数
"mode": "mqtt",
"http": {
"host": ""
},
"mqtt": {
"host": "192.168.1.21",
"port": 1883
}
},
"entities": {---------------------------------------------------------需要推送的数据
"deviceValueEntity": {
"publish": true,--------------------------------------------是否需要推送
"interval": 1-----------------------------------------------推送的时间间隔(单位:秒)
},
"deviceRecordEntity": {
"publish": false,
"interval": 10
}
}
}
iot-fox-publish服务会根据全局配置的参数,把自己的数据推送到MQTT服务器指定的topic。
默认是发送到publish topic /iot-fox-publish/gateway/{edgeId}/up ,第三方云平台可以通过向MQTT服务器订阅该topic获得Fox-Edge推送过来的数据。
该topic是用户可配置的,修改完成以后,需要重启服务生效。
Fox-Edge也会订阅subscribe topic,这是因为记录类型的数据,需要进行第三方云端和Fox-Edge之间进行增量推送,要通过该topic告知上次推送过来的日志数据,已经接收到了。
{
"topic": {
"publish": "/iot-fox-publish/gateway/{edgeId}/up",
"subscribe": "/iot-fox-publish/gateway/{edgeId}/down/#"
}
}
此时会接收到一组来自Fox-Edge的报文,例如下面的范例,其中
F9509B1CE7B0F023是Fox-Edge主机的ID,可以在首页查询到这个信息,
devicestatusentity是DeviceStatusEntity实体类型的小写
method,是insert/delete/update,分别是增、删、改
entity,是DeviceStatusEntity的数据格式,可以到redis中查看该数据结构
Topic: /iot-fox-publish/gateway/F9509B1CE7B0F023/up/devicestatusentity
[
{
"method": "update",
"entity": {
"id": 1559,
"createTime": null,
"updateTime": 1721541639469,
"commSuccessTime": 1721541639446,
"commFailedTime": 0,
"commFailedCount": 0
}
},
{
"method": "update",
"entity": {
"id": 1547,
"createTime": null,
"updateTime": 1721541639318,
"commSuccessTime": 1721541639284,
"commFailedTime": 0,
"commFailedCount": 0
}
}
]
那么使用MQTT客户端,订阅相关主题后,会看到对应的信息