feeding_statistics.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. """
  2. @Date :2021/6/16/14:47
  3. @Author:zz
  4. @Desc :投喂数据统计
  5. """
  6. import time
  7. import json
  8. import threading
  9. import traceback
  10. from event_storage import EventStorage
  11. from utility import Utility
  12. from log import OutPutLog
  13. from apis.get_feeding_advise import GetFeedingAdvise
  14. class FeedingStatistics:
  15. def __init__(self):
  16. self._storage = EventStorage()
  17. self._log = OutPutLog()
  18. self._run_time = None
  19. self._feed_id = None
  20. def str_to_flaot(self, str):
  21. if str != None:
  22. return float(str)
  23. else:
  24. return 'null'
  25. # 历史存储主函数
  26. def run(self):
  27. self._log.info('[AutoFeeding] - FeedingStatistics module is running!')
  28. # 风向:c1,风速:c2,流速:c7,流向:c8
  29. # P01罗茨风机频率:c651
  30. # P02罗茨风机频率:c659
  31. # GLQ01供料器频率:c653
  32. # GLQ02供料器频率:c661
  33. # 风向:c1,风速:c2,流速:c7,流向:c8
  34. list = ["c1", "c2", "c7", "c8", "c651", "c653", "c659", "c661"]
  35. # 获取配置信息
  36. while 1:
  37. time.sleep(2)
  38. real_data_dict = self._storage.get_real_data(list)
  39. # 记录投喂过程
  40. try:
  41. feeder_frequency_1 = 0
  42. feeder_frequency_2 = 0
  43. fan_frequency_1 = 0
  44. fan_frequency_2 = 0
  45. feeder_frequency = 0
  46. for k, v in real_data_dict.items():
  47. if v is None:
  48. real_data_dict[k] = -9999
  49. # 判断供料器1
  50. if float(real_data_dict['c653']) > 0:
  51. feeder_frequency_1 = float(real_data_dict['c653'])
  52. # 判断供料器2
  53. if float(real_data_dict['c661']) > 0:
  54. feeder_frequency_2 = float(real_data_dict['c661'])
  55. # 判断风机1
  56. if float(real_data_dict['c651']) > 0:
  57. fan_frequency_1 = float(real_data_dict['c651'])
  58. # 判断风机2
  59. if float(real_data_dict['c659']) > 0:
  60. fan_frequency_2 = float(real_data_dict['c659'])
  61. feeder_frequency = feeder_frequency_1 + feeder_frequency_2
  62. if feeder_frequency > -1:
  63. now_time = time.time()
  64. if self._feed_id == None:
  65. self._feed_id = 1
  66. feed_id = int(now_time)
  67. if self._run_time == None:
  68. self._run_time = int(now_time)
  69. save_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now_time))
  70. wind_speed = self.str_to_flaot(real_data_dict['c2'])
  71. wind_direction = self.str_to_flaot(real_data_dict['c1'])
  72. flow_speed = self.str_to_flaot(real_data_dict['c7'])
  73. flow_direction = self.str_to_flaot(real_data_dict['c8'])
  74. sql_get_task_info = "SELECT * FROM touer_set;"
  75. task_info = self._storage.execute_sql(sql_get_task_info)
  76. task_info = task_info[0]
  77. if task_info['feed_mode'] == 1:
  78. feeding_mode = "自动"
  79. elif task_info['feed_mode'] == 0:
  80. feeding_mode = "手动"
  81. else:
  82. feeding_mode = None
  83. breed = task_info['feed_kind']
  84. tank1_number_info = eval(task_info["tank1"])
  85. tank2_number_info = eval(task_info["tank2"])
  86. #1号罐
  87. bait_name_1 = tank1_number_info['name']
  88. feed_weight_1 = float(tank1_number_info['weight'])
  89. feed_diameter_1 = int(tank1_number_info['diameter'])
  90. shelf_life_1 = tank1_number_info['shelf_life']
  91. #2号罐
  92. bait_name_2 = tank2_number_info['name']
  93. feed_weight_2 = float(tank2_number_info['weight'])
  94. feed_diameter_2 = int(tank2_number_info['diameter'])
  95. shelf_life_2 = tank2_number_info['shelf_life']
  96. feeding_speed_1 = 1440 / 67 * feeder_frequency_1 / 50 * (8 - 0.5 * feed_diameter_1) * 1 / 60
  97. feeding_speed_2 = 1440 / 67 * feeder_frequency_2 / 50 * (8 - 0.5 * feed_diameter_2) * 1 / 60
  98. now_time = int(time.time())
  99. feeding_amount_1 = round(feeding_speed_1 * (now_time - self._run_time), 2)
  100. feeding_amount_2 = round(feeding_speed_2 * (now_time - self._run_time), 2)
  101. self._run_time = now_time
  102. sql = "INSERT INTO fishery_data(feed_id, times, wind_speed, wind_direction," \
  103. "flow_speed, flow_direction, feeder_frequency_1, fan_frequency_1, feeding_amount_1," \
  104. "feeder_frequency_2, fan_frequency_2, feeding_amount_2, feeding_mode, breed, bait_name_1, bait_name_2," \
  105. "feed_weight_1, feed_weight_2,feed_diameter_1, feed_diameter_2, shelf_life_1, shelf_life_2) VALUES (%s,'%s',%s,%s,%s,%s," \
  106. "%s,%s,%s,%s,%s,%s," \
  107. "'%s','%s','%s','%s',%s,%s,%s,%s,'%s','%s')" % \
  108. (feed_id, save_time, wind_speed, wind_direction,
  109. flow_speed, flow_direction, feeder_frequency_1, fan_frequency_1, feeding_amount_1,
  110. feeder_frequency_2, fan_frequency_2, feeding_amount_2, feeding_mode, breed, bait_name_1, bait_name_2,
  111. feed_weight_1, feed_weight_2, feed_diameter_1, feed_diameter_2, shelf_life_1, shelf_life_2)
  112. #print(sql)
  113. self._storage.execute_sql(sql)
  114. else:
  115. self._run_time = None
  116. self._feed_id = None
  117. except Exception as e:
  118. print('行号', e.__traceback__.tb_lineno)
  119. print("get fishery_data [ERROR]:" + str(e))
  120. self._log.error("get fishery_data [ERROR]:" + str(e))