|
@@ -309,28 +309,14 @@ class GatewayView(View):
|
|
|
"""
|
|
|
智能插座开关状态推送
|
|
|
"""
|
|
|
- event_key = ''
|
|
|
- redis_obj = RedisObject(db=7)
|
|
|
try:
|
|
|
- switch_key = 'LOOCAM:SOCKET:SERIAL:NUMBER:{}:{}:{}'
|
|
|
serial_number = request_dict.get('serialNumber', None)
|
|
|
device_time = request_dict.get('deviceTime', None)
|
|
|
status = request_dict.get('status', None)
|
|
|
- event_key = f'LOOCAM:SOCKET:SETNX:{serial_number}:{status}:{device_time}'
|
|
|
- is_nx = redis_obj.CONN.setnx(event_key, 1) # 获取锁
|
|
|
- if not is_nx:
|
|
|
- return response.json(5)
|
|
|
if not all([serial_number, status, device_time]):
|
|
|
- redis_obj.del_data(event_key) # 释放锁
|
|
|
return response.json(444)
|
|
|
status = int(status)
|
|
|
- switch_key = switch_key.format(serial_number, status, device_time)
|
|
|
- switch = redis_obj.get_data(switch_key)
|
|
|
- if switch and int(switch) == status:
|
|
|
- redis_obj.del_data(event_key) # 释放锁
|
|
|
- return response.json(0, "电源开关状态重复上报")
|
|
|
now_time = int(device_time) if device_time else int(time.time())
|
|
|
- LOGGER.info('已订阅成功接收:事件类型{},状态:{}'.format(serial_number, status))
|
|
|
# 获取主用户设备id
|
|
|
log_dict = {
|
|
|
'status': status,
|
|
@@ -338,11 +324,9 @@ class GatewayView(View):
|
|
|
'created_time': now_time,
|
|
|
}
|
|
|
SceneLog.objects.create(**log_dict)
|
|
|
- redis_obj.set_data(switch_key, status, 60 * 10)
|
|
|
- redis_obj.del_data(event_key) # 释放锁
|
|
|
+ LOGGER.info('成功接收并保存,插座序列号{},状态:{}'.format(serial_number, status))
|
|
|
return response.json(0)
|
|
|
except Exception as e:
|
|
|
print(repr(e))
|
|
|
- redis_obj.del_data(event_key)
|
|
|
LOGGER.info('---插座开关日志推送接口异常--- {}'.format(repr(e)))
|
|
|
return response.json(500, repr(e))
|