From e3067f58cce422bbd26a7729bf59f5f4f34a530f Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 14 二月 2025 14:13:38 +0800
Subject: [PATCH] jtt808初始化

---
 server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java                         |   25 +++
 server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java                              |    2 
 server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java          |   75 +++++-----
 server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java                          |    4 
 server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java |    4 
 server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java                           |    1 
 server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java                            |    6 
 server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java                              |   11 -
 server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java                                       |   42 +++++
 server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java                              |   13 +
 server/jtt808_parent/commons/src/main/java/org/yzh/commons/util/Byte2NumberUtils.java                            |   22 +++
 server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/attribute/Battery.java     |  119 +++++++++++++++++
 server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java                  |   19 ++
 server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java    |    5 
 server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java                                |   26 ++-
 15 files changed, 311 insertions(+), 63 deletions(-)

diff --git a/server/jtt808_parent/commons/src/main/java/org/yzh/commons/util/Byte2NumberUtils.java b/server/jtt808_parent/commons/src/main/java/org/yzh/commons/util/Byte2NumberUtils.java
new file mode 100644
index 0000000..85602b1
--- /dev/null
+++ b/server/jtt808_parent/commons/src/main/java/org/yzh/commons/util/Byte2NumberUtils.java
@@ -0,0 +1,22 @@
+package org.yzh.commons.util;
+
+import org.apache.commons.codec.binary.Hex;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.math.BigInteger;
+import java.util.*;
+
+/**
+ * @author yezhihao
+ * https://gitee.com/yezhihao/jt808-server
+ */
+public class Byte2NumberUtils {
+    public static Integer bytesToInteger(byte[] bArray) {
+        try {
+            return  Integer.valueOf(Hex.encodeHexString(bArray),16) ;
+        }catch (Exception e){
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java
index 40c8c67..88cde2e 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java
@@ -89,4 +89,5 @@
     int 骞冲彴涓嬭娑堟伅淇濈暀 = 0x8F00 - 0x8FFF;
     int 鍘傚晢鑷畾涔変笂琛屾秷鎭� = 0xE000 - 0xEFFF;//2019 new
     int 鍟嗚嚜瀹氫箟涓嬭娑堟伅 = 0xF000 - 0xFFFF;//2019 new
+    int 缁堢鏍℃椂璇锋眰涓婅 = 0x0F01;// 
 }
\ No newline at end of file
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java
index a3f2c27..137d42c 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java
@@ -49,7 +49,10 @@
                 .addSchema(AttributeKey.AlarmTPMS, ProtostarUtil.getRuntimeSchema(AlarmTPMS.class, 0))
 
                 .addSchema(AttributeKey.InstallErrorMsg, NumberSchema.DWORD_INT)
-                .addSchema(AttributeKey.Battery, NumberSchema.BYTE_BYTE)
+                .addSchema(AttributeKey.Battery, Battery.SCHEMA)
+                .addSchema(AttributeKey.Battery0102, NumberSchema.DWORD_INT)
+                .addSchema(AttributeKey.Battery0304, NumberSchema.DWORD_INT)
+                .addSchema(AttributeKey.Battery0506, NumberSchema.DWORD_INT)
                 .addSchema(AttributeKey.ExtendLength, NumberSchema.DWORD_INT)
                 .addSchema(AttributeKey.CarDoorStatus, NumberSchema.DWORD_INT)
                 .addSchema(AttributeKey.CarWindowStatus, NumberSchema.DWORD_INT)
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java
index 6997e51..41c635c 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java
@@ -38,6 +38,10 @@
                 .addSchema(AttributeKey.DriverBehaviorAlarm, NumberSchema.WORD_INT)
 
                 .addSchema(AttributeKey.Signal, NumberSchema.DWORD_INT)
+                .addSchema(AttributeKey.Battery, Battery.SCHEMA)
+                .addSchema(AttributeKey.Battery0102, NumberSchema.DWORD_INT)
+                .addSchema(AttributeKey.Battery0304, NumberSchema.DWORD_INT)
+                .addSchema(AttributeKey.Battery0506, NumberSchema.DWORD_INT)
                 .addSchema(AttributeKey.IoState, NumberSchema.WORD_INT)
                 .addSchema(AttributeKey.AnalogQuantity, NumberSchema.DWORD_INT)
                 .addSchema(AttributeKey.SignalStrength, NumberSchema.BYTE_INT)
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java
index 0ed9290..2fb59cf 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java
@@ -6,42 +6,45 @@
  * https://gitee.com/yezhihao/jt808-server
  */
 public interface AttributeKey {
-    Long Mileage = 1L;                 // 0x01 閲岀▼,鏁版嵁绫诲瀷涓篋WORD,鍗曚綅涓�1/10km,瀵瑰簲杞︿笂閲岀▼琛ㄨ鏁�
-    Long Fuel = 2L;                    // 0x02 娌归噺,鏁版嵁绫诲瀷涓篧ORD,鍗曚綅涓�1/10L,瀵瑰簲杞︿笂娌归噺琛ㄨ鏁�
-    Long Speed = 3L;                   // 0x03 琛岄┒璁板綍鍔熻兘鑾峰彇鐨勯�熷害,鏁版嵁绫诲瀷涓篧ORD,鍗曚綅涓�1/10km/h
-    Long AlarmEventId = 4L;            // 0x04 闇�瑕佷汉宸ョ‘璁ゆ姤璀︿簨浠剁殑ID,鏁版嵁绫诲瀷涓篧ORD,浠�1寮�濮嬭鏁�
-    Long TirePressure = 5L;            // 0x05 鑳庡帇,鍗曚綅涓篜a,鏍囧畾杞瓙鐨勯『搴忎负浠庤溅澶村紑濮嬩粠宸﹀埌鍙抽『搴忔帓鍒�,澶氫綑鐨勫瓧鑺備负0xFF,琛ㄧず鏃犳晥鏁版嵁
-    Long CarriageTemperature = 6L;     // 0x06 杞﹀帰娓╁害,鍗曚綅涓烘憚姘忓害,鍙栧�艰寖鍥翠负-32767~+32767,鏈�楂樹綅涓�1琛ㄧず璐熸暟
-    Long OverSpeedAlarm = 17L;         // 0x11 瓒呴�熸姤璀﹂檮鍔犱俊鎭琛�28
-    Long InOutAreaAlarm = 18L;         // 0x12 杩涘嚭鍖哄煙/璺嚎鎶ヨ闄勫姞淇℃伅瑙佽〃29
-    Long RouteDriveTimeAlarm = 19L;    // 0x13 璺琛岄┒鏃堕棿涓嶈冻/杩囬暱鎶ヨ闄勫姞淇℃伅瑙佽〃30
+    Integer Mileage = 1;                 // 0x01 閲岀▼,鏁版嵁绫诲瀷涓篋WORD,鍗曚綅涓�1/10km,瀵瑰簲杞︿笂閲岀▼琛ㄨ鏁�
+    Integer Fuel = 2;                    // 0x02 娌归噺,鏁版嵁绫诲瀷涓篧ORD,鍗曚綅涓�1/10L,瀵瑰簲杞︿笂娌归噺琛ㄨ鏁�
+    Integer Speed = 3;                   // 0x03 琛岄┒璁板綍鍔熻兘鑾峰彇鐨勯�熷害,鏁版嵁绫诲瀷涓篧ORD,鍗曚綅涓�1/10km/h
+    Integer AlarmEventId = 4;            // 0x04 闇�瑕佷汉宸ョ‘璁ゆ姤璀︿簨浠剁殑ID,鏁版嵁绫诲瀷涓篧ORD,浠�1寮�濮嬭鏁�
+    Integer TirePressure = 5;            // 0x05 鑳庡帇,鍗曚綅涓篜a,鏍囧畾杞瓙鐨勯『搴忎负浠庤溅澶村紑濮嬩粠宸﹀埌鍙抽『搴忔帓鍒�,澶氫綑鐨勫瓧鑺備负0xFF,琛ㄧず鏃犳晥鏁版嵁
+    Integer CarriageTemperature = 6;     // 0x06 杞﹀帰娓╁害,鍗曚綅涓烘憚姘忓害,鍙栧�艰寖鍥翠负-32767~+32767,鏈�楂樹綅涓�1琛ㄧず璐熸暟
+    Integer OverSpeedAlarm = 17;         // 0x11 瓒呴�熸姤璀﹂檮鍔犱俊鎭琛�28
+    Integer InOutAreaAlarm = 18;         // 0x12 杩涘嚭鍖哄煙/璺嚎鎶ヨ闄勫姞淇℃伅瑙佽〃29
+    Integer RouteDriveTimeAlarm = 19;    // 0x13 璺琛岄┒鏃堕棿涓嶈冻/杩囬暱鎶ヨ闄勫姞淇℃伅瑙佽〃30
 
-    Long VideoRelatedAlarm = 20L;      // 0x14 瑙嗛鐩稿叧鎶ヨ,DWORD,鎸変綅璁剧疆,鏍囧織浣嶅畾涔夎琛�14
-    Long VideoMissingStatus = 21L;     // 0x15 瑙嗛淇″彿涓㈠け鎶ヨ鐘舵��,DWORD,鎸変綅璁剧疆,bit0~bit31鍒嗗埆琛ㄧず绗�1~32涓�昏緫閫氶亾,鐩稿簲浣嶄负1鍒欒〃绀鸿閫昏緫閫氶亾鍙戠敓瑙嗛淇″彿涓㈠け
-    Long VideoObscuredStatus = 22L;    // 0x16 瑙嗛淇″彿閬尅鎶ヨ鐘舵��,DWORD,鎸変綅璁剧疆,bit0~bit31鍒嗗埆琛ㄧず绗�1~32涓�昏緫閫氶亾,鐩稿簲浣嶄负1鍒欒〃绀鸿閫昏緫閫氶亾鍙戠敓瑙嗛淇″彿閬尅
-    Long StorageFailureStatus = 23L;   // 0x17 瀛樺偍鍣ㄦ晠闅滄姤璀︾姸鎬�,WORD,鎸変綅璁剧疆.bit0~bit11鍒嗗埆琛ㄧず绗�1~12涓富瀛樺偍鍣�.bit12~bit15鍒嗗埆琛ㄧず绗�1~4涓伨澶囧瓨鍌ㄨ缃�,鐩稿簲浣嶄负1鍒欒〃绀鸿瀛樺偍鍣ㄥ彂鐢熸晠闅�
-    Long DriverBehaviorAlarm = 24L;    // 0x18 寮傚父椹鹃┒琛屼负鎶ヨ璇︾粏鎻忚堪,WORD,瀹氫箟瑙佽〃15
+    Integer VideoRelatedAlarm = 20;      // 0x14 瑙嗛鐩稿叧鎶ヨ,DWORD,鎸変綅璁剧疆,鏍囧織浣嶅畾涔夎琛�14
+    Integer VideoMissingStatus = 21;     // 0x15 瑙嗛淇″彿涓㈠け鎶ヨ鐘舵��,DWORD,鎸変綅璁剧疆,bit0~bit31鍒嗗埆琛ㄧず绗�1~32涓�昏緫閫氶亾,鐩稿簲浣嶄负1鍒欒〃绀鸿閫昏緫閫氶亾鍙戠敓瑙嗛淇″彿涓㈠け
+    Integer VideoObscuredStatus = 22;    // 0x16 瑙嗛淇″彿閬尅鎶ヨ鐘舵��,DWORD,鎸変綅璁剧疆,bit0~bit31鍒嗗埆琛ㄧず绗�1~32涓�昏緫閫氶亾,鐩稿簲浣嶄负1鍒欒〃绀鸿閫昏緫閫氶亾鍙戠敓瑙嗛淇″彿閬尅
+    Integer StorageFailureStatus = 23;   // 0x17 瀛樺偍鍣ㄦ晠闅滄姤璀︾姸鎬�,WORD,鎸変綅璁剧疆.bit0~bit11鍒嗗埆琛ㄧず绗�1~12涓富瀛樺偍鍣�.bit12~bit15鍒嗗埆琛ㄧず绗�1~4涓伨澶囧瓨鍌ㄨ缃�,鐩稿簲浣嶄负1鍒欒〃绀鸿瀛樺偍鍣ㄥ彂鐢熸晠闅�
+    Integer DriverBehaviorAlarm = 24;    // 0x18 寮傚父椹鹃┒琛屼负鎶ヨ璇︾粏鎻忚堪,WORD,瀹氫箟瑙佽〃15
 
-    Long Signal = 37L;                 // 0x25 鎵╁睍杞﹁締淇″彿鐘舵�佷綅,鍙傛暟椤规牸寮忓拰瀹氫箟瑙佽〃31
-    Long IoState = 42L;                // 0x2a I0鐘舵�佷綅,鍙傛暟椤规牸寮忓拰瀹氫箟瑙佽〃32
-    Long AnalogQuantity = 43L;         // 0x2b 妯℃嫙閲�,bit[0~15],AD0L;bit[l6~31],ADl
-    Long SignalStrength = 48L;         // 0x30 鏁版嵁绫诲瀷涓築YTE,鏃犵嚎閫氫俊缃戠粶淇″彿寮哄害
-    Long GnssCount = 49L;              // 0x31 鏁版嵁绫诲瀷涓築YTE,GNSS瀹氫綅鍗槦鏁�
-    Long AlarmADAS = 100L;             // 0x64 楂樼骇椹鹃┒杈呭姪绯荤粺鎶ヨ
-    Long AlarmDSM = 101L;              // 0x65 椹鹃┒鍛樼姸鎬佺洃娴�
-    Long AlarmTPMS = 102L;             // 0x66 杞儙姘斿帇鐩戞祴绯荤粺
-    Long AlarmBSD = 103L;              // 0x67 鐩茬偣鐩戞祴
-    Long InstallErrorMsg = 241L;       // 0xF1 瀹夎寮傚父淇℃伅,鐢卞巶瀹惰嚜瀹氫箟(绮ゆ爣)
-    Long AlgorithmErrorMsg = 242L;     // 0xF2 绠楁硶寮傚父淇℃伅,鐢卞巶瀹惰嚜瀹氫箟(绮ゆ爣)
-    Long Battery = 0Xe3L;     // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
-    Long ExtendLength = 0Xf3L;     // 0Xf3 n 琛ㄧず鍚庣画鎵╁睍鏁版嵁鎬婚暱搴︺�備负 OBD琛岃溅鏁版嵁椤瑰畾涔夈�傚悗缁畾涔夌殑鏁版嵁椤硅琛� 8-32瀹氫箟(娉ㄦ剰璇ュ畾涔夌殑鏁版嵁椤规瀯鎴愬寘鎷絾涓嶄竴瀹氬叏鏈�)銆�
-    Long CarDoorStatus = 0xD0L;     // 0xD0 杞﹂棬閿佺姸鎬佷綅锛岃琛� 8-24杞﹂棬閿佺姸鎬佷綅
-    Long CarWindowStatus = 0xD1L;     // 0xD1 杞︾獥鐘舵�佷綅锛岃琛� 8-25杞︾獥鐘舵�佷綅銆�
-    Long SafetyBelt = 0xD2L;     // 0xD2瀹夊叏甯︾姸鎬佷綅锛岃琛� 8-26瀹夊叏甯︾姸鎬佷綅銆�
-    Long CarAlermStatus = 0xD3L;     // 0xD3杞﹁締璀︽儏鐘舵�佷綅锛岃琛� 8-27杞﹁締璀︽儏鐘舵�佷綅銆�
-    Long CarFaultStatus = 0xD4L;     // 0xD4杞﹁締鏁呴殰鐘舵�佷綅锛岃琛� 8-28杞﹁締鏁呴殰鐘舵�佷綅銆� 銆�
-    Long CarGearStatus = 0xD5L;     // 0xD5杞﹁締妗d綅鐘舵�侊紝瑙佽〃 8-29杞﹁締妗d綅鐘舵�併��
-    Long CarTireStatus = 0xD6L;     // 0xD6杞﹁締鑳庡帇鐘舵�併�傦紙姣忎釜杞﹁儙淇℃伅鍗犵敤 5涓瓧鑺傦級瑙佽〃 8-30杞﹁締鑳庡帇鐘舵�併��
-    Long Temprature = 0xC0L;     // 0xC0锛涙湁绗﹀彿鏁帮紝鍗曚綅 0.1搴︺��
-    Long BaseStationExtend = 0xEFL;     // 0xEF 鍩虹珯闄勫姞鏁版嵁
+    Integer Signal = 37;                 // 0x25 鎵╁睍杞﹁締淇″彿鐘舵�佷綅,鍙傛暟椤规牸寮忓拰瀹氫箟瑙佽〃31
+    Integer IoState = 42;                // 0x2a I0鐘舵�佷綅,鍙傛暟椤规牸寮忓拰瀹氫箟瑙佽〃32
+    Integer AnalogQuantity = 43;         // 0x2b 妯℃嫙閲�,bit[0~15],AD0;bit[l6~31],ADl
+    Integer SignalStrength = 48;         // 0x30 鏁版嵁绫诲瀷涓築YTE,鏃犵嚎閫氫俊缃戠粶淇″彿寮哄害
+    Integer GnssCount = 49;              // 0x31 鏁版嵁绫诲瀷涓築YTE,GNSS瀹氫綅鍗槦鏁�
+    Integer AlarmADAS = 100;             // 0x64 楂樼骇椹鹃┒杈呭姪绯荤粺鎶ヨ
+    Integer AlarmDSM = 101;              // 0x65 椹鹃┒鍛樼姸鎬佺洃娴�
+    Integer AlarmTPMS = 102;             // 0x66 杞儙姘斿帇鐩戞祴绯荤粺
+    Integer AlarmBSD = 103;              // 0x67 鐩茬偣鐩戞祴
+    Integer InstallErrorMsg = 241;       // 0xF1 瀹夎寮傚父淇℃伅,鐢卞巶瀹惰嚜瀹氫箟(绮ゆ爣)
+    Integer AlgorithmErrorMsg = 242;     // 0xF2 绠楁硶寮傚父淇℃伅,鐢卞巶瀹惰嚜瀹氫箟(绮ゆ爣)
+    Integer Battery = 0Xe3;     // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
+    Integer Battery0102 = 0x0102;     // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
+    Integer Battery0304 = 0x0304;     // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
+    Integer Battery0506 = 0x0506;     // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
+    Integer ExtendLength = 0Xf3;     // 0Xf3 n 琛ㄧず鍚庣画鎵╁睍鏁版嵁鎬婚暱搴︺�備负 OBD琛岃溅鏁版嵁椤瑰畾涔夈�傚悗缁畾涔夌殑鏁版嵁椤硅琛� 8-32瀹氫箟(娉ㄦ剰璇ュ畾涔夌殑鏁版嵁椤规瀯鎴愬寘鎷絾涓嶄竴瀹氬叏鏈�)銆�
+    Integer CarDoorStatus = 0xD0;     // 0xD0 杞﹂棬閿佺姸鎬佷綅锛岃琛� 8-24杞﹂棬閿佺姸鎬佷綅
+    Integer CarWindowStatus = 0xD1;     // 0xD1 杞︾獥鐘舵�佷綅锛岃琛� 8-25杞︾獥鐘舵�佷綅銆�
+    Integer SafetyBelt = 0xD2;     // 0xD2瀹夊叏甯︾姸鎬佷綅锛岃琛� 8-26瀹夊叏甯︾姸鎬佷綅銆�
+    Integer CarAlermStatus = 0xD3;     // 0xD3杞﹁締璀︽儏鐘舵�佷綅锛岃琛� 8-27杞﹁締璀︽儏鐘舵�佷綅銆�
+    Integer CarFaultStatus = 0xD4;     // 0xD4杞﹁締鏁呴殰鐘舵�佷綅锛岃琛� 8-28杞﹁締鏁呴殰鐘舵�佷綅銆� 銆�
+    Integer CarGearStatus = 0xD5;     // 0xD5杞﹁締妗d綅鐘舵�侊紝瑙佽〃 8-29杞﹁締妗d綅鐘舵�併��
+    Integer CarTireStatus = 0xD6;     // 0xD6杞﹁締鑳庡帇鐘舵�併�傦紙姣忎釜杞﹁儙淇℃伅鍗犵敤 5涓瓧鑺傦級瑙佽〃 8-30杞﹁締鑳庡帇鐘舵�併��
+    Integer Temprature = 0xC0;     // 0xC0锛涙湁绗﹀彿鏁帮紝鍗曚綅 0.1搴︺��
+    Integer BaseStationExtend = 0xEF;     // 0xEF 鍩虹珯闄勫姞鏁版嵁
 }
\ No newline at end of file
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/attribute/Battery.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/attribute/Battery.java
new file mode 100644
index 0000000..24e98a9
--- /dev/null
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/attribute/Battery.java
@@ -0,0 +1,119 @@
+package org.yzh.protocol.commons.transform.attribute;
+
+import io.github.yezhihao.protostar.Schema;
+import io.github.yezhihao.protostar.util.ByteBufUtils;
+import io.netty.buffer.ByteBuf;
+import org.yzh.commons.util.Byte2NumberUtils;
+
+import java.util.Arrays;
+
+/**
+ * 鑳庡帇 0x05
+ * length 30
+ */
+
+public class Battery {
+
+    public static final Integer key = 0Xe3;
+
+    public static final Schema<Battery> SCHEMA = new TirePressureSchema();
+
+    private byte[] value;
+    private Integer capacity;//鐢垫睜鐢甸噺
+    private Float voltage;//鐢垫睜鐢靛帇
+    private Float chargeVoltage;//鍏呯數鐢靛帇
+
+    public Integer getCapacity() {
+        return capacity;
+    }
+
+    public void setCapacity(Integer capacity) {
+        this.capacity = capacity;
+    }
+
+    public Float getVoltage() {
+        return voltage;
+    }
+
+    public void setVoltage(Float voltage) {
+        this.voltage = voltage;
+    }
+
+    public Float getChargeVoltage() {
+        return chargeVoltage;
+    }
+
+    public void setChargeVoltage(Float chargeVoltage) {
+        this.chargeVoltage = chargeVoltage;
+    }
+
+    public Battery() {
+    }
+
+    /**
+     * byte[] data={0x01,0x02,0x03,0x04,0x05,0x06}
+     * 鐢垫睜鐢甸噺鏄� 0x0102锛�
+     * 鐢垫睜鐢靛帇鏄�0x0304锛�
+     * 鍏呯數鐢靛帇鏄� 0x0506,
+     * 鐢靛帇鍗曚綅鏄�0.001v锛�
+     * 涓婁紶 1000琛ㄧず 1v銆�
+     * @param value
+     */
+    public Battery(byte[] value) {
+        this.value = value;
+        if(value!=null && value.length>2){
+            this.setCapacity(Byte2NumberUtils.bytesToInteger(new byte[]{value[0],value[1]}));
+        }
+        if(value!=null && value.length>4){
+            try {
+                this.setVoltage((float) (Byte2NumberUtils.bytesToInteger(new byte[]{value[2],value[3]}) * 0.001));
+            }catch (Exception e){
+
+            }
+        }
+        if(value!=null && value.length>6){
+            try {
+                this.setChargeVoltage((float) (Byte2NumberUtils.bytesToInteger(new byte[]{value[4],value[4]}) * 0.001));
+            }catch (Exception e){
+
+            }
+        }
+    }
+
+    public byte[] getValue() {
+        return value;
+    }
+
+    public void setValue(byte[] value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder(32);
+        sb.append("Battery{value=").append(Arrays.toString(value));
+        sb.append('}');
+        return sb.toString();
+    }
+
+    private static class TirePressureSchema implements Schema<Battery> {
+
+        private TirePressureSchema() {
+        }
+
+        @Override
+        public Battery readFrom(ByteBuf input) {
+            int len = input.readableBytes();
+            if (len > 30)
+                len = 30;
+            byte[] value = new byte[len];
+            input.readBytes(value);
+            return new Battery(value);
+        }
+
+        @Override
+        public void writeTo(ByteBuf output, Battery message) {
+            ByteBufUtils.writeFixedLength(output, 30, message.value);
+        }
+    }
+}
\ No newline at end of file
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java
index 3a62c73..759a232 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java
@@ -2,6 +2,7 @@
 
 import io.github.yezhihao.netmc.core.model.Response;
 import io.github.yezhihao.protostar.annotation.Field;
+import io.github.yezhihao.protostar.annotation.MergeSuperclass;
 import io.github.yezhihao.protostar.annotation.Message;
 import org.yzh.protocol.basics.JTMessage;
 import org.yzh.protocol.commons.JT808;
@@ -10,6 +11,7 @@
  * @author yezhihao
  * https://gitee.com/yezhihao/jt808-server
  */
+@MergeSuperclass
 @Message(JT808.鏌ヨ缁堢灞炴�у簲绛�)
 public class T0107 extends JTMessage implements Response {
 
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java
index f9ac306..04e3596 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java
@@ -2,6 +2,8 @@
 
 import io.github.yezhihao.protostar.annotation.Field;
 import io.github.yezhihao.protostar.annotation.Message;
+import io.swagger.models.auth.In;
+import lombok.Data;
 import org.yzh.protocol.basics.JTMessage;
 import org.yzh.protocol.commons.JT808;
 import org.yzh.protocol.commons.transform.AttributeConverter;
@@ -15,6 +17,7 @@
  * https://gitee.com/yezhihao/jt808-server
  */
 @Message(JT808.浣嶇疆淇℃伅姹囨姤)
+@Data
 public class T0200 extends JTMessage {
 
     /**
@@ -39,7 +42,7 @@
     private LocalDateTime deviceTime;
     @Field(converter = AttributeConverter.class, desc = "浣嶇疆闄勫姞淇℃伅", version = {-1, 0})
     @Field(converter = AttributeConverterYue.class, desc = "浣嶇疆闄勫姞淇℃伅(绮ゆ爣)", version = 1)
-    private Map<Long, Object> attributes;
+    private Map<Integer, Object> attributes;
 
     public int getWarnBit() {
         return warnBit;
@@ -105,13 +108,7 @@
         this.deviceTime = deviceTime;
     }
 
-    public Map<Long, Object> getAttributes() {
-        return attributes;
-    }
 
-    public void setAttributes(Map<Long, Object> attributes) {
-        this.attributes = attributes;
-    }
 
     @Override
     public String toString() {
diff --git a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java
index 7e68d68..da490ec 100644
--- a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java
+++ b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java
@@ -4,9 +4,20 @@
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
 import io.netty.buffer.Unpooled;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.junit.platform.commons.util.StringUtils;
 import org.yzh.protocol.JT808Beans;
 import org.yzh.protocol.basics.JTMessage;
 import org.yzh.protocol.codec.JTMessageAdapter;
+import org.yzh.protocol.codec.JTMessageDecoder;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 瑙g爜鍒嗘瀽
@@ -18,12 +29,37 @@
     public static final JTMessageAdapter coder = new JTMessageAdapter("org.yzh.protocol");
 
     public static void main(String[] args) {
-        String hex = "0200004c067244400211004600000000000c0400015b197c06c8362e00000000000025020610234801040000083f02020000030200002504000000002a0200002b0400000000300117310100e3060000129d0000f2020000497e";
+        String hex = "0200004c06724440021104ad00000000000c000301e4c49606fcbc04003c00000000250213220412010400001a4e02020000030200002504000000002a0200002b0400000000300115310112e306000012990000f2020000ac7e";
+//        String hex = "0201004e0672444002110097019100000000000c0001015b197c06c8362e00000000000025020616592601040000083f02020000030200002504000000002a0200002b0400000000300117310100e306000012990000f2020000187e";
 //        String hex = "020000d40123456789017fff000004000000080006eeb6ad02633df7013800030063200707192359642f000000400101020a0a02010a1e00640001b2070003640e200707192359000100000061646173200827111111010101652f000000410202020a0000000a1e00c8000516150006c81c20070719235900020000000064736d200827111111020202662900000042031e012c00087a23000a2c2a200707192359000300000074706d732008271111110303030067290000004304041e0190000bde31000d90382007071923590004000000006273642008271111110404049d";
-        JTMessage msg = H2019(T0200JSATL12());
+//        JTMessage msg = H2019(T0200JSATL12());
 
-        msg = decode(hex);
+//        msg = decode(hex);
 //        hex = encode(msg);
+//        System.out.println(decode(hex));
+
+        try (FileInputStream fis = new FileInputStream(new File("C:\\Users\\T14\\Desktop\\member.xlsx"));
+             Workbook workbook = new XSSFWorkbook(fis)) {
+            Sheet sheet = workbook.getSheetAt(0); // 鑾峰彇绗竴涓伐浣滆〃
+            List<String> phoneNumbers = new ArrayList<>();
+            for (Row row : sheet) {
+                Cell cell = row.getCell(1); // 鍋囪鎵嬫満鍙峰湪绗竴鍒�
+                if (cell != null) {
+                    if (cell.getCellType() == CellType.NUMERIC){
+                        System.out.println(cell.getCellType());
+                        phoneNumbers.add( cell.getNumericCellValue()+""); // 娣诲姞鍒板垪琛ㄤ腑
+                    }
+                    cell.setCellType(CellType.STRING); // 纭繚鍗曞厓鏍肩被鍨嬩负瀛楃涓�
+                    String phoneNumber = cell.getStringCellValue(); // 鑾峰彇鍗曞厓鏍煎�间綔涓哄瓧绗︿覆
+                    phoneNumbers.add(  phoneNumber); // 娣诲姞鍒板垪琛ㄤ腑
+                }
+            }
+            // 杈撳嚭鎵嬫満鍙峰垪琛�
+            phoneNumbers.forEach(System.out::println);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
     }
 
     private static String encode(JTMessage message) {
diff --git a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java
index 18a9741..a5a1ff0 100644
--- a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java
+++ b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java
@@ -2,6 +2,7 @@
 
 import io.github.yezhihao.protostar.util.KeyValuePair;
 import io.netty.buffer.Unpooled;
+import io.swagger.models.auth.In;
 import org.yzh.protocol.basics.JTMessage;
 import org.yzh.protocol.commons.Action;
 import org.yzh.protocol.commons.ShapeAction;
@@ -193,7 +194,7 @@
     //浣嶇疆淇℃伅姹囨姤
     public static T0200 T0200Attributes() {
         T0200 bean = T0200();
-        Map<Long, Object> attributes = new TreeMap<>();
+        Map<Integer, Object> attributes = new TreeMap<>();
         attributes.put(AttributeKey.Mileage, 11);
         attributes.put(AttributeKey.Fuel, 22);
         attributes.put(AttributeKey.Speed, 33);
@@ -290,11 +291,11 @@
 
 
         T0200 bean = T0200();
-        Map<Long, Object> attributes = new TreeMap<>();
-        attributes.put(Long.valueOf(AlarmADAS.key), alarmADAS);
-        attributes.put(Long.valueOf(AlarmDSM.key), alarmDSM);
-        attributes.put(Long.valueOf(AlarmTPMS.key), alarmTPMS);
-        attributes.put(Long.valueOf(AlarmBSD.key), alarmBSD);
+        Map<Integer, Object> attributes = new TreeMap<>();
+        attributes.put( AlarmADAS.key, alarmADAS);
+        attributes.put( AlarmDSM.key, alarmDSM);
+        attributes.put( AlarmTPMS.key, alarmTPMS);
+        attributes.put( AlarmBSD.key, alarmBSD);
 
         bean.setAttributes(attributes);
         return bean;
diff --git a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java
index 572b018..0fda714 100644
--- a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java
+++ b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import io.github.yezhihao.protostar.annotation.Field;
 import io.github.yezhihao.protostar.annotation.Message;
+import lombok.Data;
 import org.yzh.protocol.basics.JTMessage;
 import org.yzh.protocol.commons.JT808;
 import org.yzh.protocol.commons.transform.AttributeConverter;
@@ -15,8 +16,22 @@
  * @author yezhihao
  * https://gitee.com/yezhihao/jt808-server
  */
-@JsonIgnoreProperties({"attributes", "alarmList", "dateTime", "messageId", "properties", "protocolVersion", "clientId", "serialNo", "packageTotal", "packageNo", "verified", "bodyLength", "encryption", "subpackage", "version", "reserved"})
+@JsonIgnoreProperties({"attributes",
+        "alarmList",
+        "dateTime",
+        "messageId",
+        "properties",
+        "protocolVersion",
+        "clientId", "serialNo",
+        "packageTotal", "packageNo",
+        "verified",
+        "bodyLength",
+        "encryption",
+        "subpackage",
+        "version",
+        "reserved"})
 @Message(JT808.浣嶇疆淇℃伅姹囨姤)
+@Data
 public class T0200 extends JTMessage {
 
     @Field(length = 4, desc = "鎶ヨ鏍囧織")
@@ -39,7 +54,7 @@
     private LocalDateTime deviceTime;
     @Field(converter = AttributeConverter.class, desc = "浣嶇疆闄勫姞淇℃伅", version = {-1, 0})
     @Field(converter = AttributeConverterYue.class, desc = "浣嶇疆闄勫姞淇℃伅(绮ゆ爣)", version = 1)
-    private Map<Long, Object> attributes;
+    private Map<Integer, Object> attributes;
 
     public int getWarnBit() {
         return warnBit;
@@ -105,13 +120,6 @@
         this.deviceTime = deviceTime;
     }
 
-    public Map<Long, Object> getAttributes() {
-        return attributes;
-    }
-
-    public void setAttributes(Map<Long, Object> attributes) {
-        this.attributes = attributes;
-    }
 
     public int getAttributeInt(int key) {
         if (attributes != null) {
diff --git a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java
index 61cf003..e08f946 100644
--- a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java
+++ b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java
@@ -1,10 +1,12 @@
 package org.yzh.web.endpoint;
 
+import com.alibaba.fastjson.JSONObject;
 import io.github.yezhihao.netmc.core.annotation.Async;
 import io.github.yezhihao.netmc.core.annotation.AsyncBatch;
 import io.github.yezhihao.netmc.core.annotation.Endpoint;
 import io.github.yezhihao.netmc.core.annotation.Mapping;
 import io.github.yezhihao.netmc.session.Session;
+import org.apache.commons.codec.binary.Hex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,9 +18,14 @@
 import org.yzh.web.model.enums.SessionKey;
 import org.yzh.web.service.FileService;
 
+import java.io.ByteArrayInputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Properties;
 
 import static org.yzh.protocol.commons.JT808.*;
 
@@ -39,6 +46,7 @@
 
     @Mapping(types = 缁堢蹇冭烦, desc = "缁堢蹇冭烦")
     public void T0002(JTMessage message, Session session) {
+        log.info("缁堢蹇冭烦========={}", JSONObject.toJSONString(message));
     }
 
     @Mapping(types = 缁堢娉ㄩ攢, desc = "缁堢娉ㄩ攢")
@@ -54,6 +62,9 @@
 
     @Mapping(types = 缁堢琛ヤ紶鍒嗗寘璇锋眰, desc = "缁堢琛ヤ紶鍒嗗寘璇锋眰")
     public void T8003(T8003 message, Session session) {
+    }
+    @Mapping(types = 缁堢鏍℃椂璇锋眰涓婅, desc = "缁堢鏍℃椂璇锋眰涓婅")
+    public void T0F01(JTMessage message, Session session) {
     }
 
     @Mapping(types = 缁堢娉ㄥ唽, desc = "缁堢娉ㄥ唽")
@@ -99,6 +110,7 @@
 
     @Mapping(types = 鏌ヨ缁堢灞炴�у簲绛�, desc = "鏌ヨ缁堢灞炴�у簲绛�")
     public void T0107(T0107 message, Session session) {
+        log.info("鏌ヨ缁堢灞炴�у簲绛�========={}", JSONObject.toJSONString(message));
         session.response(message);
     }
 
@@ -115,11 +127,24 @@
     @AsyncBatch(poolSize = 2, maxElements = 4000, maxWait = 1000)
     @Mapping(types = 浣嶇疆淇℃伅姹囨姤, desc = "浣嶇疆淇℃伅姹囨姤")
     public void T0200(List<T0200> list) {
+
+        System.out.println(JSONObject.toJSONString(list)
+      );
     }
 
     @Mapping(types = 瀹氫綅鏁版嵁鎵归噺涓婁紶, desc = "瀹氫綅鏁版嵁鎵归噺涓婁紶")
     public void T0704(T0704 message) {
     }
+    public static String bcd2String(byte[] bytes) {
+        StringBuilder temp = new StringBuilder(bytes.length * 2);
+        for (int i = 0; i < bytes.length; i++) {
+            // 楂樺洓浣�
+            temp.append((bytes[i] & 0xf0) >>> 4);
+            // 浣庡洓浣�
+            temp.append(bytes[i] & 0x0f);
+        }
+        return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp.toString().substring(1) : temp.toString();
+    }
 
     @Mapping(types = {浣嶇疆淇℃伅鏌ヨ搴旂瓟, 杞﹁締鎺у埗搴旂瓟}, desc = "浣嶇疆淇℃伅鏌ヨ搴旂瓟/杞﹁締鎺у埗搴旂瓟")
     public void T0201_0500(T0201_0500 message, Session session) {
diff --git a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java
index 7669668..6f7fb19 100644
--- a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java
+++ b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java
@@ -1,15 +1,24 @@
 package org.yzh.web.endpoint;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import io.github.yezhihao.netmc.core.HandlerInterceptor;
 import io.github.yezhihao.netmc.session.Session;
+import netscape.javascript.JSObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.yzh.commons.util.Byte2NumberUtils;
 import org.yzh.protocol.basics.JTMessage;
 import org.yzh.protocol.commons.JT808;
+import org.yzh.protocol.commons.transform.AttributeKey;
+import org.yzh.protocol.commons.transform.attribute.Battery;
 import org.yzh.protocol.t808.T0001;
 import org.yzh.protocol.t808.T0200;
 import org.yzh.web.model.entity.DeviceDO;
 import org.yzh.web.model.enums.SessionKey;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
 
 public class JTHandlerInterceptor implements HandlerInterceptor<JTMessage> {
 
@@ -73,8 +82,16 @@
         boolean transform = request.transform();
         if (messageId == JT808.浣嶇疆淇℃伅姹囨姤) {
             DeviceDO device = SessionKey.getDevice(session);
-            if (device != null)
+            if (device != null){
                 device.setLocation((T0200) request);
+                if(device.getLocation()!=null && device.getLocation().getAttributes()!=null ){
+                   Battery battery= (Battery) device.getLocation().getAttributes().get(AttributeKey.Battery);
+                    if(battery !=null){
+                        device.setBatteryVoltage(battery.getVoltage());
+                    }
+                }
+            }
+
             return transform;
         }
         if (!session.isRegistered()) {
diff --git a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java
index 7502fa3..b4d1b34 100644
--- a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java
+++ b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java
@@ -1,10 +1,12 @@
 package org.yzh.web.model.entity;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
 import org.yzh.protocol.t808.T0200;
 
 import java.util.Objects;
 
+@Data
 public class DeviceDO {
 
     @Schema(description = "璁惧id")
@@ -19,6 +21,8 @@
     protected int driverId;
     @Schema(description = "鍗忚鐗堟湰鍙�")
     private int protocolVersion;
+    @Schema(description = "鐢垫睜鐢靛帇")
+    private Float batteryVoltage;
     @Schema(description = "瀹炴椂鐘舵��")
     private T0200 location;
 
diff --git a/server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java b/server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java
index 45f5c70..1651ab1 100644
--- a/server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java
+++ b/server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java
@@ -8,6 +8,9 @@
 import org.yzh.protocol.codec.JTMessageDecoder;
 import org.yzh.protocol.codec.JTMessageEncoder;
 
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
 /**
  * JT娑堟伅缂栬В鐮侀�傞厤鍣�
  * @author yezhihao
@@ -34,4 +37,7 @@
         JTMessage message = messageDecoder.decode(input);
         return message;
     }
+
+    public static void main(String[] args) {
+    }
 }

--
Gitblit v1.9.3