Browse Source

优化定时器

peng 1 năm trước cách đây
mục cha
commit
5cb153af0a
2 tập tin đã thay đổi với 18 bổ sung36 xóa
  1. 17 24
      Controller/SensorGateway/SmartSwitchController.py
  2. 1 12
      Object/ApschedulerObject.py

+ 17 - 24
Controller/SensorGateway/SmartSwitchController.py

@@ -9,11 +9,9 @@ import json
 import os
 import threading
 import time
-
 from django.views import View
 
-from Model.models import SwitchInfo, SwitchDimmingSettings, SwitchChronopher, Device_Info, SceneLog, FamilyRoomDevice, \
-    iotdeviceInfoModel
+from Model.models import SwitchInfo, SwitchDimmingSettings, SwitchChronopher, Device_Info, SceneLog, FamilyRoomDevice
 from Service.CommonService import CommonService
 from Object.ApschedulerObject import ApschedulerObject
 from django.db import transaction
@@ -297,9 +295,6 @@ class SmartSwitchView(View):
                 # 设置定时任务
                 serial_number = device_qs[0]['serial_number']
                 topic_name = APSCHEDULER_TOPIC_NAME.format(serial_number)
-                endpoint, token, signature = SmartSwitchView.get_mqtt(serial_number)
-                if not all([endpoint, token, signature]):
-                    return response.json(173)
                 if time_type_radio == 1:
                     task_id = 'switchchronopher_{}'.format(chronopher_id)
                     if time_point_device_will_doing in ['0', '1']:  # 开启或关闭
@@ -316,8 +311,6 @@ class SmartSwitchView(View):
                             'slowTime': slow_open_or_close_speed
                         }
                     time_str = datetime.datetime.fromtimestamp(int(time_point))
-                    # apscheduler_obj.create_cron_job('server:send_mqtt', task_id, repeat, time_str.hour,
-                    #                                 time_str.minute, [topic_name, msg, endpoint, token, signature])
                     apscheduler_obj.create_cron_job(SmartSwitchView.send_mqtt, task_id, repeat, time_str.hour,
                                                     time_str.minute, [serial_number, topic_name, msg, task_id])
                 else:
@@ -398,20 +391,6 @@ class SmartSwitchView(View):
                                                                          int(time.time()), task_id,
                                                                          threading.get_ident(), os.getpid()))
 
-    @staticmethod
-    def get_mqtt(identification_code):
-        if identification_code.endswith('11L'):
-            thing_name = 'LC_' + identification_code
-        else:
-            thing_name = 'Ansjer_Device_' + identification_code
-        iot = iotdeviceInfoModel.objects.filter(thing_name=thing_name).values('endpoint', 'token_iot_number')
-        if not iot.exists():
-            return None, None, None
-        endpoint = iot[0]['endpoint']
-        token = iot[0]['token_iot_number']
-        signature = CommonService.rsa_sign(token)  # Token签名
-        return endpoint, token, signature
-
     @staticmethod
     def create_log(request_dict, response):
         """
@@ -502,7 +481,14 @@ class SmartSwitchView(View):
         try:
             # 删除智能开关数据
             SwitchDimmingSettings.objects.filter(device_id=device_id).delete()
-            SwitchChronopher.objects.filter(device_id=device_id).delete()
+            chronopher_qs = SwitchChronopher.objects.filter(device_id=device_id)
+            if chronopher_qs.exists():
+                chronopher_id = chronopher_qs[0].id
+                apscheduler_obj = ApschedulerObject()
+                apscheduler_obj.del_job('switchchronopher_{}'.format(chronopher_id))  # 删除定时任务
+                apscheduler_obj.del_job('switchchronopher_{}_1'.format(chronopher_id))
+                apscheduler_obj.del_job('switchchronopher_{}_2'.format(chronopher_id))
+                chronopher_qs.delete()
             SceneLog.objects.filter(device_id=device_id).delete()
             FamilyRoomDevice.objects.filter(device_id=device_id).delete()
             Device_Info.objects.filter(id=device_id).delete()
@@ -520,7 +506,14 @@ class SmartSwitchView(View):
         """
         try:
             SwitchDimmingSettings.objects.filter(device_id=device_id).delete()
-            SwitchChronopher.objects.filter(device_id=device_id).delete()
+            chronopher_qs = SwitchChronopher.objects.filter(device_id=device_id)
+            if chronopher_qs.exists():
+                chronopher_id = chronopher_qs[0].id
+                apscheduler_obj = ApschedulerObject()
+                apscheduler_obj.del_job('switchchronopher_{}'.format(chronopher_id))  # 删除定时任务
+                apscheduler_obj.del_job('switchchronopher_{}_1'.format(chronopher_id))
+                apscheduler_obj.del_job('switchchronopher_{}_2'.format(chronopher_id))
+                chronopher_qs.delete()
             SceneLog.objects.filter(device_id=device_id).delete()
             msg = {
                 "device_reset": 1  # 重置智能开关

+ 1 - 12
Object/ApschedulerObject.py

@@ -1,23 +1,15 @@
 import time
 from apscheduler.schedulers.background import BackgroundScheduler
 from django_apscheduler.jobstores import DjangoJobStore
-from Ansjer.config import LOGGER
 from django_apscheduler.models import DjangoJob
 import datetime
-import rpyc
-from apscheduler.executors.pool import ProcessPoolExecutor
-from apscheduler.executors.pool import ThreadPoolExecutor
 
 
 class ApschedulerObject:
     def __init__(self):
-        self.scheduler = BackgroundScheduler(
-            executors={
-                'default': ThreadPoolExecutor(1)  # 最多3个进程同时运行
-            })
+        self.scheduler = BackgroundScheduler()
         self.scheduler.add_jobstore(DjangoJobStore(), 'default')
         self.scheduler.start()
-        # self.conn = rpyc.connect('localhost', 12345)
 
     @staticmethod
     def auto_hello():  # 任务
@@ -28,9 +20,6 @@ class ApschedulerObject:
         job = self.scheduler.add_job(func=func, trigger='cron', day_of_week=day_of_week, hour=hour, minute=minute,
                                      replace_existing=True, id=task_id, max_instances=1, coalesce=False, args=args,
                                      misfire_grace_time=300)
-
-        # job = self.conn.root.add_job(func, trigger='cron', day_of_week=day_of_week, hour=hour, minute=minute,
-        #                              id=task_id, args=args, max_instances=1, coalesce=False, misfire_grace_time=300)
         print(job)
 
     def create_interval_job(self, func, task_id, minutes, start_time, end_time, args):  # 间隔任务