jt808 jt-808 JT/T808-2001 jt/t808-2001 部标协议 协议解析 java代码实现篇

一款简单JT-808解析项目

之前写过一篇关于jt-808解析博客,https://blog.csdn.net/hncdyj/article/details/89494209

有很多同学很感兴趣,这次给大家开源一款java版本解析jt808协议的工程。

你需要的知识储备

  • 需要了解什么是二进制,十进制,十六进制。
  • 需要了解java的基础数据结构,基本数据类型占用的字节大小。(如:short占用2个字节)
  • 需要会基本的linux操作,会安装redis,rabbitmq,mongodb,mysql。
  • 基础的java环境搭建,JDK8+、Maven、git、IDEA等环境。
  • 项目无vip版本,仅个人爱好开发,实现登录、鉴权、心跳、位置解析,扩展简单。
  • 此架构接入过1W+的设备,以前单机最大4G内存压测过5W+的TCP连接,无接入压力。
  • 有偿接协议解析,也欢迎大家补充协议我会合并到主干分支上。
  • 作者大部分协议都能解析,HJ212-2017、博实结、铁塔换电柜、电池私有BMS协议等。(只要有文档都能搞定)
  • 另外不要想着几千块能搞定一整个平台,不可能的。
  • 如果此项目对你有帮助,请给个star鼓励下作者吧,谢谢。

jzx-jt808项目介绍

JT808全称JT/T808协议,协议共有三个版本(JT/T808-2011,JT/T808-2013,JT/T808-2019)

模块介绍

.
|——jzx-jt808-command        # 服务端指令模块(配置下发等)
|——jzx-jt808-common         # 公共模块(常量、枚举、协议类、工具类等)
|——jzx-jt808-dispatch       # 负载均衡模块(http负载、tcp负载、设备日志查询等)
|——jzx-jt808-hardware       # 设备接入模块(启动即可接入硬件)
|——jzx-jt808-process        # 设备数据消费模块(处理硬件数据)
|——jzx-jt808-service        # 基础服务模块(包含数据库、mongo等)|--jzx-jt808-service-db       # 数据库操作公共项目(自己集成mybatis、plus、jpa等)|--jzx-jt808-service-mongo    # mongodb操作公共项目
|——jzx-jt808-web            # web服务模块(包含指令下发、自定义web服务[自己实现])

中间件安装

redis     安装参考:https://blog.csdn.net/hncdyj/article/details/136527560
rabbitmq  安装参考:https://blog.csdn.net/hncdyj/article/details/136528495
mongodb   安装参考:https://blog.csdn.net/hncdyj/article/details/136529032
mysql     安装参考:https://blog.csdn.net/hncdyj/article/details/136529343

依赖中间件

redis     version >= 中间件安装版本即可
rabbitmq  version >= 中间件安装版本即可
mongodb   version >= 中间件安装版本即可
mysql     version >= 中间件安装版本即可
maven     version >= 中间件安装版本即可

QuickStart

1.拉取代码

git clone https://gitee.com/hncdyj/jzx-jt808.git
or
git clone https://github.com/hncdyj123/jzx-jt808.git

2.项目打包

2.1 在在项目根路径下执行
mvn clean package
or
mvn clean package -U
2.2 进入到jzx-jt808-hardware/target文件夹下

会看到jzx-jt808-hardware-assembly.zip压缩包

2.3 进入到jzx-jt808-process/target文件夹下

会看到jzx-jt808-process-assembly.zip压缩包

2.4 进入到jzx-jt808-dispatch/target文件夹下

会看到jzx-jt808-dispatch-assembly.zip压缩包

2.5 进入到jzx-jt808-web/target文件夹下

会看到jzx-jt808-web-assembly.zip压缩包

3.启动项目(linux为样例)

3.1 接入服务(jzx-jt808-hardware)

上传项目包后解压jzx-jt808-hardware-assembly.zip压缩包

tar -zxvf jzx-jt808-hardware-assembly.zip
cd jzx-jt808-hardware

会看下如下路径:

