Browse Source

子设备解绑注销

xiwa 2 years ago
parent
commit
8d0721da36

+ 4 - 0
data/converters/6260396d67aced2696184053/converter.js

@@ -147,6 +147,10 @@ this.encode = function (service,device) {
 	//设备配置下发
 	method+=identifier;
 	topic="/sys/"+service.productKey+"/"+service.deviceName+"/c/config/"+identifier;
+  }else if(type="lifetime"){
+	//子设备注销下发
+	method+=identifier;
+	topic="/sys/"+service.productKey+"/"+service.deviceName+"/c/deregister";
   }
   
   for(var p in service.params){

+ 2 - 0
iot-data/iot-model/src/main/java/cc/iotkit/model/device/message/ThingModelMessage.java

@@ -38,6 +38,8 @@ public class ThingModelMessage {
     public static final String ID_CONFIG_GET = "get";
     public static final String ID_CONFIG_SET = "set";
 
+    public static final String ID_DEREGISTER = "deregister";
+
     private String id;
 
     private String mid;

+ 3 - 2
iot-standalone/src/main/java/cc/iotkit/manager/controller/DeviceController.java

@@ -200,8 +200,9 @@ public class DeviceController {
 
     @PostMapping("/{deviceId}/unbind")
     public void unbindDevice(@PathVariable("deviceId") String deviceId) {
-        deviceId = getDetail(deviceId).getDeviceId();
-//        deviceService.unbindDevice(deviceId);
+        DeviceInfo deviceInfo = deviceInfoData.findByDeviceId(deviceId);
+        dataOwnerService.checkOwner(deviceInfo);
+        deviceService.unbindDevice(deviceId);
     }
 
     @GetMapping("/{deviceId}/thingModel")

+ 30 - 2
iot-standalone/src/main/java/cc/iotkit/manager/service/DeviceService.java

@@ -125,6 +125,32 @@ public class DeviceService {
         return device;
     }
 
+    /**
+     * 解绑子设备
+     *
+     * @param deviceId 子设备id
+     */
+    public void unbindDevice(String deviceId) {
+        DeviceInfo device = deviceInfoData.findByDeviceId(deviceId);
+        DeviceInfo parent = deviceInfoData.findByDeviceId(device.getParentId());
+
+        try {
+            //下发子设备注销给网关
+            send(parent.getDeviceId(), parent.getProductKey(), parent.getDeviceName(),
+                    Map.of(
+                            "productKey", device.getProductKey(),
+                            "deviceName", device.getDeviceName()
+                    ),
+                    ThingModelMessage.TYPE_LIFETIME, ThingModelMessage.ID_DEREGISTER);
+        } catch (Throwable e) {
+            log.error("send {} message error", ThingModelMessage.ID_DEREGISTER, e);
+        }
+
+        //清除设备的父级id,不管是否发送成功都需要清除父级id
+        device.setParentId("");
+        deviceInfoData.save(device);
+    }
+
     /**
      * 数据下发
      */
@@ -138,8 +164,10 @@ public class DeviceService {
                 .identifier(identifier)
                 .params(data)
                 .build();
-        if (!type.equals(ThingModelMessage.TYPE_CONFIG)) {
-            //非配置下发需要做物模型转换
+        if (!ThingModelMessage.TYPE_CONFIG.equals(type)
+                && !ThingModelMessage.TYPE_LIFETIME.equals(type)
+        ) {
+            //非配置且非生命周期下发需要做物模型转换
             thingModelService.parseParams(thingService);
         }
 

+ 2 - 2
iot-test-tool/iot-test-mqtt/src/main/java/cc/iotkit/test/mqtt/performance/ReportTest.java

@@ -33,8 +33,8 @@ public class ReportTest {
 
 
         if (args.length == 0) {
-//            Mqtt.brokerHost = "127.0.0.1";
-            Mqtt.brokerHost = "120.76.96.206";
+            Mqtt.brokerHost = "127.0.0.1";
+//            Mqtt.brokerHost = "120.76.96.206";
 //            Mqtt.brokerHost = "172.16.1.109";
         } else {
             Mqtt.brokerHost = args[0];