第 19 章

成品自動傳 Google Drive:rclone 一次設好

你在第 17 章認識了影片管線、第 18 章看完首次下載那 720MB 工具去了哪裡。這章把最後一哩補齊:影片跑完之後怎麼自動出現在你手機的 Google Drive App 裡。答案是 rclone——一個 Pi Agent 已經內建、但需要你花五分鐘做一次 OAuth 授權的檔案同步工具。做完這一次,之後每支影片都自動上傳、你手機順手滑一下就能分享出去。

為什麼要花時間設這個

第 17 章講完了「AI 幫你寫腳本、配音、抓畫面、剪接、燒字幕」,最後產出一個乾淨的 MP4。第 18 章解釋了工具放在哪、為什麼首次要下載那麼久。但這個 MP4 現在還躺在 HA host 的 /data/pi-agent/ 底下的某個資料夾——你手機看不到、平板看不到、想傳給朋友還得 SSH 進去用 scp 拉出來,累。

  • 不設 rclone 的日常:影片跑完 → 你打開電腦 → SSH 進 HA → 找到影片路徑 → scp 拉出來 → 傳 LINE 或上 Drive。每一步都在勸退你,久了就懶得做影片。
  • 設完 rclone 的日常:影片跑完 → 手機叮一聲(Google Drive App 通知有新檔)→ 點開 → 分享。整段從電腦拿掉了。

Pi Agent 已經把 rclone 打包在 add-on 容器裡,你什麼都不用裝。你要做的只有一件事:跑一次 OAuth 授權精靈,告訴 rclone 你的 Google 帳號是哪一個。這件事第一次要在 terminal 做(因為 Google 的 OAuth 需要你手動貼一個驗證碼),但只要做一次,token 會存到 /data/pi-agent/rclone/rclone.conf,之後就永遠自動了——連 HA 整台重灌 restore 回來,token 也會跟著回來(第 20 章的 HA snapshot 有帶)。

觀念:這章是設定章不是知識章。你不需要「聽懂 OAuth 的原理」也能做完,跟著步驟按 Enter 就好。但因為第一次難免碰到「Google 頁面說 App 未認證要不要繼續」這種嚇人的畫面,我會逐格解釋,讓你按得心安。做完你就再也不用碰這個檔案。

rclone 是什麼、為什麼要用它

rclone 是一個檔案同步工具,你可以把它想成「命令列版本的 Google Drive App」。差別是它支援 40 多家雲端硬碟:Google Drive、OneDrive、Dropbox、Box、iCloud Drive、Amazon S3、阿里雲 OSS、SFTP、WebDAV……你講得出來的雲端儲存服務幾乎都在裡面。用法都長得一樣:rclone copy 本地路徑 遠端名稱:遠端資料夾

Pi Agent 為什麼選 rclone 而不是自己刻一個 Google Drive 上傳器?三個理由:

  • 成熟穩定:rclone 開發超過十年,token 續期、斷線重試、大檔分片上傳這些細節都處理好了。自己刻大機率會踩到你想不到的坑。
  • 不綁一家雲端:今天你選 Google Drive,明天想改 OneDrive 或 Dropbox,只是多跑一次 rclone config 的差別,Pi Agent 這邊的設定改一行字就能切換。
  • 離線就是離線:rclone 純粹在你自己的 HA host 上跑,Pi Agent 本身沒有任何「雲」在中間中轉。你的檔案從家裡直接上傳到你 Google 的儲存空間,中間沒有第三方看過。

Pi Agent 內建 rclone 的意思是:你不用另外 apt install rclone、也不用煩惱版本相容性。add-on 容器裡已經放好了一份,跑起來就能用。你要做的只有「告訴它你的 Google 帳號是哪一個」——這件事就是 OAuth 授權。

提示:rclone 對「來源」跟「目的地」兩端都可以是雲端。所以理論上你可以把 Google Drive 的檔案同步到 Dropbox,或把 S3 資料備份到 OneDrive。這章只講最單純的一個方向:本地檔案 → Google Drive。其他組合以後有需要再玩,原理都一樣。

為什麼要 OAuth,不是貼帳號密碼

