概述
安裝
內容詳情
替代品
什麼是Hubitat MCP Server?
Hubitat MCP Server是一個運行在Hubitat智能家居中樞上的應用程序,它實現了Model Context Protocol (MCP)協議,讓AI助手(如Claude)能夠通過自然語言與你的智能家居系統交互。你可以像與人對話一樣控制設備、查詢狀態、創建自動化規則,無需編寫複雜的代碼或使用專門的應用程序。如何使用Hubitat MCP Server?
使用過程非常簡單:1) 在Hubitat中樞上安裝MCP服務器應用;2) 獲取訪問端點URL;3) 在AI客戶端(如Claude Desktop或Claude.ai)中配置該URL;4) 開始用自然語言控制你的智能家居。整個過程無需額外的服務器或複雜的網絡配置。適用場景
適合希望用自然語言控制智能家居的用戶、需要快速創建複雜自動化規則的非技術用戶、想要通過AI統一管理多個智能設備的家庭、以及需要遠程訪問和控制家居系統的場景。主要功能
如何使用
使用案例
常見問題
相關資源
安裝
{
"mcpServers": {
"hubitat": {
"type": "url",
"url": "http://192.168.1.100/apps/api/123/mcp?access_token=YOUR_TOKEN"
}
}
}
{
"mcpServers": {
"hubitat": {
"type": "url",
"url": "http://YOUR_HUB_IP/apps/api/123/mcp?access_token=YOUR_TOKEN"
}
}
}🚀 Hubitat MCP Server
Hubitat MCP Server 是一款原生的 模型上下文協議 (MCP) 服務器,可直接在 Hubitat Elevation 集線器上運行。與在其他機器上運行單獨的 Node.js 服務器不同,它能在集線器本身原生運行,具備內置規則引擎和 69 個 MCP 工具(通過類別網關在 tools/list 中顯示 30 個)。
測試版軟件:本項目約 99% 由 Claude 生成(“氛圍編碼”)。這是一個正在進行中的項目,歡迎貢獻代碼和提交 錯誤報告!
🚀 快速開始
1. 添加應用
- 進入 應用 > + 添加用戶應用 > MCP 規則服務器。
- 選擇你希望通過 MCP 訪問的設備。
- 點擊 完成。
- 打開應用以查看端點 URL 並管理規則。
2. 獲取端點 URL
應用會顯示兩個端點 URL:
- 本地端點 — 用於本地網絡:
http://192.168.1.100/apps/api/123/mcp?access_token=YOUR_TOKEN
- 雲端點 — 用於遠程訪問(需要 Hubitat 雲訂閱):
https://cloud.hubitat.com/api/YOUR_HUB_ID/apps/123/mcp?access_token=YOUR_TOKEN
3. 連接你的 AI 客戶端
傳輸方式:此服務器使用 可流式 HTTP(非 SSE 或標準輸入輸出)。你的 MCP 客戶端必須支持 HTTP 傳輸 — 大多數客戶端默認支持。
Claude 代碼(命令行界面)
添加到你的 MCP 設置文件(~/.claude.json 或項目 .mcp.json):
{
"mcpServers": {
"hubitat": {
"type": "url",
"url": "http://192.168.1.100/apps/api/123/mcp?access_token=YOUR_TOKEN"
}
}
}
如需遠程訪問,請使用 Hubitat 雲 URL。
Claude 桌面版
添加到你的 Claude 桌面版配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"hubitat": {
"type": "url",
"url": "http://YOUR_HUB_IP/apps/api/123/mcp?access_token=YOUR_TOKEN"
}
}
}
Claude.ai(連接器)
Claude.ai 通過 連接器 支持 MCP 服務器:
- 訪問 claude.ai > 設置 > 連接器。
- 使用你的 Hubitat 端點 URL 添加新連接器。
- 如需遠程訪問,請使用 雲端點 URL,或使用 Cloudflare 隧道 URL。
藉助 Hubitat 雲,你可以在任何地方通過 claude.ai 控制你的智能家居 — 無需本地設置!
其他 AI 服務
任何支持通過 HTTP URL 連接 MCP 服務器的 AI 服務都可以使用此服務器。可使用以下任意一種:
- Hubitat 雲 URL — 擁有 Hubitat 雲訂閱無需額外設置。
- Cloudflare 隧道 — 用於免費的自託管遠程訪問(請參閱 遠程訪問選項)。
✨ 主要特性
MCP 工具(共 69 個 — tools/list 中顯示 30 個)
服務器共有 69 個工具。為使 MCP 的 tools/list 更易於管理,21 個核心工具 始終可見,48 個額外工具 組織在 9 個域名網關 之後。AI 在 tools/list 中可看到 30 項(21 個核心工具 + 9 個網關)。每個網關的描述包含工具摘要(AI 始終可見),無參數調用網關可按需返回完整的參數模式。
核心工具(21 個) — 始終在 tools/list 中可見
設備(5 個) — 控制和查詢設備
| 工具 | 描述 | |------|-------------| | `list_devices` | 列出可訪問的設備(支持分頁) | | `get_device` | 獲取設備的完整詳細信息:屬性、命令、功能 | | `get_attribute` | 獲取特定屬性的值 | | `send_command` | 發送命令(開啟、關閉、設置級別等) | | `get_device_events` | 獲取設備的近期事件 |規則(4 個) — 創建和管理自動化規則
| 工具 | 描述 | |------|-------------| | `list_rules` | 列出所有規則及其狀態 | | `get_rule` | 獲取規則的完整詳細信息(觸發器、條件、動作) | | `create_rule` | 創建新的自動化規則 | | `update_rule` | 更新規則的觸發器、條件、動作或啟用狀態(`enabled=true/false`) |設備管理(1 個)
| 工具 | 描述 | |------|-------------| | `update_device` | 更新設備屬性(標籤、房間、偏好設置等) |系統(5 個) — 集線器模式、HSM 和信息
| 工具 | 描述 | |------|-------------| | `get_hub_info` | 獲取全面的集線器信息:硬件、健康狀況、MCP 統計數據。個人身份信息(名稱、IP、位置)需要集線器管理員讀取權限 | | `get_modes` | 列出位置模式 | | `set_mode` | 更改位置模式(在家、外出、夜間等) | | `get_hsm_status` | 獲取家庭安全監控狀態 | | `set_hsm` | 更改 HSM 佈防模式 |虛擬設備(2 個) — MCP 管理的虛擬設備
| 工具 | 描述 | |------|-------------| | `manage_virtual_device` | 創建或刪除 MCP 管理的虛擬設備(`action`:“創建”,“刪除”)(需要集線器管理員寫入權限) | | `list_virtual_devices` | 列出 MCP 管理的虛擬設備及其狀態 |集線器實用工具(3 個) — 備份、更新和診斷
| 工具 | 描述 | |------|-------------| | `create_hub_backup` | 創建完整的集線器備份(在進行管理員寫入操作前需要) | | `check_for_update` | 檢查是否有更新的 MCP 服務器版本可用 | | `generate_bug_report` | 生成全面的診斷報告 |參考(1 個)
| 工具 | 描述 | |------|-------------| | `get_tool_guide` | 獲取 MCP 服務器本身的完整工具參考 |網關工具(9 個) — 每個網關代理多個工具
無參數調用網關可查看完整的參數模式。使用 tool='<name>' 和 args={...} 調用可執行特定工具。
manage_rules_admin(5 個) — 規則管理
| 工具 | 描述 | |------|-------------| | `delete_rule` | 永久刪除規則(先自動備份) | | `test_rule` | 對規則進行預運行而不執行動作 | | `export_rule` | 將規則導出為 JSON 格式以便備份/共享 | | `import_rule` | 從導出的 JSON 導入規則 | | `clone_rule` | 克隆現有規則(初始狀態為禁用) |manage_hub_variables(3 個) — 集線器變量
| 工具 | 描述 | |------|-------------| | `list_variables` | 列出所有集線器連接器和規則引擎變量 | | `get_variable` | 獲取變量的值 | | `set_variable` | 設置變量的值(若不存在則創建) |manage_rooms(5 個) — 房間管理
| 工具 | 描述 | |------|-------------| | `list_rooms` | 列出所有房間的 ID、名稱和設備數量 | | `get_room` | 獲取房間的詳細信息及分配的設備 | | `create_room` | 創建新房間(需要集線器管理員寫入權限並確認) | | `delete_room` | 永久刪除房間(需要集線器管理員寫入權限並確認) | | `rename_room` | 重命名房間(需要集線器管理員寫入權限並確認) |manage_destructive_hub_ops(3 個) — 破壞性集線器操作
| 工具 | 描述 | |------|-------------| | `reboot_hub` | 重啟集線器(停機 1 - 3 分鐘) | | `shutdown_hub` | 關閉集線器電源(需要物理重啟) | | `delete_device` | 永久刪除任何設備(**不可撤銷**) |所有操作都會造成干擾。集線器管理員工具需要在設置中啟用集線器管理員讀取/寫入權限。寫入工具實施 三層安全網關:啟用集線器管理員寫入權限 + 24 小時內有完整的集線器備份 + 明確的 confirm=true。
manage_apps_drivers(6 個) — 應用/驅動程序列表、源代碼和備份(只讀)
| 工具 | 描述 | |------|-------------| | `list_hub_apps` | 列出集線器上安裝的所有應用 | | `list_hub_drivers` | 列出集線器上安裝的所有驅動程序 | | `get_app_source` | 獲取應用的 Groovy 源代碼 | | `get_driver_source` | 獲取驅動程序的 Groovy 源代碼 | | `list_item_backups` | 列出自動創建的源代碼備份 | | `get_item_backup` | 從備份中獲取源代碼 |manage_app_driver_code(7 個) — 安裝、更新、刪除應用/驅動程序並恢復備份
| 工具 | 描述 | |------|-------------| | `install_app` | 從 Groovy 源代碼安裝新應用 | | `install_driver` | 從 Groovy 源代碼安裝新驅動程序 | | `update_app_code` | 修改現有應用代碼 | | `update_driver_code` | 修改現有驅動程序代碼 | | `delete_app` | 永久刪除應用(自動備份) | | `delete_driver` | 永久刪除驅動程序(自動備份) | | `restore_item_backup` | 將應用/驅動程序恢復到備份版本 |在進行任何修改/刪除操作之前,源代碼會自動備份。
manage_logs(6 個) — 日誌和日誌配置
| 工具 | 描述 | |------|-------------| | `get_hub_logs` | 獲取集線器日誌條目,支持按級別/來源過濾 | | `get_device_history` | 獲取最多 7 天的設備事件歷史記錄 | | `get_debug_logs` | 獲取 MCP 調試日誌條目 | | `clear_debug_logs` | 清除所有 MCP 調試日誌 | | `set_log_level` | 設置 MCP 日誌級別(調試/信息/警告/錯誤) | | `get_logging_status` | 獲取日誌系統狀態和容量 |監控工具需要啟用集線器管理員讀取權限。
manage_diagnostics(9 個) — 診斷、性能、無線電詳細信息和狀態捕獲
| 工具 | 描述 | |------|-------------| | `get_set_hub_metrics` | 記錄/檢索集線器指標,並提供 CSV 趨勢歷史記錄 | | `device_health_check` | 查找無響應/離線設備 | | `get_rule_diagnostics` | 獲取特定規則的全面診斷信息 | | `get_zwave_details` | 獲取 Z-Wave 無線電信息(固件、設備) | | `get_zigbee_details` | 獲取 Zigbee 無線電信息(通道、PAN ID、設備) | | `zwave_repair` | 修復 Z-Wave 網絡(5 - 30 分鐘) | | `list_captured_states` | 列出保存的設備狀態快照 | | `delete_captured_state` | 刪除特定的狀態快照 | | `clear_captured_states` | 刪除所有狀態快照 |manage_files(4 個) — 集線器文件管理器
| 工具 | 描述 | |------|-------------| | `list_files` | 列出文件管理器中的所有文件 | | `read_file` | 讀取文件內容 | | `write_file` | 創建或更新文件(自動備份現有文件) | | `delete_file` | 刪除文件(先自動備份) |寫入/刪除操作需要集線器管理員寫入權限並確認。
規則引擎
通過自然語言創建自動化規則 — AI 會將你的請求轉換為包含觸發器、條件和動作的規則。你也可以通過 Hubitat 網頁界面管理規則。
支持的觸發器(6 種類型)
| 類型 | 描述 | |------|-------------| | `device_event` | 當設備屬性發生變化時(可選持續時間以進行去抖動) | | `button_event` | 按鈕按下、按住、雙擊或釋放 | | `time` | 在特定時間,或相對於日出/日落有偏移 | | `periodic` | 按間隔重複(分鐘、小時或天) | | `mode_change` | 當集線器模式發生變化時 | | `hsm_change` | 當 HSM 狀態發生變化時 |支持的條件(14 種類型)
| 類型 | 描述 | |------|-------------| | `device_state` | 檢查當前設備屬性值 | | `device_was` | 設備處於某種狀態達 X 秒(防循環) | | `time_range` | 在時間窗口內(支持日出/日落) | | `mode` | 當前集線器模式 | | `variable` | 集線器或規則局部變量的值 | | `days_of_week` | 特定的星期幾 | | `sun_position` | 太陽在地平線之上或之下 | | `hsm_status` | 當前 HSM 佈防狀態 | | `presence` | 存在傳感器狀態 | | `lock` | 鎖的狀態 | | `thermostat_mode` | 恆溫器運行模式 | | `thermostat_state` | 恆溫器運行狀態 | | `illuminance` | 光照水平(勒克斯)並進行比較 | | `power` | 功耗(瓦)並進行比較 |支持的動作(29 種類型)
| 類型 | 描述 | |------|-------------| | `device_command` | 向設備發送命令 | | `toggle_device` | 切換設備的開啟/關閉狀態 | | `activate_scene` | 激活場景設備 | | `set_level` | 設置調光器級別,可選持續時間 | | `set_color` | 設置 RGB 設備的顏色 | | `set_color_temperature` | 設置顏色溫度 | | `lock` / `unlock` | 鎖定或解鎖設備 | | `set_variable` | 設置全局變量 | | `set_local_variable` | 設置規則範圍內的變量 | | `set_mode` | 更改集線器模式 | | `set_hsm` | 更改 HSM 佈防模式 | | `delay` | 在執行下一個動作前等待(可選 ID 以取消) | | `if_then_else` | 條件分支 | | `cancel_delayed` | 取消待執行的延遲動作 | | `repeat` | 重複執行動作 N 次 | | `stop` | 停止規則執行 | | `log` | 寫入 Hubitat 日誌 | | `capture_state` / `restore_state` | 保存和恢復設備狀態 | | `send_notification` | 推送通知 | | `set_thermostat` | 設置恆溫器模式、設定點、風扇模式 | | `http_request` | HTTP GET/POST(Webhook、外部 API) | | `speak` | 文本轉語音,可選音量 | | `comment` | 僅用於文檔記錄(無操作) | | `set_valve` | 打開或關閉閥門 | | `set_fan_speed` | 設置風扇速度 | | `set_shade` | 打開、關閉或調整百葉窗位置 | | `variable_math` | 對變量進行算術運算 |規則示例
運動激活燈光:
{
"name": "Motion Light",
"triggers": [
{ "type": "device_event", "deviceId": "123", "attribute": "motion", "value": "active" }
],
"conditions": [
{ "type": "time_range", "startTime": "sunset", "endTime": "sunrise" }
],
"actions": [
{ "type": "device_command", "deviceId": "456", "command": "on" },
{ "type": "delay", "seconds": 300, "delayId": "motion-off" },
{ "type": "device_command", "deviceId": "456", "command": "off" }
]
}
帶去抖動的溫度控制:
{
"name": "AC On When Hot",
"triggers": [
{ "type": "device_event", "deviceId": "1", "attribute": "temperature",
"operator": ">", "value": "78", "duration": 300 }
],
"actions": [
{ "type": "device_command", "deviceId": "8", "command": "on" }
]
}
帶局部變量的按鈕狀態機:
{
"name": "Smart Button Toggle",
"localVariables": { "lastScene": "natural" },
"triggers": [
{ "type": "button_event", "deviceId": "80", "action": "pushed" }
],
"actions": [
{
"type": "if_then_else",
"condition": { "type": "variable", "variableName": "lastScene",
"operator": "equals", "value": "natural" },
"thenActions": [
{ "type": "activate_scene", "sceneDeviceId": "nightlight-scene" },
{ "type": "set_local_variable", "variableName": "lastScene", "value": "nightlight" }
],
"elseActions": [
{ "type": "activate_scene", "sceneDeviceId": "natural-scene" },
{ "type": "set_local_variable", "variableName": "lastScene", "value": "natural" }
]
}
]
}
📦 安裝指南
選項 A:Hubitat 包管理器(推薦)
如果你還沒有安裝 Hubitat 包管理器(HPM),請先按照 HPM 安裝說明 進行設置。
安裝 HPM 後:
- 打開 HPM > 安裝。
- 搜索 “MCP”。
- 選擇 MCP 規則服務器 並安裝。
就這麼簡單!HPM 將自動安裝父應用和子應用,並在有更新時通知你。
HPM 替代方法:你也可以使用 HPM > 安裝 > 從 URL 安裝 並粘貼:
https://raw.githubusercontent.com/kingpanther13/Hubitat-local-MCP-server/main/packageManifest.json
選項 B:手動安裝
你需要安裝 兩個 應用文件:
1. 安裝父應用(MCP 規則服務器):
- 訪問 Hubitat 網頁界面 > 應用代碼 > + 新建應用。
- 點擊 導入 並粘貼此 URL:
https://raw.githubusercontent.com/kingpanther13/Hubitat-local-MCP-server/main/hubitat-mcp-server.groovy
- 點擊 導入 > 確定 > 保存。
- 點擊 OAuth > 在應用中啟用 OAuth > 保存。
2. 安裝子應用(MCP 規則):
- 訪問 應用代碼 > + 新建應用。
- 點擊 導入 並粘貼此 URL:
https://raw.githubusercontent.com/kingpanther13/Hubitat-local-MCP-server/main/hubitat-mcp-rule.groovy
- 點擊 導入 > 確定 > 保存。
- (子應用無需 OAuth)
📚 詳細文檔
集線器管理員工具
集線器管理員讀取和寫入訪問權限 默認禁用,必須在應用設置中明確啟用。
啟用集線器管理員工具
1. 在 Hubitat 網頁界面中打開 **應用** > **MCP 規則服務器**。 2. 在 **集線器管理員訪問** 下切換: - **啟用集線器管理員讀取工具** — 用於只讀的集線器信息。 - **啟用集線器管理員寫入工具** — 用於備份、重啟、關閉、Z-Wave 修復和應用/驅動程序管理。 3. 如果你的集線器啟用了 **集線器安全**,還需配置: - **集線器安全用戶名** 和 **密碼** 在集線器安全部分。安全網關
所有集線器管理員寫入工具實施 **三層安全網關**: 1. 必須在設置中 **啟用** 集線器管理員寫入權限。 2. AI 必須明確傳遞 `confirm=true`。 3. 必須在過去 24 小時內存在完整的集線器 **備份**(自動強制執行)。此外,修改或刪除現有應用/驅動程序的工具會在進行更改之前自動備份項目的源代碼。
項目備份與恢復
當你使用 `update_app_code`、`update_driver_code`、`delete_app` 或 `delete_driver` 時,服務器會在進行更改之前自動保存 **原始源代碼**。 - 備份文件以 `.groovy` 文件形式存儲在集線器的本地 **文件管理器** 中。 - 文件名為 `mcp-backup-app-通過 MCP 恢復:
- 使用
list_item_backups查看可用的備份。 - 使用
restore_item_backup並提供備份密鑰和confirm=true。
手動恢復(不使用 MCP):
- 訪問 Hubitat 網頁界面 > 設置 > 文件管理器。
- 下載備份文件(例如,
mcp-backup-app-123.groovy)。 - 訪問 應用代碼(或 驅動程序代碼)> 選擇應用 > 粘貼源代碼 > 保存。
集線器安全支持
如果你的集線器啟用了集線器安全(網頁界面需要登錄),MCP 服務器會自動處理身份驗證: - 在應用設置中配置你的集線器安全用戶名和密碼。 - 服務器會緩存會話 cookie 30 分鐘。 - 過期的 cookie 會自動清除並重新進行身份驗證。 - 如果未啟用集線器安全,則無需憑據。性能與限制
集線器硬件推薦
| 集線器型號 | 推薦用途 | |-----------|----------------| | **C-7** | 適用於基本使用,處理大型設備列表或複雜規則時可能較慢 | | **C-8** | 適合大多數用戶 | | **C-8 Pro** | 最適合大量使用、大量設備(100 個以上)或複雜自動化場景 |已知限制
- **`list_devices` 且 `detailed=true`** — 在 50 個以上設備時可能較慢。使用分頁:`list_devices(detailed=true, limit=25, offset=0)`。 - **持續時間觸發器** — 最大為 2 小時(7200 秒)。 - **捕獲狀態** — 默認限制為 20 個(可在設置中配置為 1 - 100 個)。 - **Hubitat 雲響應** — 最大為 128KB(AWS MQTT 限制)。對於大型設備列表,使用分頁。 - 無即時事件流(僅 MCP 響應)。 - 日出/日落時間每天重新計算。故障排除
設備未找到
確保設備已在應用的“選擇 MCP 訪問設備”設置中被選中。OAuth 令牌無效
1. 打開應用代碼 > MCP 規則服務器。 2. 點擊 OAuth > 在應用中啟用 OAuth。 3. 保存。 4. 重新在應用中打開以獲取新令牌。規則未觸發
- 檢查應用設置中的“啟用規則引擎”是否已開啟。 - 啟用“調試日誌記錄”並檢查 Hubitat 日誌。 - 驗證觸發設備是否已選擇用於 MCP 訪問。 - 對於基於持續時間的觸發器,確保條件在整個持續時間內保持為真。按鈕事件無效
- 確保你使用的是 `button_event` 觸發器類型(而非 `device_event`)。 - 驗證按鈕動作類型:`pushed`、`held`、`doubleTapped` 或 `released`。list_devices(detailed=true) 通過 Hubitat 雲失敗
Hubitat 雲有 **128KB 響應大小限制**(AWS MQTT 限制)。使用分頁: ``` list_devices(detailed=true, limit=25, offset=0) // 前 25 個設備 list_devices(detailed=true, limit=25, offset=25) // 接下來的 25 個設備 ``` 響應中包含 `total`、`hasMore` 和 `nextOffset` 以幫助分頁。v0.0.x 版本的規則未顯示
0.1.0 版本使用了新的父/子架構。存儲在 `state.rules` 中的舊規則不會自動遷移。你需要通過 UI 或 MCP 重新創建規則。報告錯誤
為了更方便地報告錯誤: 1. 設置調試日誌級別:設置 > MCP 調試日誌級別 > “調試”,或讓你的 AI 使用 `set_log_level` 設置為 “調試”。 2. 重現問題。 3. 讓你的 AI 使用 `generate_bug_report` 工具 — 它將收集診斷信息並格式化一個可直接提交的報告。 4. 在 [GitHub 問題](https://github.com/kingpanther13/Hubitat-local-MCP-server/issues) 中提交報告。未來計劃
未來計劃
展望性想法 — 以下所有內容均為推測,需要進一步研究以確定可行性。這些功能均不保證或承諾實現。
狀態標識:
[ ]= 未開始 |[~]= 進行中 / 部分完成 |[x]= 已完成 |[?]= 需要研究 / 可行性未知2025 年 2 月進行了可行性研究。每個項目現在都包含難度評級(1 - 5)、工作量估計和基於全面代碼庫分析的實施說明。
難度標識:
1= 簡單 |2= 直接 |3= 中等 |4= 複雜 |5= 極其複雜工作量標識:
S= 小(小時) |M= 中(1 - 3 天) |L= 大(4 天以上)
規則引擎增強
觸發器增強
-
[x] 條件觸發器(在觸發時評估) —
難度:1 | 工作量:S已實現。
evaluateTriggerCondition()方法使用完整的條件系統評估每個觸發器的condition字段。每個觸發器處理程序已經調用此方法。可能需要更好的文檔和 MCP 工具模式更新,以使該功能更易於發現。 -
[x] Cron/週期性觸發器 —
難度:1 | 工作量:S已實現。
periodic觸發器類型通過schedule()內部生成 cron 表達式。要暴露原始 cron 支持,添加一個cron子類型,直接傳遞用戶提供的 cron 表達式。Hubitat 接受標準的 7 字段 cron 表達式。用戶提供的字符串需要驗證。 -
[ ] 端點/Webhook 觸發器 —
難度:3 | 工作量:M可行。在父應用的
mappings塊中添加一個單一的調度端點(例如,/mcp/webhook?ruleKey=<key>)。父應用通過鍵查找子規則,並使用請求體/參數作為事件數據調用executeRule("webhook", webhookEvt)。由於mappings是編譯時的,因此無法實現每個規則的動態路徑,但帶有查詢參數的共享端點可以工作。OAuth 訪問令牌已經保護了路徑。實施計劃:
- 在父應用中添加
GET/POST /webhook映射。 - 在子應用的
subscribeToTriggers()中添加webhook觸發器類型。 - 父應用通過鍵查找將請求調度到匹配的子規則。
- 將請求體、頭和查詢參數打包成偽事件,用於變量替換。
- 在父應用中添加
-
[ ] 集線器變量更改觸發器 —
難度:3 | 工作量:M部分可行。Hubitat 沒有為集線器變量更改提供原生的
subscribe()方法。有兩種方法:(A) 輪詢 — 使用schedule()每 5 - 10 秒比較當前值與atomicState中的最後已知值。這會增加延遲和集線器負載。(B) 變量連接器解決方法 — Hubitat 的變量連接器功能(固件 ≥ 2.3.4)將集線器變量暴露為設備屬性,可以通過現有的device_event觸發器進行訂閱。選項 B 更簡潔,但需要用戶創建變量連接器設備。實施計劃:
- 添加
variable_change觸發器類型,可配置輪詢間隔。 - 在
atomicState.variableSnapshots中存儲最後已知值。 - 在每個輪詢週期中,比較並在值更改時觸發規則。
- 將變量連接器方法記錄為首選替代方案。
- 添加
-
[ ] 系統啟動觸發器 —
難度:2 | 工作量:S可行。Hubitat 支持
subscribe(location, "systemStart", handler)。添加一個system_start觸發器類型。集線器重啟後,應用恢復,initialize()→subscribeToTriggers()運行,系統啟動事件觸發規則。小邊緣情況:事件可能在所有應用完成恢復之前觸發 — 需要在硬件上進行測試。實施計劃:
- 在子應用中添加
system_start觸發器類型。 - 在
subscribeToTriggers()中訂閱location "systemStart"事件。 - 處理程序調用
executeRule("system_start")。
- 在子應用中添加
-
[ ] 日期範圍觸發器 —
難度:2 | 工作量:S可行。作為條件實現比作為觸發器更好。
date_range條件類型使用new Date()檢查開始/結束日期,遵循與time_range和days_of_week相同的模式。如果作為觸發器實現,使用schedule()在範圍開始時觸發。java.util.Calendar在沙箱中可用。實施計劃:
- 在
evaluateCondition()中添加date_range條件類型。 - 接受
startDate和endDate(ISO 格式)。 - 可選地添加一個
date_range觸發器,在範圍開始時調度一次性事件。
- 在
條件增強
-
[ ] 必需表達式(規則門)與飛行中動作取消 —
難度:4 | 工作量:L可行但複雜。“門”是在動作執行期間持續監控的條件。如果條件變為假,則取消飛行中的延遲動作。現有的
cancelledDelayIds機制為取消提供了基礎。門需要為相關設備單獨進行subscribe()調用,處理程序檢查門條件並將所有待處理的延遲 ID 標記為取消。這是最具架構複雜性的增強 — 它需要在延遲動作鏈期間進行異步監控和仔細的狀態管理。實施計劃:
- 在規則結構中添加
requiredExpressions數組,與conditions並列。 - 單獨訂閱與門相關的設備事件。
- 門處理程序評估條件,如果為假則取消所有活動延遲。
- 在
atomicState.activeDelayIds中跟蹤每個規則的所有活動延遲 ID。 - 在規則正常執行完成時添加清理邏輯。
- 在規則結構中添加
-
[ ] 完整布爾表達式構建器(AND/OR/XOR/NOT 嵌套) —
難度:4 | 工作量:L可行。用遞歸樹結構替換扁平的條件數組 +
conditionLogic切換:{operator: "AND", operands: [...]}。將evaluateConditions()重寫為樹遍歷器。NOT 包裝單個操作數;XOR 檢查恰好一個為真。現有的evaluateCondition()用於葉節點已經模塊化。主要挑戰是 MCP 工具的易用性和向後兼容性 — 扁平數組格式需要遷移邏輯。實施計劃:
- 定義具有
operator和operands字段的樹數據結構。 - 實現遞歸的
evaluateConditionTree()方法。 - 支持舊的扁平格式和新的樹格式(遷移路徑)。
- 更新
create_rule/update_rule工具模式。 - 更新
describeCondition()以進行遞歸格式化。
- 定義具有
-
[ ] 每個規則的私有布爾值 —
難度:2 | 工作量:S可行。已經可以通過
atomicState.localVariables實現。添加一個專用的set_rule_boolean動作類型,調用parent.setRuleBooleanOnChild(targetRuleId, boolName, value),該方法更新目標子規則的局部變量。添加一個rule_boolean條件類型,讀取特定規則的局部變量。父應用通過getChildAppById()調解跨規則訪問。實施計劃:
- 在子應用中添加
set_rule_boolean動作類型。 - 在
evaluateCondition()中添加rule_boolean條件類型。 - 在父應用中添加
setRuleBooleanOnChild()方法。 - 更新 MCP 工具模式。
- 在子應用中添加
動作增強
-
[ ] 隨時間漸變調光器 —
難度:3 | 工作量:M可行。許多調光器原生支持
setLevel(level, duration),代碼庫已經使用了該功能。對於軟件漸變:計算步長和間隔,然後使用runIn()進行增量步驟。示例:在 60 秒內從 0 到 100 = 每 3 秒 5%(20 步)。將步數限制在 ~20 - 30,以避免過度佔用集線器的調度器。與色溫漸變和斜坡動作共享步進實用程序。實施計劃:
- 添加
fade_dimmer動作類型,包含startLevel、endLevel、durationSeconds。 - 實現
rampValue()實用程序,用於步進runIn()調度。 - 在
runIn()上使用[overwrite: false]以避免衝突回調。 - 當設備支持時,回退到原生
setLevel(level, duration)。
- 添加
-
[ ] 隨時間改變色溫 —
難度:3 | 工作量:M可行。與漸變調光器模式相同。使用共享的
rampValue()實用程序,在每個步驟調用setColorTemperature()。一些設備原生支持setColorTemperature(temp, level, duration)。溫度範圍因設備而異(通常為 2000K - 6500K)。實施計劃:
- 添加
fade_color_temperature動作類型,包含startTemp、endTemp、durationSeconds。 - 重用漸變調光器的
rampValue()實用程序。 - 處理溫度步驟的整數舍入。
- 添加
-
[ ] 按模式執行動作 —
難度:2 | 工作量:S可行。添加一個
per_mode動作類型,包含一個模式名稱到動作列表的映射。在執行時,檢查location.mode並執行匹配的動作列表。結構上類似於if_then_else,但有多個分支。現有的if_then_else與mode條件已經提供了此功能,但不夠方便。實施計劃:
- 添加
per_mode動作類型,包含modeActions映射。 - 在執行時查找
location.mode。 - 使用現有的
executeAction()基礎設施執行匹配的動作列表。
- 添加
-
[ ] 等待事件 / 等待表達式 —
難度:5 | 工作量:L部分可行。需要在執行流中暫停,直到外部事件發生。在 Hubitat 的單線程模型中,沒有阻塞等待。實現方法:將當前執行狀態(動作索引、上下文)保存到
atomicState,訂閱目標事件,從執行中返回,然後在事件觸發時恢復 — 類似於delay模式,但由事件觸發。必須設置超時。等待訂閱和其他觸發器之間可能存在競爭條件。實施計劃:
- 添加
wait_for_event動作類型,包含目標設備/屬性和強制超時。 - 將執行狀態保存到
atomicState(與delay模式相同)。 - 為目標事件創建臨時訂閱。
- 在事件觸發或超時後,從保存的狀態恢復執行。
- 恢復後清理訂閱。
- 添加
-
[ ] 重複直到 / 重複當 —
難度:4 | 工作量:L部分可行。擴展現有的
repeat動作,在每次迭代之前/之後評估條件。關鍵安全措施:硬限制為 100 次迭代(與現有repeat限制匹配),強制最大迭代參數,以及循環保護。如果循環體包含延遲,每次迭代都需要保存狀態/恢復模式,這使得實現極其複雜。建議最初僅支持同步循環(循環體中無延遲)。實施計劃:
- 添加
repeat_while和repeat_until動作類型。 - 每次迭代通過
evaluateCondition()評估條件。 - 強制
maxIterations上限(≤100)。 - 階段 1:僅支持同步循環(循環體中無延遲動作)。
- 階段 2(未來):支持包含延遲的循環,具有狀態持久化。
- 添加
-
[ ] 規則間控制 —
難度:2 | 工作量:M可行。添加
enable_rule、disable_rule和trigger_rule動作類型。子應用調用父應用,父應用查找目標子規則並調用現有的enableRule()/disableRule()/executeRule()。為防止規則間的乒乓循環,傳遞一個“觸發鏈深度”計數器,並拒絕深度超過 5 的執行。實施計劃:
- 添加
enable_rule、disable_rule、trigger_rule動作類型。 - 在父應用中實現
triggerChildRule(targetRuleId, depth)。 - 在
executeRule()中添加深度計數器,以防止級聯循環。 - 通過
getChildAppById()驗證目標規則是否存在。
- 添加
-
[ ] 文件寫入/追加/刪除 —
難度:2 | 工作量:S可行。父應用已經有
uploadHubFile()/downloadHubFile()包裝器。新的動作類型file_write、file_append、file_delete調用父應用方法。追加操作進行讀-修改-寫循環(非原子操作)。需要集線器管理員寫入權限。內容中的變量替換支持動態日誌文件。實施計劃:
- 添加
file_write、file_append、file_delete動作類型。 - 子應用調用
parent.writeFileFromRule(fileName, content, mode)。 - 根據
[A-Za-z0-9._-]模式驗證文件名。 - 應用集線器管理員寫入權限以確保安全。
- 添加
-
[ ] 音樂/警報控制 —
難度:2 | 工作量:S可行。圍繞現有的
device_command提供便利包裝。Hubitat 有capability.musicPlayer(播放、暫停、停止、設置音量、播放曲目)和capability.alarm(兩者、警報器、頻閃燈、關閉)。現有的speak動作展示了帶有音量的文本轉語音模式。這些將是具有內置功能驗證的便捷動作類型。實施計劃:
- 添加
play_music動作類型,包含設備、命令、音量、曲目參數。 - 添加
activate_siren動作類型,包含設備、模式(警報器/頻閃燈/兩者/關閉)。 - 在執行前驗證設備是否具有所需功能。
- 添加
-
[x] 自定義動作(任何功能 + 命令) —
難度:1 | 工作量:S已實現。現有的
device_command動作類型通過動態調用(device."${command}"(*params))接受任何設備 ID、命令和參數。這就是“任何功能 + 命令”功能。 -
[ ] 禁用/啟用設備 —
難度:1 | 工作量:S可行(部分完成)。
update_deviceMCP 工具已經通過內部/device/disable端點支持enabled屬性。一個新的set_device_enabled規則動作類型包裝相同的調用。需要集線器管理員寫入權限。如果目標設備用於活動規則觸發器,應發出警告。實施計劃:
- 添加
set_device_enabled動作類型,包含deviceId和enabled布爾值。 - 調用
parent.setDeviceEnabled(deviceId, enabled)。 - 檢查設備是否用於任何規則觸發器併發出警告。
- 添加
-
[ ] 斜坡動作(連續升高/降低) —
難度:3 | 工作量:M部分可行。與漸變調光器/色溫模式相同的軟件步進模式。通用的
ramp動作針對任何數字屬性。真正的連續升高/降低(如按住物理調光器按鈕)使用startLevelChange(direction)/stopLevelChange(),但無法從軟件進行時間限制。與漸變動作共享rampValue()實用程序。實施計劃:
- 添加
ramp動作類型,包含設備、屬性、起始值、結束值、持續時間、步數。 - 重用漸變動作的
rampValue()實用程序。 - 對於具有
startLevelChange/stopLevelChange的設備,提供硬件斜坡選項。
- 添加
-
[ ] Ping IP 地址—難度:3 | 工作量:M不可行。Hubitat 的沙箱 Groovy 環境不提供 ICMP、
HubAction、原始套接字或Runtime.exec()。只有驅動程序代碼可以使用HubAction進行某些協議。替代方案:HTTP 可達性檢查 (下面添加為替代項)
-
[ ] HTTP 可達性檢查 (替代 Ping) —
難度:2 | 工作量:S可行。使用
httpGet()向目標 IP 發送 HTTP 請求,並將成功/失敗解釋為可達/不可達。這不是真正的 ICMP ping,但可以實現對具有 Web 服務器的設備的網絡可達性測試。另一個選項:控制一個社區驅動程序,通過現有的device_command動作暴露 ping 功能。實施計劃:
- 添加
http_check動作類型,包含目標 URL 和超時。 - 在 try-catch 塊中使用
httpGet()。 - 將結果設置在一個變量中(可達/不可達),用於條件判斷。
- 文檔中說明為“HTTP 可達性檢查”而非“ping”。
- 添加
變量系統
-
[ ] 集線器變量連接器(作為設備屬性暴露) —
難度:4 | 工作量:L部分可行。Hubitat 的內置變量連接器功能(固件 ≥ 2.3.4)已經處理集線器變量。對於 MCP 規則引擎變量,將它們作為設備屬性暴露需要:(1) 一個自定義虛擬設備驅動程序,(2) 父應用通過
addChildDevice()創建一個實例,(3) 父應用在變量寫入時通過sendEvent()更新屬性。自定義驅動程序會為項目增加第三個文件和安裝複雜性。實施計劃:
- 創建
MCP 變量連接器驅動程序(新的 Groovy 文件)。 - 父應用在首次寫入變量時(或按需)自動創建一個子設備。
- 擴展
setRuleVariable()以在連接器設備上也調用sendEvent()。 - 將驅動程序添加到 HPM 包清單中。
- 文檔中說明集線器變量應使用 Hubitat 的內置連接器。
- 創建
-
[ ] 變量更改事件 —
難度:3 | 工作量:M可行。對於 MCP 規則引擎變量:擴展
setRuleVariable()以觸發sendLocationEvent(name: "ruleVariableChanged", value: varName, data: newValue)。帶有variable_change觸發器的子規則訂閱此事件。對於集線器變量:使用上述“集線器變量更改觸發器”中的輪詢方法或利用變量連接器。實施計劃:
- 在父應用的
setRuleVariable()中添加sendLocationEvent()調用。 - 在子應用中添加
variable_change觸發器類型。 - 子應用訂閱
location "ruleVariableChanged"事件。 - 在處理程序中按變量名稱過濾。
- 在父應用的
-
[ ] 局部變量觸發器 —
難度:2 | 工作量:S可行。在
set_local_variable或variable_math修改局部變量後,檢查匹配的local_variable_change觸發器,並通過runIn(0, handler)異步重新觸發。如果規則觸發自身,存在無限循環的高風險 — 建議僅在外部更改(另一個規則通過規則間控制設置此規則的局部變量)時觸發。循環保護提供安全網。實施計劃:
- 添加
local_variable_change觸發器類型。 - 在局部變量修改後,調度異步重新評估。
- 添加
triggerSource跟蹤,以防止自觸發循環。 - 依賴循環保護作為安全網。
- 添加
內置自動化等效功能
理念:優先使用原生 Hubitat 應用。MCP 服務器旨在補充 Hubitat,而非替代它。這些原生應用(房間照明、模式管理器、按鈕控制器等)維護良好,有合適的用戶界面,並且經過了實戰檢驗。MCP 已經可以與這些應用的 效果 進行交互 — 它可以讀取/設置模式、控制設備、對設備事件進行觸發,並查看它們創建的虛擬設備。
AI 助手是魔法師。與其構建專門的嚮導工具來生成 MCP 規則以複製原生應用已經實現的功能,AI 可以使用現有的
create_rule和完整的規則引擎即時編寫規則。針對這些模式的專用 MCP 工具 優先級較低,只有在 MCP 確實無法以某種方式與原生應用的功能進行交互時才會實現。每個項目將根據具體情況進行評估。
-
[ ] 房間照明(以房間為中心的照明,帶有空位模式) —
低優先級首選原生應用。Hubitat 的內置房間照明應用可以很好地處理此功能。MCP 已經可以控制相同的設備,對運動事件進行觸發,並使用
if_then_else/delay/cancel_delayed通過create_rule構建等效邏輯(如果需要)。除非發現 MCP 無法與房間照明的行為進行交互的差距,否則不需要專用的 MCP 工具。 -
[ ] 區域運動控制器(多傳感器區域) —
低優先級首選原生應用。Hubitat 的內置區域運動控制器創建一個虛擬運動設備,聚合多個傳感器。如果用戶將此虛擬設備添加到 MCP 的選定設備中,MCP 已經可以看到並對其進行觸發。AI 也可以使用
create_virtual_device+create_rule結合多設備觸發器複製此邏輯(如果需要)。只有在 MCP 無法與原生應用的輸出設備進行充分交互時才進行實現。 -
[ ] 模式管理器(自動化模式更改) —
低優先級首選原生應用。Hubitat 的內置模式管理器處理基於時間和存在的模式更改。MCP 已經可以通過
get_modes/set_mode讀取/設置模式,對mode_change進行觸發,並構建基於時間/存在觸發的規則來調用set_mode。除非發現特定的交互差距,否則不需要專用工具。 -
[ ] 按鈕控制器(簡化的按鈕到動作映射) —
低優先級首選原生應用。Hubitat 的內置按鈕控制器原生處理此功能。MCP 規則引擎已經有
button_event觸發器,完全支持按鈕編號(1 - 20)和動作類型(按下/按住/雙擊/釋放)。AI 可以通過create_rule直接創建這些規則。不需要專用工具。 -
[ ] 恆溫器調度器(基於時間表的設定點) —
低優先級首選原生應用。Hubitat 的內置恆溫器調度器處理基於時間表的設定點。MCP 規則引擎已經有
time觸發器、set_thermostat動作、mode和days_of_week條件 — AI 可以直接編寫時間表規則。除非 MCP 無法與原生調度器的效果進行交互,否則不需要專用工具。 -
[ ] 鎖碼管理器 —
低優先級 — 需要評估可能需要專用工具。Hubitat 的內置鎖碼管理器通過用戶界面處理代碼管理。MCP 已經可以通過
send_command(setCode,deleteCode)發送鎖碼命令,並讀取lockCodes/lastCodeName屬性,因此目前可以進行基本交互。然而,原生應用的內部代碼庫存和臨時代碼調度無法直接訪問。如果原生應用的輸出證明不足,專用工具可能為程序化代碼管理增加價值。需要具體情況具體評估。 -
[ ] 組和場景(Zigbee 組消息)—不可行不可行。
zigbee對象和sendHubCommand()與Protocol.ZIGBEE僅在驅動程序中可用,不在應用中。MCP 服務器是一個應用,無法發送原始 Zigbee 命令或管理 Zigbee 組 ID。Zigbee 組管理由閉源平臺內部處理,沒有文檔化的 HTTP API 端點。已有替代方案:
- 利用內置的組和場景應用:指導用戶通過內置應用創建 Zigbee 組,然後通過 MCP 的
send_command控制生成的組激活器設備(組激活器設備是 MCP 已經可以控制的常規開關/調光器設備) - 軟件級組控制:創建規則,依次向多個設備發送命令 — 已經可以通過多設備規則或
device_command動作實現 - 場景捕獲/恢復:現有的
capture_state/restore_state動作提供了跨多個設備的類似場景功能
- 利用內置的組和場景應用:指導用戶通過內置應用創建 Zigbee 組,然後通過 MCP 的
HPM 與應用/集成管理
-
[ ] 按關鍵字搜索 HPM 存儲庫 —
難度:2 | 工作量:S可行。HPM 使用公共 GraphQL API
https://hubitatpackagemanager.azurewebsites.net/graphql。search_hpm_packages工具通過httpPost()發送 GraphQL 查詢,並返回匹配的包,包含名稱、描述、作者和清單 URL。主存儲庫列表https://raw.githubusercontent.com/HubitatCommunity/hubitat-packagerepositories/master/repositories.json提供離線瀏覽。實施計劃:
- 創建
search_hpm_packagesMCP 工具。 - 向 Azure 端點發送 GraphQL
Search查詢。 - 解析並返回結果,對大型結果集進行分頁。
- 在
state中緩存結果,以減少 API 調用。
- 創建
-
[ ] 通過 HPM 安裝/卸載包 —
難度:4 | 工作量:L部分可行。HPM 沒有程序化 API — 它純粹是基於用戶界面的。繞過方法:獲取包清單 JSON,下載每個應用/驅動程序源,並通過現有的
install_app/install_driver工具進行安裝。然而,以這種方式安裝的包不會出現在 HPM 的“已安裝”列表中,會造成碎片化體驗。卸載需要通過文檔不完善的/installedapp/端點移除運行中的應用實例(不僅僅是代碼)。實施計劃:
- 使用繞過方法創建
install_packageMCP 工具。 - 獲取清單 → 下載源 → 通過現有工具安裝。
- 在文件管理器中跟蹤已安裝的包,以便進行更新檢查。
- 文檔中說明限制:HPM 不會知道這些安裝。
- 對於卸載:使用
delete_app/delete_driver刪除代碼,研究/installedapp/disable用於實例。
- 使用繞過方法創建
-
[ ] 檢查已安裝包的更新 —
難度:3 | 工作量:M部分可行。對於 MCP 跟蹤的包(來自上述安裝工具):獲取每個清單 URL 並比較版本 — 與現有的 MCP 服務器
checkForUpdate()模式相同。對於 HPM 管理的包:HPM 的內部狀態無法從另一個應用訪問。需要一個並行跟蹤數據庫。實施計劃:
- 創建
check_package_updatesMCP 工具。 - 從文件管理器讀取 MCP 跟蹤的包列表。
- 獲取每個清單 URL 並比較版本字段。
- 返回有可用更新的包列表。
- 優雅地處理獲取失敗(GitHub 速率限制、網絡問題)。
- 創建
-
[ ] 搜索尚未啟用的官方集成 —
難度:3 | 工作量:M部分可行。沒有文檔化的端點用於枚舉可用的內置應用。
list_hub_apps工具返回用戶安裝的應用類型,而不是內置應用。實用方法:維護一個硬編碼的已知官方集成目錄(Hue Bridge、Sonos、Alexa、Google Home、HomeKit 等),並檢查哪些有運行實例。列表僅在固件更新時更改。實施計劃:
- 創建
list_available_integrationsMCP 工具。 - 維護硬編碼的官方集成目錄及其描述。
- 檢查已安裝的應用實例,以確定哪些已經啟用。
- 返回可用但未啟用的集成,並提供設置指南。
- 每次 MCP 服務器發佈時更新目錄。
- 創建
-
[ ] 從 GitHub、論壇等發現社區應用/驅動程序 —
難度:3 | 工作量:M部分可行。主要機制:上述的 HPM 存儲庫搜索。GitHub API 搜索 (
https://api.github.com/search/repositories?q=hubitat+driver) 可以工作,但未經身份驗證的速率限制為每分鐘 10 次請求。Hubitat 社區論壇沒有搜索 API。文件管理器中的精選列表是一個實用的備用方案。實施計劃:
- 創建
search_community_packagesMCP 工具。 - 主要:通過 GraphQL 搜索 HPM 存儲庫。
- 次要:可選的 GitHub API 搜索,處理速率限制。
- 返回合併結果,並註明來源。
- 可選地在文件管理器中維護一個精選的熱門包列表。
- 創建
儀表盤管理
- [ ] 以編程方式創建、修改、刪除儀表盤 —
難度:4 | 工作量:L通過內部 HTTP 端點可行(需要實證測試)。Hubitat 的儀表盤系統使用父 - 子應用模式:“Hubitat 儀表盤”是父應用,每個單獨的儀表盤是子應用。深入研究發現了網頁界面使用的
/installedapp/createchild/內部端點。關鍵發現:
- 儀表盤列表:
GET /dashboard/all?pinToken=<token>或通過GET /hub2/appsList過濾儀表盤子應用。 - 儀表盤創建:
GET /installedapp/createchild/hubitat/Dashboard/parent/{dashboardParentAppId}— 在父應用下創建一個新的子儀表盤。返回重定向到/installedapp/configure/{newChildId}。 - 儀表盤佈局讀取:
GET /apps/api/<parentAppId>/dashboard/<childAppId>/layout?access_token=<token>。 - 儀表盤佈局寫入:
POST /apps/api/<parentAppId>/dashboard/<childAppId>/layout,使用 Bearer 令牌身份驗證。 - 儀表盤刪除:可能是
POST /installedapp/configure/{childId}並執行刪除操作,或GET /installedapp/remove/{childId}(確切端點需要測試)。 - 子應用類型:命名空間
hubitat,名稱Dashboard(從社區論壇的錯誤消息中確認)。
重要注意事項:
- Groovy 中的
addChildApp()無法 從 MCP 應用創建儀表盤子應用(父應用不匹配),因此需要使用 HTTP 端點方法。 createchild端點返回 HTTP 重定向(302),而不是 JSON — 需要從 Location 頭中提取新的子應用 ID。- 創建後的配置(儀表盤名稱、授權設備)需要單獨的 POST 請求到
/installedapp/configure/{id},使用表單編碼數據。 - 儀表盤父應用必須已經安裝在集線器上。
/dashboard/all的pinToken需要從儀表盤父應用獲取,或者本地 API 調用可能不需要。- 固件 ≥ 2.3.9 引入了“簡易儀表盤”作為替代方案 — 其內部結構可能不同。
- 所有端點均未文檔化,可能會隨固件版本變化。
實施計劃:
- 通過
GET /hub2/appsList(按應用名稱過濾)發現儀表盤父應用 ID。 - 創建
create_dashboard工具:調用GET /installedapp/createchild/hubitat/Dashboard/parent/{parentId},從重定向中提取新的子應用 ID。 - 配置新儀表盤:
POST /installedapp/configure/{newId},包含名稱和授權設備。 - 創建
list_dashboards工具,通過/dashboard/all或/hub2/appsList。 - 創建
get_dashboard_layout/update_dashboard_layout工具,用於佈局 JSON 的讀取/寫入。 - 創建
delete_dashboard工具:測試/installedapp/remove/{childId}端點。 - 將儀表盤父應用 ID 和訪問令牌添加到 MCP 應用偏好設置中。
- 需要集線器管理員寫入權限以確保安全。
- 階段 1:實現列表 + 讀取/修改佈局(已知可用的端點)。
- 階段 2:實現創建/刪除(需要在集線器硬件上進行實證測試)。
- 儀表盤列表:
規則機器互操作性
可行性已確認 — 創建/修改 RM 規則不可行(閉源、未文檔化格式)。然而,通過
hubitat.helper.RMUtils類控制現有 RM 規則是可行的,該類在 Hubitat 應用沙箱中可用。
-
[ ] 通過
RMUtils.getRuleList()列出所有 RM 規則 —難度:1 | 工作量:S可行。已確認可行。
RMUtils.getRuleList("5.0")返回 RM 5.x 規則;getRuleList()返回舊版規則。返回適合枚舉選項的列表,包含規則 ID 和名稱。實施計劃:
- 在父應用中添加
import hubitat.helper.RMUtils。 - 創建
list_rm_rulesMCP 工具。 - 同時調用
getRuleList("5.0")和getRuleList()以覆蓋所有規則。 - 處理規則機器未安裝的情況。
- 在父應用中添加
-
[ ] 啟用/禁用 RM 規則 —
難度:2 | 工作量:S可行。使用
RMUtils.sendAction(ruleIds, "pauseRule"/"resumeRule", app.label, "5.0")。“暫停”在 RM 術語中相當於“禁用”。實施計劃:
- 創建
control_rm_ruleMCP 工具,包含action參數。 - 支持動作:
pause(禁用),resume(啟用)。 - 首先通過
getRuleList()驗證規則 ID 是否存在。
- 創建
-
[ ] 通過
RMUtils.sendAction()觸發 RM 規則動作 —難度:2 | 工作量:S可行。支持的動作:
"runRuleAct"(執行動作,跳過條件),"runRule"(評估條件後運行),"stopRuleAct"(取消延遲/重複動作)。注意:"runRule"不適用於規則 4.x+。實施計劃:
- 在
control_rm_rule工具中添加run_actions、evaluate、stop_actions。 - 內部映射到 RM 動作字符串。
- 文檔中說明哪些動作適用於哪些 RM 版本。
- 在
-
[ ] 暫停/恢復 RM 規則 —
難度:2 | 工作量:S可行。與啟用/禁用機制相同。可以合併到統一的
control_rm_rule工具中。 -
[ ] 設置 RM 私有布爾值 —
難度:2 | 工作量:S可行。使用
RMUtils.sendAction(ruleIds, "setRuleBooleanTrue"/"setRuleBooleanFalse", app.label, "5.0")。簡單的 API。實施計劃:
- 在
control_rm_rule工具中添加set_boolean_true和set_boolean_false。 - 接受規則 ID 和布爾值,映射到適當的
sendAction調用。
- 在
-
[x] 集線器變量橋接,用於跨引擎協調 —
難度:2 | 工作量:S已約 90% 實現。現有的
set_variable/get_variable工具通過getGlobalConnectorVariable()/setGlobalConnectorVariable()與 Hubitat 的全局連接器變量一起工作。這些是規則機器讀取/寫入的相同變量。通過 MCP 設置的變量對 RM 立即可見,反之亦然。為了正式化:文檔中說明共享變量應使用集線器連接器變量。
替代品