.
|——conf                     # 配置文件目录
|——lib                      # 依赖jar包
|——jzx-jt808-hardware.jar   # 项目启动jar包
|——springboot-start.sh      # linux|unix|macos启动脚本
|——springboot-start.cmd     # window启动脚本

修改配置文件

# 自定义业务配置相关
business:netty:# netty启动监听端口port: 3096# 集群配置,单点请置空# 集群配置说明xx1(接入点1外网地址) yy1(接入点1别名) zz1(接入点域名或者ip)# 以下配置中ip为虚构,如有雷同纯属巧合# 示例:domainMap: "{'hd01':'52.12.45.85|hd01.example.com','hd02':'52.12.45.84|hd02.example.com'}"domainMap: "{'xx1':'yy1|zz1','xx2':'yy2|zz2'}"spring:datasource:# 数据库用户名 需要修改username: "xx"# 数据库密码 需要修改password: "xx"# 数据库驱动类 需要修改driver-class-name: "org.mariadb.jdbc.Driver"# 数据库连接URI 需要修改url: "jdbc:mysql://ip:port/db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8"type: "com.alibaba.druid.pool.DruidDataSource"initial-size: 5max-active: 20min-idle: 5max-wait: 60000min-evictable-idle-time-millis: 300000max-evictable-idle-time-millis: 300000time-between-eviction-runs-millis: 60000validation-query: select 1validation-query-timeout: -1test-on-borrow: falsetest-on-return: falsetest-while-idle: truepool-prepared-statements: truefilters: stat,wall,log4jshare-prepared-statements: true# 主redis配置相关(用于本地session缓存、指令下发等)redis:primary:# 连接地址 需要修改host: "xx"# 连接端口port: 6379# 连接密码(生产环境必须开启,防止被攻击) 需要修改# password: ""# 连接超时时间timeout: 2000# 使用数据库database: 2# 连接池最大连接数(使用负值表示没有限制)pool-max-active: 10# 连接池中的最大空闲连接pool-max-idle: 5# 连接池最大阻塞等待时间(使用负值表示没有限制)pool-max-wait: 2000# 连接池中的最小空闲连接pool-min-idle: 5# 从redis配置相关secondary:# 连接地址 需要修改host: "xx"# 连接端口port: 6379# 连接密码(生产环境必须开启,防止被攻击) 需要修改# password: ""# 连接超时时间timeout: 2000# 使用数据库database: 2# 连接池最大连接数(使用负值表示没有限制)pool-max-active: 10# 连接池中的最大空闲连接pool-max-idle: 5# 连接池最大阻塞等待时间(使用负值表示没有限制)pool-max-wait: 2000# 连接池中的最小空闲连接pool-min-idle: 5# rabbitmq configrabbitmq:# 业务rabbitmq配置business:# ip地址 需要修改host: "xx"# 用户名 需要修改username: "xx"# 密码 需要修改password: "xx"port: 5672virtual-host: /# 日志收集rabbitmq配置logs:# ip地址 需要修改host: "xx"# 用户名 需要修改username: "xx"# 密码 需要修改password: "xx"port: 5672virtual-host: /# mongodb多数据源配置mongodb:# 主mongo配置primary:# mongo连接URI 需要修改uri: "mongodb://ip:port/Business"# database: "dbname"secondary:# mongo连接URI 需要修改uri: "mongodb://ip:port/Logs"database: "dbname"

启动项目

# 转换脚本 && 添加脚本权限
dos2unix *.sh && chmod +x springboot-start.sh
# 启动项目并指定配置环境(根据conf目录下的xml后缀)
### 启动默认环境
./springboot-start.sh start default
### 启动开发环境
./springboot-start.sh start dev
### 启动测试环境
./springboot-start.sh start test
### 启动测试环境
./springboot-start.sh start prd
3.2 数据消费服务(jzx-jt808-process)

上传项目包后解压jzx-jt808-process-assembly.zip压缩包

tar -zxvf jzx-jt808-process-assembly.zip
cd jzx-jt808-process

会看下如下路径:

.
|——conf                     # 配置文件目录
|——lib                      # 依赖jar包
|——jzx-jt808-process.jar   # 项目启动jar包
|——springboot-start.sh      # linux|unix|macos启动脚本
|——springboot-start.cmd     # window启动脚本

