SmartSwitchController.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. # -*- coding: utf-8 -*-
  2. """
  3. # @Author : cheng
  4. # @Time : 2023/7/10 11:20
  5. # @File: SmartSwitchController.py
  6. """
  7. from django.views import View
  8. from Model.models import SwitchInfo, SwitchDimmingSettings, SwitchChronopher
  9. from Service.CommonService import CommonService
  10. class SmartSwitchView(View):
  11. def get(self, request, *args, **kwargs):
  12. request.encoding = 'utf-8'
  13. operation = kwargs.get('operation')
  14. return self.validation(request.GET, request, operation)
  15. def post(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. operation = kwargs.get('operation')
  18. return self.validation(request.POST, request, operation)
  19. def validation(self, request_dict, request, operation):
  20. token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
  21. if token_code != 0:
  22. return response.json(token_code)
  23. if operation == 'get-switch-info': # 设备获取智能开关数据
  24. return self.get_switch_info(request_dict, response)
  25. elif operation == 'get-switch-setting': # 获取智能开关调光设置
  26. return self.get_switch_setting(request_dict, response)
  27. elif operation == 'get-chronopher-setting': # 获取定时计划
  28. return self.get_chronopher_setting(request_dict, response)
  29. elif operation == 'add-or-edit-chronopher': # 添加/编辑定时计划
  30. return self.add_or_edit_chronopher(request_dict, response)
  31. elif operation == 'delete-chronopher': # 删除定时计划
  32. return self.delete_chronopher(request_dict, response)
  33. else:
  34. return response.json(414)
  35. @staticmethod
  36. def get_switch_info(request_dict, response):
  37. """
  38. 获取智能开关设备信息
  39. @param request_dict: 请求参数
  40. @request_dict deviceId: 设备id
  41. @param response: 响应对象
  42. @return: response
  43. """
  44. device_id = request_dict.get('deviceId', None)
  45. if not device_id:
  46. return response.json(444)
  47. try:
  48. switch_info_qs = SwitchInfo.objects.filter(device_id=device_id).values()
  49. if not switch_info_qs.exists():
  50. return response.json(173)
  51. res = {
  52. 'model': switch_info_qs[0]['model'],
  53. 'hardwareVersion': switch_info_qs[0]['hardware_version'],
  54. 'firmwareVersion': switch_info_qs[0]['firmware_version'],
  55. 'mac': switch_info_qs[0]['mac'],
  56. }
  57. return response.json(0, res)
  58. except Exception as e:
  59. print(e)
  60. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  61. @staticmethod
  62. def get_switch_setting(request_dict, response, user_id):
  63. """
  64. 获取智能开关设备设置信息
  65. @param request_dict: 请求参数
  66. @param user_id: 用戶user_id
  67. @request_dict deviceId: 设备id
  68. @param response: 响应对象
  69. @return: response
  70. """
  71. device_id = request_dict.get('deviceId', None)
  72. if not device_id:
  73. return response.json(444)
  74. try:
  75. switch_setting_info_qs = SwitchDimmingSettings.objects.filter(device_id=device_id).values()
  76. if not switch_setting_info_qs.exists():
  77. return response.json(173)
  78. res = {
  79. 'clickTurnOnSpeed': switch_setting_info_qs[0]['click_turn_on_speed'],
  80. 'clickTurnOffSpeed': switch_setting_info_qs[0]['click_turn_off_speed'],
  81. 'doubleClick': switch_setting_info_qs[0]['double_click'],
  82. 'press': switch_setting_info_qs[0]['press'],
  83. 'doublePressClickTurnOnSpeed': switch_setting_info_qs[0]['double_press_click_turn_on_speed'],
  84. 'doublePressClickTurnOffSpeed': switch_setting_info_qs[0]['double_press_click_turn_off_speed'],
  85. 'led': switch_setting_info_qs[0]['led'],
  86. 'dimmingCorrection': switch_setting_info_qs[0]['dimming_correction'],
  87. }
  88. return response.json(0, res)
  89. except Exception as e:
  90. print(e)
  91. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  92. @staticmethod
  93. def edit_switch_setting(request_dict, response):
  94. """
  95. 修改智能开关设备设置
  96. @param request_dict: 请求参数
  97. @request_dict deviceId: 设备id
  98. @request_dict deviceNickname: 设备名称
  99. @request_dict location: 位置
  100. @request_dict led: LED指示灯
  101. @request_dict dimmingCorrection: 调光校正
  102. @param response: 响应对象
  103. @return: response
  104. """
  105. device_id = request_dict.get('deviceId', None)
  106. device_nick_name = request_dict.get('deviceNickname', None)
  107. location = request_dict.get('location', None)
  108. led = request_dict.get('led', None)
  109. dimming_correction = request_dict.get('dimmingCorrection', None)
  110. if not device_id:
  111. return response.json(444)
  112. try:
  113. switch_setting_data = {
  114. 'device_id': device_id,
  115. 'led': led,
  116. 'dimming_correction': dimming_correction,
  117. }
  118. SwitchDimmingSettings.objects.filter(device_id=device_id).update(**switch_setting_data)
  119. return response.json(0)
  120. except Exception as e:
  121. print(e)
  122. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  123. @staticmethod
  124. def edit_dimming_setting(request_dict, response):
  125. """
  126. 修改智能开关调光设置
  127. @param request_dict: 请求参数
  128. @request_dict deviceId: 设备id
  129. @request_dict clickTurnOnSpeed: 单击开启速度
  130. @request_dict clickTurnOffSpeed: 单击关闭速度
  131. @request_dict doubleClick: 双击
  132. @request_dict press: 长按
  133. @request_dict doublePressClickTurnOnSpeed: 双击/长按开启速度
  134. @request_dict doublePressClickTurnOffSpeed: 双击/长按单击关闭速度
  135. @param response: 响应对象
  136. @return: response
  137. """
  138. device_id = request_dict.get('deviceId', None)
  139. click_turn_on_speed = request_dict.get('clickTurnOnSpeed', None)
  140. click_turn_off_speed = request_dict.get('clickTurnOffSpeed', None)
  141. double_click = request_dict.get('doubleClick', None)
  142. press = request_dict.get('press', None)
  143. double_press_click_turn_on_speed = request_dict.get('doublePressClickTurnOnSpeed', None)
  144. double_press_click_turn_off_speed = request_dict.get('doublePressClickTurnOffSpeed', None)
  145. if not device_id:
  146. return response.json(444)
  147. try:
  148. dimming_setting_data = {
  149. 'device_id': device_id,
  150. 'click_turn_on_speed': click_turn_on_speed,
  151. 'click_turn_off_speed': click_turn_off_speed,
  152. 'double_click': double_click,
  153. 'press': press,
  154. 'double_press_click_turn_on_speed': double_press_click_turn_on_speed,
  155. 'double_press_click_turn_off_speed': double_press_click_turn_off_speed
  156. }
  157. SwitchDimmingSettings.objects.filter(device_id=device_id).update(**dimming_setting_data)
  158. return response.json(0)
  159. except Exception as e:
  160. print(e)
  161. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  162. @staticmethod
  163. def get_location_list(request_dict, response):
  164. """
  165. 获取房间列表
  166. @param request_dict: 请求参数
  167. @request_dict deviceId: 设备id
  168. @param response: 响应对象
  169. @return: response
  170. """
  171. device_id = request_dict.get('deviceId', None)
  172. if not device_id:
  173. return response.json(444)
  174. try:
  175. room_list_qs = SwitchDimmingSettings.objects.filter(device_id=device_id).values('location', 'location_list')
  176. res = {
  177. 'location': room_list_qs[0]['location'],
  178. 'locationList': room_list_qs[0]['location_list']
  179. }
  180. return response.json(0, res)
  181. except Exception as e:
  182. print(e)
  183. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  184. @staticmethod
  185. def add_location(request_dict, response):
  186. """
  187. 添加房间
  188. @param request_dict: 请求参数
  189. @request_dict deviceId: 设备id
  190. @param response: 响应对象
  191. @return: response
  192. """
  193. room_name = request_dict.get('roomName', None)
  194. if not room_name:
  195. return response.json(444)
  196. try:
  197. return response.json(0)
  198. except Exception as e:
  199. print(e)
  200. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  201. @staticmethod
  202. def delete_location(request_dict, response):
  203. """
  204. 删除房间
  205. @param request_dict: 请求参数
  206. @request_dict deviceId: 设备id
  207. @param response: 响应对象
  208. @return: response
  209. """
  210. room_name = request_dict.get('roomName', None)
  211. if not room_name:
  212. return response.json(444)
  213. try:
  214. return response.json(0)
  215. except Exception as e:
  216. print(e)
  217. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  218. @staticmethod
  219. def get_chronopher_setting(request_dict, response):
  220. """
  221. 获取定时计划设置
  222. @param request_dict: 请求参数
  223. @request_dict deviceId: 设备id
  224. @param response: 响应对象
  225. @return: response
  226. """
  227. device_id = request_dict.get('deviceId', None)
  228. if not device_id:
  229. return response.json(444)
  230. try:
  231. switch_chronopher_qs = SwitchChronopher.objects.filter(device_id=device_id).values()
  232. if not switch_chronopher_qs.exists():
  233. return response.json(173)
  234. switch_chronopher_list = []
  235. for item in switch_chronopher_qs:
  236. switch_chronopher_list.append({
  237. 'chronopherId': item['id'],
  238. 'timeTypeRadio': item['time_type_radio'],
  239. 'timePoint': item['time_point'],
  240. 'timeQuantumStartTime': item['time_quantum_start_time'],
  241. 'timeQuantumEndTime': item['time_quantum_end_time'],
  242. 'timePointDeviceWillDoing': item['time_point_device_will_doing'],
  243. 'timeQuantumDeviceWillDoing': item['time_quantum_device_will_doing'],
  244. 'slowOpenOrCloseSpeed': item['slow_open_or_close_speed'],
  245. 'repeat': item['repeat'],
  246. })
  247. return response.json(0, {'list': switch_chronopher_list})
  248. except Exception as e:
  249. print(e)
  250. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  251. @staticmethod
  252. def add_or_edit_chronopher(request_dict, response):
  253. """
  254. 添加/编辑定时计划
  255. @param request_dict: 请求参数
  256. @request_dict deviceId: 设备id
  257. @request_dict chronopherId: 定时计划id
  258. @request_dict timeTypeRadio: 切换时间点/时间段
  259. @request_dict timePoint: 时间点
  260. @request_dict timeQuantumStartTime: 时间段开始时间
  261. @request_dict timeQuantumEndTime: 时间段结束时间
  262. @request_dict timePointDeviceWillDoing: 设备将会
  263. @request_dict timeQuantumDeviceWillDoing: 设备将会
  264. @request_dict slowOpenOrCloseSpeed: 缓慢开/关速度
  265. @request_dict repeat: 重复周期
  266. @param response: 响应对象
  267. @return: response
  268. """
  269. is_edit = request_dict.get('isEdit', None)
  270. device_id = request_dict.get('deviceId', None)
  271. chronopher_id = request_dict.get('chronopherId', None)
  272. time_type_radio = int(request_dict.get('timeTypeRadio', 0))
  273. time_point = request_dict.get('timePoint', None)
  274. time_quantum_start_time = request_dict.get('timeQuantumStartTime', None)
  275. time_quantum_end_time = request_dict.get('timeQuantumEndTime', None)
  276. time_point_device_will_doing = request_dict.get('timePointDeviceWillDoing', None)
  277. time_quantum_device_will_doing = request_dict.get('timeQuantumDeviceWillDoing', None)
  278. slow_open_or_close_speed = request_dict.get('slowOpenOrCloseSpeed', None)
  279. repeat = request_dict.get('repeat', None)
  280. if not all([device_id, time_type_radio, repeat]):
  281. return response.json(444)
  282. if time_type_radio == 1:
  283. if not all([time_point, slow_open_or_close_speed]):
  284. return response.json(444)
  285. chronopher_data = {
  286. 'device_id': device_id,
  287. 'time_type_radio': time_type_radio,
  288. 'time_point': time_point,
  289. 'time_point_device_will_doing': time_point_device_will_doing,
  290. 'slow_open_or_close_speed': slow_open_or_close_speed
  291. }
  292. else:
  293. if not all([time_quantum_start_time, time_quantum_end_time]):
  294. return response.json(444)
  295. chronopher_data = {
  296. 'device_id': device_id,
  297. 'time_type_radio': time_type_radio,
  298. 'time_quantum_start_time': time_quantum_start_time,
  299. 'time_quantum_end_time': time_quantum_end_time,
  300. 'time_quantum_device_will_doing': time_quantum_device_will_doing,
  301. }
  302. try:
  303. if is_edit:
  304. if not chronopher_id:
  305. return response.json(444)
  306. SwitchChronopher.objects.filter(device_id=device_id, id=chronopher_id).update(**chronopher_data)
  307. else:
  308. SwitchChronopher.objects.create(**chronopher_data)
  309. return response.json(0)
  310. except Exception as e:
  311. print(e)
  312. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  313. @staticmethod
  314. def delete_chronopher(request_dict, response):
  315. """
  316. 删除定时计划
  317. @param request_dict: 请求参数
  318. @request_dict deviceId: 设备id
  319. @request_dict chronopherId: 定时计划id
  320. @param response: 响应对象
  321. @return: response
  322. """
  323. device_id = request_dict.get('deviceId', None)
  324. chronopher_id = request_dict.get('chronopherId', None)
  325. if not chronopher_id:
  326. return response.json(444, {'error param': 'deviceId or chronopherId'})
  327. try:
  328. SwitchChronopher.objects.filter(device_id=device_id, id=chronopher_id).delete()
  329. return response.json(0)
  330. except Exception as e:
  331. print(e)
  332. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))