feeding_statistics.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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 None
  25. # 历史存储主函数
  26. def run(self):
  27. self._log.info('[AutoFeeding] - FeedingStatistics module is running!')
  28. # 风向:c1,风速:c2,流速:c7,流向:c8
  29. # 1号风机频率:c651,2号风机频率:c655
  30. # 1号供料器频率:c659,2号供料器频率:c663,3号供料器频率:c667
  31. # 分配器位置01:c733,分配器位置02:c734,分配器位置03:c735,分配器位置04:c736
  32. list = ["c1", "c2", "c7", "c8", "c651", "c655", "c659", "c663", "c667", "c733", "c734", "c735", "c736"]
  33. # 获取配置信息
  34. while 1:
  35. time.sleep(5)
  36. real_data_dict = self._storage.get_real_data(list)
  37. # 记录投喂过程
  38. try:
  39. feeder_frequency = 0
  40. # 判断供料器
  41. if float(real_data_dict['c659']) > 1:
  42. feeder_frequency = float(real_data_dict['c659'])
  43. tank_number = 1
  44. elif float(real_data_dict['c663']) > 1:
  45. feeder_frequency = float(real_data_dict['c663'])
  46. tank_number = 2
  47. elif float(real_data_dict['c667']) > 1:
  48. feeder_frequency = float(real_data_dict['c667'])
  49. tank_number = 3
  50. else:
  51. self._feed_id = None
  52. # 判断投饵口
  53. if int(real_data_dict['c733']) == 1:
  54. feeding_port = 1
  55. elif int(real_data_dict['c734']) == 1:
  56. feeding_port = 2
  57. elif int(real_data_dict['c735']) == 1:
  58. feeding_port = 3
  59. elif int(real_data_dict['c736']) == 1:
  60. feeding_port = 4
  61. # 判断风机
  62. if float(real_data_dict['c651']) > 0:
  63. fen_frequency = float(real_data_dict['c651'])
  64. elif float(real_data_dict['c655']) > 0:
  65. fen_frequency = float(real_data_dict['c655'])
  66. if feeder_frequency > 1:
  67. now_time = time.time()
  68. if self._feed_id == None:
  69. self._feed_id = 1
  70. feed_id = int(now_time)
  71. if self._run_time == None:
  72. self._run_time = int(now_time)
  73. save_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now_time))
  74. wind_speed = self.str_to_flaot(real_data_dict['c2'])
  75. wind_direction = self.str_to_flaot(real_data_dict['c1'])
  76. flow_speed = self.str_to_flaot(real_data_dict['c7'])
  77. flow_direction = self.str_to_flaot(real_data_dict['c8'])
  78. sql_get_task_info = "SELECT * FROM touer_set;"
  79. task_info = self._storage.execute_sql(sql_get_task_info)
  80. task_info = task_info[0]
  81. if task_info['feed_mode'] == 1:
  82. feeding_mode = "自动"
  83. elif task_info['feed_mode'] == 0:
  84. feeding_mode = "手动"
  85. else:
  86. feeding_mode = None
  87. breed = task_info['feed_kind']
  88. tank_number_info = eval(task_info["tank" + str(tank_number)])
  89. bait_name = tank_number_info['name']
  90. feed_weight = float(tank_number_info['weight'])
  91. feed_diameter = int(tank_number_info['diameter'])
  92. shelf_life = tank_number_info['shelf_life']
  93. feeding_speed = 1440 / 67 * feeder_frequency / 50 * (8 - 0.5 * feed_diameter) * 1 / 60
  94. now_time = int(time.time())
  95. feeding_amount = round(feeding_speed * (now_time - self._run_time), 2)
  96. self._run_time = now_time
  97. sql = "INSERT INTO fishery_data(feed_id, times, wind_speed, wind_direction,\
  98. flow_speed, flow_direction, feeding_port, tank_number, feeder_frequency,\
  99. fan_frequency, feeding_amount, feeding_mode, breed, bait_name, feed_weight, feed_diameter, shelf_life) \
  100. VALUES (%s,'%s',%s,%s,%s,%s,%s,%s,%s,%s,%s,'%s','%s','%s',%s,%s,'%s')" % \
  101. (feed_id, save_time, wind_speed, wind_direction, flow_speed, flow_direction, feeding_port, \
  102. tank_number, feeder_frequency, fen_frequency, feeding_amount, feeding_mode, breed, bait_name,
  103. feed_weight, feed_diameter, shelf_life)
  104. self._storage.execute_sql(sql)
  105. else:
  106. self._run_time = None
  107. except Exception as e:
  108. print('行号', e.__traceback__.tb_lineno)
  109. print("get fishery_data [ERROR]:" + str(e))
  110. self._log.error("get fishery_data [ERROR]:" + str(e))