JT/T808 协议网关

协议介绍

emqx-jt808 做为 emqx 的接入网关,按照其功能逻辑和整个系统的关系,将整个消息交换的过程可以分成三个部分:终端侧,平台侧和其它侧:

  1. |<-- Terminal -->|<---------- Broker Side ---------->|<--- Others --->|
  2. |<- Side ->| |<-- Side -->|
  3. +---+ PUB +-----------+
  4. | D | INCOMING +------------+ PUB +---------+ -->| subscriber|
  5. | E |----------->| |----------->| |--/ +-----------+
  6. | V | | emqx-jt808 | | EMQ X |
  7. | I |<-----------| |<-----------| |<-- +-----------+
  8. | C | OUTGOING +------------+ PUB +---------+ \--| publisher |
  9. | E | PUB +-----------+
  10. +---+
  1. 终端侧:通过 JT/T 808 协议进行交换数据,实现不同类型的数据的上报,或者发送下行的消息到终端。
  2. 平台侧:emqx-jt808 将报文解码后执行 注册/鉴权、或将数据报文 PUBLISH 到特定的主题上;代理订阅下行主题,将下行的 PUBLISH 消息转化为 JT/T 808 协议的报文结构,下发到终端。
  3. 其它侧,可以对 2 中出现的上行的 PUBLISH 消息的主题进行订阅,以接收上行消息。或对发布消息到具体的下行的主题,以发送数据到终端侧。

创建模块

打开 EMQ X DashboardJT/T808 网关 - 图1 (opens new window),点击左侧的 “模块” 选项卡,选择添加:

image-20200927213049265

选择 JT/T808 协议接入网关:

image-20200927213049265

配置相关基础参数:

image-20200927213049265

添加监听端口:

image-20200927213049265

配置监听参数:

image-20200927213049265

点击确认到配置参数页面:

image-20200927213049265

点击添加后,模块添加完成: image-20200927213049265

emqx-jt808 实现规定:

  • 系统内以手机号作为一个连接的唯一标识,即 ClientId

配置参数

emqx-jt808 的实现支持匿名的方式接入认证:

配置项说明
允许匿名登录是否允许匿名用户登录
注册服务地址JT/T808 终端注册的 HTTP 接口地址
认证服务地址JT/T808 终端接入鉴权的 HTTP 接口地址
下行消息主题格式上行主题。上行消息到 EMQ X 系统中的消息主题%c: 接入客户端的 ClientId,%p: 接入客户端的 Phone
上行消息主题格式下行主题。上行消息到 EMQ X 系统中的消息主题%c: 接入客户端的 ClientId,%p: 接入客户端的 Phone
允许最大报文长度最大处理的单个JT/T808协议报文大小

注册及鉴权

注册请求详细格式如下:

注册请求:

  1. URL: http://127.0.0.1:8991/jt808/registry
  2. Method: POST
  3. Body:
  4. { "province": 58,
  5. "city": 59,
  6. "manufacturer": "Infinity",
  7. "model": "Q2",
  8. "license_number": "ZA334455",
  9. "dev_id": "xx11344",
  10. "color": 3,
  11. "phone", "00123456789"
  12. }

注册应答:

  1. {
  2. "code": 0,
  3. "authcode": "132456789"
  4. }
  5. 或:
  6. {
  7. "code": 1
  8. }
  9. 其中返回码可以为:
  10. 0: 成功
  11. 1: 车辆已被注册
  12. 2: 数据库中无该车辆
  13. 3: 终端已被注册
  14. 4: 数据库中无该终端

鉴权请求:

  1. URL: http://127.0.0.1:8991/jt808/auth
  2. Method: POST
  3. Body:
  4. { "code": "authcode",
  5. "phone", "00123456789"
  6. }

鉴权应答:

  1. HTTP 状态码 200: 鉴权成功
  2. 其他: 鉴权失败

注:鉴权请求只会在系统未保存鉴权码时调用(即终端直接发送鉴权报文进行登录系统)

数据上下行

emqx-jt808 中通过配置上下行主题来收发终端消息:

上行

例如:制造商Idabcde终端Id1234567 的设备。

首先先使用 MQTT 客户端订阅主题 jt808/abcde1234567/up

  1. $ mosquitto_sub -t jt808/abcde1234567/up

例如终端在上报 数据上行透传(0x0900) 类型的消息后,订阅端会收到:

  1. { "body":
  2. { "data":"MTIzNDU2",
  3. "type":240
  4. },
  5. "header":
  6. { "encrypt":0,
  7. "len":7,
  8. "msg_id":2304,
  9. "msg_sn":4,
  10. "phone":"011111111111"
  11. }
  12. }

注:透明传输类,data 域的内容会 base64 编码一次在上报出来

数据下行

同样,以上行的ID为例;在终端鉴权成功后,使用 MQTT 客户端向该终端下发一个 ‘数据下行透传(0x8900)’ 类型的消息:

  1. $ mosquitto_pub -t jt808/abcde1234567/dn -m '{"body":{"data":"MTIzNDU2","type":240},"header":{"msg_id":35072}}'

注:下行 JSON 中,header 中的内容只需要带 msg_id 即可;body 中的内容根据不同的 msg_id 有不同的结构