ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java
@@ -3,26 +3,20 @@ import com.sandu.common.domain.CommonPage; import com.sandu.common.domain.ResponseVO; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.security.annotation.AnonymousAccess; import com.sandu.common.util.ResponseUtil; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.manager.iot.amqp.processor.AirDataProcessor; import com.sandu.ximon.admin.manager.iot.frame.A5Frame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.AirDataReqInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.AtmosphereHeartBeatReqInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum; import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode; import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService; import com.sandu.ximon.admin.security.PermissionConfig; import com.sandu.ximon.admin.service.AirDataService; import com.sandu.ximon.admin.service.PoleBindingService; import com.sandu.ximon.admin.utils.RedisUtils; import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; import com.sandu.ximon.dao.bo.AirDataBo; import com.sandu.ximon.dao.domain.Pole; import com.sandu.ximon.dao.enums.MenuEnum; import com.sandu.ximon.dao.enums.PoleBindingEnums; import com.sandu.ximon.dao.mapper.PoleBindingMapper; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -77,7 +71,7 @@ if (!permissionConfig.check(MenuEnum.AIR_DATA_UPDATE.getCode())) { return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); } AirDataReqInnerFrame airDataReqInnerFrame = new AirDataReqInnerFrame(); AtmosphereHeartBeatReqInnerFrame airDataReqInnerFrame = new AtmosphereHeartBeatReqInnerFrame(); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), airDataReqInnerFrame); System.out.println(a5Frame + " --------a5Frame"); ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataNongGengController.java
@@ -10,7 +10,7 @@ import com.sandu.common.util.ResponseUtil; import com.sandu.ximon.admin.manager.iot.amqp.processor.AirDataProcessor; import com.sandu.ximon.admin.manager.iot.frame.A5Frame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.AirDataNewReqInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.AtmosphereNewReqInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum; import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService; @@ -39,8 +39,8 @@ @PostMapping("/updateAirEquipmentInfo") public ResponseVO<Object> updataAirEquipmentInfo(@RequestBody List<String> listMac) { AirDataNewReqInnerFrame airDataNewReqInnerFrame = new AirDataNewReqInnerFrame(); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), airDataNewReqInnerFrame); AtmosphereNewReqInnerFrame atmosphereNewReqInnerFrame = new AtmosphereNewReqInnerFrame(); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereNewReqInnerFrame); System.out.println(a5Frame + " --------a5Frame"); List<String> success = new ArrayList<>(); ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirEquipmentController.java
@@ -49,4 +49,61 @@ } } /** * æ¥è¯¢å¤§æ°è®¾å¤å¿è·³å æ¶é´ * * @return */ @GetMapping("/QueryHeartBeatTime") public ResponseVO<Object> QueryHeartBeatTime(@RequestParam(value = "mac", required = false) String mac) { return ResponseUtil.success(airEquipmentService.QueryHeartBeatTime(mac)); } /** * 设置å¿è·³å é´éæ¶é´ * * @param mac * @param time * @return */ @GetMapping("/setHeartBeatTime") public ResponseVO<Object> setHeartBeatTime(@RequestParam(value = "mac", required = false) String mac, @RequestParam(value = "time", required = false) Integer time) { return ResponseUtil.success(airEquipmentService.setHeartBeatTime(mac, time)); } /** * æ¥è¯¢ä¼ æå¨æ°é/æ é * * @param mac * @return */ @GetMapping("/QuerySensorInfo") public ResponseVO<Object> QuerySensorInfo(@RequestParam(value = "mac", required = false) String mac) { return ResponseUtil.success(airEquipmentService.QuerySensorInfo(mac)); } /** * æ¥è¯¢è½¯ç¡¬ä»¶çæ¬ * * @param mac * @return */ @GetMapping("/QueryVersion") public ResponseVO<Object> QueryVersion(@RequestParam(value = "mac", required = false) String mac) { airEquipmentService.QueryVersion(mac); return ResponseUtil.success(null); } /** * 软éå¯ * * @param mac * @return */ @GetMapping("/Reboot") public ResponseVO<Object> Reboot(@RequestParam(value = "mac", required = false) String mac) { return ResponseUtil.success(airEquipmentService.Reboot(mac)); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartBeatTimeReportInnerFrame.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.sandu.ximon.admin.manager.iot.frame.inner.report; import cn.hutool.core.util.StrUtil; import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import lombok.Data; import lombok.ToString; /** * 大æ°è®¾å¤å¿è·³å é´éæ¶é´ * * @author ZZQ * @date 2022/8/1 10:17 */ //FEA584000C FE 02 0004 FFFF 003C B081260C CC1C105D @Data @ToString(callSuper = true) public class A5AtmosphereHeartBeatTimeReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereHeartBeatTimeReportInnerFrame> { //é´éæ¶é´ private int intervalTime; //设å¤å°å private String deviceAddress; @Override public A5AtmosphereHeartBeatTimeReportInnerFrame transformFrame(String hex) { // é¿åº¦ä¸ä¸è´æ¶ï¼è¿ånull if (StrUtil.isBlank(hex) || hex.length() != 24) { System.out.println("æ°æ®æ ¡éªå¼å¸¸ï¼"); return null; } // MQTTéä¿¡æ¹å¼(1) setConnectType(hex.substring(0, 2)); // åè½ç (1) setFunctionCode(hex.substring(2, 4)); // è´è·é¿åº¦(2) setPayloadLength(hex.substring(4, 8)); //设å¤å°å setDeviceAddress(hex.substring(8, 12)); //å¿è·³å é´éæ¶é´ setIntervalTime(Integer.parseInt(hex.substring(12, 16), 16)); setCrc32(hex.substring(hex.length() - 8)); // æ ¡éªCRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java
@@ -70,21 +70,24 @@ // å 强 private Integer lightIntensity; // åªé³ private Integer noise; private Double noise; // PM2.5 private Integer pm25; // PM10 private Integer pm10; // æ»æ¬æµ®é¢ç²ç©ï¼TSPï¼ private Integer tsp; // SO2äºæ°§åç¡«/ç²éç¸å¯¹å¼ // é¨é private Double rainfall; // SO2äºæ°§åç¡«ç¸å¯¹å¼ private Integer so2; // ç²éç¸å¯¹å¼ private Integer ech2o; // NO2äºæ°§åæ°®/TVOC // NO2äºæ°§åæ°® private Integer no2; // TVOC private Integer tvoc; // CO䏿°§å碳 /äºæ°§å碳 // CO䏿°§å碳 private Integer co; // äºæ°§å碳 private Integer co2; // O3èæ°§ private Integer o3; @@ -116,10 +119,10 @@ this.windDirection = parseVal(hex, 18, 22) * .1; this.pressure = parseVal(hex, 22, 26); this.lightIntensity = parseVal(hex, 26, 32); this.noise = parseVal(hex, 32, 36); this.noise = parseVal(hex, 32, 36) * .1; this.pm25 = parseVal(hex, 36, 40); this.pm10 = parseVal(hex, 40, 44); this.tsp = parseVal(hex, 44, 48); this.rainfall = parseVal(hex, 44, 48) * .1; /** * 以ä¸åºåçæ¬ ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereOperationReportInnerFrame.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package com.sandu.ximon.admin.manager.iot.frame.inner.report; import cn.hutool.core.util.StrUtil; import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import lombok.Data; import lombok.ToString; /** * @author ZZQ * @date 2022/3/14 16:36 * å¤§æ°æä½æä»¤ååºå¸§ */ @Data @ToString(callSuper = true) public class A5AtmosphereOperationReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereOperationReportInnerFrame> { //MACå°å private String mac; private String state; @Override public A5AtmosphereOperationReportInnerFrame transformFrame(String hex) { // é¿åº¦ä¸ä¸è´æ¶ï¼è¿ånull if (StrUtil.isBlank(hex)) { return null; } // MQTTéä¿¡æ¹å¼(1) setConnectType(hex.substring(0, 2)); // åè½ç (1) setFunctionCode(hex.substring(2, 4)); // è´è·é¿åº¦(2) setPayloadLength(hex.substring(4, 8)); //MACå°å setMac(hex.substring(8, 12)); //硬件交äºååºç»æ setState(returnState(hex.substring(12, 14))); setCrc32(hex.substring(hex.length() - 8)); // æ ¡éªCRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } public String returnState(String stateCode) { String State = ""; switch (stateCode) { case "00": State = "æä½æå"; break; case "01": State = "æ ¡éªç é误"; break; case "02": State = "é¿åº¦é误"; break; case "03": State = "åFlash失败é误"; break; case "FF": State = "å ¶ä»é误"; break; default: State = "æªç¥é误"; } return State; } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQuerySensorInfoReportInnerFrame.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,140 @@ package com.sandu.ximon.admin.manager.iot.frame.inner.report; import cn.hutool.core.util.StrUtil; import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import lombok.Data; /** * æ¥è¯¢ä¼ æå¨æ°é/æ é * * @author ZZQ * @date 2022/8/1 14:02 */ @Data public class A5AtmosphereQuerySensorInfoReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereQuerySensorInfoReportInnerFrame> { //设å¤å°å private String deviceAddress; //ä¼ æå¨ä¿¡æ¯ private SensorInfoPackage sensorInfoPackage; @Override public A5AtmosphereQuerySensorInfoReportInnerFrame transformFrame(String hex) { if (StrUtil.isBlank(hex) || hex.length() != 100) { return null; } // MQTTéä¿¡æ¹å¼(1) setConnectType(hex.substring(0, 2)); // åè½ç (1) setFunctionCode(hex.substring(2, 4)); // è´è·é¿åº¦(2) setPayloadLength(hex.substring(4, 8)); //设å¤å°å setDeviceAddress(hex.substring(8, 12)); //ä¼ æå¨ä¿¡æ¯ String infoStr = hex.substring(14, hex.length() - 8); SensorInfoPackage sensorInfoPackage = new SensorInfoPackage().transformFrame(infoStr); setSensorInfoPackage(sensorInfoPackage); //æ ¡éª setCrc32(hex.substring(hex.length() - 8)); // æ ¡éªCRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } @Data public static class SensorInfoPackage implements IResponseInnerFrame<SensorInfoPackage> { // æ¸©åº¦å¼ private String temperature; // æ¹¿åº¦å¼ private String humidity; // é£é private String windSpeed; // é£å private String windDirection; // é£å private String windPower; // 大æ°å private String pressure; // å 强 private String lightIntensity; // åªé³ private String noise; // PM2.5 private String pm25; // PM10 private String pm10; // æ»æ¬æµ®é¢ç²ç©ï¼TSPï¼ private String tsp; // é¨é private String rainfall; // ç²é private String ech2o; // TVOC private String tvoc; // äºæ°§å碳 private String co2; // SO2äºæ°§åç¡«ç¸å¯¹å¼ private String so2; // NO2äºæ°§åæ°® private String no2; // CO䏿°§å碳 private String co; // O3èæ°§ private String o3; // Fæ°åç© private String fluoride; @Override public SensorInfoPackage transformFrame(String hex) { if (StrUtil.isBlank(hex) || hex.length() != 80) { System.out.println("æ°æ®æ ¡éªå¼å¸¸ï¼"); return null; } // 温度 setTemperature(hex.substring(2, 4)); // 湿度 setHumidity(hex.substring(6, 8)); // é£é setWindSpeed(hex.substring(10, 12)); // é£å setWindDirection(hex.substring(14, 16)); // é£å setWindPower(hex.substring(18, 20)); // 大æ°å setPressure(hex.substring(22, 24)); // å 强 setLightIntensity(hex.substring(26, 28)); // åªé³ setNoise(hex.substring(30, 32)); // PM2.5 setPm25(hex.substring(34, 36)); // PM10 setPm10(hex.substring(38, 40)); // æ»æ¬æµ®é¢ç²ç©ï¼TSPï¼ setTsp(hex.substring(42, 44)); // é¨é setRainfall(hex.substring(46, 48)); // ç²é setEch2o(hex.substring(50, 52)); // TVOC setTvoc(hex.substring(54, 56)); // äºæ°§å碳 setCo2(hex.substring(58, 60)); // SO2äºæ°§åç¡«ç¸å¯¹å¼ setSo2(hex.substring(62, 64)); // NO2äºæ°§åæ°® setNo2(hex.substring(66, 68)); // CO䏿°§å碳 setCo(hex.substring(70, 72)); // O3èæ°§ setO3(hex.substring(74, 76)); // Fæ°åç© setFluoride(hex.substring(78, 80)); return this; } } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQueryVersionReportInnerFrame.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.sandu.ximon.admin.manager.iot.frame.inner.report; import cn.hutool.core.util.StrUtil; import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import lombok.Data; /** * æ¥è¯¢è½¯ç¡¬ä»¶çæ¬ * * @author ZZQ * @date 2022/8/1 14:02 */ @Data public class A5AtmosphereQueryVersionReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereQueryVersionReportInnerFrame> { //设å¤å°å private String deviceAddress; @Override public A5AtmosphereQueryVersionReportInnerFrame transformFrame(String hex) { if (StrUtil.isBlank(hex) || hex.length() != 100) { return null; } // MQTTéä¿¡æ¹å¼(1) setConnectType(hex.substring(0, 2)); // åè½ç (1) setFunctionCode(hex.substring(2, 4)); // è´è·é¿åº¦(2) setPayloadLength(hex.substring(4, 8)); //设å¤å°å setDeviceAddress(hex.substring(8, 12)); // //æ ¡éª setCrc32(hex.substring(hex.length() - 8)); // æ ¡éªCRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java
@@ -16,31 +16,7 @@ public class A5C3OperationReportInnerFrame extends BaseResponseInnerFrame<A5C3OperationReportInnerFrame> { //MACå°å private String mac; //ååºç¶æ // æ éç ç±»åè¡¨ï¼ // 1.éä¿¡æµç¨è¶ æ¶ // 2.æ çµå // 3.æ çµæµ // 4.æ åç // 5.å çµåçè¿å° // 6.æ¼çµ // 7.è®¾å¤æ¸©åº¦è¿é« // 8.è®¾å¤æ¸©åº¦è¿ä½ // 9.å çµè¶ æ¶ï¼å çµåçè¿å°å¯¼è³å çµæ¶é´è¶ é¿ï¼ // 10.æ ç½ç» // 11.è¿æ¥ä¸»æºè¶ æ¶ // 12.è¿æ¥æå¡å¨è¶ æ¶ // 13.触æ¸å±æ ååº // 14.æ´æ°åå ¥Flash失败 // 15.åå ¥EEProm失败 // 16.å¸çµçµåè¿é«è¦å // 17.å¸çµçµåè¿åºè¦å // 18.å°éæ éï¼å½å为解éç¶æï¼ä¸è½éä¸ï¼ // 19.å°éæ éï¼å½å为éä¸ç¶æï¼ä¸è½è§£éï¼ // 20.å çµå£1æ é(ä¸è½ä½¿ç¨ï¼ // 21.å çµå£2æ é(ä¸è½ä½¿ç¨ï¼ï¼æä¸ç¨ï¼ // 22. å çµå£1æ æ³ä¸è½¦æºé讯 // 23. å çµå£2æ æ³ä¸è½¦æºéè®¯ï¼æä¸ç¨ï¼ private String state; @Override @@ -73,74 +49,19 @@ State = "æä½æå"; break; case "01": State = "éä¿¡æµç¨è¶ æ¶"; State = "æ ¡éªç é误"; break; case "02": State = "æ çµå"; State = "é¿åº¦é误"; break; case "03": State = "æ çµæµ"; State = "åFlash失败é误"; break; case "04": State = "æ åç"; case "FF": State = "å ¶ä»é误"; break; case "05": State = "å çµåçè¿å°"; break; case "06": State = "æ¼çµ"; break; case "07": State = "è®¾å¤æ¸©åº¦è¿é«"; break; case "08": State = "è®¾å¤æ¸©åº¦è¿ä½"; break; case "09": State = "å çµè¶ æ¶ï¼å çµåçè¿å°å¯¼è³å çµæ¶é´è¶ é¿ï¼"; break; case "10": State = "æ ç½ç»"; break; case "11": State = "è¿æ¥ä¸»æºè¶ æ¶"; break; case "12": State = "è¿æ¥æå¡å¨è¶ æ¶"; break; case "13": State = "触æ¸å±æ ååº"; break; case "14": State = "æ´æ°åå ¥Flash失败"; break; case "15": State = "åå ¥EEProm失败"; break; case "16": State = "å¸çµçµåè¿é«è¦å"; break; case "17": State = "å¸çµçµåè¿åºè¦å"; break; case "18": State = "å°éæ éï¼å½å为解éç¶æï¼ä¸è½éä¸ï¼"; break; case "19": State = "å°éæ éï¼å½å为éä¸ç¶æï¼ä¸è½è§£éï¼"; break; case "20": State = "å çµå£1æ é(ä¸è½ä½¿ç¨ï¼"; break; case "21": State = "å çµå£2æ é(ä¸è½ä½¿ç¨ï¼ï¼æä¸ç¨ï¼"; break; case "22": State = "å çµå£1æ æ³ä¸è½¦æºé讯"; break; case "23": State = "å çµå£2æ æ³ä¸è½¦æºéè®¯ï¼æä¸ç¨ï¼"; default: State = "æªç¥é误"; } return State; } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereHeartBeatReqInnerFrame.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ÐÞ¸Ä @@ -11,14 +11,14 @@ * @Version 1.0 */ public class AirDataReqInnerFrame implements IRequestInnerFrame { public class AtmosphereHeartBeatReqInnerFrame implements IRequestInnerFrame { // private final String payload; // private String payload; // private final String functionCode = DataTransportOrderType.LightTimer.getCode(); // private final String payloadLength; public AirDataReqInnerFrame() { public AtmosphereHeartBeatReqInnerFrame() { } @Override ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereNewReqInnerFrame.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataNewReqInnerFrame.java ÐÞ¸Ä @@ -10,14 +10,14 @@ * @Date 2022/4/24 */ public class AirDataNewReqInnerFrame implements IRequestInnerFrame { public class AtmosphereNewReqInnerFrame implements IRequestInnerFrame { // private final String payload; // private final String functionCode = DataTransportOrderType.LightTimer.getCode(); // private final String payloadLength; public AirDataNewReqInnerFrame() { public AtmosphereNewReqInnerFrame() { } @Override ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.javacopy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.java
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ¸´ÖÆ @@ -6,28 +6,18 @@ import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; /** * @Author liuhaonan * @Date 2022/2/15 11:07 * @Version 1.0 * æ¥è¯¢å¤§æ°è®¾å¤å¿è·³å æ¶é´ * * @author ZZQ * @date 2022/7/29 15:47 */ public class AirDataReqInnerFrame implements IRequestInnerFrame { // private final String payload; // private final String functionCode = DataTransportOrderType.LightTimer.getCode(); // private final String payloadLength; public AirDataReqInnerFrame() { } public class AtmosphereQueryHeartBeatTimeReqInnerFrame implements IRequestInnerFrame { @Override public String getEncodeFrame() { String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode(); String functionCode = AtmoFunctionCode.QueryHeartBeatTime.getCode(); String payloadLength = "0002"; String payload = "FFFF"; String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.javacopy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.java
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ¸´ÖÆ @@ -6,28 +6,18 @@ import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; /** * @Author liuhaonan * @Date 2022/2/15 11:07 * @Version 1.0 * æ¥è¯¢ä¼ æå¨æ°é/æ é * * @author ZZQ * @date 2022/8/1 10:01 */ public class AirDataReqInnerFrame implements IRequestInnerFrame { // private final String payload; // private final String functionCode = DataTransportOrderType.LightTimer.getCode(); // private final String payloadLength; public AirDataReqInnerFrame() { } public class AtmosphereQuerySensorInfoReqInnerFrame implements IRequestInnerFrame { @Override public String getEncodeFrame() { String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode(); String functionCode = AtmoFunctionCode.QuerySensorInfo.getCode(); String payloadLength = "0002"; String payload = "FFFF"; String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.javacopy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.java
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ¸´ÖÆ @@ -6,28 +6,18 @@ import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; /** * @Author liuhaonan * @Date 2022/2/15 11:07 * @Version 1.0 * æ¥è¯¢å¤§æ°è®¾å¤è½¯ç¡¬ä»¶çæ¬ * * @author ZZQ * @date 2022/8/1 10:03 */ public class AirDataReqInnerFrame implements IRequestInnerFrame { // private final String payload; // private final String functionCode = DataTransportOrderType.LightTimer.getCode(); // private final String payloadLength; public AirDataReqInnerFrame() { } public class AtmosphereQueryVersionReqInnerFrame implements IRequestInnerFrame { @Override public String getEncodeFrame() { String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode(); String functionCode = AtmoFunctionCode.QueryVersion.getCode(); String payloadLength = "0002"; String payload = "FFFF"; String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.javacopy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.java
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ¸´ÖÆ @@ -6,28 +6,18 @@ import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; /** * @Author liuhaonan * @Date 2022/2/15 11:07 * @Version 1.0 * 大æ°è®¾å¤è½¯éå¯ * * @author ZZQ * @date 2022/7/29 15:47 */ public class AirDataReqInnerFrame implements IRequestInnerFrame { // private final String payload; // private final String functionCode = DataTransportOrderType.LightTimer.getCode(); // private final String payloadLength; public AirDataReqInnerFrame() { } public class AtmosphereRebootReqInnerFrame implements IRequestInnerFrame { @Override public String getEncodeFrame() { String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode(); String functionCode = AtmoFunctionCode.Reboot.getCode(); String payloadLength = "0002"; String payload = "FFFF"; String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereSetHeartBeatTimeReqInnerFrame.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.sandu.ximon.admin.manager.iot.frame.inner.request; import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode; import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; /** * æ¥è¯¢å¤§æ°è®¾å¤å¿è·³å æ¶é´ * * @author ZZQ * @date 2022/7/29 15:47 */ public class AtmosphereSetHeartBeatTimeReqInnerFrame implements IRequestInnerFrame { private String payload; public AtmosphereSetHeartBeatTimeReqInnerFrame(int time) { String data = Integer.toHexString(time); switch (data.length()) { case 1: data = "000" + data; break; case 2: data = "00" + data; break; case 3: data = "0" + data; break; default: } payload = "FFFF" + data; } @Override public String getEncodeFrame() { String functionCode = AtmoFunctionCode.SettingHeartBeatTime.getCode(); String payloadLength = "0004"; String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
@@ -11,10 +11,50 @@ QueryHeartBeat("01"), // æ¥è¯¢å¿è·³å æ¶é´ QueryHeartBeatTime("02"), // æ¥è¯¢ä¼ æå¨æ°é/æ é QuerySensorInfo("03"), // æ¥è¯¢è½¯ç¡¬ä»¶çæ¬ QueryVersion("04"), // éå¯ Reboot("10"), // 设置å¿è·³å é´é SettingHeartBeatTime("11"), //设置å°å SettingAddress("12"), //ä¼ æå¨åè½å¼å ³ SensorSwitch("13"), //è®¾ç½®æ°æ®ä¿®æ£å¼-温度 Setting_Data_Correction_temperature("14"), //è®¾ç½®æ°æ®ä¿®æ£å¼-湿度 Setting_Data_Correction_humidity("15"), //è®¾ç½®æ°æ®ä¿®æ£å¼-é£é Setting_Data_Correction_windSpeed("16"), //è®¾ç½®æ°æ®ä¿®æ£å¼-é£å Setting_Data_Correction_windDirection("17"), //è®¾ç½®æ°æ®ä¿®æ£å¼-æ°å Setting_Data_Correction_airPressure("18"), //è®¾ç½®æ°æ®ä¿®æ£å¼-å 强 Setting_Data_Correction_lightIntensity("19"), //è®¾ç½®æ°æ®ä¿®æ£å¼-åªé³ Setting_Data_Correction_noise("1A"), //è®¾ç½®æ°æ®ä¿®æ£å¼-PM2.5 Setting_Data_Correction_PM2_5("1B"), //è®¾ç½®æ°æ®ä¿®æ£å¼-PM10 Setting_Data_Correction_PM10("1C"), //è®¾ç½®æ°æ®ä¿®æ£å¼-é¨é Setting_Data_Correction_rainfall("1D"), //è®¾ç½®æ°æ®ä¿®æ£å¼-SO2äºæ°§åç¡« Setting_Data_Correction_SO2("1E"), //è®¾ç½®æ°æ®ä¿®æ£å¼-NO2äºæ°§åæ°® Setting_Data_Correction_NO2("1F"), //è®¾ç½®æ°æ®ä¿®æ£å¼-CO䏿°§å碳 Setting_Data_Correction_CO("20"), //è®¾ç½®æ°æ®ä¿®æ£å¼-O3èæ°§ Setting_Data_Correction_O3("21"), //è®¾ç½®æ°æ®ä¿®æ£å¼-Fæ°åç© Setting_Data_Correction_F("22"), // 大æ°è®¾å¤å¿è·³å åå¨ AIR_HEARTBEAT("air_heartbeat:air_heartbeat"), // 大æ°è®¾å¤å¿è·³å åå¨(设å¤ç¶æ)) @@ -37,4 +77,13 @@ AtmoFunctionCode(String code) { this.code = code; } public static AtmoFunctionCode getByCode(String code) { for (AtmoFunctionCode atmoFunctionCode : values()) { if (atmoFunctionCode.getCode().equals(code)) { return atmoFunctionCode; } } return null; } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java
@@ -94,6 +94,7 @@ } /** * + * æ ¹æ®ç¯æidæ¥è¯¢å¤§æ°æ°æ® ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java
@@ -5,7 +5,16 @@ import com.sandu.common.execption.BusinessException; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.manager.iot.frame.A5Frame; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartBeatTimeReportInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereOperationReportInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereQuerySensorInfoReportInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.*; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum; import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode; import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.utils.RedisUtils; import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; @@ -98,7 +107,7 @@ /** * å é¤å¤§æ°è®¾å¤ æ¥å¿è®°å½å¼å§ */ List<String> listCode=new ArrayList<>(1); List<String> listCode = new ArrayList<>(1); listCode.add(airEquipment.getMac()); String content = "{设å¤codeï¼" + airEquipment.getMac() + "}"; @@ -132,4 +141,149 @@ } return equipmentInfo; } /** * æ¥è¯¢å¤§æ°è®¾å¤å¿è·³å æ¶é´ */ public String QueryHeartBeatTime(String mac) { AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class). getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1")); if (airEquipment == null) { throw new BusinessException("大æ°è®¾å¤ä¸åå¨ï¼"); } AtmosphereQueryHeartBeatTimeReqInnerFrame atmosphereQueryHeartBeatTimeReqInnerFrame = new AtmosphereQueryHeartBeatTimeReqInnerFrame(); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQueryHeartBeatTimeReqInnerFrame); System.out.println(a5Frame + " --------a5Frame"); CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame); System.out.println(commonFrame + " -----------commonFrame"); // FEA504000AFE020002FFFF014062EC --------a5Frame // FEA584000CFE020004FFFF003CB081260CCC1C105D -----------commonFrame A5AtmosphereHeartBeatTimeReportInnerFrame a5AtmosphereHeartBeatTimeReportInnerFrame = new A5AtmosphereHeartBeatTimeReportInnerFrame().transformFrame(commonFrame.getPayload()); if (a5AtmosphereHeartBeatTimeReportInnerFrame != null && a5AtmosphereHeartBeatTimeReportInnerFrame.isValidate()) { return "该大æ°è®¾å¤å¿è·³å é´éæ¶é´ä¸ºï¼" + a5AtmosphereHeartBeatTimeReportInnerFrame.getIntervalTime() + "s"; } else { throw new BusinessException("æ°æ®æ ¡éªå¼å¸¸ï¼"); } } /** * 设置大æ°è®¾å¤å¿è·³å é´éæ¶é´ * * @param mac * @param time */ public String setHeartBeatTime(String mac, Integer time) { if (time < 30) { throw new BusinessException("å¿è·³å é´éæ¶é´ä¸è½å°äº30sï¼"); } AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class). getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1")); if (airEquipment == null) { throw new BusinessException("大æ°è®¾å¤ä¸åå¨ï¼"); } AtmosphereSetHeartBeatTimeReqInnerFrame atmosphereSetHeartBeatTimeReqInnerFrame = new AtmosphereSetHeartBeatTimeReqInnerFrame(time); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereSetHeartBeatTimeReqInnerFrame); System.out.println(a5Frame + " --------a5Frame"); CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame); System.out.println(commonFrame + " -----------commonFrame"); //FEA584000BFE110003FFFF00464116EC58FC0C8F A5AtmosphereOperationReportInnerFrame a5AtmosphereOperationReportInnerFrame = new A5AtmosphereOperationReportInnerFrame().transformFrame(commonFrame.getPayload()); if (a5AtmosphereOperationReportInnerFrame != null && a5AtmosphereOperationReportInnerFrame.isValidate()) { return a5AtmosphereOperationReportInnerFrame.getState(); } else { throw new BusinessException("æ°æ®æ ¡éªå¼å¸¸ï¼"); } } /** * æ¥è¯¢ä¼ æå¨æ°é/æ é * * @param mac * @return */ public A5AtmosphereQuerySensorInfoReportInnerFrame.SensorInfoPackage QuerySensorInfo(String mac) { AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class). getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1")); if (airEquipment == null) { throw new BusinessException("大æ°è®¾å¤ä¸åå¨ï¼"); } AtmosphereQuerySensorInfoReqInnerFrame atmosphereQuerySensorInfoReqInnerFrame = new AtmosphereQuerySensorInfoReqInnerFrame(); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQuerySensorInfoReqInnerFrame); System.out.println(a5Frame + " --------a5Frame"); CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame); System.out.println(commonFrame + " -----------commonFrame"); A5AtmosphereQuerySensorInfoReportInnerFrame atmosphereQuerySensorInfoReportInnerFrame = new A5AtmosphereQuerySensorInfoReportInnerFrame().transformFrame(commonFrame.getPayload()); if (atmosphereQuerySensorInfoReportInnerFrame != null && atmosphereQuerySensorInfoReportInnerFrame.isValidate()) { return atmosphereQuerySensorInfoReportInnerFrame.getSensorInfoPackage(); } else { throw new BusinessException("æ°æ®æ ¡éªå¼å¸¸ï¼"); } } /** * æ¥è¯¢è½¯ç¡¬ä»¶çæ¬ * * @param mac * @return */ public void QueryVersion(String mac) { //TODO AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class). getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1")); if (airEquipment == null) { throw new BusinessException("大æ°è®¾å¤ä¸åå¨ï¼"); } AtmosphereQueryVersionReqInnerFrame atmosphereQueryVersionReqInnerFrame = new AtmosphereQueryVersionReqInnerFrame(); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQueryVersionReqInnerFrame); System.out.println(a5Frame + " --------a5Frame"); CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame); System.out.println(commonFrame + " -----------commonFrame"); // FEA504000AFE040002FFFF8E00974C --------a5Frame // FEA584000BFE040003FFFFFF38586A49EE3EAF62 -----------commonFrame } /** * 软éå¯ * * @param mac * @return */ public String Reboot(String mac) { AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class). getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1")); if (airEquipment == null) { throw new BusinessException("大æ°è®¾å¤ä¸åå¨ï¼"); } AtmosphereRebootReqInnerFrame atmosphereRebootReqInnerFrame = new AtmosphereRebootReqInnerFrame(); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereRebootReqInnerFrame); System.out.println(a5Frame + " --------a5Frame"); CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame); System.out.println(commonFrame + " -----------commonFrame"); A5AtmosphereOperationReportInnerFrame a5AtmosphereOperationReportInnerFrame = new A5AtmosphereOperationReportInnerFrame().transformFrame(commonFrame.getPayload()); if (a5AtmosphereOperationReportInnerFrame != null && a5AtmosphereOperationReportInnerFrame.isValidate()) { return a5AtmosphereOperationReportInnerFrame.getState(); } else { throw new BusinessException("æ°æ®æ ¡éªå¼å¸¸ï¼"); } } }