修改配置文件

spring:datasource:# 数据库用户名 需要修改username: "xx"# 数据库密码 需要修改password: "xx"driver-class-name: com.mysql.cj.jdbc.Driver# 数据库地址 需要修改url: "jdbc:mysql://ip:port/db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8"type: com.alibaba.druid.pool.DruidDataSourceinitial-size: 5max-active: 20min-idle: 5max-wait: 60000min-evictable-idle-time-millis: 300000max-evictable-idle-time-millis: 300000time-between-eviction-runs-millis: 60000validation-query: select 1validation-query-timeout: -1test-on-borrow: falsetest-on-return: falsetest-while-idle: truepool-prepared-statements: truefilters: stat,wall,log4jshare-prepared-statements: true# rabbitmq configrabbitmq:business:# ip地址 需要修改host: "xx"# 密码 需要修改password: "xx"port: 5672username: rootvirtual-host: /logs:# ip地址 需要修改host: "xx"# 密码 需要修改password: "xx"port: 5672username: rootvirtual-host: /# mongodb多数据源配置mongodb:# 主mongo配置primary:# mongo连接URI 需要修改uri: "mongodb://ip:port/Business"# database: "dbname"secondary:# mongo连接URI 需要修改uri: "mongodb://ip:port/Logs"database: "dbname"

启动项目

# 转换脚本 && 添加脚本权限
dos2unix *.sh && chmod +x springboot-start.sh
# 启动项目并指定配置环境(根据conf目录下的xml后缀)
### 启动默认环境
./springboot-start.sh start default
### 启动开发环境
./springboot-start.sh start dev
### 启动测试环境
./springboot-start.sh start test
### 启动测试环境
./springboot-start.sh start prd
3.3 指令下发服务(jzx-jt808-web)

上传项目包后解压jzx-jt808-web-assembly.zip压缩包

tar -zxvf jzx-jt808-web-assembly.zip
cd jzx-jt808-web

会看下如下路径:

.
|——conf                     # 配置文件目录
|——lib                      # 依赖jar包
|——jzx-jt808-web.jar   # 项目启动jar包
|——springboot-start.sh      # linux|unix|macos启动脚本
|——springboot-start.cmd     # window启动脚本

修改配置文件

spring:datasource:# 数据库用户名 需要修改username: "xx"# 数据库密码 需要修改password: "xx"driver-class-name: com.mysql.cj.jdbc.Driver# 数据库地址 需要修改url: "jdbc:mysql://ip:port/db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8"type: com.alibaba.druid.pool.DruidDataSourceinitial-size: 5max-active: 20min-idle: 5max-wait: 60000min-evictable-idle-time-millis: 300000max-evictable-idle-time-millis: 300000time-between-eviction-runs-millis: 60000validation-query: select 1validation-query-timeout: -1test-on-borrow: falsetest-on-return: falsetest-while-idle: truepool-prepared-statements: truefilters: stat,wall,log4jshare-prepared-statements: true# 主redis配置相关(用于本地session缓存、指令下发等)redis:primary:# 连接地址 需要修改host: "xx"# 连接端口port: 6379# 连接密码(生产环境必须开启,防止被攻击) 需要修改# password: ""# 连接超时时间timeout: 2000# 使用数据库database: 2# 连接池最大连接数(使用负值表示没有限制)pool-max-active: 10# 连接池中的最大空闲连接pool-max-idle: 5# 连接池最大阻塞等待时间(使用负值表示没有限制)pool-max-wait: 2000# 连接池中的最小空闲连接pool-min-idle: 5# 从redis配置相关secondary:# 连接地址 需要修改host: "xx"# 连接端口port: 6379# 连接密码(生产环境必须开启,防止被攻击) 需要修改# password: ""# 连接超时时间timeout: 2000# 使用数据库database: 2# 连接池最大连接数(使用负值表示没有限制)pool-max-active: 10# 连接池中的最大空闲连接pool-max-idle: 5# 连接池最大阻塞等待时间(使用负值表示没有限制)pool-max-wait: 2000# 连接池中的最小空闲连接pool-min-idle: 5# rabbitmq configrabbitmq:business:# ip地址 需要修改host: "xx"# 密码 需要修改password: "xx"port: 5672username: rootvirtual-host: /logs:# ip地址 需要修改host: "xx"# 密码 需要修改password: "xx"port: 5672username: rootvirtual-host: /# mongodb多数据源配置mongodb:# 主mongo配置primary:# mongo连接URI 需要修改uri: "mongodb://ip:port/Business"# database: "dbname"secondary:# mongo连接URI 需要修改uri: "mongodb://ip:port/Logs"database: "dbname"

