|
@@ -10,7 +10,7 @@ import time
|
|
|
from django.db import transaction
|
|
|
from django.views import View
|
|
|
|
|
|
-from Model.models import Device_Info, GatewaySubDevice, FamilyRoomDevice
|
|
|
+from Model.models import Device_Info, GatewaySubDevice, FamilyRoomDevice, SensorRecord
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
from Object.TokenObject import TokenObject
|
|
|
|
|
@@ -42,6 +42,8 @@ class GatewaySubDeviceView(View):
|
|
|
return self.sensor_update(user_id, request_dict, response)
|
|
|
elif operation == 'delete': # 删除子设备
|
|
|
return self.delete(request_dict, user_id, response)
|
|
|
+ elif operation == 'records': # 查询子设备记录数据
|
|
|
+ return self.records(request_dict, response)
|
|
|
else:
|
|
|
return response.json(414)
|
|
|
|
|
@@ -159,7 +161,7 @@ class GatewaySubDeviceView(View):
|
|
|
"""
|
|
|
更新子设备信息
|
|
|
@param request_dict: 请求参数
|
|
|
- @request_dict sub_device_id: 子设备id
|
|
|
+ @request_dict sub_device_id: 子设备id
|
|
|
@param user_id: 用户id
|
|
|
@param response: 响应对象
|
|
|
@return: response
|
|
@@ -173,3 +175,92 @@ class GatewaySubDeviceView(View):
|
|
|
return response.json(0)
|
|
|
except Exception as e:
|
|
|
return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def records(request_dict, response):
|
|
|
+ """
|
|
|
+ 查询子设备记录数据
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @request_dict subDeviceId: 子设备id
|
|
|
+ @request_dict cycle: 时间周期
|
|
|
+ @param response: 响应对象
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ sub_device_id = request_dict.get('subDeviceId', None)
|
|
|
+ cycle = request_dict.get('cycle', None)
|
|
|
+ if not all([sub_device_id]):
|
|
|
+ return response.json(444)
|
|
|
+ now_time = int(time.time())
|
|
|
+ try:
|
|
|
+ if not cycle:
|
|
|
+ sensor_record_qs = SensorRecord.objects.filter(gateway_sub_device_id=sub_device_id). \
|
|
|
+ values('alarm', 'event_type', 'created_time').order_by('-created_time')
|
|
|
+ if not sensor_record_qs.exists():
|
|
|
+ return response.json(0)
|
|
|
+ return response.json(0, list(sensor_record_qs))
|
|
|
+ else:
|
|
|
+ record_dict = {}
|
|
|
+ record_list = []
|
|
|
+ if cycle == '24 hours':
|
|
|
+ start_time = now_time - 24*60*60
|
|
|
+ sensor_record_qs = SensorRecord.objects.filter(gateway_sub_device_id=sub_device_id, created_time__range=(start_time, now_time)). \
|
|
|
+ values('alarm', 'created_time').order_by('-created_time')
|
|
|
+ if not sensor_record_qs.exists():
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+ for sensor_record in sensor_record_qs:
|
|
|
+ created_time = time.strftime('%m/%d %H:%M %w', time.localtime(sensor_record['created_time']))
|
|
|
+ hour = int(created_time[-7:-5])
|
|
|
+ minute = int(created_time[-4:-2])
|
|
|
+ if hour != 23 and minute > 30: # 不为23时且分钟大于30,hour+1
|
|
|
+ hour += 1
|
|
|
+ alarm = float(sensor_record['alarm'])
|
|
|
+ # 组织数据,record_dict:{"0": [1.0, 2.0, 3.0], "1": [1.0, 2.0, 3.0]...}
|
|
|
+ if str(hour) in record_dict:
|
|
|
+ record_dict[str(hour)].append(alarm)
|
|
|
+ else:
|
|
|
+ record_dict[str(hour)] = [alarm]
|
|
|
+
|
|
|
+ elif cycle == 'Week':
|
|
|
+ start_time = now_time - 24*60*60*7
|
|
|
+ sensor_record_qs = SensorRecord.objects.filter(gateway_sub_device_id=sub_device_id, created_time__range=(start_time, now_time)). \
|
|
|
+ values('alarm', 'created_time').order_by('-created_time')
|
|
|
+ if not sensor_record_qs.exists():
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+ for sensor_record in sensor_record_qs:
|
|
|
+ created_time = time.strftime('%m/%d %H:%M %w', time.localtime(sensor_record['created_time']))
|
|
|
+ week = int(created_time[-1:])
|
|
|
+ alarm = float(sensor_record['alarm'])
|
|
|
+ # 组织数据,record_dict:{"0": [1.0, 2.0, 3.0], "1": [1.0, 2.0, 3.0]...}
|
|
|
+ if str(week) in record_dict:
|
|
|
+ record_dict[str(week)].append(alarm)
|
|
|
+ else:
|
|
|
+ record_dict[str(week)] = [alarm]
|
|
|
+
|
|
|
+ elif cycle == 'Month':
|
|
|
+ start_time = now_time - 24 * 60 * 60 * 30
|
|
|
+ sensor_record_qs = SensorRecord.objects.filter(gateway_sub_device_id=sub_device_id,
|
|
|
+ created_time__range=(start_time, now_time)). \
|
|
|
+ values('alarm', 'created_time').order_by('-created_time')
|
|
|
+ if not sensor_record_qs.exists():
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+ for sensor_record in sensor_record_qs:
|
|
|
+ created_time = time.strftime('%m/%d %H:%M %w', time.localtime(sensor_record['created_time']))
|
|
|
+ month = int(created_time[:2])
|
|
|
+ day = int(created_time[3:5])
|
|
|
+ date = str(month) + '/' + str(day)
|
|
|
+ alarm = float(sensor_record['alarm'])
|
|
|
+ # 组织数据,record_dict:{"0": [1.0, 2.0, 3.0], "1": [1.0, 2.0, 3.0]...}
|
|
|
+ if date in record_dict:
|
|
|
+ record_dict[date].append(alarm)
|
|
|
+ else:
|
|
|
+ record_dict[date] = [alarm]
|
|
|
+
|
|
|
+ # 组织响应数据列表,value为每 小时/天 的平均值
|
|
|
+ for k, v in record_dict.items():
|
|
|
+ record_list.append({'key': k, 'value': round(sum(v)/len(v), 1)})
|
|
|
+ return response.json(0, record_list)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, repr(e))
|