ard-admin/src/main/java/com/ard/web/controller/sample/DeviceController.java
@@ -213,10 +213,12 @@ if (propertyEnumOpt.isEmpty()) { return ResponseResult.error(CommonErrorEnum.ILLEGAL_ARGUMENT); } deviceService.devicePropertySet(dockSn, propertyEnumOpt.get(), param.get(property)); deviceService.devicePropertySet(dockSn, propertyEnumOpt.get(), param); return ResponseResult.success(); } //.get(property) // /** // * 查询机场设备列表 // */ ard-sample/src/main/java/com/ard/sample/component/mqtt/handler/PropertySetReplyHandler.java
@@ -3,10 +3,13 @@ import com.ard.sample.component.mqtt.model.Chan; import com.ard.sample.component.mqtt.model.ChannelName; import com.ard.sample.component.mqtt.model.CommonTopicReceiver; import com.ard.sample.component.websocket.enums.MessageType; import com.ard.sample.component.websocket.handler.DockWebSocketHandler; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.Message; import org.springframework.stereotype.Component; @@ -23,6 +26,9 @@ @Autowired private ObjectMapper mapper; @Autowired private DockWebSocketHandler _dockWebSocketHandler; /** * Handle the reply message from the pilot side to the on-demand video. * @param message reply message @@ -30,11 +36,30 @@ */ @ServiceActivator(inputChannel = ChannelName.INBOUND_PROPERTY_SET_REPLY) public void serviceReply(Message<?> message) throws IOException { // 解析消息的主题,从中提取设备序列号等信息 String topic = message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC).toString(); // thing/product/7CTDLCE00A1UPE/property/set_reply String[] parts = topic.split("/"); // 目标子串是分割后数组的第3个元素(索引2) String deviceSn = parts.length > 2 ? parts[2] : ""; // 加判断避免数组越界 byte[] payload = (byte[])message.getPayload(); CommonTopicReceiver receiver = mapper.readValue(payload, new TypeReference<CommonTopicReceiver>() {}); Chan<CommonTopicReceiver<?>> chan = Chan.getInstance(); // Put the message to the chan object. chan.put(receiver); receiver.setGateway(deviceSn); receiver.setType(MessageType.CONTROL.getType()); // receiver.setMethod(); // 设备属性设置后的处理逻辑 // WebSocket 接口,发给前端 String dockControl=""; dockControl=mapper.writeValueAsString(receiver); _dockWebSocketHandler.sendMessageToSubscribers(deviceSn, MessageType.CONTROL.getType(),dockControl); } } ard-sample/src/main/java/com/ard/sample/manage/model/enums/DeviceSetPropertyEnum.java
@@ -21,8 +21,9 @@ DISTANCE_LIMIT_STATUS("distance_limit_status", DistanceLimitStatusReceiver.class), OBSTACLE_AVOIDANCE("obstacle_avoidance", ObstacleAvoidanceReceiver.class); OBSTACLE_AVOIDANCE("obstacle_avoidance", ObstacleAvoidanceReceiver.class), SILENT_MODE("silent_mode", SilentModeReceiver.class); String property; ard-sample/src/main/java/com/ard/sample/manage/model/receiver/SilentModeReceiver.java
New file @@ -0,0 +1,25 @@ package com.ard.sample.manage.model.receiver; import com.ard.sample.manage.model.dto.BasicDeviceProperty; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data public class SilentModeReceiver extends BasicDeviceProperty { @JsonProperty("silent_mode") private Integer silentMode; public boolean valid() { if (silentMode.equals(0) || silentMode.equals(1)) { return true; } return false; } public boolean canPublish(String fieldName, OsdSubDeviceReceiver osd) { return valid(); } } ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceServiceImpl.java
@@ -1101,18 +1101,18 @@ .build(), 2); while (true) { reply = (Map<String, Object>) reply.get(value.getKey()); if (value.getValue() instanceof JsonNode) { break; } value = (Map.Entry) value.getValue(); } SetReply setReply = objectMapper.convertValue(reply, SetReply.class); if (SetReplyStatusResultEnum.SUCCESS.getVal() != setReply.getResult()) { throw new RuntimeException("Failed to set " + value.getKey() + "; Error Code: " + setReply.getResult()); } // 接收返回信息在serviceReply中,订阅thing/product/7CTDLCE00A1UPE/property/set_reply上报的信息,此处不处理 // while (true) { // reply = (Map<String, Object>) reply.get(value.getKey()); // if (value.getValue() instanceof JsonNode) { // break; // } // value = (Map.Entry) value.getValue(); // } // SetReply setReply = objectMapper.convertValue(reply, SetReply.class); // if (SetReplyStatusResultEnum.SUCCESS.getVal() != setReply.getResult()) { // throw new RuntimeException("Failed to set " + value.getKey() + "; Error Code: " + setReply.getResult()); // } }