OpenClaw Node App 運動感測(Motion)指令完全攻略|活動偵測、計步器、計步資料

OpenClaw Node App 運動感測(Motion)指令完全攻略

這篇文章會介紹 OpenClaw Node App 的「運動感測」功能,讓你能夠偵測手機使用者的活動狀態和計步資料。

>

實驗日期:2026-04-19
實驗設備:Vivo V2514(Android 16)
OpenClaw 版本:2026.4.19.10ver(ThirdParty)

一、什麼是 Motion 功能?

想像一下

當你安裝 OpenClaw Node App 並連線到你的手機後,你可以偵測手機使用者的活動狀態讀取計步器資料

實用場景

  • 🏃 健康追蹤:記錄每天走了多少步
  • 🧘 活動偵測:知道使用者是靜止、走路還是跑步
  • 📊 健康數據:統計一段時間的活動量
  • 🤖 自動化觸發:根據活動狀態觸發自動化腳本

二、Motion 指令家族

根據官方文件和原始碼分析,Motion 有 2 個指令

指令功能
motion.activity活動偵測(靜止、走路、跑步)
motion.pedometer計步器(步數統計)

三、指令詳細說明

1. motion.activity - 活動偵測

用途: 偵測目前的身體活動狀態

原理: 使用手機的加速度計(Accelerometer)分析晃動程度來判斷活動狀態

指令格式:

openclaw nodes invoke --node "V2514" --command motion.activity --params '{}'

2. motion.pedometer - 計步器

用途: 讀取計步器資料

原理: 使用手機的步數計感測器(Step Counter Sensor)

指令格式:

openclaw nodes invoke --node "V2514" --command motion.pedometer --params '{}'

四、回傳資料格式

motion.activity 回傳

{
  "activities": [
    {
      "startISO": "2026-04-19T12:22:45.225742Z",
      "endISO": "2026-04-19T12:22:47.225742Z",
      "confidence": "medium",
      "isStationary": true,
      "isWalking": false,
      "isRunning": false,
      "isCycling": false,
      "isAutomotive": false,
      "isUnknown": false
    }
  ]
}

欄位說明:

