profileName: youpingfang postId: 268 postType: post categories:
- 8
终端控制,节约了一个小爱同学的钱!
mit 是一款使用 Rust 编写的轻量级小米智能家居 CLI 工具,无需打开 App,即可在终端中登录小米账号、浏览并控制智能设备、发送推送通知。
免责声明: 本项目为社区维护工具,与小米公司无隶属关系,未获得小米官方认可或授权。
功能特性
- 全屏 TUI — 键盘驱动,浏览账号、房间和设备,读写 MIoT 属性,触发 Action
- 本地优先局域网控制 — 自动探测设备本地 IP 和 token,优先走局域网 UDP/MIIO 协议,不可达时无缝回退到云端
- CLI 属性操作 — 不启动 TUI 直接读写设备属性、触发 Action
- 推送通知 — 向任意已登录的小米账号发送消息
- 多账号 — 支持不同区域的多个账号同时登录
- JSON 输出 — 所有命令均支持
--json模式,方便脚本和自动化集成
演示
| 发送推送通知 | 读写设备属性 | TUI(移动端视图) |
|---|---|---|
![]() |
![]() |
![]() |
安装
一键安装(macOS / Linux):
curl -sSfL https://raw.githubusercontent.com/ttys026/mit/main/install.sh | sh
脚本会自动检测平台、下载最新预编译二进制文件、校验 SHA-256 完整性,并安装到 /usr/local/bin(若无写权限则安装到 ~/.local/bin)。
从源码构建(需要 Rust ≥ 1.75):
cargo install --git https://github.com/ttys026/mit.git --bin mit
自定义安装目录:
INSTALL_DIR=~/.local/bin curl -sSfL https://raw.githubusercontent.com/ttys026/mit/main/install.sh | sh
支持平台
| 平台 | x86_64 | aarch64 |
|---|---|---|
| Linux (musl) | ✅ | ✅ |
| Linux (glibc) | ✅ | ✅ |
| macOS | ✅ | ✅ |
| Windows | ✅ | ✅ |
快速开始
# 1. 登录小米账号
mit auth login
# 2. 查看设备列表
mit devices list
# 3. 启动全屏 TUI
mit tui
命令一览
# 查看帮助
mit
mit --help
# ── 账号管理 ────────────────────────────────────────────────
mit auth login # 浏览器登录
mit auth login --region cn # 指定区域登录
mit auth list # 列出已保存的账号
# ── TUI ───────────────────────────────────────────────────
mit tui # 启动全屏控制台
mit tui --uid 1234567 # 以指定账号启动
# ── 设备 ───────────────────────────────────────────────────
mit devices list # 列出所有账号下的设备
# ── 推送通知 ────────────────────────────────────────────────
mit push "Hello World" # 向所有账号推送
mit push --uid 1001 "Hello World" # 向指定账号推送
# ── MIoT 属性与 Action(无需 TUI)─────────────────────────
mit props get did-1 2 1 # 读取属性(siid=2, piid=1)
mit props set did-1 2 1 true # 写入属性
mit props act did-1 5 1 1 2 # 触发 Action 并传入参数
说明
- 浏览器完成授权后,
mit auth login会自动完成认证,并在浏览器中显示成功页面。 mit props get/set/act可以直接使用,无需进入 TUI。mit tui会同步设备并将 MIoT 规格缓存到~/.mit/cache/specs/。- 直接运行
mit auth兼容mit auth --help的帮助展示行为。 - 直接运行
mit devices兼容mit devices --help的帮助展示行为。
全屏 TUI
全屏 TUI(Text-based User Interface)是 mit 的核心交互界面,提供类似桌面应用的可视化操作体验,无需离开终端即可完成设备控制。
启动方式
mit tui # 启动全屏控制台(默认使用第一个账号)
mit tui --uid 1234567 # 以指定账号启动 TUI
TUI 布局
TUI 采用四栏布局设计,左侧为导航栏,右侧显示对应内容:
┌──────────────────────────────────────────────────────────────┐
│ [1:账号] [2:设备] [3:日志] [4:设置] │
├──────────────────────────────────────────────────────────────┤
│ │
│ 主内容区域 │
│ (根据当前分栏显示) │
│ │
├──────────────────────────────────────────────────────────────┤
│ 快捷键 / 操作提示 │
└──────────────────────────────────────────────────────────────┘
分栏详情
1. 账号分栏
- 账号列表 — 显示所有已登录的小米账号,包含账号 ID 和区域信息
- 账号切换 — 通过键盘快速在不同账号间切换
- 登录/登出 — 启动浏览器登录新账号,或注销已有账号
- 推送消息 — 向选中账号发送推送通知(需配合小米推送服务)
2. 设备分栏
- 层级导航 — 支持按「账号 → 房间 → 设备」的层级结构浏览
- 设备列表 — 显示设备名称、在线状态、局域网/云端连接方式
- 设备详情 — 选择设备后展示其 MIoT 服务和属性信息
- 属性读写 — 读取设备属性值、修改可写属性(如开关、亮度、温度等)
- 触发 Action — 执行设备支持的动作(如定时、模式切换等)
- 设备控制对话框 — 弹窗式操作界面,方便确认和控制
注意: 设备显示的在线状态为检测时刻的快照,实际控制时会根据网络可达性动态选择局域网或云端通道。
3. 日志分栏
- 运行日志 — 实时显示命令执行结果、API 调用状态
- 状态信息 — 显示当前网络连接模式(局域网/云端)、同步进度
- 错误提示 — 当设备离线或操作失败时显示详细错误信息
- 调试信息 — (可选)显示原始 API 响应,便于排查问题
4. 设置分栏
- 清理缓存 — 清除 MIoT 规格缓存(保留账号授权信息),释放磁盘空间
- 重置全部设置 — 删除整个
~/.mit目录,包含账号和缓存,需二次确认 - 显示设置 — 可调整界面布局、字体大小(终端适配)
键盘操作
TUI 完全依赖键盘操作,无需鼠标:
| 按键 | 功能 |
|---|---|
Tab / 1-4 |
切换分栏 |
↑ / ↓ |
浏览列表(上下移动) |
Enter |
确认操作 / 进入详情 |
Esc |
返回 / 关闭弹窗 |
q |
退出 TUI |
r |
刷新当前列表 |
/ |
搜索设备或属性 |
技术实现
- 使用 Rust 的 TUI 库(
ratatui或类似)构建,基于终端渲染 - 支持 ANSI/VT100 兼容终端,包括 iTerm2、Alacritty、Windows Terminal 等
- 自动检测终端尺寸并自适应布局
- 支持深色/浅色主题(跟随终端配色)
使用场景
全屏 TUI 适合以下场景:
- 日常快速控制 — 无需记忆命令,一目了然地浏览和操作设备
- 设备调试 — 查看属性状态、触发 Action,排查设备问题
- 多账号管理 — 同时管理不同区域的小米账号和设备
- 离线环境 — 无需网络浏览器,纯终端操作(浏览器登录仅用于授权)
本地优先局域网控制
mit 优先通过局域网(UDP/MIIO 协议)与设备通信,而非通过小米云端:
- 首次同步时,
mit从小米云端获取每台设备的localip和token - 凭据按账号持久化保存到
~/.mit/accounts/{account_id}/local_credentials.json mit在后台探测每台设备的局域网可达性
注意: 并非所有小米设备都支持局域网控制,部分设备仅支持云端控制(UDP/MIIO 协议需要设备固件支持)。
JSON 输出
所有命令均支持全局 --json 标志,输出机器可读的 JSON:
mit --json # 帮助信息(JSON 格式)
mit --json auth list # 账号列表(JSON 格式)
mit --json devices list # 设备列表(JSON 格式)
mit --json push "hello" # 推送结果(JSON 格式)
--json只影响成功时的标准输出。解析错误和运行时错误始终以可读文本输出到标准错误。- 此特性使
mit易于在脚本、CI 流水线或任何需要结构化输出的自动化场景中使用。
配置
| 环境变量 | 说明 |
|---|---|
MIT_PROFILE_DIR / MIT_HOME / XMCLI_HOME |
覆盖 ~/.mit 数据目录 |
MIT_MIOT_SPEC_URL_BASE |
覆盖 MIoT 规格 API 基础 URL(适用于测试) |
MIT_MICO_BASE_URL |
覆盖 Mico API 基础 URL(仅 debug 构建) |
MIT_LOG_DEVICE_LIST_PAGE_RAW |
设置为任意非空值,可将原始设备列表 API 响应输出到标准错误 |
数据存储在 ~/.mit/ 目录下:
~/.mit/
├── auth.json # 已保存的账号 token
├── accounts/{uid}/
│ ├── devices.json # 设备列表
│ └── local_credentials.json # 每账号局域网凭据
└── cache/
└── specs/
├── index.json # 型号 → URN 映射
├── models/ # 每型号 MIoT 规格 JSON
└── sources/ # 缓存的 MIoT API 索引文件


