gateway.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import asyncio
  2. import datetime
  3. import json
  4. import threading
  5. import time
  6. from sanic import Sanic
  7. from sanic.response import text, json
  8. from sanic_cors import CORS, cross_origin
  9. from sanic import response
  10. from multiprocessing import Process
  11. # device import
  12. from event_storage import EventStorage
  13. from configuration import Configuration
  14. from utility import Utility
  15. from alarm import Alarm
  16. from historical_data_storage import HistoricalDataStorage
  17. from hard_disk_storage import HardDiskStorage
  18. from log import Log
  19. from api_context import ApiContext
  20. app = Sanic(__name__)
  21. CORS(app)
  22. system_config = Configuration().get_system_config()
  23. gateway_storage = EventStorage()
  24. connector_config = gateway_storage.get_connector_config()
  25. Utility.start_connectors(connector_config)
  26. # config = {"ip": "127.0.0.1",
  27. # "username": "root",
  28. # "password": "root",
  29. # "dataBaseName": "shucai"}
  30. # handler = HardDiskStorage(config=config, port=3306, charset='utf8')
  31. # res = handler.get_connectors()
  32. # print(res)
  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. return response.json(dict)
  38. @app.route('/readHistorical', methods=['POST'])
  39. async def read_table_data(request):
  40. dict = request.json
  41. data_list = gateway_storage.get_historical_data(dict)
  42. data_json = Utility.data_encoder(data_list)
  43. return response.text(data_json)
  44. @app.route('/readPointInfo', methods=['POST'])
  45. async def read_point_info(request):
  46. data_list = gateway_storage.get_point_info(None)
  47. return response.json(data_list)
  48. @app.route('/readStatistics', methods=['POST'])
  49. async def read_statistics_data(request):
  50. list = request.json['pointList']
  51. dict = gateway_storage.get_real_data(list)
  52. return response.json(dict)
  53. @app.route('/write', methods=['POST'])
  54. async def write_data(request):
  55. id = request.json["id"]
  56. value = request.json["value"]
  57. connector = request.json["device"]
  58. connector.send_command("zz")
  59. @app.route('/api', methods=['POST'])
  60. async def read_statistics_data(request):
  61. if len(request.json) > 0:
  62. list = []
  63. for index in range(len(request.json)):
  64. api_object = request.json[index]['apiObject']
  65. parameter = request.json[index]['parameter']
  66. api = ApiContext()
  67. api.set_api_object(api_object)
  68. result = api.operation(parameter)
  69. list.append(result)
  70. return response.json(list)
  71. # def overrun_alarm(alarms):
  72. # print('async overrun_alarm')
  73. # await asyncio.sleep(.1)
  74. # alarms.overrun_alarm()
  75. #
  76. #
  77. # async def displacement_alarm(app, alarms):
  78. # print('async displacement_alarm')
  79. # # await asyncio.sleep(.2)
  80. # alarms.displacement_alarm()
  81. async def notify_server_started_after_five_seconds():
  82. while True:
  83. await asyncio.sleep(10)
  84. connector = Utility.available_connectors["wxt536"]
  85. data = "0XZRU\r\n"
  86. # 8:00:00-8:01:00 everyday
  87. a = datetime.datetime.now().strftime("%Y-%m-%d") + " %2d:00:00" % 8
  88. timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")
  89. timeStampA = int(time.mktime(timeArray))
  90. timeStampB = timeStampA + 60
  91. if timeStampA <= int(time.time()) <= timeStampB:
  92. time.sleep(10)
  93. connector.send_command(data)
  94. if __name__ == "__main__":
  95. alarm1 = Alarm()
  96. threading.Thread(target=alarm1.overrun_alarm).start()
  97. # threading.Thread(target=alarm2.displacement_alarm).start()
  98. historicalDataStorage = HistoricalDataStorage()
  99. threading.Thread(target=historicalDataStorage.run).start()
  100. # app.add_task(overrun_alarm(app, alarm))
  101. # app.add_task(displacement_alarm(app, alarm))
  102. # app.add_task(notify_server_started_after_five_seconds()) # 气象仪降雨量每日清零:一号打开,二号关闭,三号关闭
  103. app.run(host="0.0.0.0", port=8000)
  104. # pyinstaller -F -p C:\Users\wenge\AppData\Local\Programs\Python\Python38\Lib\site-packages gateway.spec
  105. # pyinstaller -F -p D:\DevTools\Python38\Lib\site-packages gateway.spec