跳轉到

登入疑難排解

小米登入是整個流程最容易卡的地方。這頁把實測到的坑、根因、對策一次講清楚,並附上 安全驗證(哪些工具只連官方、密碼怎麼處理)。

miiocli cloudAccess deniedMiCloudAccessDenied

python-miio 底層是 micloud(2022 後幾乎停更), 走帳密 POST 到 account.xiaomi.com/pass/serviceLoginAuth2。小米後來在這條 endpoint 對 非 App client 加了 captcha + email/phone 2FA,無人值守的帳密 POST 解不掉,就被擋成 Access denied。Home Assistant 的「Xiaomi Miio」雲端流程撞同一道牆。

現象 根因 對策
miiocli cloudAccess denied 密碼流被 captcha/2FA 攔截 改走 QR(mihome-ctl
HA Xiaomi Miio 雲端登入失敗 繼承同一道牆 同上,或 mihome-ctl 抽 token 後手填
帳密正確也被擋 網路層:Cloudflare DNS、AdGuard/PiHole、路由器地區限制 換非 Cloudflare DNS、關廣告過濾、別擋 api.io.mi.com
撞到 2FA 上限 每區每天約 3–5 封驗證信(記得翻垃圾信匣) 等,或改 QR(不受此限)

這不是後門,是流程無法 headless 自動化

已驗證 micloud 與 extractor 只連小米官方網域,且密碼是先做 unsalted MD5(大寫 hex) 雜湊後才走 TLS 上傳,明碼密碼從不出網卡。全新登入解不掉 captcha/2FA 是 結構性限制,不是工具藏了 backdoor。

region 陷阱:miiocli 的 locale 沒有 tw

台灣帳號不是中國帳號,cn 一定抓不到。小米把帳號+裝置綁在 Xiaomi Home App 配對 當下選的區,走 {region}.api.io.mi.com

python-miio 的 AVAILABLE_LOCALES 沒有 tw

python-miio 內建 locale 只有 cn, de, i2, ru, sg, us(+all)——沒有 tw。 所以 miiocli cloudmicloud、HA Xiaomi Miio 雲端流程會默默漏掉台灣帳號的裝置, 清單看起來是空的。

工具 支援 region 對台灣帳號
python-miio / micloud cn, de, i2, ru, sg, us ❌ 無 tw
mihome-ctl / Xiaomi-cloud-tokens-extractor cn, de, us, ru, tw, sg, in, i2

實務:mihome-ctl 預設掃 tw sg cn。很多台灣/東南亞使用者的裝置其實在 sg(配對 時把 App 區域設成新加坡)。「裝置清單是空的」最常見的原因是選錯區,不是帳密錯。

安全驗證:哪些只連官方、密碼怎麼處理

工具 只連小米官方? 密碼處理 給 token?
mihome-ctl / extractor account.xiaomi.com + {region}.api.io.mi.com QR 免密
miiocli cloud / micloud ✅ 官方 ⚠️ prompt 沒遮蔽(明碼回顯)+MD5 後送
mijiaAPI / miot-mcp 裝置流走第三方 api.mijia.tech QR 免密(但 token 走第三方)
miio-extract-tokens ✅ 零連網(離線)

mijiaAPI / miot-mcp 走第三方 proxy

mijiaAPIapis.py 寫死 api_base_url = https://api.mijia.tech/app)把你的 serviceToken/ssecurity 和每條裝置指令送到 api.mijia.tech——非小米官方(作者 自架)。等於一個受信任的 MITM:proxy 端能記錄、重放、竄改你所有裝置資料與控制指令。 純雲端控制且你信任它才用;要隱私/要 token 請走 mihome-ctl(只連官方)。

QR 免密碼但不等於零互動

QR 登入把授權交給手機 App,繞過 serviceLoginAuth2 的 captcha+email-2FA,也不受每日 2FA 額度限制。但手機端偶爾仍會要求 SMS/OTP 確認——是「script 裡不打密碼」,不是「完全 不用動手」。