你可能會想:「幹嘛搞這麼麻煩,rclone 讓我填 Google 帳號密碼不就好了?」——這個問題非常好,因為答案牽動整個網路 App 的安全設計。

Google 早就不接受這種做法了。原因很簡單:如果第三方軟體收得到你的 Google 密碼,它就能拿去做任何事——收你信、清你 Drive、關你 YouTube 頻道、盜刷你綁的信用卡。你信任 rclone 不代表你信任 rclone 一輩子不會被駭、也不代表你信任 rclone 開發者未來不會變壞。給密碼等於給整個帳號的鑰匙。

OAuth(Open Authorization)就是為了解決這個問題設計出來的。整個流程長這樣:

  1. rclone 給你一個 URL

    那個 URL 是 Google 官方的授權頁,不是 rclone 自己刻的假冒頁面。你打開 URL 之後看到的是你熟悉的 Google 登入介面——密碼你是打進 Google 自己的頁面,不是打進 rclone。

  2. Google 問你「要不要讓 rclone 存取你的 Drive」

    你按同意(就跟你第一次讓 Notion 讀 Google Calendar 是一樣的畫面)。Google 幫你判斷:這個 App 想要什麼權限、你確認才給。

  3. Google 發給 rclone 一張 token

    token 就是一張「代幣」,長得像一串亂碼。它只能拿來做你剛才同意的那件事(存取 Drive),不能拿去做其他事(比如寄信)。而且 token 隨時可以撤銷——你到 Google 帳號 → 安全性 → 第三方 App 授權,把 rclone 從清單裡踢掉,token 立刻失效。

  4. 之後 rclone 拿 token 傳檔,不再需要你的密碼

    rclone 每次上傳都是「帶著這張代幣」跟 Google 說「這是我的授權,可以放檔案進來嗎」。你的 Google 密碼從頭到尾沒離開過 Google 自己的伺服器。

觀念:這就是為什麼 OAuth 流程必須「跳出來一個瀏覽器頁面」。這個「跳出來」不是設計不良、而是刻意的——它強迫你「用你信任的瀏覽器」去 Google 的網站確認一次,rclone 沒有機會偷看你打密碼。任何要求你把 Google 密碼直接貼到自己畫面裡的 App,你都應該立刻關掉不用。

前提:你要能 SSH 進 HA

