# MijiaPilot [中文](README.md) | [English](README_EN.md) | [日本語](README_JA.md) | [한국어](README_KO.md) | [Español](README_ES.md) [](https://glama.ai/mcp/servers/handsomejustin/mijia-control) [](https://github.com/handsomejustin/mijia-control/blob/main/LICENSE) [](https://www.python.org/) [](https://github.com/handsomejustin/mijia-control) [](https://flask.palletsprojects.com/) [](https://github.com/handsomejustin/mijia-control) [](https://github.com/handsomejustin/mijia-control/issues) [](https://github.com/handsomejustin/mijia-control) 米家 小米生态 × MCP x CLI × AI Agent × HomeKit 全桥接智能家居平台。 ## Changelog ### v1.0.3 (2026-05-14) - **fix**: `SQLALCHEMY_DATABASE_URI` 增加 SQLite 默认值(`sqlite:///mijia.db`),未设置 `DATABASE_URL` 时不再崩溃 - **fix**: Werkzeug 3.1+ 安全限制,`run.py` 添加 `allow_unsafe_werkzeug=True` 保障开发环境启动 > **升级注意**:如果你之前使用 MySQL,不受影响。SQLite 仅在未配置 `DATABASE_URL` 时作为 fallback。 > 若从 MySQL 首次切换到 SQLite(或新建 SQLite 数据库),需要执行 `flask db upgrade` 创建表, > 并通过 Web 界面或 `/api/auth/register` 注册用户,再绑定小米账号后方可使用设备控制功能。 ### v1.0.2 (2026-05-13) - **fix**: 修复 Jinja2 `search` 测试不存在导致的 500 错误 ### v1.0.1 - **feat**: 专属设备控制页模板(灯光、取暖器、空调伴侣、传感器、开关、摄像头) - **feat**: 通用设备控制页使用共享组件和更好的 UI ### v1.0.0 - 初始发布 > **致谢**:本项目底层使用了 [Do1e/mijia-api](https://github.com/Do1e/mijia-api)(mijiaAPI v3.0+)提供的 Python SDK, > 用于与小米云端进行设备通信、属性读写和场景执行。感谢原作者的开源贡献。 ## 演示   ## 功能特性 - **Web 管理界面** — 设备控制、家庭/场景管理、能耗统计、自动化规则、深色模式、移动端适配 - **RESTful API** — JWT 认证,完整的 Swagger 文档(`/api/docs/`),支持第三方集成 - **CLI 工具** — `mijia-control` 命令行,支持登录、设备列表、属性读写、场景执行 - **实时通信** — SocketIO 推送设备状态变更 - **设备分组/收藏** — 自定义分组管理设备,快速收藏常用设备 - **定时自动化规则** — 支持 cron、interval、日出/日落等触发方式 - **能耗统计仪表板** — 按设备记录和展示能耗数据(日/小时粒度) - **API Token 管理** — 为第三方应用创建和管理访问令牌 - **MCP Server** — 内置 MCP 协议支持,Claude Code / Hermes Agent 等 AI Agent 可直接调用 - **HomeKit 桥接** — 通过 Apple 家庭 App 和 Siri 控制米家设备,支持灯光、插座、传感器、温控器等 - **BLE 蓝牙传感器** — PC 蓝牙直连小米 BLE 温湿度计,本地实时数据采集,支持自动化联动 - **多用户 & 权限** — 用户注册登录、管理员后台、限流保护 ## 技术栈 | 层级 | 技术 | |------|------| | Web 框架 | Flask 3.0+ | | ORM & 迁移 | SQLAlchemy + Flask-Migrate (Alembic) | | 数据库 | MySQL (pymysql) | | 认证 | Flask-Login (Session) + Flask-JWT-Extended (API) | | CSRF 保护 | Flask-WTF | | 限流 | Flask-Limiter | | 实时通信 | Flask-SocketIO | | API 文档 | Flasgger (Swagger UI) | | 序列化/校验 | Marshmallow | | 米家 SDK | [mijiaAPI](https://github.com/Do1e/mijia-api) >= 3.0 | | MCP 协议 | [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) >= 1.6 | | HomeKit | [HAP-Python](https://github.com/ikalchev/HAP-python) >= 5.0 | | BLE 扫描 | [bleak](https://github.com/hbldh/bleak) >= 0.22 | | 代码质量 | Ruff (lint + format) | | 测试 | pytest | ## 项目结构 ``` ├── app/ │ ├── __init__.py # Flask 应用工厂 │ ├── extensions.py # 扩展实例(db, jwt, csrf, socketio...) │ ├── api/ # REST API 蓝图 (JWT 认证) │ ├── web/ # Web UI 蓝图 (Session + CSRF 认证) │ ├── services/ # 业务逻辑层 │ ├── models/ # SQLAlchemy 数据模型 │ ├── schemas/ # Marshmallow 序列化/校验 │ ├── utils/ # MijiaAPI 适配器、统一响应、装饰器 │ ├── cli/ # Click CLI 命令 │ ├── homekit/ # HomeKit Bridge(Apple 家庭桥接) │ └── ble/ # BLE 蓝牙传感器守护进程(独立进程) ├── mcp_server/ # MCP Server(AI Agent 工具) ├── config/ # Flask 配置(development/testing/production) ├── migrations/ # Alembic 数据库迁移脚本 ├── tests/ # pytest 测试 ├── run.py # 开发服务器入口 ├── docs/ # 详细文档(HomeKit、API 等) └── pyproject.toml # 项目配置 & 依赖 ``` ## 快速开始 ### 1. 环境准备 - Python 3.10+ - MySQL 5.7+ ### 2. 安装 ```bash # 克隆本项目 git clone https://github.com/handsomejustin/mijia-control.git cd mijia-control # 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows # 安装依赖(mijiaAPI 会作为依赖自动安装) pip install -e ".[dev]" ``` ### 3. 配置 复制 `.env.example` 为 `.env` 并填写实际配置: ```bash cp .env.example .env ``` ```env FLASK_APP=app:create_app FLASK_ENV=development SECRET_KEY=your-secret-key-here DATABASE_URL=mysql+pymysql://user:password@127.0.0.1:3306/mijia JWT_SECRET_KEY=your-jwt-secret-key-here GO2RTC_URL=http://127.0.0.1:1984 ``` ### 4. 初始化数据库 ```bash # 创建 MySQL 数据库 mysql -u root -p -e "CREATE DATABASE mijia CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # 执行迁移 flask db upgrade ``` ### 5. 启动 ```bash python run.py ``` 访问 http://127.0.0.1:5000 ,注册账号后即可使用。 ## API 概览 | 模块 | 路径前缀 | 说明 | |------|----------|------| | 认证 (Session) | `/api/auth/` | 注册、登录、登出、修改密码 | | 认证 (JWT) | `/api/auth-jwt/` | JWT 登录、刷新令牌 | | 小米账号绑定 | `/api/xiaomi/` | 二维码绑定、状态查询、解绑 | | 设备管理 | `/api/devices/` | 设备列表、属性读写、动作执行、摄像头流 | | 家庭管理 | `/api/homes/` | 家庭列表、详情 | | 场景执行 | `/api/scenes/` | 场景列表、执行 | | 设备分组 | `/api/groups/` | 分组 CRUD、收藏管理 | | 自动化规则 | `/api/automations/` | 定时规则 CRUD、启用/禁用 | | 能耗统计 | `/api/energy/` | 能耗记录、日/小时/最新查询 | | BLE 传感器 | `/api/ble/` | BLE 设备注册、数据上报、历史查询 | | API Token | `/api/tokens/` | 令牌管理(第三方集成) | 完整 API 文档:启动后访问 `/api/docs/`。 ## MCP Server(AI Agent 集成) 内置 MCP Server,支持 Claude Code、Hermes Agent、OpenClaw 等任何兼容 MCP 协议的 AI Agent 直接控制米家设备。 ### 安装 ```bash pip install -e ".[mcp]" ``` ### 配置 首先确保 Web 服务已启动(`python run.py`),然后获取 Token: ```bash # 方式一:CLI 登录(推荐,自动保存 Token) mijia-control login # 方式二:API 登录获取 curl -X POST http://127.0.0.1:5000/api/auth/jwt/login \ -H "Content-Type: application/json" \ -d '{"username": "你的用户名", "password": "你的密码"}' # 返回的 access_token 即为 MIJIA_TOKEN ``` 设置环境变量: ```bash # Linux / macOS export MIJIA_API_URL=http://127.0.0.1:5000/api export MIJIA_TOKEN=eyJhbGci... # 上一步获取的 access_token # Windows (PowerShell) $env:MIJIA_API_URL = "http://127.0.0.1:5000/api" $env:MIJIA_TOKEN = "eyJhbGci..." # Windows (CMD) set MIJIA_API_URL=http://127.0.0.1:5000/api set MIJIA_TOKEN=eyJhbGci... ``` ### Claude Code 中使用 ```bash # 注册 MCP 服务器 claude mcp add mijia -- python -m mcp_server # 之后在对话中直接使用 # "帮我把客厅的灯关掉" # "查看所有设备的在线状态" # "执行回家场景" ``` ### 可用工具 | 工具 | 功能 | |------|------| | `list_devices` | 列出所有设备 | | `get_device` | 查看设备详情与规格 | | `get_property` | 读取设备属性 | | `set_property` | 设置设备属性(控制设备) | | `run_action` | 执行设备动作 | | `list_scenes` | 列出场景 | | `run_scene` | 执行场景 | | `list_homes` | 列出家庭 | | `get_home` | 查看家庭详情 | | `list_ble_devices` | 列出 BLE 传感器设备 | | `get_ble_sensor` | 获取 BLE 传感器最新数据 | | `get_ble_readings` | 查询 BLE 传感器历史读数 | ## HomeKit Bridge(Apple 家庭 & Siri 控制) 通过 HAP-Python 实现 HomeKit 桥接,让 iPhone、Mac 用户在 Apple 家庭 App 和 Siri 中直接控制米家设备。 ### 架构 ``` Apple 家庭 / Siri → HomeKit Bridge (HAP-Python) → Flask REST API → 米家设备 独立进程,端口 51826 python run.py ``` ### 安装 ```bash pip install -e ".[homekit]" ``` > **Windows 用户**:需要安装 [Bonjour Print Services](https://developer.apple.com/bonjour/) 或使用 Docker 运行 Bridge。 ### 配置 在 `.env` 中添加(或直接设置环境变量): ```env HOMEKIT_ENABLED=true HOMEKIT_PORT=51826 HOMEKIT_PIN=123-45-678 ``` 确保 Web 服务已启动并获取 JWT Token(与 MCP Server 相同的 `MIJIA_TOKEN`)。 ### 启动 ```bash # 先启动 Web 服务 python run.py # 再启动 HomeKit Bridge(另一个终端) python -m app.homekit ``` ### 配对 1. 确保手机和电脑在同一局域网 2. iPhone → 家庭 App → 添加设备 → 扫描终端显示的 QR 码,或手动输入 PIN 3. 配对成功后,设备会以「米家智能家居」桥接器的形式出现 ### iPhone 家庭 App 效果