新增批量下发回复解析

master
小鱼干 2 weeks ago
parent febc6291b8
commit 8764794b6c

@ -43,7 +43,18 @@ public class FireSafetyDataReceiver {
}
return OpenFireHandleEvent(data);
}
public static Map<String, Object> handleHexConfigData(String hexString) {
byte[] data = hexStringToBytes(hexString);
if (data == null || data.length < 1) {
return null;
}
/*
int eventType = Byte.toUnsignedInt(data[0]) + Byte.toUnsignedInt(data[1]);
if (eventType == 129) {
return handleEvent(data);
}*/
return OpenFireHandleConFigEvent(data);
}
private static byte[] hexStringToBytes(String hex) {
hex = hex.replaceAll("\\s", "");
byte[] bytes = new byte[hex.length() / 2];
@ -104,6 +115,26 @@ public class FireSafetyDataReceiver {
System.out.println("解析后的数据" + result);
return result;
}
public static Map<String, Object> OpenFireHandleConFigEvent(byte[] data) {
Map<String, Object> result= new HashMap<>();
ByteBuffer buffer = ByteBuffer.wrap(data);
if (buffer.remaining() >= 3) {
result.put("dataType", "CONFIG_DATA_RESULT_CODE");
int resultCode = buffer.get() & 0xFF;
int dataId = buffer.getShort() & 0xFFFF;
result.put("resultCode", resultCode);
result.put("dataId", dataId);
}
// 解析事件头
//int eventType = buffer.get() & 0xFF;
/* result.put("eventType", eventType);
result.put("timestamp", GasAlarmDataParser.parseBcdTime(buffer));
result.put("eventTypeValue", EventTypeMapper.getEventTypeName(Integer.parseInt(result.get("eventType").toString())));
*/
System.out.println("resultCode解析后的数据" + result);
return result;
}
/*
*
* */

@ -140,14 +140,27 @@ public class GasAlarmDataParser {
eventMap.put("dataType", "NODE_EVENT");
int eventType = buffer.getShort() & 0xFFFF;
eventMap.put("eventType", eventType);
if (!Objects.equals(eventMap.get("eventType"), 15)) {
if (!Objects.equals(eventMap.get("eventType"), 15)
&& !Objects.equals(eventMap.get("eventType"), 13) &&
!Objects.equals(eventMap.get("eventType"), 14) &&
!Objects.equals(eventMap.get("eventType"), 20)) {
eventMap.put("eventTypeValue", EventTypeMapper.getEventTypeName(eventType));
eventMap.put("timestamp", parseBcdTime(buffer));
eventMap.put("nodeId", buffer.getShort() & 0xFFFF);
// BigDecimal decimalValue = new BigDecimal(buffer.getShort() & 0xFFFF)
// .divide(new BigDecimal(1), 4, RoundingMode.HALF_UP).stripTrailingZeros();
eventMap.put("dataValues", buffer.getShort() & 0xFFFF);
// eventMap.put("dataDetectorValue" , eventMap.get("dataValues"));
eventMap.put("dataDetectorValue" , eventMap.get("dataValues"));
}else if (Objects.equals(eventMap.get("eventType"), 13) ||
Objects.equals(eventMap.get("eventType"), 14) ||
Objects.equals(eventMap.get("eventType"), 20)) {
eventMap.put("eventTypeValue", EventTypeMapper.getEventTypeName(eventType));
eventMap.put("timestamp", parseBcdTime(buffer));
eventMap.put("nodeId", buffer.getShort() & 0xFFFF);
// BigDecimal decimalValue = new BigDecimal(buffer.getShort() & 0xFFFF)
// .divide(new BigDecimal(1), 4, RoundingMode.HALF_UP).stripTrailingZeros();
eventMap.put("dataValues", buffer.getShort() & 0xFFFF);
} else {
eventMap.put("eventTypeValue", EventTypeMapper.getEventTypeName(eventType));
eventMap.put("timestamp", parseBcdTime(buffer));

@ -10,6 +10,12 @@ import java.net.URISyntaxException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -116,7 +122,67 @@ public class ProtocolTest {
}
return sb.toString();
}
private static String extractByPattern(String text, String regex) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
return matcher.find() ? matcher.group(1) : null;
}
public static void main(String[] args) {
// 解析时间并计算秒差(一行核心代码)
// LocalDateTime time = (LocalDateTime) crmModel.getEntity().get("nextTime");
//if (time != null) {
// String formatted = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
String formatted = "2025-08-29 18:58:00";
// 使用 formatted...
// 修复后的日期格式解析器兼容带ss和不带ss的情况
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm")
.optionalStart().appendPattern(":ss").optionalEnd() // 秒部分可选
.toFormatter();
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime now = ZonedDateTime.now(zone);
ZonedDateTime targetTime = LocalDateTime.parse(formatted, formatter)
.atZone(zone);
// 计算时间差
Integer seconds = (int)Duration.between(now, targetTime).getSeconds();
System.out.println("剩余秒数: " + seconds);
byte[] data = new byte[]{0x00, (byte) 0xFF};
ByteBuffer buffer = ByteBuffer.wrap(data);
int value = buffer.getShort() & 0xFFFF; // 0x00FF -> 255
System.out.println(value); // 输出 ff
int maskedValue = value & 0x00FF; // 255 & 255 = 255 (0x00FF)
System.out.println(Integer.toHexString(maskedValue)); // 输出 ff
String text = "您的设备【863998080814438】触发事件 事件类型为:【报警低】";
// 提取设备ID
String deviceId = extractByPattern(text, "设备【(.*?)】");
System.out.println("设备ID: " + deviceId);
// 提取事件类型
String eventType = extractByPattern(text, "类型为:【(.*?)】");
System.out.println("事件类型: " + eventType);
LocalDateTime endDateTime = LocalDateTime.now();
LocalDateTime beginDateTime = endDateTime.minusMinutes(10);
// LocalDateTime beginDateTime = LocalDateTime.parse(beginTime, formatter);
// LocalDateTime endDateTime = LocalDateTime.parse(endTime, formatter);
// 提取设备ID
long beginMillis = beginDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
long endMillis = endDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
System.out.println(beginMillis);
System.out.println(endMillis);
String dsada=null;
System.out.println(dsada.startsWith("https"));
System.out.println(generateWriteCommand(0x0100,ByteBuffer.allocate(4)

@ -314,7 +314,10 @@ public class EmqxPlugin implements PluginCloseListener, IPlugin, Runnable {
else if(cmd.equals("0x24")){
flag=false;
//下发配置数据的回复
// payload.put("params", FireSafetyDataReceiver.handleHexData(data));
Map<String, Object> mapConfig = FireSafetyDataReceiver.handleHexConfigData(data);
if(!mapConfig.isEmpty()) {
payload.put("params", mapConfig);
}
}
}

Loading…
Cancel
Save