# homeAssistant-server-pro **Repository Path**: tomorrowgit/home-assistant-server-pro ## Basic Information - **Project Name**: homeAssistant-server-pro - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-22 - **Last Updated**: 2025-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HomeAssistant Server Pro 🏠 **企业级智能家居后端服务系统** 基于现代Python技术栈构建的高性能、可扩展的智能家居管理平台,为HomeAssistant Flutter应用提供强大的后端支持。 [![Python](https://img.shields.io/badge/Python-3.9+-blue.svg)](https://python.org) [![FastAPI](https://img.shields.io/badge/FastAPI-0.104+-green.svg)](https://fastapi.tiangolo.com) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) ## ✨ 特性 - 🚀 **高性能异步架构** - 基于FastAPI和asyncio构建 - 🔐 **企业级安全** - JWT认证、权限控制、数据加密 - 📊 **智能分析** - 设备使用统计、能耗分析、趋势预测 - 🔄 **场景自动化** - 灵活的智能场景配置和执行 - 📱 **实时通知** - 多渠道消息推送(邮件、短信、推送) - 🐳 **容器化部署** - Docker支持,一键部署 - 📈 **监控告警** - Prometheus指标、健康检查 - 🧪 **完整测试** - 单元测试、集成测试覆盖 ## 🏗️ 项目架构 本项目采用**分层架构设计**,遵循企业级Python项目开发规范: ``` homeAssistant-server-pro/ ├── app/ # 🎯 应用核心代码 │ ├── __init__.py │ ├── main.py # FastAPI应用入口 │ ├── api/ # 🌐 API路由层 │ │ └── v1/ # API版本控制 │ │ ├── router.py # 主路由配置 │ │ └── endpoints/ # 具体端点实现 │ ├── core/ # ⚙️ 核心配置和工具 │ │ ├── config.py # 应用配置 │ │ ├── database.py # 数据库连接 │ │ ├── security.py # 安全相关 │ │ └── exceptions.py # 异常处理 │ ├── models/ # 🗄️ 数据模型层 (SQLAlchemy) │ ├── schemas/ # 📋 数据验证层 (Pydantic) │ ├── services/ # 🔧 业务逻辑层 │ ├── repositories/ # 💾 数据访问层 │ └── utils/ # 🛠️ 工具函数 ├── tests/ # 🧪 测试代码 │ ├── unit/ # 单元测试 │ └── integration/ # 集成测试 ├── docs/ # 📚 项目文档 ├── scripts/ # 📜 部署和工具脚本 ├── docker/ # 🐳 Docker配置 ├── logs/ # 📝 日志文件 ├── .env.example # 🔧 环境变量示例 ├── .gitignore # 📋 Git忽略文件 ├── pyproject.toml # ⚙️ 项目配置 └── README.md # 📖 项目说明 ``` ## 🛠️ 技术栈 ### 核心框架 - **Web框架**: FastAPI 0.104+ (高性能异步Web框架) - **ASGI服务器**: Uvicorn (生产级ASGI服务器) - **数据库ORM**: SQLAlchemy 2.0+ (现代Python ORM) - **数据迁移**: Alembic (数据库版本控制) ### 数据存储 - **主数据库**: MySQL 8.0+ (关系型数据库,支持远程连接) - **缓存数据库**: Redis 6.0+ (内存数据库,支持远程连接) - **异步数据库驱动**: aiomysql (MySQL异步驱动) - **数据库连接池**: SQLAlchemy 2.0+ 异步连接池 - **连接状态**: ✅ 数据库连接正常,表结构已初始化 ### 安全认证 - **JWT认证**: python-jose (JSON Web Token) - **密码加密**: passlib + bcrypt (安全密码处理) - **权限控制**: 基于角色的访问控制(RBAC) ### 开发工具 - **代码格式化**: Black (代码风格统一) - **代码检查**: Flake8 + MyPy (静态分析) - **导入排序**: isort (导入语句排序) - **安全检查**: Bandit (安全漏洞扫描) - **Git钩子**: pre-commit (提交前检查) ### 测试框架 - **测试框架**: Pytest (Python测试框架) - **异步测试**: pytest-asyncio (异步测试支持) - **覆盖率**: pytest-cov (代码覆盖率) - **测试数据**: Factory Boy (测试数据生成) ### 监控运维 - **日志**: Structlog (结构化日志) - **指标监控**: Prometheus (监控指标收集) - **容器化**: Docker + Docker Compose - **任务队列**: Celery (异步任务处理) ## 🎯 核心功能模块 ### 👤 用户管理系统 - **用户认证**: 注册、登录、JWT令牌管理 - **权限控制**: 基于角色的访问控制(RBAC) - **用户资料**: 个人信息管理、头像上传 - **安全功能**: 密码重置、邮箱验证、登录日志 ### 🏠 设备管理系统 - **设备接入**: 多协议设备接入支持 - **设备控制**: 远程控制、状态同步 - **设备监控**: 实时状态监控、离线检测 - **设备分组**: 按房间、类型、功能分组管理 - **设备统计**: 使用时长、能耗统计 ### 🎬 场景自动化 - **场景创建**: 可视化场景配置 - **条件触发**: 时间、设备状态、传感器数据触发 - **动作执行**: 设备控制、通知发送 - **场景模板**: 预设场景模板库 - **执行日志**: 场景执行历史记录 ### 📊 数据分析系统 - **使用统计**: 设备使用频率、时长分析 - **能耗分析**: 电力消耗统计和趋势 - **行为分析**: 用户使用模式识别 - **预测分析**: AI驱动的趋势预测 - **报表导出**: 多格式数据报表 ### 📢 通知系统 - **多渠道推送**: 邮件、短信、App推送 - **通知模板**: 可自定义通知模板 - **通知规则**: 智能通知过滤和分组 - **消息中心**: 统一消息管理 - **通知统计**: 发送成功率统计 ### 🔧 系统管理 - **健康检查**: 服务状态监控 - **性能监控**: 系统资源使用情况 - **日志管理**: 结构化日志收集 - **备份恢复**: 数据备份和恢复 - **维护模式**: 系统维护管理 ## 🚀 快速开始 ### 📋 环境要求 - **Python**: 3.9+ (推荐 3.11) - **操作系统**: macOS, Linux, Windows - **内存**: 最少 2GB RAM - **磁盘**: 最少 1GB 可用空间 ### ⚡ 一键启动 我们提供了智能启动脚本,自动处理环境配置和依赖安装: ```bash # 🚀 首次启动(自动配置环境) ./scripts/start.sh # ⚡ 日常开发(快速启动) ./scripts/start.sh quick # 🔧 遇到问题(智能诊断) ./scripts/start.sh diagnose # 🔍 服务检查(健康状态) ./scripts/start.sh health ``` ### 🎯 启动选项 ```bash # 强制启动(清理端口冲突) ./scripts/start.sh --force # 调试模式(详细日志) ./scripts/start.sh --debug # 自定义端口 ./scripts/start.sh --port 9000 # 自定义主机 ./scripts/start.sh --host 127.0.0.1 # 查看所有选项 ./scripts/start.sh help ``` ### 🔍 服务状态 启动成功后,您可以访问以下地址: - 🌐 **主服务**: http://localhost:8000 - 📚 **API文档**: http://localhost:8000/docs - 📖 **ReDoc文档**: http://localhost:8000/redoc - 🔍 **健康检查**: http://localhost:8000/health - 📊 **监控指标**: http://localhost:8000/metrics ### 🔧 CORS 配置 项目已配置跨域访问支持,允许以下来源: - `http://localhost:3000` - 前端开发服务器 - `http://localhost:8080` - 备用开发端口 - `http://127.0.0.1:3000` - 本地IP访问 - `http://127.0.0.1:8080` - 本地IP备用端口 - `http://10.0.2.2:8000` - Android模拟器访问 如需添加其他来源,请修改 `.env` 文件中的 `BACKEND_CORS_ORIGINS` 配置。 ### Docker部署 使用统一的部署脚本进行Docker部署: ```bash # 完整部署 ./scripts/deploy.sh # 快速启动已部署的服务 ./scripts/deploy.sh start # 查看服务状态 ./scripts/deploy.sh status # 查看服务日志 ./scripts/deploy.sh logs # 停止服务 ./scripts/deploy.sh stop # 重启服务 ./scripts/deploy.sh restart # 清理环境 ./scripts/deploy.sh clean ``` ### 🚀 Docker 一键部署 最简单的部署方式,支持开发和生产环境: ```bash # 克隆项目 git clone cd homeAssistant-server-pro # 一键启动(自动配置环境) ./start.sh ``` 部署完成后访问: - 🌐 应用主页: http://localhost - 📚 API文档: http://localhost/docs - 👤 默认账户: admin / admin123 > 📖 详细的Docker部署指南请参考 [DOCKER_DEPLOYMENT.md](DOCKER_DEPLOYMENT.md) ### 📋 手动安装步骤 如果需要手动配置,请按以下步骤: 1. **克隆项目** ```bash git clone cd homeassistant-server-pro ``` 2. **环境要求检查** ```bash # 检查Python版本(需要 >= 3.9) python3 --version # 运行诊断脚本检查环境 ./scripts/diagnose.sh ``` 3. **创建虚拟环境** ```bash python3 -m venv venv source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows ``` 4. **安装依赖** ```bash pip install --upgrade pip pip install -e . ``` 5. **配置环境变量** ```bash cp .env.example .env # 编辑 .env 文件,配置以下必要信息: # - SECRET_KEY # - JWT_SECRET_KEY # - DATABASE_URL # - REDIS_URL ``` 6. **启动服务** ```bash # 开发模式 uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload # 生产模式 uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4 ``` ## 🔧 故障排除 ### 常见问题及解决方案 #### 🚫 端口被占用 ```bash # 问题:Address already in use # 解决:查找并终止占用端口的进程 lsof -ti:8000 | xargs kill -9 # 或使用强制启动 ./scripts/start.sh --force ``` #### 🐍 Python版本问题 ```bash # 问题:Python版本过低 # 解决:安装Python 3.9+ brew install python@3.11 # macOS sudo apt install python3.11 # Ubuntu # 验证版本 python3 --version ``` #### 📦 依赖安装失败 ```bash # 问题:pip install失败 # 解决:升级pip并清理缓存 pip install --upgrade pip pip cache purge pip install -e . --no-cache-dir ``` #### 🗄️ 数据库连接失败 ```bash # 问题:Database connection failed # 解决:检查数据库配置 # 1. 验证.env文件中的DATABASE_URL cat .env | grep DATABASE_URL # 2. 测试数据库连接 ./scripts/start.sh diagnose # 3. 检查数据库服务状态 # MySQL sudo systemctl status mysql # Linux brew services list | grep mysql # macOS # 4. 重置数据库连接 export DATABASE_URL="mysql+aiomysql://user:pass@host:port/db" ``` #### 🔐 CORS跨域问题 ```bash # 问题:前端无法访问API # 解决:配置CORS允许的来源 # 编辑.env文件 vim .env # 添加或修改CORS配置 BACKEND_CORS_ORIGINS=["http://localhost:3000","http://127.0.0.1:3000"] # 重启服务 ./scripts/start.sh ``` #### 🔄 服务无响应 ```bash # 问题:服务启动但无法访问 # 解决:检查服务状态 # 1. 检查进程 ps aux | grep uvicorn # 2. 检查端口监听 netstat -tlnp | grep 8000 # 3. 检查防火墙 sudo ufw status # Ubuntu # 4. 测试本地连接 curl http://localhost:8000/health ``` #### 📝 日志查看 ```bash # 查看应用日志 tail -f logs/app.log # 查看错误日志 tail -f logs/error.log # 实时监控所有日志 tail -f logs/*.log ``` ### 🆘 获取帮助 如果以上方案无法解决问题,请: 1. **运行诊断脚本**: ```bash ./scripts/start.sh diagnose ``` 2. **查看详细日志**: ```bash ./scripts/start.sh --debug ``` 3. **检查系统要求**: - Python 3.9+ - 2GB+ RAM - 1GB+ 磁盘空间 - 网络连接正常 4. **提交Issue**: - 包含错误信息 - 系统环境信息 - 复现步骤 ## 🧪 开发指南 uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 # 或使用启动脚本 ./scripts/start_local.sh ``` ### 📋 环境要求 #### Docker部署要求 - **Docker**: 20.10+ - **Docker Compose**: 2.0+ - **系统**: Linux, macOS, Windows (WSL2) - **内存**: 最低 4GB,推荐 8GB+ - **存储**: 最低 20GB 可用空间 #### 传统部署要求 - **操作系统**: Ubuntu 20.04+ / CentOS 8+ / macOS 10.15+ / Windows 10+ - **内存**: 最低 2GB,推荐 4GB+ - **存储**: 最低 10GB 可用空间 - **网络**: 稳定的互联网连接 #### 软件依赖 - **Python**: 3.9+ (推荐 3.11) - **MySQL**: 8.0+ 或 MariaDB 10.6+ - **Redis**: 6.0+ - **Git**: 2.20+ - **Docker**: 20.10+ (可选,推荐用于生产部署) - **Docker Compose**: 2.0+ (可选) ### 🛠️ 环境部署 #### 方式一:本地开发环境 ##### 1. 安装系统依赖 **Ubuntu/Debian:** ```bash # 更新包管理器 sudo apt update && sudo apt upgrade -y # 安装Python和相关工具 sudo apt install -y python3.11 python3.11-venv python3.11-dev python3-pip # 安装MySQL sudo apt install -y mysql-server mysql-client # 安装Redis sudo apt install -y redis-server # 安装其他工具 sudo apt install -y git curl wget build-essential ``` **macOS (使用Homebrew):** ```bash # 安装Homebrew (如果未安装) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 安装依赖 brew install python@3.11 mysql redis git # 启动服务 brew services start mysql brew services start redis ``` **Windows:** ```powershell # 使用Chocolatey安装依赖 choco install python311 mysql redis git # 或者手动下载安装包 # Python: https://www.python.org/downloads/ # MySQL: https://dev.mysql.com/downloads/installer/ # Redis: https://github.com/microsoftarchive/redis/releases ``` ##### 2. 配置数据库 **MySQL配置:** ```bash # 启动MySQL服务 sudo systemctl start mysql # Linux # 或 brew services start mysql # macOS # 安全配置 sudo mysql_secure_installation # 登录MySQL mysql -u root -p # 创建数据库和用户 CREATE DATABASE homeassistant_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'homeassistant'@'localhost' IDENTIFIED BY 'your_secure_password'; GRANT ALL PRIVILEGES ON homeassistant_db.* TO 'homeassistant'@'localhost'; FLUSH PRIVILEGES; EXIT; ``` **Redis配置:** ```bash # 启动Redis服务 sudo systemctl start redis # Linux # 或 brew services start redis # macOS # 测试Redis连接 redis-cli ping # 应该返回 PONG ``` ##### 3. 项目设置 ```bash # 1. 克隆项目 git clone https://github.com/homeassistant/server-pro.git cd homeAssistant-server-pro # 2. 创建Python虚拟环境 python3.11 -m venv venv # 3. 激活虚拟环境 source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows # 4. 升级pip pip install --upgrade pip setuptools wheel # 5. 安装项目依赖 pip install -e ".[dev]" # 6. 安装pre-commit钩子 pre-commit install ``` ##### 4. 环境配置 ```bash # 复制环境变量模板 cp .env.example .env # 编辑环境变量文件 vim .env # 或使用其他编辑器 ``` **重要配置项说明:** ```bash # 应用基础配置 APP_NAME=HomeAssistant Server Pro APP_VERSION=1.0.0 ENVIRONMENT=development DEBUG=true SECRET_KEY=your-super-secret-key-change-this-in-production # 数据库配置 (必须修改) DATABASE_URL=mysql+aiomysql://homeassistant:your_secure_password@localhost:3306/homeassistant_db # Redis配置 REDIS_URL=redis://localhost:6379/0 # JWT配置 (必须修改) JWT_SECRET_KEY=your-jwt-secret-key-change-this-in-production # 邮件配置 (可选) SMTP_HOST=smtp.gmail.com SMTP_USER=your-email@gmail.com SMTP_PASSWORD=your-app-password ``` ##### 5. 数据库初始化 ```bash # 创建数据库迁移文件 alembic revision --autogenerate -m "Initial migration" # 执行数据库迁移 alembic upgrade head # 创建初始管理员用户 (可选) python scripts/create_admin.py ``` ##### 6. 启动开发服务器 ```bash # 方式1: 直接运行 python app/main.py # 方式2: 使用uvicorn uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 # 方式3: 使用开发脚本 python scripts/dev_server.py ``` ##### 7. 验证安装 访问以下地址验证服务是否正常运行: - **API文档 (Swagger)**: http://localhost:8000/docs - **API文档 (ReDoc)**: http://localhost:8000/redoc - **健康检查**: http://localhost:8000/health - **监控指标**: http://localhost:8000/metrics - **OpenAPI Schema**: http://localhost:8000/openapi.json #### 方式二:Docker容器化部署 ##### 1. 安装Docker **Ubuntu/Debian:** ```bash # 安装Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # 安装Docker Compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose # 将用户添加到docker组 sudo usermod -aG docker $USER ``` **macOS:** ```bash # 下载并安装Docker Desktop # https://www.docker.com/products/docker-desktop # 或使用Homebrew brew install --cask docker ``` ##### 2. 使用Docker Compose快速部署 ```bash # 克隆项目 git clone https://github.com/homeassistant/server-pro.git cd homeAssistant-server-pro # 复制环境配置 cp .env.example .env.docker # 编辑Docker环境配置 vim .env.docker # 启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs -f app ``` ##### 3. 单独构建和运行 ```bash # 构建应用镜像 docker build -t homeassistant-server-pro . # 运行MySQL容器 docker run -d --name mysql \ -e MYSQL_ROOT_PASSWORD=rootpassword \ -e MYSQL_DATABASE=homeassistant_db \ -e MYSQL_USER=homeassistant \ -e MYSQL_PASSWORD=password \ -p 3306:3306 \ mysql:8.0 # 运行Redis容器 docker run -d --name redis \ -p 6379:6379 \ redis:7-alpine # 运行应用容器 docker run -d --name homeassistant-app \ --link mysql:mysql \ --link redis:redis \ -p 8000:8000 \ -e DATABASE_URL=mysql+aiomysql://homeassistant:password@mysql:3306/homeassistant_db \ -e REDIS_URL=redis://redis:6379/0 \ homeassistant-server-pro ``` ## 📋 API文档 ### 主要端点 | 模块 | 端点 | 描述 | |------|------|------| | 认证 | `/api/v1/auth/*` | 用户认证相关接口 | | 用户 | `/api/v1/users/*` | 用户管理接口 | | 设备 | `/api/v1/devices/*` | 设备管理接口 | | 场景 | `/api/v1/scenes/*` | 场景自动化接口 | | 通知 | `/api/v1/notifications/*` | 通知系统接口 | | 分析 | `/api/v1/analytics/*` | 数据分析接口 | | 系统 | `/api/v1/system/*` | 系统管理接口 | ### 认证方式 ```bash # 获取访问令牌 curl -X POST "http://localhost:8000/api/v1/auth/login" \ -H "Content-Type: application/json" \ -d '{"email":"user@example.com","password":"password"}' # 使用令牌访问API curl -X GET "http://localhost:8000/api/v1/users/me" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` ## 🧪 测试 ### 运行测试 ```bash # 运行所有测试 pytest # 运行单元测试 pytest tests/unit/ # 运行集成测试 pytest tests/integration/ # 生成覆盖率报告 pytest --cov=app --cov-report=html ``` ### 测试覆盖率 项目目标测试覆盖率: **90%+** ## 🗄️ 数据库管理 ### 数据库脚本准备 #### 1. 数据库迁移管理 项目使用Alembic进行数据库版本控制和迁移管理。 ```bash # 初始化Alembic (仅首次) alembic init alembic # 创建新的迁移文件 alembic revision --autogenerate -m "描述你的更改" # 查看迁移历史 alembic history # 查看当前版本 alembic current # 升级到最新版本 alembic upgrade head # 升级到特定版本 alembic upgrade # 降级到上一个版本 alembic downgrade -1 # 降级到特定版本 alembic downgrade ``` #### 2. 初始化数据脚本 创建 `scripts/init_db.py` 脚本用于初始化基础数据: ```python #!/usr/bin/env python3 """ 数据库初始化脚本 用于创建初始管理员用户和基础配置数据 """ import asyncio from app.core.database import get_db from app.services.user_service import UserService from app.schemas.user import UserCreate async def create_admin_user(): """创建初始管理员用户""" async for db in get_db(): user_service = UserService(db) admin_data = UserCreate( email="admin@homeassistant.com", username="admin", password="admin123", full_name="系统管理员", is_superuser=True ) existing_user = await user_service.get_by_email(admin_data.email) if not existing_user: await user_service.create_user(admin_data) print("✅ 管理员用户创建成功") else: print("ℹ️ 管理员用户已存在") break if __name__ == "__main__": asyncio.run(create_admin_user()) ``` #### 3. 数据备份和恢复脚本 **备份脚本 (`scripts/backup_db.py`):** ```python #!/usr/bin/env python3 """ 数据库备份脚本 """ import os import subprocess from datetime import datetime from app.core.config import settings def backup_database(): """备份MySQL数据库""" timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") backup_file = f"backup/homeassistant_db_{timestamp}.sql" # 确保备份目录存在 os.makedirs("backup", exist_ok=True) # 执行备份命令 cmd = [ "mysqldump", "-h", "localhost", "-u", "homeassistant", "-p", "homeassistant_db" ] with open(backup_file, "w") as f: subprocess.run(cmd, stdout=f, check=True) print(f"✅ 数据库备份完成: {backup_file}") return backup_file if __name__ == "__main__": backup_database() ``` **恢复脚本 (`scripts/restore_db.py`):** ```python #!/usr/bin/env python3 """ 数据库恢复脚本 """ import sys import subprocess def restore_database(backup_file): """从备份文件恢复数据库""" if not os.path.exists(backup_file): print(f"❌ 备份文件不存在: {backup_file}") return False cmd = [ "mysql", "-h", "localhost", "-u", "homeassistant", "-p", "homeassistant_db" ] with open(backup_file, "r") as f: subprocess.run(cmd, stdin=f, check=True) print(f"✅ 数据库恢复完成: {backup_file}") return True if __name__ == "__main__": if len(sys.argv) != 2: print("用法: python restore_db.py ") sys.exit(1) restore_database(sys.argv[1]) ``` ### 数据库性能优化 #### MySQL配置优化 编辑 `/etc/mysql/mysql.conf.d/mysqld.cnf`: ```ini [mysqld] # 基础配置 max_connections = 200 innodb_buffer_pool_size = 1G innodb_log_file_size = 256M innodb_flush_log_at_trx_commit = 2 # 查询缓存 query_cache_type = 1 query_cache_size = 64M # 慢查询日志 slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 字符集 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci ``` #### 索引优化建议 ```sql -- 用户表索引 CREATE INDEX idx_users_email ON users(email); CREATE INDEX idx_users_username ON users(username); CREATE INDEX idx_users_is_active ON users(is_active); -- 设备表索引 CREATE INDEX idx_devices_user_id ON devices(user_id); CREATE INDEX idx_devices_device_type ON devices(device_type); CREATE INDEX idx_devices_status ON devices(status); -- 场景表索引 CREATE INDEX idx_scenes_user_id ON scenes(user_id); CREATE INDEX idx_scenes_is_active ON scenes(is_active); -- 通知表索引 CREATE INDEX idx_notifications_user_id ON notifications(user_id); CREATE INDEX idx_notifications_created_at ON notifications(created_at); CREATE INDEX idx_notifications_is_read ON notifications(is_read); ``` ## 🔧 本地开发规范 ### 开发环境设置 #### 1. IDE配置推荐 **VS Code配置 (`.vscode/settings.json`):** ```json { "python.defaultInterpreterPath": "./venv/bin/python", "python.linting.enabled": true, "python.linting.pylintEnabled": false, "python.linting.flake8Enabled": true, "python.linting.mypyEnabled": true, "python.formatting.provider": "black", "python.formatting.blackArgs": ["--line-length=88"], "python.sortImports.args": ["--profile", "black"], "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.organizeImports": true }, "files.exclude": { "**/__pycache__": true, "**/*.pyc": true } } ``` **PyCharm配置:** - 设置Python解释器为项目虚拟环境 - 启用Black代码格式化 - 配置isort导入排序 - 启用MyPy类型检查 - 设置代码检查规则 #### 2. 代码质量工具配置 **pre-commit配置 (`.pre-commit-config.yaml`):** ```yaml repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-added-large-files - id: check-merge-conflict - repo: https://github.com/psf/black rev: 23.7.0 hooks: - id: black language_version: python3 - repo: https://github.com/pycqa/isort rev: 5.12.0 hooks: - id: isort args: ["--profile", "black"] - repo: https://github.com/pycqa/flake8 rev: 6.0.0 hooks: - id: flake8 args: ["--max-line-length=88", "--extend-ignore=E203,W503"] - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.5.1 hooks: - id: mypy additional_dependencies: [types-all] ``` ### 代码规范 #### 1. Python代码风格 - **代码格式化**: 使用Black (行长度88字符) - **导入排序**: 使用isort (配置为black兼容模式) - **类型注解**: 所有公共函数必须包含类型注解 - **文档字符串**: 使用Google风格的docstring **示例代码:** ```python from typing import List, Optional from datetime import datetime from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.schemas.user import UserResponse, UserCreate from app.services.user_service import UserService class UserController: """用户控制器类。 负责处理用户相关的HTTP请求和响应。 """ def __init__(self, user_service: UserService) -> None: """初始化用户控制器。 Args: user_service: 用户服务实例 """ self.user_service = user_service async def get_users( self, skip: int = 0, limit: int = 100, search: Optional[str] = None, ) -> List[UserResponse]: """获取用户列表。 Args: skip: 跳过的记录数 limit: 返回的记录数限制 search: 搜索关键词 Returns: 用户列表 Raises: HTTPException: 当查询失败时 """ try: users = await self.user_service.get_users( skip=skip, limit=limit, search=search ) return users except Exception as e: raise HTTPException(status_code=500, detail=str(e)) ``` #### 2. 命名规范 - **类名**: PascalCase (例: `UserService`, `DeviceController`) - **函数/方法名**: snake_case (例: `get_user_by_id`, `create_device`) - **变量名**: snake_case (例: `user_id`, `device_status`) - **常量**: UPPER_SNAKE_CASE (例: `MAX_RETRY_COUNT`, `DEFAULT_TIMEOUT`) - **私有属性/方法**: 以单下划线开头 (例: `_internal_method`) - **文件名**: snake_case (例: `user_service.py`, `device_controller.py`) #### 3. 项目结构规范 ``` app/ ├── api/ # API路由层 │ └── v1/ │ ├── endpoints/ # 具体端点实现 │ │ ├── auth.py # 认证相关端点 │ │ ├── users.py # 用户管理端点 │ │ └── devices.py # 设备管理端点 │ └── router.py # 主路由配置 ├── core/ # 核心配置和工具 │ ├── config.py # 应用配置 │ ├── database.py # 数据库连接 │ ├── security.py # 安全相关 │ └── exceptions.py # 异常处理 ├── models/ # 数据模型层 (SQLAlchemy) │ ├── user.py # 用户模型 │ ├── device.py # 设备模型 │ └── base.py # 基础模型 ├── schemas/ # 数据验证层 (Pydantic) │ ├── user.py # 用户Schema │ ├── device.py # 设备Schema │ └── common.py # 通用Schema ├── services/ # 业务逻辑层 │ ├── user_service.py # 用户业务逻辑 │ ├── device_service.py # 设备业务逻辑 │ └── auth_service.py # 认证业务逻辑 ├── repositories/ # 数据访问层 │ ├── user_repository.py # 用户数据访问 │ └── device_repository.py # 设备数据访问 └── utils/ # 工具函数 ├── email.py # 邮件工具 ├── redis.py # Redis工具 └── helpers.py # 通用助手函数 ``` ### Git工作流规范 #### 1. 分支管理策略 采用Git Flow工作流: - **main**: 主分支,用于生产环境部署 - **develop**: 开发分支,用于集成新功能 - **feature/***: 功能分支,用于开发新功能 - **hotfix/***: 热修复分支,用于紧急修复 - **release/***: 发布分支,用于发布准备 #### 2. 提交信息规范 使用[Conventional Commits](https://www.conventionalcommits.org/)规范: ``` [optional scope]: [optional body] [optional footer(s)] ``` **类型说明:** - `feat`: 新功能 - `fix`: Bug修复 - `docs`: 文档更新 - `style`: 代码格式调整 - `refactor`: 代码重构 - `test`: 测试相关 - `chore`: 构建过程或辅助工具的变动 - `perf`: 性能优化 - `ci`: CI/CD相关 **示例:** ``` feat(auth): add JWT token refresh functionality Implement automatic token refresh mechanism to improve user experience. Tokens are refreshed 5 minutes before expiration. Closes #123 ``` #### 3. 开发流程 ```bash # 1. 从develop分支创建功能分支 git checkout develop git pull origin develop git checkout -b feature/user-authentication # 2. 开发功能 # ... 编写代码 ... # 3. 运行代码检查和测试 pre-commit run --all-files pytest # 4. 提交代码 git add . git commit -m "feat(auth): implement user authentication system" # 5. 推送分支 git push origin feature/user-authentication # 6. 创建Pull Request # 在GitHub/GitLab上创建PR,请求合并到develop分支 # 7. 代码审查通过后合并 # 删除功能分支 git checkout develop git pull origin develop git branch -d feature/user-authentication ``` ### 测试规范 #### 1. 测试结构 ``` tests/ ├── unit/ # 单元测试 │ ├── test_services/ # 服务层测试 │ ├── test_repositories/ # 数据访问层测试 │ └── test_utils/ # 工具函数测试 ├── integration/ # 集成测试 │ ├── test_api/ # API集成测试 │ └── test_database/ # 数据库集成测试 ├── fixtures/ # 测试数据 ├── conftest.py # pytest配置 └── __init__.py ``` #### 2. 测试编写规范 ```python import pytest from httpx import AsyncClient from sqlalchemy.ext.asyncio import AsyncSession from app.main import app from app.core.database import get_db from app.models.user import User from app.schemas.user import UserCreate class TestUserService: """用户服务测试类。""" @pytest.mark.asyncio async def test_create_user_success( self, db_session: AsyncSession ) -> None: """测试成功创建用户。""" # Arrange user_data = UserCreate( email="test@example.com", username="testuser", password="password123", full_name="Test User" ) # Act user_service = UserService(db_session) created_user = await user_service.create_user(user_data) # Assert assert created_user.email == user_data.email assert created_user.username == user_data.username assert created_user.full_name == user_data.full_name assert created_user.id is not None @pytest.mark.asyncio async def test_create_user_duplicate_email( self, db_session: AsyncSession ) -> None: """测试创建重复邮箱用户失败。""" # Arrange user_data = UserCreate( email="duplicate@example.com", username="user1", password="password123" ) # Act & Assert user_service = UserService(db_session) await user_service.create_user(user_data) with pytest.raises(ValueError, match="Email already exists"): await user_service.create_user(user_data) ``` #### 3. 测试运行 ```bash # 运行所有测试 pytest # 运行特定测试文件 pytest tests/unit/test_services/test_user_service.py # 运行特定测试类 pytest tests/unit/test_services/test_user_service.py::TestUserService # 运行特定测试方法 pytest tests/unit/test_services/test_user_service.py::TestUserService::test_create_user_success # 生成覆盖率报告 pytest --cov=app --cov-report=html --cov-report=term # 并行运行测试 pytest -n auto # 详细输出 pytest -v # 只运行失败的测试 pytest --lf ``` ## 🚀 部署指南 ### 生产环境部署 #### 1. 服务器要求 - **操作系统**: Ubuntu 20.04+ / CentOS 8+ - **内存**: 最低4GB,推荐8GB+ - **CPU**: 最低2核,推荐4核+ - **存储**: 最低50GB SSD - **网络**: 稳定的互联网连接 #### 2. 环境准备 ```bash # 更新系统 sudo apt update && sudo apt upgrade -y # 安装必要软件 sudo apt install -y python3.11 python3.11-venv python3-pip sudo apt install -y mysql-server redis-server nginx sudo apt install -y git curl wget # 配置防火墙 sudo ufw allow 22 sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable ``` #### 3. 应用部署 ```bash # 创建应用用户 sudo useradd -m -s /bin/bash homeassistant sudo usermod -aG sudo homeassistant # 切换到应用用户 sudo su - homeassistant # 克隆项目 git clone https://github.com/your-org/homeassistant-server-pro.git cd homeassistant-server-pro # 创建虚拟环境 python3.11 -m venv venv source venv/bin/activate # 安装依赖 pip install -r requirements.txt # 配置环境变量 cp .env.example .env # 编辑 .env 文件,设置生产环境配置 # 初始化数据库 alembic upgrade head python scripts/init_db.py ``` #### 4. 系统服务配置 创建systemd服务文件 `/etc/systemd/system/homeassistant.service`: ```ini [Unit] Description=HomeAssistant Server Pro After=network.target mysql.service redis.service [Service] Type=exec User=homeassistant Group=homeassistant WorkingDirectory=/home/homeassistant/homeassistant-server-pro Environment=PATH=/home/homeassistant/homeassistant-server-pro/venv/bin ExecStart=/home/homeassistant/homeassistant-server-pro/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4 Restart=always RestartSec=3 [Install] WantedBy=multi-user.target ``` 启动服务: ```bash sudo systemctl daemon-reload sudo systemctl enable homeassistant sudo systemctl start homeassistant sudo systemctl status homeassistant ``` ### Docker部署 #### 1. 单容器部署 ```bash # 构建镜像 docker build -t homeassistant-server-pro . # 运行容器 docker run -d \ --name homeassistant-server \ -p 8000:8000 \ -e DATABASE_URL="mysql+aiomysql://user:password@host:3306/dbname" \ -e REDIS_URL="redis://host:6379" \ homeassistant-server-pro ``` #### 2. Docker Compose部署 ```yaml # docker-compose.yml version: '3.8' services: app: build: . ports: - "8000:8000" environment: - DATABASE_URL=mysql+aiomysql://homeassistant:password@mysql:3306/homeassistant_db - REDIS_URL=redis://redis:6379 depends_on: - mysql - redis restart: unless-stopped mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: homeassistant_db MYSQL_USER: homeassistant MYSQL_PASSWORD: password volumes: - mysql_data:/var/lib/mysql restart: unless-stopped redis: image: redis:7-alpine restart: unless-stopped nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl depends_on: - app restart: unless-stopped volumes: mysql_data: ``` ### 反向代理配置 #### Nginx配置 创建 `/etc/nginx/sites-available/homeassistant`: ```nginx server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your-domain.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } location /ws { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` 启用站点: ```bash sudo ln -s /etc/nginx/sites-available/homeassistant /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` ### 监控和日志 #### 1. 应用监控 使用Prometheus + Grafana进行监控: ```yaml # docker-compose.monitoring.yml version: '3.8' services: prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' grafana: image: grafana/grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana_data:/var/lib/grafana volumes: prometheus_data: grafana_data: ``` #### 2. 日志管理 配置日志轮转 `/etc/logrotate.d/homeassistant`: ``` /var/log/homeassistant/*.log { daily missingok rotate 30 compress delaycompress notifempty create 644 homeassistant homeassistant postrotate systemctl reload homeassistant endscript } ``` ## 🔒 安全配置 ### 1. 应用安全 #### JWT安全配置 ```python # app/core/config.py class Settings(BaseSettings): # JWT配置 SECRET_KEY: str = secrets.token_urlsafe(32) ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 30 REFRESH_TOKEN_EXPIRE_DAYS: int = 7 # 密码策略 MIN_PASSWORD_LENGTH: int = 8 REQUIRE_UPPERCASE: bool = True REQUIRE_LOWERCASE: bool = True REQUIRE_NUMBERS: bool = True REQUIRE_SPECIAL_CHARS: bool = True # 安全头配置 CORS_ORIGINS: List[str] = ["https://yourdomain.com"] CORS_ALLOW_CREDENTIALS: bool = True CORS_ALLOW_METHODS: List[str] = ["GET", "POST", "PUT", "DELETE"] CORS_ALLOW_HEADERS: List[str] = ["*"] ``` #### 速率限制 ```python # app/middleware/rate_limit.py from slowapi import Limiter, _rate_limit_exceeded_handler from slowapi.util import get_remote_address from slowapi.errors import RateLimitExceeded limiter = Limiter(key_func=get_remote_address) app.state.limiter = limiter app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) # 在路由中使用 @router.post("/login") @limiter.limit("5/minute") async def login(request: Request, user_data: UserLogin): # 登录逻辑 pass ``` ### 2. 数据库安全 #### MySQL安全配置 ```sql -- 创建专用数据库用户 CREATE USER 'homeassistant'@'localhost' IDENTIFIED BY 'strong_password'; GRANT SELECT, INSERT, UPDATE, DELETE ON homeassistant_db.* TO 'homeassistant'@'localhost'; FLUSH PRIVILEGES; -- 禁用root远程登录 DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); -- 删除匿名用户 DELETE FROM mysql.user WHERE User=''; -- 删除测试数据库 DROP DATABASE IF EXISTS test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; FLUSH PRIVILEGES; ``` ### 3. 服务器安全 #### 防火墙配置 ```bash # UFW配置 sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable # 限制SSH访问 sudo ufw limit ssh ``` #### SSL/TLS配置 ```bash # 使用Let's Encrypt获取SSL证书 sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com # 自动续期 sudo crontab -e # 添加以下行 0 12 * * * /usr/bin/certbot renew --quiet ``` ## 🛠️ 故障排除 ### 常见问题及解决方案 #### 1. 数据库连接问题 **问题**: `sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server")` **解决方案**: ```bash # 检查MySQL服务状态 sudo systemctl status mysql # 重启MySQL服务 sudo systemctl restart mysql # 检查数据库配置 mysql -u homeassistant -p -e "SELECT 1;" # 检查网络连接 telnet localhost 3306 ``` #### 2. Redis连接问题 **问题**: `redis.exceptions.ConnectionError: Error connecting to Redis` **解决方案**: ```bash # 检查Redis服务状态 sudo systemctl status redis # 重启Redis服务 sudo systemctl restart redis # 测试Redis连接 redis-cli ping # 检查Redis配置 sudo nano /etc/redis/redis.conf ``` #### 3. 应用启动失败 **问题**: 应用无法启动或频繁重启 **解决方案**: ```bash # 查看应用日志 sudo journalctl -u homeassistant -f # 检查应用配置 source venv/bin/activate python -c "from app.core.config import settings; print(settings)" # 手动启动应用进行调试 cd /home/homeassistant/homeassistant-server-pro source venv/bin/activate uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload ``` #### 4. 内存不足 **问题**: 应用因内存不足被系统杀死 **解决方案**: ```bash # 检查内存使用情况 free -h top -p $(pgrep -f "uvicorn") # 配置swap空间 sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久启用swap echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab # 优化应用配置 # 减少worker数量或调整内存使用 ``` #### 5. 性能问题 **问题**: API响应缓慢 **解决方案**: ```bash # 检查数据库性能 mysql -u root -p -e "SHOW PROCESSLIST;" mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G" # 启用慢查询日志 sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # 添加: # slow_query_log = 1 # slow_query_log_file = /var/log/mysql/slow.log # long_query_time = 2 # 重启MySQL sudo systemctl restart mysql # 分析慢查询 sudo mysqldumpslow /var/log/mysql/slow.log ``` ### 监控和告警 #### 1. 系统监控脚本 创建 `scripts/health_check.py`: ```python #!/usr/bin/env python3 """ 系统健康检查脚本 """ import asyncio import aiohttp import asyncio from datetime import datetime async def check_api_health(): """检查API健康状态""" try: async with aiohttp.ClientSession() as session: async with session.get('http://localhost:8000/health') as response: if response.status == 200: print(f"✅ API健康检查通过 - {datetime.now()}") return True else: print(f"❌ API健康检查失败 - 状态码: {response.status}") return False except Exception as e: print(f"❌ API健康检查异常: {e}") return False async def check_database_connection(): """检查数据库连接""" try: from app.core.database import get_db async for db in get_db(): await db.execute("SELECT 1") print(f"✅ 数据库连接正常 - {datetime.now()}") return True except Exception as e: print(f"❌ 数据库连接失败: {e}") return False async def main(): """主检查函数""" api_ok = await check_api_health() db_ok = await check_database_connection() if api_ok and db_ok: print("🎉 所有检查通过") exit(0) else: print("💥 系统存在问题") exit(1) if __name__ == "__main__": asyncio.run(main()) ``` #### 2. 自动化监控 创建cron任务进行定期检查: ```bash # 编辑crontab crontab -e # 添加以下任务 # 每5分钟检查一次系统健康状态 */5 * * * * /home/homeassistant/homeassistant-server-pro/venv/bin/python /home/homeassistant/homeassistant-server-pro/scripts/health_check.py >> /var/log/homeassistant/health_check.log 2>&1 # 每天凌晨2点备份数据库 0 2 * * * /home/homeassistant/homeassistant-server-pro/venv/bin/python /home/homeassistant/homeassistant-server-pro/scripts/backup_db.py >> /var/log/homeassistant/backup.log 2>&1 # 每周日凌晨3点清理旧日志 0 3 * * 0 find /var/log/homeassistant/ -name "*.log" -mtime +30 -delete ``` ### 性能优化 #### 1. 应用层优化 ```python # app/core/config.py class Settings(BaseSettings): # 数据库连接池配置 DB_POOL_SIZE: int = 20 DB_MAX_OVERFLOW: int = 30 DB_POOL_TIMEOUT: int = 30 DB_POOL_RECYCLE: int = 3600 # Redis连接池配置 REDIS_POOL_SIZE: int = 10 REDIS_POOL_TIMEOUT: int = 5 # 缓存配置 CACHE_TTL: int = 300 # 5分钟 CACHE_MAX_SIZE: int = 1000 ``` #### 2. 数据库优化 ```sql -- 创建必要的索引 CREATE INDEX idx_users_email_active ON users(email, is_active); CREATE INDEX idx_devices_user_status ON devices(user_id, status); CREATE INDEX idx_notifications_user_read_created ON notifications(user_id, is_read, created_at); -- 分析表统计信息 ANALYZE TABLE users, devices, scenes, notifications; -- 优化表结构 OPTIMIZE TABLE users, devices, scenes, notifications; ``` #### 3. 缓存策略 ```python # app/services/cache_service.py from functools import wraps import json from typing import Any, Callable from app.core.redis import redis_client def cache_result(ttl: int = 300, key_prefix: str = ""): """缓存装饰器""" def decorator(func: Callable) -> Callable: @wraps(func) async def wrapper(*args, **kwargs) -> Any: # 生成缓存键 cache_key = f"{key_prefix}:{func.__name__}:{hash(str(args) + str(kwargs))}" # 尝试从缓存获取 cached_result = await redis_client.get(cache_key) if cached_result: return json.loads(cached_result) # 执行函数并缓存结果 result = await func(*args, **kwargs) await redis_client.setex( cache_key, ttl, json.dumps(result, default=str) ) return result return wrapper return decorator # 使用示例 @cache_result(ttl=600, key_prefix="user") async def get_user_profile(user_id: int): # 获取用户资料的逻辑 pass ``` ## 🤝 贡献指南 我们欢迎所有形式的贡献! ### 如何贡献 1. Fork 项目 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建 Pull Request ### 报告问题 如果发现bug或有功能建议,请[创建Issue](https://github.com/homeassistant/server-pro/issues)。 ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 🙏 致谢 感谢所有为这个项目做出贡献的开发者! ## 📞 联系我们 - 项目主页: https://github.com/homeassistant/server-pro - 文档: https://docs.homeassistant.com - 邮箱: team@homeassistant.com - 社区: [Discord](https://discord.gg/homeassistant) --- ⭐ 如果这个项目对你有帮助,请给我们一个星标!