mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-04 10:00:11 +08:00
update 电单车协议
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package com.jsowell.common.enums.ebike;
|
||||
|
||||
/**
|
||||
* 电单车端口状态
|
||||
*/
|
||||
public enum PortStatusEnum {
|
||||
IDLE(0, "空闲"),
|
||||
CHARGING(1, "充电中"),
|
||||
CHARGER_CONNECTED_NOT_CHARGING_USER(2, "有充电器但未充电(用户未启动充电)"),
|
||||
CHARGER_CONNECTED_NOT_CHARGING_FULL(3, "有充电器但未充电(已充满电)"),
|
||||
UNMEASURABLE(4, "该路无法计量"),
|
||||
FLOAT_CHARGE(5, "浮充"),
|
||||
MEMORY_DAMAGE(6, "存储器损坏"),
|
||||
SOCKET_SPRING_STUCK(7, "插座弹片卡住故障"),
|
||||
CONTACT_BAD_OR_FUSE_BLOWN(8, "接触不良或保险丝烧断故障"),
|
||||
RELAY_GLUE(9, "算法-继电器粘连"),
|
||||
HALL_SWITCH_DAMAGE(10, "霍尔开关损坏(即插入检测传感器)"),
|
||||
PRE_INSPECTION_RELAY_OR_FUSE_BAD(11, "预检-继电器坏或保险丝断"),
|
||||
PRE_INSPECTION_LOAD_SHORT_CIRCUIT(13, "预检-负载短路"),
|
||||
FILTERED_PRE_INSPECTION_RELAY_GLUE(14, "过滤性预检-继电器粘连"),
|
||||
CARD_CHIP_DAMAGE(15, "刷卡芯片损坏故障"),
|
||||
DETECTION_CIRCUIT_FAULT(16, "检测电路故障");
|
||||
|
||||
private final int value;
|
||||
private final String description;
|
||||
|
||||
PortStatusEnum(int value, String description) {
|
||||
this.value = value;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
// 新增方法: 根据 value 获取描述
|
||||
public static String getDescriptionByValue(int value) {
|
||||
for (PortStatusEnum status : values()) {
|
||||
if (status.getValue() == value) {
|
||||
return status.getDescription();
|
||||
}
|
||||
}
|
||||
return "未知状态";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.jsowell.netty.domain.ebike.deviceupload;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.jsowell.common.enums.ebike.PortStatusEnum;
|
||||
import com.jsowell.common.util.BytesUtil;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 此为心跳包,间隔时间默认为3分钟,方便服务器管理SocketIP
|
||||
* 设备如2次收不到服务器应答,则进入离线状态
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class DeviceHeartbeat {
|
||||
/**
|
||||
* 电压:设备的当前电压(打包发送心跳包指令时的当前时间点的实时电压)
|
||||
*/
|
||||
private String voltage;
|
||||
|
||||
/**
|
||||
* 端口数量:表示设备总共有多少个端口,和后面的“端口状态”配套
|
||||
*/
|
||||
private int portNumber;
|
||||
|
||||
/**
|
||||
* 注4、各端口状态:一个字节表示一个端口,和“端口数量”匹配,
|
||||
* 如端口数量是16,则“各端口状态”为16字节;
|
||||
* 每个字节表示的意思,
|
||||
* 0=空闲,1=充电中,2=有充电器但未充电(用户未启动充电),3=有充电器但未充电(已充满电) 4=该路无法计量,5=浮充,6=存储器损坏,
|
||||
* 7=插座弹片卡住故障,8=接触不良或保险丝烧断故障,9=(算法-继电器粘连),0x0A=霍尔开关损坏(即插入检测传感器)。
|
||||
* 0x0B=(预检-继电器坏或保险丝断),0x0D=(预检-负载短路)。0x0E=(过滤性预检-继电器粘连),0x0F=(刷卡芯片损坏故障),0x10=(检测电路故障)
|
||||
*/
|
||||
private List<String> portStatus;
|
||||
|
||||
/**
|
||||
* 信号强度:指分机与主机之间的无线信号强度,如LORA信号。00则为有线组网或无信号强度功能
|
||||
*/
|
||||
private String rssi;
|
||||
|
||||
/**
|
||||
* 当前环境温度:表示当前设备内的温度,可能和真正的当前环境温度有一定的误差,如00则表示无此功能
|
||||
*/
|
||||
private String temperature;
|
||||
|
||||
|
||||
public DeviceHeartbeat(byte[] dataBytes) {
|
||||
this.voltage = BytesUtil.bytesToIntLittle(Arrays.copyOfRange(dataBytes, 0, 2)) + "";
|
||||
this.portNumber = BytesUtil.bytesToIntLittle(Arrays.copyOfRange(dataBytes, 2, 3));
|
||||
|
||||
byte[] statusBytes = Arrays.copyOfRange(dataBytes, 3, this.portNumber);
|
||||
List<String> statusList = Lists.newArrayList();
|
||||
for (byte statusByte : statusBytes) {
|
||||
int status = BytesUtil.bytesToIntLittle(new byte[]{statusByte});
|
||||
statusList.add(PortStatusEnum.getDescriptionByValue(status));
|
||||
}
|
||||
this.portStatus = statusList;
|
||||
this.rssi = BytesUtil.bcd2StrLittle(Arrays.copyOfRange(dataBytes, dataBytes.length - 2, dataBytes.length - 1));
|
||||
this.temperature = BytesUtil.bcd2StrLittle(Arrays.copyOfRange(dataBytes, dataBytes.length - 1, dataBytes.length));
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,10 @@
|
||||
package com.jsowell.netty.domain.ebike.deviceupload;
|
||||
|
||||
import com.jsowell.netty.domain.ebike.AbsEBikeMessage;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 设备注册包(20指令)
|
||||
*/
|
||||
@Data
|
||||
public class EBikeMessageCmd20 extends AbsEBikeMessage {
|
||||
|
||||
private DeviceRegister deviceRegister;
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.jsowell.netty.domain.ebike.deviceupload;
|
||||
|
||||
import com.jsowell.netty.domain.ebike.AbsEBikeMessage;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 设备注册包(20指令)
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class EBikeMessageCmd21 extends AbsEBikeMessage {
|
||||
|
||||
private DeviceHeartbeat deviceHeartbeat;
|
||||
|
||||
public EBikeMessageCmd21(String header, int length, int physicalId, int messageId, String command, Object payload, int checksum, DeviceHeartbeat deviceHeartbeat) {
|
||||
super(header, length, physicalId, messageId, command, payload, checksum);
|
||||
this.deviceHeartbeat = deviceHeartbeat;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parsePayload(byte[] dataBytes) {
|
||||
this.deviceHeartbeat = new DeviceHeartbeat(dataBytes);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user