Skip to content

硬件接入流程说明

请先阅读一下一些约定和默认的规则,方便您在后续过程中更好的理解和顺利的对接

整体流程

名词解释

目前存在两种mqtt连接方式,根据init接口返回cloud字段来分别适配两种连接方式。
阿里云MQTT名词解释

https://help.aliyun.com/document_detail/42420.html

华为云EMQX说明

https://www.emqx.io/docs/zh/v5.1/


命名规则

外部厂商设备ID推荐的编号规则

推荐 "厂商名称简拼大写"+"年月日"+"序列号"命名方式,比如:GLODON20200107001,GLODON为厂商简拼,20200107为年月日,001为当天序列号

阿里云Client ID命名

微消息队列 MQTT 版的 Client ID 是每个客户端的唯一标识,要求全局唯一,使用相同的 Client ID 连接微消息队列 MQTT 版服务会被拒绝。Client ID 由两部分组成,组织形式为 @@@。Client ID 的长度限制为 64 个字符,不允许使用不可见字符,具体限制请参见使用限制,更多请见上方 阿里云MQTT名词解释 中的描述。

连接阿里云时的clientID 必须 开头,比如劳务测试环境客户端前缀为:“GID_GLM@@@GLODON20200107001”

华为云ClientID命名

华为云就直接使用设备号就行:GLODON20200107001


设备发送消息到平台时的Topic命名规则

参考设备:人脸闸机 GLM/$product/$type/$qos 比如测试环境下人脸闸机设备消息发往:GLM/gateface/e/1,

规则描述:

  • GLM 为根Topic从 iot init 接口中动态获取,下方有详细描述
  • $product : 设备类型,如 gdb 工地宝 ,gatebox 闸机宝, gateface 人脸设备 如无特殊情况,人脸设备统一使用 gateface, 但也存在之前两个特殊的类型定义 face-dg 弹弓人脸,face-mobile中移人脸
  • $type : e,event 设备上报 s,service 设备指令下发 ,用来区分是event还是service 服务调用一般是直接下发到指定设备!
  • $qos : 通讯质量 qos 取值范围 0,1

消息体规则:

  • 消息务必请使用utf-8格式编码,不然可能导致解析乱码

时间戳传递规则

  • 由于工地宝和小黑盒设备的特殊性,时间戳没有用long类型,而是用字符串型传递的
  • 基于Android 设备,大屏,人脸,时间戳 ts 字段, syncTime字段尽可能传递long类型


Mqtt通讯规则

event格式

{
  "client" : $clientId ,
  "event" : $eventName ,
  "data": {
     $JsonDocument
  },
  "success": 是否成功,
  "error": 错误码,或是英文
  "ts": "1551863638000"
}
  • clientId: 设备的唯一编码
  • event: 调用event的名称
  • data: $JsonDocument 为具体 event 的json表示信息,在下方的实例中有详尽展示
  • success: 是否成功,0失败 1成功
  • error: 返回错误码或是英文,不能有中文
  • ts: 时间戳,为字符串格式,设备端C程序只能存int不方便存longlong也就是java的long类型,如果非嵌入式C设备,这个时间戳要使用java对应的Long类型

service格式

{
  "service" : "$serviceName",
  "data" : {
    $JsonDocument
  },
  "ts": "1551863638000",
}

service : 服务名称
data: $JsonDocument具体service 的json表示信息,在下方的实例中有详尽展示
ts: 时间戳,为字符串格式,设备端C程序只能存int不方便存longlong也就是java的long类型,如果非嵌入式C设备,这个时间戳要使用java对应的Long类型


设备接收消息

连接阿里云请不要显示订阅任何Topic 阿里云版本的MQTT服务无需显示订阅任务topic,服务端会帮每一个连接的设备订阅p2p的消息队列,更多信息请参考

https://help.aliyun.com/document_detail/96176.html?spm=a2c4g.11186623.6.552.4abf3dc9phvCNK (P2P 消息收发模式(MQTT))

关于MQTT连接方式和topic拼接方式,clientId拼接方式,下方使用token模式认证方式链接MQTT服务 小节中会有详尽描述

阿里云MQTT接受P2P消息

代码中只要处理 messageArrived 方法即可,有P2P消息时,便会在这里触发回调,这里也是客户端接受消息,触发响应动作的代码位置

华为云通过EMQ方式连接MQTT服务接受P2P消息 EMQ方式连接需要在连接建立后显示主动订阅 GLM/p2p/DEVICE_CODE , DEVICE_CODE 是自己的设备号,订阅完此队列后,同样在 messageArrived 处理回调逻辑即可