Explorar o código

mqtt 接收 dev 消息

chejianzheng hai 1 mes
pai
achega
38034f6cc4

+ 1 - 1
portal-service-common/src/main/java/com/hfln/portal/common/constant/mqtt/topic/TopicConstants.java

@@ -65,7 +65,7 @@ public interface TopicConstants {
     // 设备登录
     String TOPIC_DEV_LOGIN = "/dev/+/login";
     // 设备离线遗嘱消息
-    String TOPIC_DEV_OFFLINE = "/dev/+/offline";
+    String TOPIC_DEV_LAST_WILL = "/dev/+/last_will";
     // 设备检测存在改变事件
     String TOPIC_DEV_PRESENCE_CHANGE = "/dev/+/presence_change";
     // 设备检测到跌倒改变事件

+ 1 - 1
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/MqttConfig.java

@@ -126,7 +126,7 @@ public class MqttConfig {
 
                 // 设备主题相关 /dev/*
                 , TopicConstants.TOPIC_DEV_LOGIN
-                , TopicConstants.TOPIC_DEV_OFFLINE
+                , TopicConstants.TOPIC_DEV_LAST_WILL
                 , TopicConstants.TOPIC_DEV_PRESENCE_CHANGE
                 , TopicConstants.TOPIC_DEV_FALLING_CHANGE
                 , TopicConstants.TOPIC_DEV_DEVICE_PARAM

+ 10 - 4
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mqtt/MqttSubHandle.java

@@ -117,8 +117,8 @@ public class MqttSubHandle {
                 case "login":
                     subDevLogin(topic, payload);
                     break;
-                case "offline":
-                    subDevOffline(topic, payload);
+                case "last_will":
+                    subDevLastWill(topic, payload);
                     break;
                 case "presence_change":
                     subDevPresenceChange(topic, payload);
@@ -351,7 +351,7 @@ public class MqttSubHandle {
             return;
         }
         //0:no presense 1:presence
-        int presence = obj.getIntValue("presence");
+        long presence = obj.getIntValue("presence");
 
         devInfoService.update(
                 new LambdaUpdateWrapper<DevInfo>()
@@ -364,7 +364,7 @@ public class MqttSubHandle {
         );
     }
 
-    private void subDevOffline(String topic, String payload) {
+    private void subDevLastWill(String topic, String payload) {
 
         log.info("Received device message: topic={}, payload={}", topic, payload);
         String clientId = getDevId(topic);
@@ -374,6 +374,12 @@ public class MqttSubHandle {
             return;
         }
 
+        JSONObject obj = JSONObject.parseObject(payload);
+        if (obj.get("cmd_offline") == null || obj.getIntValue("cmd_offline") != 1) {
+            log.warn("cmd_offline is null or not 1");
+            return;
+        }
+
         devInfoService.update(
                 new LambdaUpdateWrapper<DevInfo>()
                         .eq(DevInfo::getClientId, clientId)