Переглянути джерело

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

zhangdongming 2 роки тому
батько
коміт
21299aba67
1 змінених файлів з 98 додано та 11 видалено
  1. 98 11
      Controller/SensorGateway/SmartSocketController.py

+ 98 - 11
Controller/SensorGateway/SmartSocketController.py

@@ -6,13 +6,18 @@
 @Email   : zhangdongming@asj6.wecom.work
 @Software: PyCharm
 """
+import logging
 import time
 
+from django.db import transaction
 from django.http import QueryDict
 from django.views import View
 
 from Model.models import SocketInfo
 from Object.ResponseObject import ResponseObject
+from Service.CommonService import CommonService
+
+LOGGER = logging.getLogger('info')
 
 
 class SmartSocketView(View):
@@ -44,6 +49,17 @@ class SmartSocketView(View):
         response = ResponseObject('cn')
         if operation == 'getSocketDetails':
             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
     def getSocketDetails(cls, request_dict, response):
@@ -51,18 +67,89 @@ class SmartSocketView(View):
 
     @staticmethod
     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:
             return False
         socket_info_qs = SocketInfo.objects.filter(device_id=device_id, type_switch=type_switch)
         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