欄位類型說明
startISOstring偵測開始時間(ISO 8601 格式)
endISOstring偵測結束時間
confidencestring準確度(lowmediumhigh
isStationaryboolean是否靜止
isWalkingboolean是否在走路
isRunningboolean是否在跑步
isCyclingboolean是否在騎車(永遠 false)
isAutomotiveboolean是否在駕駛(永遠 false)
isUnknownboolean是否未知

motion.pedometer 回傳

{
  "startISO": "2026-04-18T16:22:44.431Z",
  "endISO": "2026-04-19T12:22:57.805169Z",
  "steps": 4641
}

欄位說明:

欄位類型說明
startISOstring步數統計開始時間
endISOstring步數統計結束時間
stepsint總步數
distanceMetersdouble距離(目前永遠 null)
floorsAscendedint爬樓層數(目前永遠 null)
floorsDescendedint下樓層數(目前永遠 null)

五、活動偵測原理

加速度計分析

motion.activity 使用加速度計來分析手機的晃動程度:

晃動程度(averageDelta)判斷結果
≤ 0.55靜止(Stationary)
0.55 - 1.80走路(Walking)
> 1.80跑步(Running)

準確度判斷

樣本數晃動程度準確度
< 6 個樣本任何low
≥ 6 個樣本≤ 0.4medium
≥ 14 個樣本> 0.4high
其他其他medium

六、實際測試結果

測試 1:活動偵測

openclaw nodes invoke --node "V2514" --command motion.activity --params '{}'

結果: ✅ 成功

{
  "activities": [
    {
      "startISO": "2026-04-19T12:22:45.225742Z",
      "endISO": "2026-04-19T12:22:47.225742Z",
      "confidence": "medium",
      "isStationary": true,
      "isWalking": false,
      "isRunning": false,
      "isCycling": false,
      "isAutomotive": false,
      "isUnknown": false
    }
  ]
}

結論: 使用者目前處於靜止狀態(坐在手機旁邊)


測試 2:計步器

openclaw nodes invoke --node "V2514" --command motion.pedometer --params '{}'

結果: ✅ 成功

{
  "startISO": "2026-04-18T16:22:44.431Z",
  "endISO": "2026-04-19T12:22:57.805169Z",
  "steps": 4641
}

結論: 從上次手機重啟到現在,已經走了 4,641 步


測試 3:歷史查詢(應該錯誤)

openclaw nodes invoke --node "V2514" --command motion.activity --params '{"startISO": "2026-04-01T00:00:00Z"}'

結果: ✅ 正確的錯誤處理

MOTION_UNAVAILABLE: MOTION_RANGE_UNAVAILABLE: historical activity range not supported on Android

七、使用範例

範例 1:檢查目前是否在走路

openclaw nodes invoke --node "V2514" --command motion.activity --params '{}'

檢查回傳的 isWalking 是否為 true


範例 2:取得今日步數

openclaw nodes invoke --node "V2514" --command motion.pedometer --params '{}'

檢查回傳的 steps 欄位。


範例 3:自動化腳本

假設你想在手機開始走路時,自動發送通知:

# 檢查是否在走路
ACTIVITY=$(openclaw nodes invoke --node "V2514" --command motion.activity --params '{}')

if echo "$ACTIVITY" | grep -q '"isWalking":true'; then
  echo "偵測到走路中!"
fi

八、注意事項

1. 需要 ACTIVITY_RECOGNITION 權限

Motion 功能需要 ACTIVITY_RECOGNITION 權限。

開啟方式:

  1. 在 Android 設定中授權「體能活動」權限
  2. 通常路徑:設定 → 應用程式 → OpenClaw Node → 權限 → 體能活動

2. Android 的限制

根據原始碼分析,Android 版本的 Motion 功能有一些限制:

功能狀態說明
即時活動偵測✅ 支援靜止、走路、跑步
騎車偵測❌ 不支援永遠回傳 false
駕駛偵測❌ 不支援永遠回傳 false
歷史活動查詢❌ 不支援會回傳錯誤
歷史計步查詢❌ 不支援會回傳錯誤
距離計算❌ 不支援永遠回傳 null
樓層統計❌ 不支援永遠回傳 null

3. 步數是累積值

motion.pedometer 回傳的 steps從手機上次重啟到現在的累積步數,不是當天的步數。

如果需要計算「今日步數」,需要自己計算差值。


九、與其他功能的比較

Motion vs Photos

功能用途資料類型
Motion活動偵測、計步健康資料
Photos照片媒體檔案

Motion vs Notifications

功能用途資料類型
Motion活動偵測、計步健康資料
Notifications通知系統通知

十、常見問題

Q1:為什麼 isCyclingisAutomotive 永遠是 false?

A:這是 Android 版本的限制。原始碼中這兩個欄位被寫死為 false,因為 Android 的加速度計無法準確區分騎車和駕駛。


Q2:歷史查詢為什麼不能使用?

A:這是 Android 的安全限制。Android 不允許 App 在沒有特殊權限的情況下存取歷史活動資料。如果需要歷史資料,可以考慮使用 Google Fit API 或其他健康 App 的資料。


Q3:步數為什麼是累積的?

A:這是 Android 計步器感測器的設計。它只提供「從開機到現在的總步數」,不提供「每日步數」。如果需要計算每日步數,可以每分鐘抓取一次,然後計算差值。


Q4:如何計算今日步數?

A:目前沒有直接的方法。你需要:

  1. 記錄每天第一次查詢時的 steps
  2. 下次查詢時,用新的值減去之前的值
  3. 差值就是這段時間的步數

十一、結語

Motion 功能是 OpenClaw Node App 中專注於健康資料的功能。它讓你能夠:

  • 🏃 偵測活動狀態:知道使用者是靜止、走路還是跑步
  • 👟 讀取步數資料:取得計步器統計
  • 📊 健康追蹤:統計一段時間的活動量

這個功能完全運行在你的本地裝置上,不會將健康資料上傳到任何雲端伺服器,隱私安全有保障。


文章更新:2026-04-19

感謝微風提供測試設備和建議!

留言