profileName: youpingfang postId: 268 postType: post categories:

- 8

终端控制,节约了一个小爱同学的钱!

English

mit 是一款使用 Rust 编写的轻量级小米智能家居 CLI 工具,无需打开 App,即可在终端中登录小米账号、浏览并控制智能设备、发送推送通知。

免责声明: 本项目为社区维护工具,与小米公司无隶属关系,未获得小米官方认可或授权。

功能特性

  • 全屏 TUI — 键盘驱动,浏览账号、房间和设备,读写 MIoT 属性,触发 Action
  • 本地优先局域网控制 — 自动探测设备本地 IP 和 token,优先走局域网 UDP/MIIO 协议,不可达时无缝回退到云端
  • CLI 属性操作 — 不启动 TUI 直接读写设备属性、触发 Action
  • 推送通知 — 向任意已登录的小米账号发送消息
  • 多账号 — 支持不同区域的多个账号同时登录
  • JSON 输出 — 所有命令均支持 --json 模式,方便脚本和自动化集成

演示

发送推送通知 读写设备属性 TUI(移动端视图)
发送推送通知演示 读写设备属性演示 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 适合以下场景:

  1. 日常快速控制 — 无需记忆命令,一目了然地浏览和操作设备
  2. 设备调试 — 查看属性状态、触发 Action,排查设备问题
  3. 多账号管理 — 同时管理不同区域的小米账号和设备
  4. 离线环境 — 无需网络浏览器,纯终端操作(浏览器登录仅用于授权)

本地优先局域网控制

mit 优先通过局域网(UDP/MIIO 协议)与设备通信,而非通过小米云端:

  1. 首次同步时,mit 从小米云端获取每台设备的 localiptoken
  2. 凭据按账号持久化保存到 ~/.mit/accounts/{account_id}/local_credentials.json
  3. 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 索引文件