启动项目

# 转换脚本 && 添加脚本权限
dos2unix *.sh && chmod +x springboot-start.sh
# 启动项目并指定配置环境(根据conf目录下的xml后缀)
### 启动默认环境
./springboot-start.sh start default
### 启动开发环境
./springboot-start.sh start dev
### 启动测试环境
./springboot-start.sh start test
### 启动测试环境
./springboot-start.sh start prd

流程参考

请拉取项目后查看项目中doc描述

有偿可接各种硬件协议开发
协议描述相关:https://blog.csdn.net/hncdyj/article/details/89494209
转载请标明出处:https://blog.csdn.net/hncdyj/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch 加权CE_loss实现(语义分割中的类不平衡使用)

加权CE_loss和BCE_loss稍有不同 1.标签为long类型,BCE标签为float类型 2.当reduction为mean时计算每个像素点的损失的平均,BCE除以像素数得到平均值,CE除以像素对应的权重之和得到平均值。 参数配置torch.nn.CrossEntropyLoss(weightNone,…

图像特征提取 python

1. 边缘检测 (Edge Detection) 1.1 Sobel 算子 Sobel 算子是一种边缘检测算子,通过计算图像梯度来检测边缘。 import cv2 import numpy as np# 读取图像 image cv2.imread(image.jpg, 0)# 应用 Sobel 算子 sobel_x cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize5)…

解决Windows窗口聚焦问题

情景引入: 在使用副屏显示器写代码,主屏显示器看教程的时候,突然有个知识点卡住了,这个时候你想要按下空格让视频暂停,但是按下后你会发现:视频没有暂停,倒是代码界面多了个空格。。。这就不好玩…

3. 变量的运算

文章目录 3.1 基本语法3.1.1 test条件测试3.1.2 中括号条件测试3.1.3 双中括号条件测试3.1.4 双圆括号 3.2 算术运算3.3 字符串运算符3.4 文件测试运算符3.5 关系运算符3.6 布尔运算符3.7 逻辑运算符 在 Shell 中包含如下的运算: 算术运算字符串运算符文件测试运算符…

用HTML实现拓扑面,动态4D圆环面,可手动调节,富有创新性的案例。(有源代码)

文章目录 前言一、示例二、目录结构三、index.html(主页面)四、main.js五、Tour4D.js六、swissgl.js七、dat.gui.min.js八、style.css 前言 如果你觉得对代码进行复制粘贴很麻烦的话,你可以直接将资源下载到本地。无需部署,直接可…

如何对stm32查看IO功能。

有些同学对于别人的开发板的资源,或者IO口,或者串口等资源不知道怎么分配。 方法1、看硬石、野火、正点原子的开发板,看下他们的例子,那个资源用什么。自己多看几个原理图,多看几个视频,做一下笔记。以后依…

【面试干货】MySQL 三种锁的级别(表级锁、行级锁和页面锁)

【面试干货】MySQL 三种锁的级别(表级锁、行级锁和页面锁) 1、表级锁2、行级锁3、页面锁4、总结 💖The Begin💖点点关注,收藏不迷路💖 在 MySQL 数据库中,锁是控制并发访问的重要机制&#xff0…

Stable Diffusion之最全详解图解

Stable Diffusion之最全详解图解 引言 Stable Diffusion,作为2022年发布的深度学习领域的重大突破,革新了文本到图像生成的边界。这一模型不仅能够根据文本描述精确生成视觉图像,还展示了在图像内补、外补、以及在提示词引导下实现图像转换的…

GQA,MLA之外的另一种KV Cache压缩方式:动态内存压缩(DMC)

0x0. 前言 在openreview上看到最近NV的一个KV Cache压缩工作:https://openreview.net/pdf?idtDRYrAkOB7 ,感觉思路还是有一些意思的,所以这里就分享一下。 简单来说就是paper提出通过一种特殊的方式continue train一下原始的大模型&#x…

DS:树与二叉树的相关概念

欢迎来到Harper.Lee的学习世界!博主主页传送门:Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦! 一、树的概念及其结构 1.1 树的概念亲缘关系 树是一种非线性的数据结构,它是由n(n>0)个有限节点…

汇编:数组-寻址取数据

比例因子寻址: 比例因子寻址(也称为比例缩放索引寻址或基址加变址加比例因子寻址)是一种复杂的内存寻址方式,常用于数组和指针操作。它允许通过一个基址寄存器、一个变址寄存器和一个比例因子来计算内存地址。 语法 比例因子寻…

LeetCode //C - 168. Excel Sheet Column Title

168. Excel Sheet Column Title Given an integer columnNumber, return its corresponding column title as it appears in an Excel sheet. For example: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … Example 1: Input: columnNumber 1 Outp…

经典文献阅读之--Online Monocular Lane Mapping(使用Catmull-Rom样条曲线完成在线单目车道建图)

0. 简介 对于单目摄像头完成SLAM建图这类操作,对于自动驾驶行业非常重要,《Online Monocular Lane Mapping Using Catmull-Rom Spline》介绍了一种仅依靠单个摄像头和里程计生成基于样条的在线单目车道建图方法。我们提出的技术将车道关联过程建模为一个…

Java 习题集

💖 单选题 💖 填空题 💖 判断题 💖 程序阅读题 1. 读代码写结果 class A {int m 5;void zengA(int x){m m x;}int jianA(int y){return m - y;} }class B extends A {int m 3;int jianA(int z){return super.jianA(z) m;} …

Java Web学习笔记20——Ajax-Axios

Axios: 介绍:Axios对原生的Ajax进行封装,简化书写,快速开发。 官网:https://www.axios-http.cn Axios 入门: {}是Js的对象。 get的请求参数是在URL后面?和相关参数值。 post的请求参数是在请…

优化Elasticsearch搜索性能:查询调优与索引设计

在构建一个基于Elasticsearch的搜索解决方案时,性能优化是一个至关重要的环节。无论是处理海量数据,还是满足快速响应的搜索需求,优化Elasticsearch的性能都能显著提高用户体验和系统效率。本文将重点介绍如何通过查询调优和索引设计来优化El…

Soildworks学习笔记(二)

放样凸台基体: 自动生成连接两个物体两个面的基体: 2.旋转切除: 3.剪切实体: 4.转换实体引用: 将实体的轮廓线转换至当前草图使其成为当前草图的图元,主要用于在同一平面或另一个坐标中制作草图实体或其尺寸的副本。 …

【深度学习】Transformer分类器,CICIDS2017,入侵检测

文章目录 1 前言2 什么是入侵检测系统?3 为什么选择Transformer?4 数据预处理5 模型架构5.1. 输入嵌入层(Input Embedding Layer)5.2. 位置编码层(Positional Encoding Layer)5.3. Transformer编码器层&…

通过SSH远程登录华为设备

01 进入系统编辑视图 system-view Enter system view, return user view with return command. 02 创建本地RSA密钥对 [HUAWEI]rsa local-key-pair creat The key name will be:HUAWEI_Host The range of public key size is (2048 ~ 2048). NOTE: Key pair generation will ta…

17、关于加强数据资产管理的指导意见

数据资产,作为经济社会数字化转型进程中的新兴资产类型,正日益成为推动数字中国建设和加快数字经济发展的重要战略资源。为深入贯彻落实党中央决策部署,现就加强数据资产管理提出如下意见。 一、总体要求 (一)指导思想。 以新时代中国特色社会主义思想为指导,全面深入…