peng 1 жил өмнө
parent
commit
e12847cfcc

+ 14 - 3
Controller/CeleryTasks/tasks.py

@@ -18,7 +18,7 @@ from Ansjer.Config.gatewaySensorConfig import DEVICE_TYPE, SMART_SOCKET_TOPIC, E
 from Service.CommonService import CommonService
 import time
 from Ansjer.config import LOGGER, CONFIG_INFO, DETECT_PUSH_DOMAINS
-from Model.models import Device_User
+from Model.models import Device_User, SceneLog
 from AdminController.CloudServiceManage.AgentOrderController import AgentOrderView
 import os
 import threading
@@ -86,18 +86,29 @@ def update_installment_settlement_order():
 
 
 @app.task
-def send_mqtt(serial_number, topic_name, msg, task_id):
+def send_mqtt(serial_number, topic_name, msg, task_id, scene_type, device_id, tasks):
     """
     定时发送mqtt, (不要随意更改,否则定时任务不执行)
     @param serial_number: 设备序列号
     @param topic_name: 主题
     @param msg: 消息
     @param task_id: 任务id
+    @param scene_type: 场景类型(1:排程;2:计时器)
+    @param device_id: 设备id
+    @param tasks: 任务
     @return: response
     """
     now_time = int(time.time())
-    msg['implementTime'] = now_time
+    msg['send_time'] = now_time
     result = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+    scene_log = {
+        'scene_name': task_id,
+        'scene_id': 0 if scene_type == 2 else msg['task_id'],
+        'device_id': device_id,
+        'tasks': tasks,
+        'created_time': now_time,
+    }
+    SceneLog.objects.create(**scene_log)
     LOGGER.info('定时发送mqtt结果:{},参数:{},{},{},{},{},线程:{},进程:{}'.format(result, serial_number, topic_name, msg,
                                                                      now_time, task_id,
                                                                      threading.get_ident(), os.getpid()))

+ 40 - 22
Controller/SensorGateway/SmartSwitchController.py

@@ -185,7 +185,7 @@ class SmartSwitchView(View):
                     'endTime': item['end_time'],
                     'actionsType': item['actions_type'],
                     'actions': item['actions'],
-                    'slowOpenOrCloseSpeed': item['slow_open_or_close_speed'],
+                    'slowSpeed': item['slow_speed'],
                     'repeat': item['repeat'],
                     'isExecute': item['is_execute'],
                 })
@@ -296,29 +296,33 @@ class SmartSwitchView(View):
                             'slow_time': slow_speed
                         }
                     else:
-                        return response.json(444, {'param': 'timeTypeRadio'})
+                        return response.json(444, {'param': 'actionsType'})
 
                     time_str = datetime.datetime.fromtimestamp(int(time_point))
                     celery_obj.creat_crontab_task(tz, task_id, MQTT_TASK, time_str.minute,
-                                                  time_str.hour, repeat, args=[serial_number, topic_name, msg, task_id])
+                                                  time_str.hour, repeat,
+                                                  args=[serial_number, topic_name, msg, task_id, 1, device_id,
+                                                        json.dumps(scheduler_data)])
                 else:  # 时间段任务
                     start_hour = int(start_time / 60 // 60)
                     start_minute = int(start_time / 60 % 60)
                     end_hour = int(end_time / 60 // 60)
                     end_minute = int(end_time / 60 % 60)
-                    if actions == '1':
+                    if actions_type == '1':
                         begin_task_id = 'switchscheduler_{}_1'.format(scheduler_id)  # 开始任务id
                         end_task_id = 'switchscheduler_{}_2'.format(scheduler_id)  # 结束任务id
                         msg = {"task_id": scheduler_id,
                                "device_switch": int(actions)}
                         celery_obj.creat_crontab_task(tz, begin_task_id, MQTT_TASK, start_minute, start_hour, repeat,
-                                                      args=[serial_number, topic_name, msg, begin_task_id])
+                                                      args=[serial_number, topic_name, msg, begin_task_id, 1,
+                                                            device_id, json.dumps(scheduler_data)])
                         msg = {"task_id": scheduler_id,
                                "device_switch": 0 if int(actions) == 1 else 1}
                         celery_obj.creat_crontab_task(tz, end_task_id, MQTT_TASK, end_minute, end_hour, repeat,
-                                                      args=[serial_number, topic_name, msg, end_task_id])
+                                                      args=[serial_number, topic_name, msg, end_task_id, 1,
+                                                            device_id, json.dumps(scheduler_data)])
 
-                    elif actions == '3':  # 间隔任务
+                    elif actions_type == '3':  # 间隔任务
                         minute = int(actions)
                         task_id = 'switchscheduler_{}'.format(scheduler_id)  # 开始任务id
                         msg = {"task_id": scheduler_id,
@@ -330,7 +334,10 @@ class SmartSwitchView(View):
                             hour = '{}-{}'.format(start_hour, end_hour)
                             minute = '*/{}'.format(minute)
                         celery_obj.creat_crontab_task(tz, task_id, MQTT_TASK, minute, hour, repeat,
-                                                      args=[serial_number, topic_name, msg, task_id])
+                                                      args=[serial_number, topic_name, msg, task_id, 1,
+                                                            device_id, json.dumps(scheduler_data)])
+                    else:
+                        return response.json(444, {'param': 'actionsType'})
                 return response.json(0)
         except Exception as e:
             print(e)
