编辑 | blame | 历史 | 原始文档

部标JT808 808协议网关

项目介绍

  • 基于Netty,实现JT808 808协议、1078协议、苏标、粤标的消息处理,与编码解码;
  • 无需修改代码,同时支持TCP、UDP协议;
  • 使用Spring WebFlux 提供支持高并发的Web接口服务;
  • 不依赖Spring,可移除Spring独立运行(编码解码可支持Android);
  • 最简洁、清爽、易用的部标开发框架。

主要特性

  • 代码足够精简,便于二次开发;
  • 致敬Spring、Hibernate设计理念,熟悉Web开发的同学上手极快;
  • 使用注解描述协议,告别繁琐的封包、解包;
  • 支持异步批量处理,显著提升MySQL入库性能;
  • 提供报文解释器(解析过程分析工具),编码解码不再抓瞎;
  • 全覆盖的测试用例,稳定发版。

协议支持(传输层协议支持TCP、UDP)

协议名称 版本 是否支持 备注
JT/T 808 2011 支持
JT/T 808 2013 支持
JT/T 808 2019 支持
JT/T 1078 2016 支持 需自建流媒体服务
T/JSATL 12(主动安全-苏标) 2017 支持 基于JT/T808-2013
T/GDRTA 002(主动安全-粤标) 2019 支持 基于JT/T808-2019

备注:无需手动配置,同时兼容2011、2013、2019协议版本,支持分包请求、分包应答及超时分包补传。
1078协议支持音视频指令,流媒体服务需自行搭建。

代码仓库

演示

  • 设备接入:127.0.0.1:7100
  • 日志监控:http://127.0.0.1:8100/ws.html
  • 接口文档:http://127.0.0.1:8100/doc.html

验证步骤

1.验证消息定义

解码分析工具:org.yzh.Elucidator(报文 <=> 对象)

使用src\test\java\Elucidator
分析报文内每个属性所处的位置以及转换后的值,以便查询报文解析出错的原因
```java
package org.yzh;

public class Elucidator extends JT808Beans {

public static final JTMessageAdapter coder = new JTMessageAdapter("org.yzh.protocol");

public static void main(String[] args) {
    String hex = "020000d40123456789017fff000004000000080006eeb6ad02633df7013800030063200707192359642f000000400101020a0a02010a1e00640001b2070003640e200707192359000100000061646173200827111111010101652f000000410202020a0000000a1e00c8000516150006c81c20070719235900020000000064736d200827111111020202662900000042031e012c00087a23000a2c2a200707192359000300000074706d732008271111110303030067290000004304041e0190000bde31000d90382007071923590004000000006273642008271111110404049d";
    JTMessage msg = H2019(T0200JSATL12());

    msg = decode(hex);
    hex = encode(msg);
}

}
Elucidator 运行效果如下:
0 [001f] 省域ID: 31
2 [0073] 市县域ID: 115
4 [0000000034] 制造商ID: 4
9 [000000000000000000000042534a2d47462d3036] 终端型号: BSJ-GF-06
29 [74657374313233] 终端ID: test123
36 [01] 车牌颜色: 1
37 [b2e241383838383838] 车辆标识: 测A888888
0 [0100] 消息ID: 256
2 [002e] 消息体属性: 46
4 [012345678901] 终端手机号: 12345678901
10 [7fff] 流水号: 32767

7e0100002e0123456789017fff001f00730000000034000000000000000000000042534a2d47462d30367465737431323301b2e241383838383838157e
```

2.模拟设备请求

运行 \协议文档\发包工具.exe
1. 协议类型:【TCP Client】
2. 远程主机地址:127.0.0.1
3. 远程主机端口:7100
4. 接收设置:⊙HEX
5. 发送设置:⊙HEX
6. 点击按钮【连接】
7. 将上一个步骤中生成的报文,粘贴到文本框
8. 点击按钮【发送】

注意:先选择HEX,再粘贴报文
7e0100002e0123456789017fff001f00730000000034000000000000000000000042534a2d47462d30367465737431323301b2e241383838383838157e
如下图所示
使用发包工具模拟请求

3.下发命令到终端

已集成OpenAPI文档,启动后可访问如下地址
* Knife4j UI:http://127.0.0.1:8000/doc.html
* Swagger UI:http://127.0.0.1:8000/swagger-ui/index.html

录入参数,点击发送
Knife4j UI

Console

开发步骤

1.定义消息

```java
package org.yzh.protocol.t808;

@Message(JT808.终端注册)
public class T0100 extends JTMessage {

@Field(desc = "省域ID")
private short provinceId;
@Field(desc = "市县域ID")
private short cityId;
@Field(length = 11, desc = "制造商ID")
private String makerId;
@Field(length = 30, desc = "终端型号")
private String deviceModel;
@Field(length = 30, desc = "终端ID")
private String deviceId;
@Field(desc = "车牌颜色:0.未上车牌 1.蓝色 2.黄色 3.黑色 4.白色 9.其他")
private byte plateColor;
@Field(desc = "车辆标识")
private String plateNo;

}
```

