update 电单车协议

This commit is contained in:
Guoqs
2024-08-19 09:54:12 +08:00
parent 52fba818eb
commit 723be8d54b
4 changed files with 139 additions and 2 deletions

View File

@@ -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));
}
}

View File

@@ -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;

View File

@@ -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);
}
}