服务名称

文档链接

开发背景

很多中小型集成商用户,他们项目的设备规模和数据规模也不大,然后自身也没有多少软件开发能力,也不会去找软件外包公司。

他们在进行项目的时候,基本上的业务流程是寻找第三方可用产品,然后快速的搭建自己的项目应用。

这时候,他们对第三方可用产品的诉求,是开箱、安装后,简单配置一下,就可以直接使用了。

物联网市场的市面上有很多的第三方物联网云平台产品,它们支持MQTT的接入。这些物联网平台能够对设备推送到MQTT服务器的数据,进行简单的解析并入库管理。

这些中小型集成商用户,就希望Fox-Edge有个简单的北向服务,将Fox-Edge通过MQTT接口推送到MQTT服务器,那么他们在外购的第三方物联网云平台上, 简单的配置数据格式转换,就完成了基本的边缘端到云端的数据接入问题。

针对这些中小集成商用户们的这个用户场景,iot-fox-publish北向服务 ,提供了MQTT的数据推送能力,方便他们跟第三方物联网平台快速对接。

约束条件

该服务采用的是数据变更即推送的方式,它的数据推送速度非常高速 ,如果设备和数据规模比较大的话,会对北向网络和第三方云平台造成巨大的压力。

如果需要支持规模比较大的网络,那么使用iot-fox-cloudFox-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客户端,订阅相关主题后,会看到对应的信息