tasks.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # @Author : Rocky
  2. # @File : tasks.py
  3. # @Time : 2024/3/12 14:23
  4. # 解决models导入失败问题
  5. # *************
  6. # 修改任务函数后需要重启supervisor的celery和celery-beat才能失效
  7. # *************
  8. import django
  9. django.setup()
  10. import requests
  11. from Ansjer.Config.gatewaySensorConfig import DEVICE_TYPE, SMART_SOCKET_TOPIC, EVENT_TYPE
  12. from Service.CommonService import CommonService
  13. import time
  14. from Ansjer.celery import app
  15. from Ansjer.config import LOGGER, CONFIG_INFO, DETECT_PUSH_DOMAINS
  16. from Model.models import Device_User
  17. # ###################测试函数
  18. @app.task
  19. def hello():
  20. device_user_qs = Device_User.objects.filter(username='13138137872').values('NickName')
  21. nickname = device_user_qs[0]['NickName']
  22. info = 'celery测试日志, CONFIG_INFO:{}, nickname:{}'.format(CONFIG_INFO, nickname)
  23. LOGGER.info(info)
  24. @app.task
  25. def test(arg):
  26. time.sleep(10)
  27. print(arg)
  28. @app.task
  29. def add(x, y):
  30. print(x + y)
  31. # ###################
  32. @app.task
  33. def loocam_smart_scene(device_type, event_type, serial_number, scene_id=0):
  34. """
  35. loocam智能场景任务
  36. @param device_type: 设备类型
  37. @param event_type: 事件类型
  38. @param serial_number: 序列号
  39. @param scene_id: 场景id
  40. @return:
  41. """
  42. LOGGER.info('loocam智能场景任务,device_type:{},event_type:{},serial_number:{},scene_id:{}'.
  43. format(device_type, event_type, serial_number, scene_id))
  44. if device_type == DEVICE_TYPE['socket']:
  45. topic_name = SMART_SOCKET_TOPIC.format(serial_number)
  46. status = 1 if event_type == EVENT_TYPE['socket_power_on'] else 0
  47. msg = {
  48. 'type': 1,
  49. 'data': {'deviceSwitch': status}
  50. }
  51. CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
  52. # 没有设备任务时,最后一个任务上报场景日志
  53. if scene_id:
  54. data = {
  55. 'sceneId': scene_id,
  56. 'status': 1
  57. }
  58. url = DETECT_PUSH_DOMAINS + 'gatewayService/sceneLogPush'
  59. requests.post(url=url, data=data, timeout=8)