rclone config 精靈是互動式的(會一步步問你答),必須在 terminal 裡跑。這代表你要能 SSH 進 HA host、然後再進去 Pi Agent 的 add-on 容器裡。如果你從來沒 SSH 過 HA,先把這個環境準備好:

  1. 裝 Advanced SSH & Web Terminal add-on

    HA 側邊欄 → 設定(Settings)→ 附加元件(Add-ons)→ 附加元件商店 → 搜「Advanced SSH & Web Terminal」→ 安裝。這是官方推薦的最簡單方式,安裝完在 add-on 頁面按「開啟網頁 UI(Open Web UI)」就是一個瀏覽器裡的 terminal。你不需要在筆電裝什麼 SSH 客戶端。

  2. 進去之後你在 HA host

    打開之後看到黑底白字的畫面,這時候你是站在 HA host 上(可以看到 /config//mnt/ 這些 HA 系統目錄),但你還沒進到 Pi Agent 的 add-on 容器裡。想確認自己在哪,跑 ls /data/pi-agent/——會顯示「No such file or directory」,因為 /data/pi-agent/ 是容器裡面的路徑,HA host 上看不到。

  3. 先查你自己的 add-on slug(最保險的一步)

    Pi Agent 容器名字長成 addon_<slug>,而 slug 前面會帶一段八位英數 repo hash(例如 b9cf5676_woow_ha_pi_agent)——這段 hash 是 HA 依你加的 add-on repository URL 算出來的,每個人裝的都不一樣。最不會錯的查法:HA 側邊欄 → 設定 → 附加元件 → 點 Woow HA Pi Agent → 上方「資訊(Info)」分頁往下捲,會看到 HostnameSlug 欄位(例如 b9cf5676_woow_ha_pi_agent),這就是你要用的 slug。抄下來備用。

  4. 用 docker exec 進 Pi Agent 容器

    在 terminal 裡把剛才那段 slug 套進去:docker exec -it addon_<你的slug> bash,例如 docker exec -it addon_b9cf5676_woow_ha_pi_agent bash。跑完你會看到 shell prompt 換了樣子(通常變成 root@某串英數字:/#),這代表你已經在容器內。這時候再跑 ls /data/pi-agent/ 就會看到 sessions、models、rclone 這些子資料夾。

  5. 接下來所有指令都在容器內跑

    後面章節的 rclone configrclone lsdrclone config reconnect 這些指令,都必須在容器內執行——因為 HA host 上根本沒有 rclone 執行檔。跑錯地方會顯示「rclone: command not found」,記得先確認你的 prompt 有沒有換過來。

注意:你可能在別人的教學看到 addon_local_woow_ha_pi_agent(自建 local repo)或 addon_woowtech_ha_pi_agent(假想的官方 registry)——這些都不是真名。真名一律是 Info 分頁裡秀出來的那段(例如 b9cf5676_woow_ha_pi_agent)。萬一 Info 找不到,退路是 SSH 進 HA host 跑 docker ps --format '{{.Names}}' | grep pi_agent,會直接印出 addon_<真實slug>

rclone config 精靈:一步一按 Enter

準備好之後,在 add-on 容器裡跑 rclone config。精靈會問一連串問題,看起來嚇人但其實大部分都是按 Enter 走預設。下面每一步我把「螢幕會顯示什麼、你要打什麼」都寫清楚:

  1. 選 n)新增遠端

    精靈開場會列你已經有的 remote(第一次是空的),然後問你 e/n/d/r/c/s/q>。打 n 再按 Enter,代表「new remote(新增一個)」。

  2. Name 取個好記的名字

    name>。這個名字之後 Pi Agent 設定會用到,建議取簡短好記的 gdrive。它跟 Google 帳號沒關係、純粹是給你自己認的。以後你多加一個 Dropbox 就叫 dropbox、多加一個 OneDrive 就叫 onedrive

  3. Storage 選 drive

    精靈會列 40 幾家雲端讓你選,每一家有一個編號。找到 drive(Google Drive)打它的編號,或直接打 drive 也可以。按 Enter。

  4. client_id / client_secret 空著按 Enter(見警告)

    Google Application Client Id>。個人一次性用,直接按 Enter 走 rclone 內建的 client_id 就夠。client_secret 同樣空白按 Enter。但看下面那個警告方塊——rclone 官方預告「內建 client_id 會在 2026 年期間停用(will stop working during 2026)」,重度使用者建議現在就自己申請一組。

  5. Scope 選 1(完整存取)

    精靈會列五個選項,選 1:Full access all files, excluding Application Data Folder(完整存取除了 App 資料夾以外的所有檔案)。這個是最常用的權限,讓 rclone 可以在你 Drive 的任何資料夾放檔案、也能讀既有檔案。想更保守可以選 3(只能碰 rclone 自己建立的檔案),但這樣你手機的 Drive App 就看不到影片,失去意義。

  6. service_account_file 空著按 Enter

    問你有沒有 service account JSON 檔。個人用途沒有,空白按 Enter。

  7. Edit advanced config? 選 n

    問要不要改進階設定(傳輸 chunk 大小、代理、SSL 什麼的)。第一次用選 n,預設值對 99% 的家庭場景都夠。

  8. Use auto config? 選 n(HA 沒瀏覽器)

    Use web browser to automatically authenticate rclone with remote?。這是整個流程最容易錯的一步y 是給筆電、桌機這種「本機就有 Firefox / Chrome」的環境用的——rclone 會自動開瀏覽器。但 HA host 是伺服器、沒有 GUI、開不了瀏覽器,選 y 會卡住在 waiting for code...。選 n,走 headless 手動模式。

  9. 螢幕會印出一段 URL,用你自己的電腦或手機打開

    精靈會印出類似 https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=...&scope=...&response_type=code 這樣一長串。整段複製(含中間的 :_&),貼到你手機或筆電的瀏覽器打開。這時候你會看到熟悉的 Google 登入頁。

  10. Google 登入 → 授權 → 拿到驗證碼

    用你要接的 Google 帳號登入。可能看到「Google 尚未驗證此應用程式」的警告——這是因為 rclone 用的是共用 client_id,不是每個使用者都幫它「認證」過。點「進階」→「前往 rclone(不安全)」→ 繼續。授權完 Google 會顯示一段驗證碼(Verification code),複製那段驗證碼。

  11. 驗證碼貼回 terminal

    回到你的 terminal,rclone 這時候在等 Enter verification code>。把剛才那段驗證碼貼進去按 Enter。看到 Got code 就代表 OAuth 完成、token 已存進 rclone.conf

  12. Configure this as a Shared Drive (Team Drive)? 選 n

    rclone 原話是 Configure this as a Shared Drive (Team Drive)?——問你要不要接你公司的共用雲端硬碟(原本叫 Team Drive、現在改名 Shared Drive)。個人 Google 帳號沒有這種東西,選 n

  13. 看到摘要,選 y 存檔

    精靈會秀你剛才填的所有值(type = drive、scope = drive 之類),問 Keep this "gdrive" remote?,選 y(keep)。回到主選單後打 q(quit)離開精靈。

注意(2026 年 client_id 政策):rclone 官方在 rclone config 精靈裡直接加了一段警告:「The shared client_id is being retired and will stop working during 2026, so creating your own is now strongly recommended.」=共用 client_id 在 2026 年期間會被停用,強烈建議自己做一組。個人少量使用當下還能用,但如果你長期依賴這個上傳(比如每週產十幾支影片),花 15 分鐘去 Google Cloud Console 申請一組自己的 client_id / client_secret 貼回精靈第 4 步,能避免半路失效。步驟麻煩但一次搞定,rclone 官網 rclone.org/drive/#making-your-own-client-id 有完整教學。
危險:驗證碼那段是「一次性通行證」,貼到 terminal 之後 rclone 會拿去跟 Google 換一張長期 token。不要把驗證碼截圖貼到 LINE 群、Discord 求助——雖然它一分鐘內會失效,但那一分鐘內誰拿到都能綁到自己的 rclone 冒充你。同理,terminal 印出來的那段 URL 也不要公開,那條 URL 綁的是「這一次授權請求」,誰打開誰就能授權自己的 Google 帳號進去。

驗證:真的能通了嗎

精靈跑完你可能還是不放心「這樣就好了?」,來確認一下。在 add-on 容器裡跑:

rclone lsd gdrive:

這個指令的意思是「列出(ls)gdrive 這個 remote 根目錄的資料夾(d = directories only)」。跑完應該會列一堆你 Google Drive 首頁看到的資料夾——「我的雲端硬碟」、「共用檔案」、你自己建的資料夾都會出現。長這樣:

          -1 2024-03-15 08:22:14        -1 相簿
          -1 2025-06-20 14:11:03        -1 工作備份
          -1 2026-01-08 22:45:56        -1 家裡影片

看到列表 = 成功。如果什麼都沒印出(空的但沒錯誤訊息),代表你的 Drive 根目錄真的沒東西,也算成功——去建個資料夾再試就會看到。

如果看到錯誤訊息,對應解法看下面「常見卡關」那節。最常見的兩種:

錯誤訊息 意思
Failed to lsd: couldn't list directory: Get "https://...": oauth2: token expired token 過期,跑 rclone config reconnect gdrive: 重新 OAuth
Failed to lsd: didn't find section in config file 你 remote 名字打錯了,跑 rclone config 看一下實際名字(有些人打成 Gdrive: 大寫,這是錯的)
rclone: command not found 你不在 add-on 容器裡。回去看前提那節,重跑 docker exec

還想更確定?跑一個測試上傳:

echo "hello from pi agent" > /tmp/test.txt
rclone copy /tmp/test.txt gdrive:

跑完打開手機的 Google Drive App,最上面「最近」那個分頁應該就看到 test.txt。看到就是穩了,這個測試檔可以直接在手機 Drive 上刪掉。

提示:rclone 每個指令都可以加 -v(verbose)看它到底在幹嘛,加 -vv(extra verbose)看得更細。除錯的時候超好用,例如 rclone lsd gdrive: -vv 會印出它連到哪個 API endpoint、token 是什麼時候發的、response 花多久。平常不用加。

把 gdrive 接進 pitch_video 管線

rclone 設好只完成一半——Pi Agent 還不知道「影片跑完要傳去哪」。你要告訴 pitch_video skill 的 config:把成品送去 gdrive:某某資料夾。實作細節每個 skill 版本不太一樣,這一節講最常見的三種寫法。

先在 Google Drive 手動建一個資料夾當家(比如 PiAgent/Videos)。你也可以省略這步,rclone 上傳的時候會自動建,但先建好可以順便設分享權限、加上 icon 認明。

然後打開 pitch_video skill 的 SKILL.md 或它自己的 README 找 upload_tooutput_upload 之類的欄位。三種常見寫法:

Skill 寫法 你要填什麼 備註
YAML frontmatter 裡 upload_to: ... upload_to: gdrive:PiAgent/Videos/ 最單純,改完存檔就生效
單獨的 config.yaml.env RCLONE_DEST=gdrive:PiAgent/Videos/ skill 啟動時讀環境變數
直接改 push_drive.sh 或類似 shell script rclone copy "$OUTPUT" gdrive: 改成 rclone copy "$OUTPUT" gdrive:PiAgent/Videos/ 硬 code 進 script,最直接但比較粗

三種寫法的結尾都要有斜線 /——沒斜線 rclone 會把 gdrive:PiAgent/Videos 當成「叫 Videos 的檔案」而不是資料夾,會踩雷。

改完之後跑一次完整影片管線(第 17 章教過),最後一個階段你會看到類似這樣的 log:

[push_drive] Uploading final.mp4 (42MB) to gdrive:PiAgent/Videos/
[push_drive] Transferred: 42.1 MiB / 42.1 MiB, 100%, 3.2 MiB/s
[push_drive] Uploaded final.mp4 successfully in 13s

沒看到 push_drive 的 log?代表 skill 沒讀到你的設定,或設定寫在錯的地方。回頭確認 upload_to 那欄有沒有存到、有沒有拼錯 remote 名字(大小寫敏感)。

提示:資料夾名字建議用英數,不要用中文。中文技術上 rclone 能吃,但你之後想從 terminal rclone ls gdrive:我的影片/ 會少一個 URL-encoding 的機會踩雷。取 PiAgent/Videos/Home/Recordings/ 這種一目瞭然的英文,日後你自己也好敲。

token 存哪、跟 HA snapshot 什麼關係

做完 OAuth 之後,你剛才辛苦換來的 token 存在這個位置:

/data/pi-agent/rclone/rclone.conf

這個檔案長這樣(截取重點):

[gdrive]
type = drive
scope = drive
token = {"access_token":"ya29.a0Af...","token_type":"Bearer","refresh_token":"1//0e...","expiry":"2026-08-14T15:30:00.000000Z"}
team_drive =

看到那段 refresh_token 沒有?那段就是靈魂——rclone 拿它去跟 Google 續期短期的 access_token,讓你不用每天重跑 OAuth。這也是為什麼「rclone.conf 不要外流」——refresh_token 等於長期通行證,被別人拿到就能持續用你帳號傳檔(除非你在 Google 那邊撤授權)。

然後看它的路徑:/data/pi-agent/ 是 Pi Agent add-on 的持久儲存區。這個資料夾符合兩個條件:

  1. add-on 升級不會清掉

    你升級 Pi Agent 到新版(第 21 章會教),add-on 本身的檔案系統會換一份新的,但 /data/ 底下的東西會保留。所以升級後不用重跑 OAuth。

  2. HA snapshot 會備份到

    HA 的整機備份(第 20 章)會把 add-on 的 /data/ 一起打包。所以你哪天 HA 主機壞了、換 SD 卡從 snapshot 還原,rclone.conf 會跟著回來——不用重跑 OAuth,你重新開機 Pi Agent 影片就繼續傳。

那什麼時候會需要重跑 OAuth?三種情況:

情況 要不要重跑 OAuth
Pi Agent 升級 / 重啟 add-on 不用
HA 從 snapshot 還原(同一台或新機) 不用(token 跟著回來)
你去 Google 帳號 → 安全性 → 移除 rclone 授權 要重跑(token 已作廢)
你把 rclone.conf 誤刪 要重跑
Google 判定「異常活動」把 token 撤了(很少見) 要重跑
注意:Pi Agent 未來的備份章節(第 20 章)會更詳細講「什麼進 snapshot、什麼不進」。這裡先記得 rclone.conf 是進的、Google 帳號密碼是沒有存在你 HA 任何地方的(OAuth 的重點就是密碼不落地)。所以就算 snapshot 檔案外流,泄的最多是 refresh_token(你去 Google 撤授權就作廢),密碼絕對不會外流。

想改用 Dropbox / OneDrive / S3

rclone 支援 40 幾家,換一家的成本是「多跑一次 rclone config」。你甚至可以同時保留多家——把最重要的 Google Drive 傳一份、順便備份一份到 Dropbox 當異地備援,兩個 remote 並存。步驟一樣:

  1. 再跑一次 rclone config

    n(new)加一個新 remote,name 取好記的 dropbox / onedrive / s3

  2. Storage 選對應的家

    Dropbox 選 dropbox、OneDrive 選 onedrive、S3 選 s3(再選 provider AWS 或 CloudFlare R2)。每一家的欄位略有不同,但精靈都會幫你走:

    • Dropbox:跟 Google Drive 幾乎一樣,OAuth 流程一樣要選 n(headless)拿 URL 貼驗證碼。
    • OneDrive:多一步問你是 personal 還是 business 帳號(onedrive.com vs Microsoft 365)。個人選 personal,公司帳號選 business。
    • S3:不用 OAuth,改成貼 access_key_id 跟 secret_access_key(去 AWS Console → IAM 建)。適合已經有 AWS 帳號的人。
  3. pitch_video 的 upload_to 改對應的 remote

    gdrive: 改成 dropbox:onedrive:s3:mybucket/。設完照樣可以跑 rclone lsd dropbox: 確認。

  4. 想兩家一起傳?寫兩段 rclone copy

    Skill 的 push script 裡加兩行:rclone copy final.mp4 gdrive:PiAgent/Videos/rclone copy final.mp4 dropbox:PiAgent/Videos/。兩家 quota 都會消耗,但你多一份備援。

提示:如果你家有 NAS(Synology、QNAP、TrueNAS),rclone 也支援 SFTP、SMB、WebDAV,可以把影片直接同步進 NAS,完全不動用外部雲端。這條路網路速度快(純內網)、也不吃你雲端 quota。適合有大量影片檔的人。指令一樣是 rclone config → Storage 選 sftp。

常見卡關

  1. 授權 URL 太長打不開、貼到瀏覽器變成搜尋

    rclone 印出的 URL 有 200-400 個字元、中間充滿 &:_ 這些符號,很多人在 terminal 裡「反白到一半」漏掉了尾巴。做法:(a)在瀏覽器 terminal(比如 Advanced SSH Web UI)直接三擊全選那一整行、Ctrl+C 複製。(b)貼到瀏覽器的網址列,不是搜尋列——貼進 Google 首頁的搜尋框會被當關鍵字。(c)如果你用手機瀏覽器貼,長按網址列選「貼上並前往」,別按錯選成「搜尋」。實在不行,把 URL 用電子郵件寄給自己,在信裡點連結。

  2. Google 顯示「Google 尚未驗證此應用程式」不敢按繼續

    這是預期的畫面、不是 bug。因為 rclone 用的 client_id 是所有人共用的,Google 沒辦法「認證」rclone 這個 App(畢竟每個使用者的用途都不同)。做法:點畫面下方的「進階(Advanced)」展開 → 點「前往 rclone(不安全)」連結 → 繼續授權。這只是 Google 的保守警告,你信 rclone 就繼續。想避免看到這個畫面,就是前面提過的「自己去 Google Cloud Console 申請 client_id」,申請完把自己的 App 標成 verified 就不會跳警告。

  3. 上傳失敗顯示 quota exceeded

    Google Drive 個人免費空間 15 GB(跟 Gmail、Google Photos 共用),影片吃很兇很快就爆。做法(優先順序):(a)先手動去 Drive 清一波用不到的舊檔(Gmail 的大信件附件是常見大宗)。(b)改傳到 上一節提到的 Dropbox、OneDrive 分散 quota。(c)長期方案是 Google One 升級(100 GB 一年約 700 台幣、200 GB 約 900 元),或改用 S3 / R2 這種以量計價的雲儲存(每 GB 幾分錢)。(d)在 skill 的 push script 加個「傳完就刪本地檔」的邏輯,至少 HA host 上不會累積。

  4. token 過期 / 好久沒用之後上傳報 401

    refresh_token 一般可以續期很久(Google 官方說「不會過期」但實際上有些邊角情況會失效——例如你長期沒用、Google 帳號改過密碼、或 Google 判定異常)。錯誤訊息通常是 oauth2: token expired401 Unauthorized。做法:在 add-on 容器裡跑 rclone config reconnect gdrive:,會走一次快速版的 OAuth(跟精靈一樣印 URL 貼驗證碼,但省掉前面那些選項)。跑完 token 就更新了。

  5. rclone lsd 一直很慢 / 卡住不回應

    兩個常見原因:(a)你家網路對 Google 不順(有些 ISP 對 accounts.google.com 有降速)。跑 ping accounts.google.com 看有沒有丟包,有的話重開路由器、或換 Google DNS 8.8.8.8。(b)rclone 在做「列出整個根目錄」,你 Drive 檔案超多(幾萬個)時,第一次 lsd 會慢好幾十秒。這是正常的。改用 rclone lsd gdrive:PiAgent/ 只列子資料夾會快很多。

  6. docker exec 進去之後 prompt 沒變、指令一樣說 command not found

    你可能連 docker exec 都沒跑成功(HA 有些版本沒有 docker command,是用 ha CLI 或直接 podman)。做法:先跑 docker ps --format '{{.Names}}' | grep pi_agent 直接印出真名(例如 addon_b9cf5676_woow_ha_pi_agent);沒有 docker 就換 ha addons info <你的slug>(slug 從 HA 附加元件 → Pi Agent → Info 分頁抄);再不行去 add-on 頁面右上角看有沒有「開啟網頁終端機」按鈕,有些 add-on 內建 shell,點下去就直接在容器內、免 docker exec。

  7. 影片跑完 push_drive 那一段整個沒執行

    可能三個原因:(a)你 upload_to 沒設對,回上一節檢查。(b)你的 pitch_video skill 版本太舊還沒支援自動上傳。看 skill 的 CHANGELOG,如果沒 upload_to 這個欄位就是版本太舊,去 GitHub 拉新版。(c)skill 的 push_drive.sh 因為 rclone 沒設好整個被 skip 掉——去看 skill 的執行 log,會告訴你它為什麼跳過。

  8. OneDrive 傳到一半失敗 / 有些檔名 Google Drive 可以但 OneDrive 不行

    OneDrive 對檔名的限制比 Google Drive 嚴(:?*<>| 這些字元都不能用)。你的影片檔名如果含這些字元(例如「客廳:先開燈?」)OneDrive 會拒收。做法:在 rclone 那邊加 --onedrive-server-side-across-configs 或在檔名生成時就用底線代替特殊字元。最簡單的做法是叫 pitch_video skill 產生檔名時就走英數限制(例如 living_room_lights_20260814.mp4)。

常見問題

一定要用 Google Drive 嗎?我不想給 Google 更多我的資料。
不用。rclone 支援 40 多家雲端,這章舉 Google Drive 是因為「大多數人手機已經有 Drive App、看影片最順」。想避開 Google 可以選 Dropbox(跟 Drive 差不多好用)、OneDrive(有 Microsoft 帳號的人配 Office 365 順手)、iCloud Drive(Apple 生態圈完美整合,但 rclone 只支援有限功能)。更保守的選擇是完全不上雲,用 rclone 的 SFTP / WebDAV / SMB mode 直接傳到你家 NAS 或另一台電腦,這樣連家門都沒出。指令跟這章一樣是 rclone config,只差在 Storage 那步選不同項目。
rclone 傳檔會消耗我家的網路頻寬嗎?
會,而且是消耗上傳頻寬(家用網路的上傳通常比下載慢很多)。你一支 300MB 的影片在 30 Mbps 上傳的網路,大約要 80 秒。傳的時候你視訊會議、直播如果剛好也在用上傳,會互搶。建議:(a)如果你會在意,去 rclone 的 skill config 加 --bwlimit 5M(限速 5 MB/s)留頻寬給其他事。(b)把影片上傳排在半夜跑,家裡沒人搶。(c)家用 Wi-Fi 差的話,HA host 接有線比較穩。上傳流量不算 Google Drive quota,只算你 ISP 的月流量(無限量方案不用擔心)。
我有兩台 HA(比如老家一台、公司一台),可以共用同一個 rclone 設定嗎?
可以。做法是把設定好的 /data/pi-agent/rclone/rclone.conf 從 A 台複製到 B 台的同一個位置就行(用 scp 或 HA 的檔案管理員都可以)。B 台開機後 rclone 直接吃這份 config、共用同一個 refresh_token、傳到同一個 Drive 帳號。但兩台上傳可能會撞名——如果兩支影片都叫 final.mp4,後傳的會蓋掉前傳的。解決方式:在 skill 的檔名生成規則裡加 hostname,讓 A 台傳 final_hostA.mp4、B 台傳 final_hostB.mp4。或者一台傳 gdrive:PiAgent/HouseA/、另一台傳 gdrive:PiAgent/HouseB/ 分家。
token 被別人拿到怎麼辦?
立刻做兩件事:(1)到 Google 帳號 → 安全性 → 你有存取權的第三方應用程式和服務 → 找到 rclone → 移除存取權。這步做完,那張 token 立刻作廢,對方拿去也沒用。(2)在你 HA 上重跑 rclone config reconnect gdrive: 拿一張新的。這樣你自己還能繼續傳,作廢的只是外流那張。如果你不確定是不是外流、只是覺得可疑,一樣做這兩步一次「洗牌」,成本很低(重跑 OAuth 只花一分鐘)。順便建議這時候在 Google 帳號的「安全性事件」看一下最近登入紀錄,確認沒有奇怪的 IP。
rclone.conf 我可以直接手動編輯嗎?不想每次都跑精靈。
可以,rclone.conf 就是純 INI 格式文字檔,任何編輯器都能改。常見的手動編輯場景:改 scope(從 drive 收窄成 drive.file)、改 team_drive ID、加一段 root_folder_id 讓 rclone 只看你 Drive 裡某個特定子資料夾。但 token 那段千萬別手改——它是 JSON、字段順序敏感、還帶 base64 encoded 內容,改壞了 rclone 就完全連不上,只能重跑 OAuth。改之前先 cp rclone.conf rclone.conf.bak 備份。
有辦法讓 rclone 只傳新的、不重傳已經在 Drive 上的檔案嗎?
有,用 rclone copy 就已經是這個行為了——它會比對來源跟目的地,只傳目的地沒有的檔案(比對 size + modtime)。如果你想更嚴格(連檔案內容都比對),加 --checksum。反過來,rclone sync 是「把目的地變成跟來源一模一樣」——來源沒有的檔案會被刪掉,很危險,第一次跑務必加 --dry-run 預演。Pi Agent 的 push_drive.sh 通常用 copy 不用 sync,就是這個安全考量。
如果我把 Pi Agent 換到另一個 HA(不是 restore、是新裝),token 能搬過去嗎?
可以。把舊 HA 的 /data/pi-agent/rclone/rclone.conf 複製到新 HA 對應位置(要先在新 HA 裝好 Pi Agent、跑一次好讓 /data/pi-agent/ 資料夾產生)就行。或者,最偷懶的做法:在舊 HA 做一次 Partial Backup 只勾 Pi Agent add-on,把備份檔 restore 到新 HA。這樣不只 rclone.conf 過去,連 API keys、Session 歷史都一起搬過去。就跟第 20 章做整機備份是同一個機制,只是勾的東西不一樣。
下一章要看什麼?
你現在會用 rclone 把影片自動送去 Drive,等於把「創作 → 儲存 → 分享」整條線接起來了。下一章會拉高一層講「這些東西——你辛苦調好的 API keys、幾百輪的 Session 對話、剛剛設好的 rclone.conf——到底怎麼被 HA snapshot 備份、還原之後要補做什麼」。這章你其實已經摸到一半(rclone.conf 那節),下一章補完全景。做完你就可以放心大膽玩 Pi Agent,不怕哪天 SD 卡壞了要從頭來過。