@@ -382,7 +389,7 @@ class SmartSwitchView(View):
         scheduler_id = request_dict.get('schedulerId', None)
 
         if not scheduler_id:
-            return response.json(444, {'error param': 'deviceId or chronopherId'})
+            return response.json(444, {'error param': 'deviceId or schedulerId'})
         try:
             delete_flag = SwitchScheduler.objects.filter(device_id=device_id, id=scheduler_id).delete()
             if not delete_flag[0]:
@@ -427,7 +434,6 @@ class SmartSwitchView(View):
         添加/编辑计时器
         @param request_dict: 请求参数
         @request_dict deviceId: 设备id
-        @request_dict chronopherId: 排程计划id
         @request_dict CountdownTime: 倒计时时间(秒)
         @request_dict timePointDeviceWillDoing: 设备将会
         @request_dict timerStatus: 计时器状态
@@ -474,9 +480,10 @@ class SmartSwitchView(View):
                         return response.json(0)
                 redis_obj.set_hash_data(key, redis_dict)
                 redis_obj.set_expire(key, countdown_time)
-                msg = {'device_switch': actions, 'implement_time': implement_time, 'task_id': task_id}
+                msg = {'device_switch': actions, 'task_id': task_id}
                 celery_obj.creat_clocked_task(task_id, MQTT_TASK, implement_time, tz,
-                                              args=[serial_number, topic_name, msg, task_id])
+                                              args=[serial_number, topic_name, msg, task_id, 2,
+                                                    device_id, json.dumps(redis_dict)])
                 return response.json(0)
         except Exception as e:
             print(e)
@@ -494,15 +501,16 @@ class SmartSwitchView(View):
         @return: response
         """
         serial_number = request_dict.get('serial_number', None)
+        event_type = request_dict.get('event_type', None)
         scheduler_id = request_dict.get('task_id', None)
         operate_status = request_dict.get('status', None)
         switch_status = request_dict.get('switch_status', None)
+        send_time = request_dict.get('send_time', None)
         implement_time = request_dict.get('implement_time', None)
-        brightness = request_dict.get('brightness', None)
 
-        if not all([serial_number, scheduler_id, operate_status, switch_status, implement_time, brightness]):
+        if not all([serial_number, scheduler_id, operate_status, switch_status, implement_time]):
             return response.json(444, {
-                'error param': 'serial_number, task_id, status, switch_status, implement_time, brightness'})
+                'error param': 'serial_number, task_id, status, switch_status, implement_time'})
         device_qs = Device_Info.objects.filter(serial_number=serial_number).values('id')
         if not device_qs.exists():
             return response.json(173)
@@ -519,17 +527,27 @@ class SmartSwitchView(View):
             return response.json(173)
         try:
             scene_log = {
-                'scene_id': chronopher_id,
-                'device_id': device_id,
-                'tasks': json.dumps(scheduler_qs[0]),
                 'status': operate_status,
                 'created_time': implement_time,
             }
-            scene_qs = SceneLog.objects.filter(created_time=implement_time, device_id=device_id,
-                                               scene_id=chronopher_id)
-            if not scene_qs.exists():
+            if event_type == '1':  # 排程任务
+                scene_qs = SceneLog.objects.filter(created_time=send_time, device_id=device_id, scene_id=scheduler_id)
+                tasks = json.dumps(scheduler_qs[0])
+                scene_id = scheduler_id
+            elif event_type == '2':  # 计时器任务
+                scene_qs = SceneLog.objects.filter(created_time=send_time, device_id=device_id, scene_name=scheduler_id)
+                tasks = json.dumps({'timePoint': int(send_time), 'actions': int(switch_status)})
+                scene_id = 0
+            else:
+                return response.json(444, {'error param': 'event_type'})
+            if scene_qs.exists():
+                scene_qs.update(**scene_log)
+            else:
+                scene_log['tasks'] = tasks
+                scene_log['scene_id'] = scene_id
+                scene_log['scene_name'] = scene_id
+                scene_log['device_id'] = device_id
                 SceneLog.objects.create(**scene_log)
-
             return response.json(0)
         except Exception as e:
             print(e)

+ 2 - 2
Model/models.py

@@ -4516,8 +4516,8 @@ class SwitchScheduler(models.Model):
     time_point = models.IntegerField(default=0, verbose_name='时间点时间戳')
     start_time = models.IntegerField(default=0, verbose_name='时间段开始时间')
     end_time = models.IntegerField(default=0, verbose_name='时间段结束时间')
-    actions = models.IntegerField(default=0, verbose_name='排程操作')  # 0:关闭 1:开启 x:开启并预设亮度 x:开启/关闭间隔时间(秒)
-    actions_type = models.SmallIntegerField(default=0, verbose_name='操作类型')  # 0: 开关开启或关闭, 1: 预设亮度, 2: 开启/关闭切换
+    actions = models.IntegerField(default=0, verbose_name='排程操作')  # 0:关闭 1:开启 x:预设亮度 x:间隔时间(秒)
+    actions_type = models.SmallIntegerField(default=0, verbose_name='操作类型')  # 1:开关开启或关闭;2:开启并预设亮度;3:开启/关闭切换
     slow_speed = models.SmallIntegerField(default=0, verbose_name='缓慢开/关速度')  # 秒
     repeat = models.CharField(default=0, max_length=13, verbose_name=u'重复周期')  # 0-6:星期日到星期六
     is_execute = models.SmallIntegerField(default=1, verbose_name='是否执行')  # 0:执行;1:不执行