Ver Fonte

智能插座存库与发布MQTT消息调试接口

zhangdongming há 2 anos atrás
pai
commit
21299aba67
1 ficheiros alterados com 98 adições e 11 exclusões
  1. 98 11
      Controller/SensorGateway/SmartSocketController.py

+ 98 - 11
Controller/SensorGateway/SmartSocketController.py

@@ -6,13 +6,18 @@
 @Email   : zhangdongming@asj6.wecom.work
 @Email   : zhangdongming@asj6.wecom.work
 @Software: PyCharm
 @Software: PyCharm
 """
 """
+import logging
 import time
 import time
 
 
+from django.db import transaction
 from django.http import QueryDict
 from django.http import QueryDict
 from django.views import View
 from django.views import View
 
 
 from Model.models import SocketInfo
 from Model.models import SocketInfo
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
+from Service.CommonService import CommonService
+
+LOGGER = logging.getLogger('info')
 
 
 
 
 class SmartSocketView(View):
 class SmartSocketView(View):
@@ -44,6 +49,17 @@ class SmartSocketView(View):
         response = ResponseObject('cn')
         response = ResponseObject('cn')
         if operation == 'getSocketDetails':
         if operation == 'getSocketDetails':
             return self.getSocketDetails(request_dict, response)
             return self.getSocketDetails(request_dict, response)
+        elif operation == 'publishSocketInfo':
+            device_id = '123'
+            serial_number = '0013UC11A'
+            status = 1
+            type_switch = 0
+            # self.save_socket_switch(device_id, serial_number, status, type_switch)
+            is_open = 0
+            count_down_time = 1679131969
+            self.save_socket_count_down(device_id, serial_number, status, is_open, count_down_time)
+            return response.json(0)
+        return response.json(404)
 
 
     @classmethod
     @classmethod
     def getSocketDetails(cls, request_dict, response):
     def getSocketDetails(cls, request_dict, response):
@@ -51,18 +67,89 @@ class SmartSocketView(View):
 
 
     @staticmethod
     @staticmethod
     def save_socket_switch(device_id, serial_number, status, type_switch=0):
     def save_socket_switch(device_id, serial_number, status, type_switch=0):
+        """
+        保存插座开关信息
+        @param device_id: 设备ID
+        @param serial_number: 序列号
+        @param status: 状态 0关,1开
+        @param type_switch: 0:总开关,1倒计时开关
+        @return:
+        """
         if not device_id:
         if not device_id:
             return False
             return False
         socket_info_qs = SocketInfo.objects.filter(device_id=device_id, type_switch=type_switch)
         socket_info_qs = SocketInfo.objects.filter(device_id=device_id, type_switch=type_switch)
         now_time = int(time.time())
         now_time = int(time.time())
-        if not socket_info_qs.exists():
-            socket_dict = {"device_id": device_id,
-                           "serial_number": serial_number,
-                           "status": status,
-                           "type_switch": type_switch,
-                           "created_time": now_time,
-                           "updated_time": now_time}
-            SocketInfo.objects.create(**socket_dict)
-        if socket_info_qs.first().status == status:
-            return True
-        pass
+        try:
+            with transaction.atomic():
+                # 创建插座开关信息
+                if not socket_info_qs.exists():
+                    socket_dict = {"device_id": device_id,
+                                   "serial_number": serial_number,
+                                   "status": status,
+                                   "type_switch": type_switch,
+                                   "created_time": now_time,
+                                   "updated_time": now_time,
+                                   "online": True}
+                    SocketInfo.objects.create(**socket_dict)
+                    return True
+                if socket_info_qs.first().status == status:
+                    return True
+                socket_info_qs.update(status=status, updated_time=now_time)
+                # 主题名称
+                topic_name = 'loocam/smart-socket/{}'.format(serial_number)
+                # 发布消息内容
+                msg = {'type': 1, 'data': {'deviceSwitch': status}}
+                result = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                LOGGER.info('智能插座开关设置发布MQTT消息结果{}'.format(result))
+                return True
+        except Exception as e:
+            LOGGER.info('智能插座异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return False
+
+    @staticmethod
+    def save_socket_count_down(device_id, serial_number, status, is_open, count_down_time, type_switch=1):
+        """
+        保存插座倒计时信息
+        @param count_down_time: 倒计时时间戳
+        @param is_open: 是否开始 0:关停,1:开始
+        @param device_id: 设备ID
+        @param serial_number: 序列号
+        @param status: 电源状态 0关,1开
+        @param type_switch: 0:总开关,1倒计时开关
+        @return:
+        """
+        if not device_id:
+            return False
+        socket_info_qs = SocketInfo.objects.filter(device_id=device_id, type_switch=type_switch)
+        now_time = int(time.time())
+        try:
+            with transaction.atomic():
+                # 创建插座倒计时信息
+                if not socket_info_qs.exists():
+                    socket_dict = {"device_id": device_id,
+                                   "serial_number": serial_number,
+                                   "status": status,
+                                   "type_switch": type_switch,
+                                   "created_time": now_time,
+                                   "updated_time": now_time,
+                                   "online": True,
+                                   "count_down_time": int(count_down_time)}
+                    socket_info_qs = SocketInfo.objects.create(**socket_dict)
+                else:
+                    socket_info_qs.update(status=status, count_down_time=int(count_down_time),
+                                          updated_time=now_time)
+                count_down_id = socket_info_qs.first().id
+                # 主题名称
+                topic_name = 'loocam/smart-socket/{}'.format(serial_number)
+                # 发布消息内容
+                msg = {'type': 2,
+                       'data': {'powerType': status,
+                                'countDownId': count_down_id,
+                                'time': int(count_down_time),
+                                'start': is_open}}
+                result = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                LOGGER.info('智能插座倒计时发布MQTT消息结果{}'.format(result))
+                return True
+        except Exception as e:
+            LOGGER.info('智能插座异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return False