mitv.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. from flask import Blueprint, jsonify, request
  2. from hardware.mitvs_module import turn_on_display, turn_off_display, turn_on_all_displays, turn_off_all_displays, mitv_controller
  3. from utils.logger_config import logger
  4. from api.utils import login_required, ping_ip
  5. import threading
  6. import concurrent.futures
  7. mitv_bp = Blueprint('mitv', __name__)
  8. @mitv_bp.route('/api/mitv/turn_on', methods=['POST'])
  9. @login_required
  10. def turn_on_display_api():
  11. """唤醒指定ID的电视"""
  12. try:
  13. data = request.get_json()
  14. if not data or 'kodi_id' not in data:
  15. return jsonify({
  16. "success": False,
  17. "message": "缺少 kodi_id 参数"
  18. }), 400
  19. kodi_id = data['kodi_id']
  20. if not isinstance(kodi_id, int) or kodi_id < 0:
  21. return jsonify({
  22. "success": False,
  23. "message": "kodi_id 必须是大于等于0的整数"
  24. }), 400
  25. def task():
  26. try:
  27. turn_on_display(kodi_id)
  28. except Exception as e:
  29. logger.error(f"异步唤醒电视异常 (ID: {kodi_id}): {str(e)}")
  30. threading.Thread(target=task).start()
  31. return jsonify({
  32. "success": True,
  33. "message": f"已发送唤醒指令给电视 (ID: {kodi_id}) - 异步执行"
  34. })
  35. except Exception as e:
  36. logger.error(f"唤醒电视异常: {str(e)}")
  37. return jsonify({
  38. "success": False,
  39. "message": f"唤醒电视失败: {str(e)}"
  40. }), 500
  41. @mitv_bp.route('/api/mitv/turn_off', methods=['POST'])
  42. @login_required
  43. def turn_off_display_api():
  44. """息屏指定ID的电视"""
  45. try:
  46. data = request.get_json()
  47. if not data or 'kodi_id' not in data:
  48. return jsonify({
  49. "success": False,
  50. "message": "缺少 kodi_id 参数"
  51. }), 400
  52. kodi_id = data['kodi_id']
  53. if not isinstance(kodi_id, int) or kodi_id < 0:
  54. return jsonify({
  55. "success": False,
  56. "message": "kodi_id 必须是大于等于0的整数"
  57. }), 400
  58. def task():
  59. try:
  60. turn_off_display(kodi_id)
  61. except Exception as e:
  62. logger.error(f"异步息屏电视异常 (ID: {kodi_id}): {str(e)}")
  63. threading.Thread(target=task).start()
  64. return jsonify({
  65. "success": True,
  66. "message": f"已发送息屏指令给电视 (ID: {kodi_id}) - 异步执行"
  67. })
  68. except Exception as e:
  69. logger.error(f"息屏电视异常: {str(e)}")
  70. return jsonify({
  71. "success": False,
  72. "message": f"息屏电视失败: {str(e)}"
  73. }), 500
  74. @mitv_bp.route('/api/mitv/turn_on_all', methods=['POST'])
  75. @login_required
  76. def turn_on_all_displays_api():
  77. """唤醒所有电视"""
  78. try:
  79. def task():
  80. try:
  81. turn_on_all_displays()
  82. except Exception as e:
  83. logger.error(f"异步唤醒所有电视异常: {str(e)}")
  84. threading.Thread(target=task).start()
  85. return jsonify({
  86. "success": True,
  87. "message": "已发送唤醒指令给所有电视 - 异步执行"
  88. })
  89. except Exception as e:
  90. logger.error(f"唤醒所有电视异常: {str(e)}")
  91. return jsonify({
  92. "success": False,
  93. "message": f"唤醒所有电视失败: {str(e)}"
  94. }), 500
  95. @mitv_bp.route('/api/mitv/turn_off_all', methods=['POST'])
  96. @login_required
  97. def turn_off_all_displays_api():
  98. """息屏所有电视"""
  99. try:
  100. def task():
  101. try:
  102. turn_off_all_displays()
  103. except Exception as e:
  104. logger.error(f"异步息屏所有电视异常: {str(e)}")
  105. threading.Thread(target=task).start()
  106. return jsonify({
  107. "success": True,
  108. "message": "已发送息屏指令给所有电视 - 异步执行"
  109. })
  110. except Exception as e:
  111. logger.error(f"息屏所有电视异常: {str(e)}")
  112. return jsonify({
  113. "success": False,
  114. "message": f"息屏所有电视失败: {str(e)}"
  115. }), 500
  116. from application.self_check_service import check_mitv_status
  117. # 电视进行自检
  118. # 通过ping 所有电视ip进行,返回一个数组,数组中包括是否正常、电视IP。
  119. @mitv_bp.route('/api/mitv/self_check', methods=['POST'])
  120. @login_required
  121. def self_check_api():
  122. """电视进行自检"""
  123. try:
  124. results = check_mitv_status()
  125. return jsonify({
  126. "success": True,
  127. "message": "电视自检完成",
  128. "data": results
  129. })
  130. except Exception as e:
  131. logger.error(f"电视进行自检异常: {str(e)}")
  132. return jsonify({
  133. "success": False,
  134. "message": f"电视进行自检失败: {str(e)}"
  135. }), 500