gateway.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. import asyncio
  2. import datetime
  3. import sys
  4. import time
  5. import wmi
  6. from sanic import Sanic
  7. from sanic_cors import CORS, cross_origin
  8. from sanic import response
  9. # device import
  10. from event_storage import EventStorage
  11. from configuration import Configuration
  12. from utility import Utility
  13. from alarm import Alarm
  14. from historical_data_storage import HistoricalDataStorage
  15. from hard_disk_storage import HardDiskStorage
  16. from api_context import ApiContext
  17. from AES_crypt import decrypt, encrypt
  18. from logging_config import LOGGING_CONFIG
  19. app = Sanic(__name__, log_config=LOGGING_CONFIG)
  20. CORS(app)
  21. @app.route('/readReal', methods=['POST'])
  22. async def read_point_data(request):
  23. list = request.json['pointList']
  24. dict = gateway_storage.get_real_data(list)
  25. return response.json(dict)
  26. @app.route('/readHistorical', methods=['POST'])
  27. async def read_table_data(request):
  28. dict = request.json
  29. data_list = gateway_storage.get_historical_data(dict)
  30. data_json = Utility.data_encoder(data_list)
  31. return response.text(data_json)
  32. # 历史数据库分页查询接口--------------------------------------------\\
  33. @app.post('/getTotalNumber')
  34. async def get_total_number(request):
  35. dict = request.json
  36. data_list = gateway_storage.get_total_count_and_first_id(dict)
  37. return response.json(data_list)
  38. @app.post("/getItem")
  39. def get_one_page_content(request):
  40. dict = request.json
  41. data_list = gateway_storage.get_item_by_id_offset(dict)
  42. data_json = Utility.data_encoder(data_list)
  43. return response.text(data_json)
  44. # 历史数据导出接口--------------------------------------------\\
  45. @app.post('/quary')
  46. async def quary_table_data(request):
  47. dict = request.json
  48. res = gateway_storage.quary_table_data(dict)
  49. if not res:
  50. return response.text("查询参数错误")
  51. return response.json({"filename": res})
  52. @app.route("/download")
  53. async def downlod_file(request):
  54. filename = request.args.get("filename")
  55. if sys.platform == 'win32':
  56. filepath = './' + filename
  57. elif sys.platform == 'linux':
  58. filepath = filename
  59. return await response.file_stream(
  60. filepath,
  61. chunk_size=1024,
  62. filename=filename
  63. )
  64. @app.route('/readPointInfo', methods=['POST'])
  65. async def read_point_info(request):
  66. data_list = gateway_storage.get_point_info(None)
  67. return response.json(data_list)
  68. # @app.route('/readStatistics', methods=['POST'])
  69. # async def read_statistics_data(request):
  70. # list = request.json['pointList']
  71. # dict = gateway_storage.get_real_data(list)
  72. # return response.json(dict)
  73. #
  74. #
  75. # @app.route('/write', methods=['POST'])
  76. # async def write_data(request):
  77. # id = request.json["id"]
  78. # value = request.json["value"]
  79. # connector = request.json["device"]
  80. # connector.send_command("zz")
  81. @app.route('/api', methods=['POST'])
  82. async def read_statistics_data(request):
  83. if len(request.json) > 0:
  84. list = []
  85. for index in range(len(request.json)):
  86. api_object = request.json[index]['apiObject']
  87. parameter = request.json[index]['parameter']
  88. api = ApiContext()
  89. api.set_api_object(api_object)
  90. result = api.operation(parameter)
  91. list.append(result)
  92. return response.json(list)
  93. # def verify_cpu_code():
  94. # # 获取配置文件中CPU序列号
  95. # config_handle = Configuration()
  96. # config = config_handle.get_system_config()
  97. # cpu_code_from_config_file = config['code']
  98. # # 获取当前设备CPU序列号
  99. #
  100. #
  101. # # 判断是否匹配
  102. # if cpu_code == cpu_code_from_config_file:
  103. # return True
  104. # else:
  105. # return False
  106. @app.post('/verify')
  107. def verify_app(request):
  108. config = Configuration().get_config()
  109. for cpu in wmi.WMI().Win32_Processor():
  110. cpu_code = cpu.ProcessorId.strip()
  111. de_cpu_code = decrypt(config['activation_code'])
  112. if cpu_code == de_cpu_code:
  113. return response.json({'status': 'yes'})
  114. else:
  115. return response.json({'status': 'no'})
  116. @app.post('/activate')
  117. def acvivate(request):
  118. activate_code = request.json['code']
  119. for cpu in wmi.WMI().Win32_Processor():
  120. cpu_code = cpu.ProcessorId.strip()
  121. de_activate_code = decrypt(activate_code)
  122. if de_activate_code == cpu_code:
  123. config = Configuration()
  124. res = config.set_config(**{"activation_code": activate_code})
  125. if res:
  126. return response.json({'status': 'yes'})
  127. return response.json({'status': 'no'})
  128. # def overrun_alarm(alarms):
  129. # print('async overrun_alarm')
  130. # await asyncio.sleep(.1)
  131. # alarms.overrun_alarm()
  132. #
  133. #
  134. # async def displacement_alarm(app, alarms):
  135. # print('async displacement_alarm')
  136. # # await asyncio.sleep(.2)
  137. # alarms.displacement_alarm()
  138. async def notify_server_started_after_five_seconds():
  139. while True:
  140. await asyncio.sleep(10)
  141. if 'wxt536' not in Utility.available_connectors:
  142. break
  143. connector = Utility.available_connectors["wxt536"]
  144. data = "0XZRU\r\n"
  145. # 8:00:00-8:01:00 everyday
  146. a = datetime.datetime.now().strftime("%Y-%m-%d") + " %2d:00:00" % 8
  147. timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")
  148. timeStampA = int(time.mktime(timeArray))
  149. timeStampB = timeStampA + 60
  150. if timeStampA <= int(time.time()) <= timeStampB:
  151. time.sleep(10)
  152. connector.send_command(data)
  153. if __name__ == "__main__":
  154. gateway_storage = EventStorage()
  155. connector_config = gateway_storage.get_connector_config()
  156. Utility.start_connectors(connector_config)
  157. Alarm().start()
  158. HistoricalDataStorage().start()
  159. # 气象仪降雨量每日清零:一号打开,二号关闭,三号关闭
  160. app.add_task(notify_server_started_after_five_seconds())
  161. app.run(host="0.0.0.0", port=8000)