diff --git a/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/FireSafetyDataReceiver.java b/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/FireSafetyDataReceiver.java index 2376a2b..b83b60d 100644 --- a/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/FireSafetyDataReceiver.java +++ b/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/FireSafetyDataReceiver.java @@ -43,7 +43,18 @@ public class FireSafetyDataReceiver { } return OpenFireHandleEvent(data); } - + public static Map 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 OpenFireHandleConFigEvent(byte[] data) { + Map 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; + } /* * 动火离人正常上报数据解析 * */ diff --git a/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/GasAlarmDataParser.java b/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/GasAlarmDataParser.java index 2fe4d8c..1803ef1 100644 --- a/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/GasAlarmDataParser.java +++ b/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/GasAlarmDataParser.java @@ -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)); diff --git a/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/ProtocolTest.java b/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/ProtocolTest.java index ab8a212..69e1a3e 100644 --- a/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/ProtocolTest.java +++ b/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/conf/ProtocolTest.java @@ -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) diff --git a/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/service/EmqxPlugin.java b/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/service/EmqxPlugin.java index f71bdd2..ba87ce6 100644 --- a/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/service/EmqxPlugin.java +++ b/emqx-plugin/src/main/java/cc/iotkit/plugins/emqx/service/EmqxPlugin.java @@ -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 mapConfig = FireSafetyDataReceiver.handleHexConfigData(data); + if(!mapConfig.isEmpty()) { + payload.put("params", mapConfig); + } } }