gateway.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import threading
  4. from sanic import Sanic
  5. from sanic_cors import CORS, cross_origin
  6. from sanic import response
  7. from event_storage import EventStorage
  8. from utility import Utility
  9. from historical_data_storage import HistoricalDataStorage
  10. from feeding_statistics import FeedingStatistics
  11. from auto_feeding import AutoFeeding
  12. from auto_charge import AutoCharge
  13. from alarm import Alarm
  14. from api_context import ApiContext
  15. from update_maintenance_info import UpdateMaintenanceInfo
  16. from auto_switch_device import AutoSwitchDevice
  17. from multiprocessing import Process
  18. from auto_switch_juyudeng import AutoSwitchJuyudeng
  19. app = Sanic(__name__)
  20. CORS(app)
  21. gateway_storage = EventStorage()
  22. connector_config = gateway_storage.get_connector_config()
  23. Utility.start_connectors(connector_config)
  24. @app.route('/readRealText', methods=['POST'])
  25. async def read_point_data(request):
  26. list = request.json['pointList']
  27. dict = gateway_storage.get_real_data(list)
  28. point_list = gateway_storage.get_point_info(list)
  29. data_list = {}
  30. for info in point_list:
  31. data_list[info['io_point_name']] = str(dict["c"+str(info['serial_number'])]) + " " +str(info['unit'])
  32. return response.json(data_list)
  33. @app.route('/readReal', methods=['POST'])
  34. async def read_point_data(request):
  35. list = request.json['pointList']
  36. dict = gateway_storage.get_real_data(list)
  37. '''
  38. data_list = gateway_storage.get_point_info(list)
  39. for info in data_list:
  40. info['value'] = dict["c"+str(info['serial_number'])]
  41. '''
  42. return response.json(dict)
  43. @app.route('/api', methods=['POST'])
  44. async def read_statistics_data(request):
  45. if len(request.json) > 0:
  46. list = []
  47. for index in range(len(request.json)):
  48. api_object = request.json[index]['apiObject']
  49. parameter = request.json[index]['parameter']
  50. api = ApiContext()
  51. api.set_api_object(api_object)
  52. result = api.operation(parameter)
  53. list.append(result)
  54. data_json = Utility.data_encoder(list)
  55. return response.text(data_json)
  56. @app.route('/write',methods=['POST'])
  57. async def write_data(request):
  58. station_name = request.json["station_name"]
  59. command = request.json["command"]
  60. print("write_command station_name=", station_name, " command=", command)
  61. try:
  62. result = Utility.available_connectors[station_name].send_command(command)
  63. return response.json({'message': result})
  64. except Exception as e:
  65. print(station_name+"write[ERROR]:" + str(e))
  66. return response.json({'message': result})
  67. if __name__ == "__main__":
  68. # alarm1 = Alarm()
  69. # threading.Thread(target=alarm1.overrun_alarm).start()
  70. # alarm2 = Alarm()
  71. # threading.Thread(target=alarm2.displacement_alarm).start()
  72. historicalDataStorage = HistoricalDataStorage()
  73. threading.Thread(target=historicalDataStorage.run, daemon=True, name='historicalDataStorage').start()
  74. #Process(target=historicalDataStorage.run, daemon=True, name='historicalDataStorage').start()
  75. feedingStatistics = FeedingStatistics()
  76. threading.Thread(target=feedingStatistics.run, daemon=True, name='feedingStatistics').start()
  77. autoFeeding = AutoFeeding()
  78. threading.Thread(target=autoFeeding.run, daemon=True, name='autoFeeding').start()
  79. autoUpdateMaintenanceInfo = UpdateMaintenanceInfo()
  80. threading.Thread(target=autoUpdateMaintenanceInfo.update_info, daemon=True, name='UpdateMaintenanceInfo').start()
  81. autoCharge = AutoCharge()
  82. threading.Thread(target=autoCharge.run, daemon=True, name='autoCharge').start()
  83. threading.Thread(target=AutoSwitchDevice().run, daemon=True, name='AutoSwitchDevice').start()
  84. # threading.Thread(target=AutoSwitchDevice().auto_update_device_status, daemon=True, name='AutoSwitchDevice').start()
  85. alarm3 = Alarm()
  86. threading.Thread(target=alarm3.moxa_e1210_alarm, daemon=True, name='alarm3').start()
  87. # 自动控制聚鱼灯
  88. threading.Thread(target=AutoSwitchJuyudeng().run, daemon=True, name=AutoSwitchJuyudeng).start()
  89. app.run(host="0.0.0.0", port=18080, workers=1)