2.处理终端上报的消息

package org.yzh.web.endpoint;

@Endpoint
public class JT808Endpoint {

    @Autowired
    private DeviceService deviceService;

    @Mapping(types = 0x0100, desc = "终端注册")
    public T8100 register(T0100 message, Session session) {
        T8100 result = new T8100();
        result.setResponseSerialNo(message.getSerialNo());

        DeviceInfo device = deviceService.register(message);
        if (device != null) {
            session.register(message);

            result.setToken("1234567890A");
            result.setResultCode(T8100.Success);
        } else {
            result.setResultCode(T8100.NotFoundTerminal);
        }
        return result;
    }
}

3.下发消息到终端(通过Web接口)

package org.yzh.web.controller;

@RestController
@RequestMapping("device")
public class JT808Controller {

    @Autowired
    private MessageManager messageManager;

    @Operation(summary = "8103 设置终端参数")
    @PutMapping("parameters")
    public T0001 setParameters(@Parameter(description = "终端手机号") @RequestParam String clientId, @RequestBody Parameters parameters) {
        Map<Integer, Object> map = parameters.toMap();
        T8103 request = new T8103(map);
        T0001 response = messageManager.request(clientId, request, T0001.class);
        return response;
    }
}

注解说明:
* @Message,消息类型,等价Hibernate的 @Table
* @Field,消息属性,等价Hibernate的 @Column

  • @Endpoint,消息接入点,等价SpringMVC的 @Controller
  • @Mapping,消息映射到方法,等价SpringMVC中 @RequestMapping
  • @Async,异步消息处理,用于较为耗时的操作(例如文件写入)。
  • @AsyncBatch,消息批量处理,对于高并发的消息(例如:位置信息汇报),合并同类消息,提升入库性能。

目录结构
sh ├── 协议文档 │ ├── 808-2011协议文档 │ ├── 808-2013协议文档 │ ├── 808-2019协议文档 │ ├── 1078-2016协议文档 │ ├── 粤标-2020协议文档 │ ├── 苏标-2016协议文档 │ └── 发包工具.exe │ ├──jtt808-protocol │ │ │ ├──main │ │ ├── t808 消息定义 │ │ ├── t1078 消息定义 │ │ ├── jstal12 消息定义 │ │ └── codec 编码解码 │ └──test │ ├── codec 协议解析工具 │ └── protocol 协议单元测试 │ ├──jtt808-server │ ├──main │ │ └── web SpringBoot微服务 │ │ ├── config 808服务配置项 │ │ └── endpoint 808消息入口,通过netty收到的请求会根据@Mapping转发到此 │ └──test │ ├── ClientTest 客户端 │ └── StressTest 压力测试

项目创立于2017年9月,至今,jt808-server已接入多家公司的线上产品线,接入场景如车辆管理平台,IOT业务和大数据作业等,截止最新统计时间为止,jt808-server已接入的公司包括不限于:

- 1.福建九桃贸易有限公司
- 2.深圳市特维视科技有限公司
- 3.厦门河联信息科技有限公司
- 4.北京华盾互联科技有限公司
- 5.宜昌华维物流有限责任公司
- 6.江苏推米信息科技有限公司
- 7.山东六度信息科技有限公司
- 8.亚信创新技术(南京)有限公司
- 9.无锡创趣网络科技有限公司
- 10.新疆智联云信息科技有限公司
- 11.杭州品铂科技有限公司
- 12.萍乡萍钢安源钢铁有限公司
- 13.承德统凯网络科技有限公司
- 14.陕西省君凯电子科技有限公司
- 15.北京晓羊集团
- 16.成都谷帝科技有限公司
- 17.西安长城数字软件有限公司
- 18.上海昕鼎网络科技有限公司
- 19.江西简悠信息技术有限公司
- 20.上海物泊科技有限公司
- 21.贵州泰恒元科技股份有限公司
- 22.湖南高仕达信息技术有限公司
- ……

更多接入的公司,欢迎在 登记地址 登记,登记仅仅为了项目推广(登记后可提供一次技术支持)。

欢迎大家的关注和使用,jt808-server也将拥抱变化,持续发展。

项目会不定期进行更新,建议star和watch一份,您的支持是我最大的动力。

如有任何疑问或者BUG,请联系我,非常感谢。

另提供技术支持、协议扩展、数据入库、二次开发等服务。

项目负责人QQ:[1527621790]

技术交流QQ群:[906230542,107751976,323100134]

  • JT808泛指JT/T808协议,是指交通部制定的运输行业通信标准,全称《交通运输行业标准 - 道路运输车辆卫星定位系统终端通信协议及数据格式》
编辑 | blame | 历史 | 原始文档
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2019 剑器近

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.