Skip to content
Justin Gu edited this page May 2, 2026 · 2 revisions

常见问题(FAQ)

安装与启动

Q: pip install -e ".[dev]" 报错找不到 mijiaAPI

确保网络可以访问 PyPI。mijiaAPI 3.0+ 会作为依赖自动安装。如果安装失败,尝试:

pip install --upgrade pip
pip install mijiaAPI>=3.0
pip install -e ".[dev]"

Q: 启动报错 ModuleNotFoundError: No module named 'app'

确保在项目根目录(mijia-control/)下运行命令,且虚拟环境已激活。

Q: 启动报错 KeyError 或数据库连接失败

检查 .env 文件是否正确配置:

  1. 确认 .env 文件存在于项目根目录
  2. 检查 DATABASE_URL 中的用户名、密码、主机和端口
  3. 确认 MySQL 服务已启动
  4. 确认数据库已创建:
    mysql -u root -p -e "SHOW DATABASES LIKE 'mijia';"

Q: flask db upgrade 报错

常见原因:

  • 数据库不存在 → 先创建数据库(见 Installation
  • 连接信息错误 → 检查 .env 中的 DATABASE_URL
  • 权限不足 → 确认 MySQL 用户有 CREATE/ALTER 权限

Q: Windows 下 mijia-control 命令找不到

激活虚拟环境后命令才可用:

venv\Scripts\activate
mijia-control --help

或将 venv\Scripts 目录添加到系统 PATH。


小米账号绑定

Q: 扫码绑定提示失败

  • 确保使用小米账号(非小米商城账号)扫码
  • 使用米家 App 扫码,不要用微信/支付宝扫
  • 二维码有效期约 5 分钟,超时后重新生成

Q: 绑定后看不到设备

  • 确认米家 App 中设备在线
  • 尝试强制刷新:Web UI 中点击刷新按钮,或 API 加 ?refresh=true
  • 首次同步可能需要几秒钟

Q: Token 过期了怎么办

小米账号 Token 会定期过期,系统会自动尝试续期。如果持续失败:

  1. Web UI 中解绑小米账号
  2. 重新扫码绑定

设备控制

Q: 设备显示离线但米家 App 中在线

  • 米家云端数据有缓存,尝试 API 加 ?refresh=true 强制刷新
  • 网络延迟可能导致短暂不一致,稍后重试

Q: 设置属性返回 403(属性不可写)

部分属性是只读的(如传感器数据、设备状态)。通过以下方式查看可写属性:

# CLI 查看设备完整规格
mijia-control device show <did>

# 或 API
GET /api/devices/<did>

返回的 spec 中会标注每个属性的读写权限。

Q: 设备操作超时(504)

  • 确认设备在线且网络正常
  • 部分设备响应较慢,重试一次
  • 蓝牙设备需要网关附近才能控制

Q: 摄像头画面无法显示

  • 确认 go2rtc 服务已启动并正确配置
  • 检查 .env 中的 GO2RTC_URL 是否正确
  • 参考 go2rtc.yaml.example 配置摄像头信息

HomeKit 桥接

Q: HomeKit Bridge 启动报错 未设置 MIJIA_TOKEN

需要先获取 JWT Token 并设置为环境变量:

mijia-control login
# 然后设置环境变量
export MIJIA_TOKEN=$(cat ~/.config/mijia-control/token.json | python -c "import sys,json;print(json.load(sys.stdin)['token'])")

详见 HomeKit Bridge

Q: iPhone 家庭 App 找不到 Bridge

  • 确保手机和电脑在同一局域网
  • Windows 用户需安装 Bonjour Print Services
  • 确认端口 51826 未被占用
  • 尝试手动输入 PIN 码 123-45-678

Q: 某个设备映射类型不正确

创建 homekit_mapping.yaml 手动指定:

devices:
  你的设备model: light    # 可选: light, outlet, switch, thermostat, heater, ignored

修改后重启 Bridge 即可生效,不需要重新配对。

Q: 设备属性读取报 500 错误

Bridge 会自动从 spec_data 发现正确的属性名。如果设备缺少 spec_data,Bridge 会自动调用详情 API 补充。确保 Flask API 服务正常运行。

Q: 状态同步有延迟

HomeKit → 米家的控制是实时的,米家 → HomeKit 的状态同步依赖 10 秒间隔的轮询,延迟约 3-10 秒,属于正常现象。

Q: Bridge 重启后需要重新配对吗

不需要。配对信息保存在 homekit.state 文件中。只要此文件存在,重启后自动恢复配对。如果删除了此文件,则需要重新配对。

Q: Bridge 提示端口被占用

# 查看端口占用(Linux/Mac)
lsof -i :51826

# Windows
netstat -ano | findstr 51826

或修改 .env 中的 HOMEKIT_PORT 使用其他端口。


API 与认证

Q: JWT Token 有效期多久

  • access_token:24 小时
  • refresh_token:7 天

Token 过期后使用 refresh_token 获取新的 access_token:

curl -X POST http://127.0.0.1:5000/api/auth/jwt/refresh \
  -H "Authorization: Bearer <refresh_token>"

Q: API 返回 429(Too Many Requests)

触发了限流保护。默认限制:

  • 全局:200 次/天,50 次/小时
  • 登录/注册:5 次/分钟

等待一段时间后重试,或联系管理员调整限流配置。

Q: Swagger 文档页面无法访问

确保 FLASK_ENV 不为 testing(测试环境禁用 Swagger)。访问地址:

http://127.0.0.1:5000/api/docs/

部署

Q: 生产环境如何部署

# 使用 gunicorn + eventlet worker
pip install gunicorn eventlet
gunicorn --worker-class eventlet -w 1 -b 0.0.0.0:5000 "app:create_app()[0]"

建议配合 Nginx 反向代理,启用 HTTPS。

Q: 如何启用 HTTPS

在 Nginx 配置 SSL 证书,反向代理到 Flask:

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:5000;
        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;
    }

    # SocketIO 支持
    location /socket.io/ {
        proxy_pass http://127.0.0.1:5000/socket.io/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Q: 数据库连接池问题

配置已内置连接池管理(config/__init__.py):

  • pool_recycle=3600 — 每小时回收连接
  • pool_pre_ping=True — 使用前检测连接有效性

如果仍有连接超时,检查 MySQL 的 wait_timeout 配置。


其他

Q: 支持哪些米家设备

底层使用 mijiaAPI,支持所有在米家平台上注册的设备。具体可用的属性和动作取决于设备型号,可通过 device show 命令查看。

Q: 支持多用户吗

支持。每个用户独立绑定自己的小米账号,设备数据互不干扰。管理员可通过后台管理用户。

Q: 数据存储在哪里

  • 用户数据、Token、自动化规则等:MySQL 数据库
  • CLI Token:~/.config/mijia-control/token.json
  • 小米账号认证数据:数据库中的 auth_data 字段
  • 设备规格缓存:instance/spec_cache/ 目录

Q: 如何备份数据

# 备份 MySQL 数据库
mysqldump -u root -p mijia > mijia_backup_$(date +%Y%m%d).sql

# 恢复
mysql -u root -p mijia < mijia_backup_20260502.sql

Q: 遇到其他问题

  1. 查看服务日志输出
  2. GitHub Issues 搜索或提交问题
  3. 提交 Issue 时请附上:错误信息、.env 配置(去除密钥)、操作步骤

返回 Home

Clone this wiki locally