فهرست منبع

alexa删除和更新插座上报

peng 2 سال پیش
والد
کامیت
0f357f764f
2فایلهای تغییر یافته به همراه40 افزوده شده و 8 حذف شده
  1. 26 2
      Controller/SensorGateway/GatewayDeviceController.py
  2. 14 6
      Controller/SensorGateway/SmartSocketController.py

+ 26 - 2
Controller/SensorGateway/GatewayDeviceController.py

@@ -10,6 +10,7 @@ import time
 import datetime
 import logging
 
+import requests
 from django.db import transaction
 from django.db.models import Q
 from django.views.generic.base import View
@@ -17,13 +18,16 @@ from decimal import Decimal
 
 from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC
 from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
+from Controller.SensorGateway.SmartSocketController import SmartSocketView
 from Model.models import FamilyRoomDevice, FamilyRoom, GatewaySubDevice, Device_Info, UserFamily, FamilyMember, \
-    UidSetModel, iotdeviceInfoModel, SmartScene, SceneLog, SocketInfo, SocketPowerStatistics, SocketSchedule
+    UidSetModel, iotdeviceInfoModel, SmartScene, SceneLog, SocketInfo, SocketPowerStatistics, SocketSchedule, \
+    CountryModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Object.RedisObject import RedisObject
 
+
 class GatewayDeviceView(View):
 
     def get(self, request, *args, **kwargs):
@@ -121,6 +125,11 @@ class GatewayDeviceView(View):
             uid_set_qs = UidSetModel.objects.filter(uid=device_info_qs[0].UID)
             if uid_set_qs.exists():
                 uid_set_qs.update(nickname=device_name)
+            if device_info_qs[0].Type == 201:
+                device_info_qs = device_info_qs.values('userID__region_country')
+                region = device_info_qs[0]['userID__region_country']
+                cls.update_socket(serial_number=device_info_qs[0].serial_number, device_name=device_name,
+                                  user_id=user_id, region=region)
         return response.json(0)
 
     @classmethod
@@ -185,6 +194,7 @@ class GatewayDeviceView(View):
                             scene_log_qs = SceneLog.objects.filter(device_id=serial_number)
                             if scene_log_qs.exists():
                                 scene_log_qs.delete()
+                            SmartSocketView.delete_alexa_socket(serial_number)
 
                         # 如果有子设备,删除子设备和关联的场景数据
                         gateway_qs = GatewaySubDevice.objects.filter(device_id=device_id)
@@ -337,7 +347,7 @@ class GatewayDeviceView(View):
                 if not socket_info_qs.exists():
                     return response.json(173)
                 socket_data = cls.smart_socket(device_id, socket_info_qs)
-                gateway = {key:socket_data.get(key, gateway[key]) for key in gateway.keys()}
+                gateway = {key: socket_data.get(key, gateway[key]) for key in gateway.keys()}
             family_device_qs = FamilyRoomDevice.objects.filter(device_id=device_id)
             family_device_qs = family_device_qs.filter(~Q(sub_device=0)).order_by('-created_time')
 
@@ -468,6 +478,20 @@ class GatewayDeviceView(View):
             print(e)
             return response.json(177, repr(e))
 
+    @classmethod
+    def update_socket(cls, serial_number, device_name, user_id, region):
+        url = 'https://www.zositech.xyz/deviceStatus/addOrUpdateSwitch'
+        try:
+            country_qs = CountryModel.objects.filter(id=region).values('region__continent_code')
+            data = {
+                'nick_name': device_name,
+                'serial_number': serial_number,
+                'user_id': user_id,
+                'region': country_qs[0]['region__continent_code'] if country_qs.exists() else 'EN'
+            }
+            requests.post(url=url, data=data, timeout=5)
+        except Exception as e:
+            print(repr(e))
 #
 #                   ___====-_  _-====___
 #             _--^^^#####//      \\#####^^^--_

+ 14 - 6
Controller/SensorGateway/SmartSocketController.py

@@ -12,6 +12,7 @@ import logging
 import time
 from decimal import Decimal
 
+import requests
 from dateutil.parser import parse
 from django.db import transaction
 from django.db.models import Sum, Count
@@ -115,6 +116,8 @@ class SmartSocketView(View):
                 FamilyRoomDevice.objects.filter(device_id=device_id).delete()
                 # 删除设备
                 Device_Info.objects.filter(id=device_id).delete()
+                # alexa删除插座
+                cls.delete_alexa_socket(serial_number)
                 LOGGER.info('智能插座{}设备已复位'.format(serial_number))
                 return response.json(0)
         except Exception as e:
@@ -861,16 +864,21 @@ class SmartSocketView(View):
         # 同步数据库并下发MQTT消息到插座设备
         try:
             socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number).values('status')
-            device_info_qs = Device_Info.objects.filter(serial_number=serial_number).values('userID__region_country',
-                                                                                            'NickName')
-            country_qs = CountryModel.objects.filter(id=device_info_qs[0]['userID__region_country']).values(
-                'region__continent_code')
             res = {
-                'nick_name': device_info_qs[0]['NickName'],
-                'region': country_qs[0]['region__continent_code'] if country_qs.exists() else 'EN',
                 'power_state': socket_info_qs[0]['status']
             }
             return response.json(0, res)
         except Exception as e:
             print(e)
             return response.json(500, repr(e))
+
+    @classmethod
+    def delete_alexa_socket(cls, serial_number):
+        url = 'https://www.zositech.xyz/deviceStatus/deleteSwitch'
+        data = {
+            'serial_number': serial_number
+        }
+        try:
+            requests.post(url=url, data=data, timeout=5)
+        except Exception as e:
+            print(repr(e))