cbd_msg.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import os
  2. import sys
  3. import time
  4. import django
  5. import json
  6. from datetime import datetime, timedelta
  7. local_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  8. print(local_path)
  9. if local_path not in sys.path:
  10. sys.path.append(local_path)
  11. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "kedong.settings")
  12. django.setup()
  13. from django.conf import settings
  14. from smartfarming.models.sim_card import MongoMsg_Conf
  15. from smartfarming.models.worm_forecast import MongoCBDphoto
  16. from smartfarming.models.pest_count import MongoCBDPestWarning
  17. from smartfarming.api.views.forecast.all_dict import insect_dict
  18. # 获取所有的预警配置
  19. msg_conf = MongoMsg_Conf.objects.all()
  20. for msg in msg_conf:
  21. # 获取device_id conf
  22. device_id = msg_conf.device_id
  23. conf = json.load(msg_conf.conf)
  24. # 获取该device_id 下前一天的害虫情况
  25. now = datetime.now()
  26. previous_day = now - timedelta(days=1)
  27. start_time = datetime(previous_day.year, previous_day.month, previous_day.day, 0, 0, 0).timestamp()
  28. end_time = datetime(now.year, now.month, now.day, 23, 59, 59).timestamp()
  29. print("起始时间:", start_time)
  30. print("结束时间:", end_time)
  31. photo_data = MongoCBDphoto.objects.filter(addtime__range = [start_time, end_time]).values_list("indentify_result", flat=True)
  32. # 把当天的害虫统计出来
  33. indentify_result = {}
  34. for p in photo_data:
  35. tmp = p.split("#")
  36. if tmp[0] in indentify_result.keys():
  37. indentify_result[tmp[0]] += int(tmp[1])
  38. else:
  39. indentify_result[tmp[0]] = int(tmp[1])
  40. # 定义预警变量
  41. warning_result = ""
  42. # 指定害虫数量预警
  43. appointPest = conf.get("appointPest")
  44. if appointPest == "on":
  45. appointPestName = conf.get("appointPestName")
  46. appointPestNum = conf.get("appointPestNum")
  47. pest_cg = appointPestName.split("#")
  48. pest_nu = appointPestName.split("#")
  49. for i in pest_cg:
  50. if i in indentify_result.keys():
  51. if indentify_result[i] > int(pest_nu[pest_cg.index(i)]):
  52. zh = insect_dict.get(i, "未知")
  53. warning_result += f"害虫{zh}数量{str(indentify_result[i])},"
  54. # 害虫种类
  55. pestCategory = conf.get("pestCategory")
  56. if pestCategory == "on":
  57. pestCategoryNum = conf.get("pestCategoryNum")
  58. pest_cg_count = len(indentify_result.keys())
  59. if pest_cg_count > int(pestCategoryNum):
  60. warning_result += f"害虫种类{pest_cg_count},"
  61. # 害虫总数
  62. pestTotal = conf.get("pestTotal")
  63. if pestTotal == "on":
  64. pestTotalNum = conf.get("pestTotalNum")
  65. ct = 0
  66. for m, n in indentify_result.items():
  67. ct += int(n)
  68. if ct > int(pestTotalNum):
  69. warning_result += f"害虫总数{str(ct)},"
  70. # 综合预警
  71. pestWarn = conf.get("pestWarn")
  72. if pestWarn == "on":
  73. for m, n in indentify_result.items():
  74. warning_result += f"{insect_dict.get(m)},数量{str(n)},"
  75. if warning_result:
  76. warning_result += "请注意防范"
  77. # 写入数据库
  78. MongoCBDPestWarning.objects.create(
  79. )