| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- 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
|