from flask import Blueprint, jsonify, request from application.wled_thread import start_exhibit_led_effect, stop_led_effect, is_effect_running from utils.logger_config import logger from api.utils import login_required, ping_ip import yaml import os led_bp = Blueprint('led', __name__) @led_bp.route('/api/led/status', methods=['GET']) @login_required def get_led_status(): """获取LED状态""" try: is_running = is_effect_running() return jsonify({ "success": True, "data": { "is_running": is_running, "message": "灯效正在运行" if is_running else "灯效已停止" } }) except Exception as e: return jsonify({ "success": False, "message": f"获取状态失败: {str(e)}" }), 500 @led_bp.route('/api/led/start', methods=['POST']) @login_required def start_led_effect(): """启动展品LED灯效控制""" try: data = request.get_json() if not data or 'exhibit_id' not in data: return jsonify({ "success": False, "message": "缺少展品ID参数" }), 400 exhibit_id = data['exhibit_id'] if not isinstance(exhibit_id, int) or exhibit_id < 0: return jsonify({ "success": False, "message": "展品ID必须是大于等于0的整数" }), 400 success = start_exhibit_led_effect(exhibit_id) if success: return jsonify({ "success": True, "message": f"展品 {exhibit_id} 的灯效已启动", "data": { "exhibit_id": exhibit_id, "is_running": True } }) else: return jsonify({ "success": False, "message": f"启动展品 {exhibit_id} 的灯效失败" }), 500 except Exception as e: return jsonify({ "success": False, "message": f"启动灯效失败: {str(e)}" }), 500 @led_bp.route('/api/led/stop', methods=['POST']) @login_required def stop_led_effect_api(): """停止当前LED灯效""" try: success = stop_led_effect() if success: return jsonify({ "success": True, "message": "灯效已停止", "data": { "is_running": False } }) else: return jsonify({ "success": False, "message": "停止灯效失败" }), 500 except Exception as e: return jsonify({ "success": False, "message": f"停止灯效失败: {str(e)}" }), 500 from application.self_check_service import check_led_status @led_bp.route('/api/led/self_check', methods=['POST']) @login_required def self_check_api(): """LED控制器自检""" try: results = check_led_status() # 检查是否有错误返回 if results and "error" in results[0]: return jsonify({ "success": False, "message": results[0]["error"], "data": [] }), 500 return jsonify({ "success": True, "message": "LED自检完成", "data": results }) except Exception as e: logger.error(f"LED自检异常: {str(e)}") return jsonify({ "success": False, "message": f"LED自检失败: {str(e)}" }), 500