🚀 Hubitat MCP Server
このサーバーは、Hubitat Elevationハブ上で直接動作するネイティブのModel Context Protocol (MCP)サーバーです。別のマシン上で別個のNode.jsサーバーを実行する代わりに、ハブ自体でネイティブに動作します。組み込みのルールエンジンと69のMCPツール(カテゴリゲートウェイを介したtools/listに30個)を備えています。
BETAソフトウェア: このプロジェクトは約99%がClaudeを使用してAI生成(「雰囲気コーディング」)されています。現在開発中です。貢献やバグ報告を歓迎します!
🚀 クイックスタート
このアプリを使用すると、ClaudeなどのAIアシスタントが自然言語でHubitatスマートホームを制御できます。例えば、以下のようなコマンドを話すだけです。
"リビングルームの照明をつけて"
"寝室の温度は何度ですか?"
"真夜中にすべての照明を消すルールを作成して"
"廊下で動きが検出されたら、5分間廊下の照明をつける"
"温度が78度を5分間超えたら、エアコンをつける"
"日没時に屋外の照明をつける"
"寝室のボタンをダブルタップしたら、寝室の照明を切り替える"
"ハブの健康状態はどうですか?"
実際には、AIはMCPツールを使用してデバイスを制御し、自動化ルールを作成し、部屋を管理し、システムの状態を照会し、ハブを管理します。サーバーは合計69のツールを公開しています。21のコアツールは常に表示され、48の追加ツールは9つのドメイン名付きのゲートウェイの背後に整理されています。AIはtools/listで30個の項目を見ることができます(21個のコアツール + 9つのゲートウェイ)。各ゲートウェイの説明にはツールの概要が含まれており(AIに常に表示されます)、引数なしでゲートウェイを呼び出すと、必要に応じて完全なパラメータスキーマが返されます。
✨ 主な機能
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 |
コマンドを送信(on、off、setLevelなど) |
get_device_events |
デバイスの最近のイベント |
ルール (4個) — 自動化ルールの作成と管理
| ツール |
説明 |
list_rules |
すべてのルールの状態をリスト表示 |
get_rule |
ルールの詳細情報(トリガー、条件、アクション) |
create_rule |
新しい自動化ルールを作成 |
update_rule |
ルールのトリガー、条件、アクション、または有効状態(enabled=true/false)を更新 |
デバイス管理 (1個)
| ツール |
説明 |
update_device |
デバイスのプロパティ(ラベル、部屋、設定など)を更新 |
システム (5個) — ハブのモード、HSM、および情報
| ツール |
説明 |
get_hub_info |
包括的なハブ情報:ハードウェア、健康状態、MCP統計。PII(名前、IP、場所)はハブ管理者の読み取り権限が必要 |
get_modes |
ロケーションのモードをリスト表示 |
set_mode |
ロケーションのモードを変更(Home、Away、Nightなど) |
get_hsm_status |
ホームセキュリティモニターの状態を取得 |
set_hsm |
HSMのアームモードを変更 |
仮想デバイス (2個) — MCPが管理する仮想デバイス
| ツール |
説明 |
manage_virtual_device |
MCPが管理する仮想デバイスを作成または削除(action: "create", "delete")(ハブ管理者の書き込み権限が必要) |
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 |
任意のデバイスを永久に削除(元に戻せません) |
すべての操作は破壊的です。ハブ管理者ツールは、設定でハブ管理者の読み取り/書き込み権限を有効にする必要があります。書き込みツールは3層の安全ゲートを適用します:ハブ管理者の書き込み権限が有効 + 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のログレベルを設定(debug/info/warn/error) |
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のウェブUIを通じてルールを管理することもできます。
サポートされるトリガー (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(ウェブフック、外部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 Package Manager (推奨)
まだHubitat Package Manager (HPM)をインストールしていない場合は、まずHPMのインストール手順に従ってセットアップしてください。
HPMをインストールしたら、以下の手順でインストールします。
- HPMを開き、Installを選択します。
- "MCP" を検索します。
- MCP Rule Server を選択してインストールします。
以上です!HPMが親アプリと子アプリを自動的にインストールし、更新が利用可能になったときに通知します。
別のHPM方法: HPM > Install > From a URL を使用し、以下のURLを貼り付けることもできます。
https://raw.githubusercontent.com/kingpanther13/Hubitat-local-MCP-server/main/packageManifest.json
オプションB: 手動インストール
2つのアプリファイルをインストールする必要があります。
1. 親アプリ(MCP Rule Server)のインストール:
- HubitatのウェブUIにアクセスし、Apps Code > + New App を選択します。
- Import をクリックし、以下のURLを貼り付けます。
https://raw.githubusercontent.com/kingpanther13/Hubitat-local-MCP-server/main/hubitat-mcp-server.groovy
- Import > OK > Save をクリックします。
- OAuth > Enable OAuth in App > Save をクリックします。
2. 子アプリ(MCP Rule)のインストール:
- Apps Code > + New App を選択します。
- Import をクリックし、以下のURLを貼り付けます。
https://raw.githubusercontent.com/kingpanther13/Hubitat-local-MCP-server/main/hubitat-mcp-rule.groovy
- Import > OK > Save をクリックします。
- 子アプリにはOAuthは必要ありません。
💻 使用例
1. アプリを追加する
- Apps > + Add User App > MCP Rule Server を選択します。
- MCPを介してアクセス可能にしたいデバイスを選択します。
- Done をクリックします。
- アプリを開いてエンドポイントURLを確認し、ルールを管理します。
2. エンドポイントURLを取得する
アプリには2つのエンドポイントURLが表示されます。
-
ローカルエンドポイント — ローカルネットワークで使用するためのURLです。
http://192.168.1.100/apps/api/123/mcp?access_token=YOUR_TOKEN
-
クラウドエンドポイント — リモートアクセス用のURLです(Hubitat Cloudのサブスクリプションが必要)。
https://cloud.hubitat.com/api/YOUR_HUB_ID/apps/123/mcp?access_token=YOUR_TOKEN
3. AIクライアントを接続する
トランスポート: このサーバーはStreamable HTTP(SSEやstdioではない)を使用しています。あなたのMCPクライアントはHTTPトランスポートをサポートしている必要があります — ほとんどのクライアントはデフォルトでサポートしています。
Claude Code (CLI)
MCP設定ファイル(~/.claude.jsonまたはプロジェクトの.mcp.json)に以下を追加します。
{
"mcpServers": {
"hubitat": {
"type": "url",
"url": "http://192.168.1.100/apps/api/123/mcp?access_token=YOUR_TOKEN"
}
}
}
リモートアクセスの場合は、代わりにHubitat CloudのURLを使用します。
Claude Desktop
Claude Desktopの設定ファイルに以下を追加します。
- 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 (Connectors)
Claude.aiはConnectorsを通じてMCPサーバーをサポートしています。
- claude.aiにアクセスし、Settings > Connectors を選択します。
- 新しいコネクタを追加し、HubitatのエンドポイントURLを入力します。
- リモートアクセスの場合はクラウドエンドポイントのURLを使用するか、Cloudflare TunnelのURLを使用します。
Hubitat Cloudを使用すると、どこからでもclaude.aiからスマートホームを制御できます — ローカルのセットアップは必要ありません!
その他のAIサービス
HTTP URLを介してMCPサーバーをサポートする任意のAIサービスは、このサーバーを使用できます。以下のいずれかを使用します。
- Hubitat Cloud URL — Hubitat Cloudのサブスクリプションがあれば、追加のセットアップは必要ありません。
- Cloudflare Tunnel — 無料のセルフホスト型のリモートアクセス用(リモートアクセスオプションを参照)。
オプション: Claude.ai用のエージェントスキル
エージェントスキルは、ClaudeにこのMCPサーバーを使用するためのベストプラクティスを教える知識パックです。デバイスの安全プロトコル、ルール作成パターン、ツールの使用方法などが含まれています。必須ではありません(Claudeはこれなしでも正常に動作します)が、Claudeがより良い判断を下すのに役立ちます。特に、デバイスの承認やハブ管理ツールなどの安全に関する重要な操作において有効です。
インストール方法:
- このリポジトリから
agent-skill/hubitat-mcp/フォルダをダウンロードします。
- フォルダをルートとしてZIPファイルに圧縮します:
hubitat-mcp.zip > hubitat-mcp/ > SKILL.mdなど。
- claude.aiにアクセスし、Settings > Features > Skills を選択します。
- ZIPファイルをアップロードします。
このスキルはMCPコネクタと一緒に動作します。コネクタがClaudeにツールを提供し、スキルがClaudeにそれらのツールをうまく使用する方法を教えます。
Claude Codeユーザー向け: スキルフォルダを~/.claude/skills/hubitat-mcp/にコピーすることで、自動的に読み込まれます。
リモートアクセスオプション
オプション1: Hubitat Cloud (最も簡単)
Hubitat Cloudのサブスクリプションがある場合:
- クラウドエンドポイントURLはアプリ内に直接表示されます。
- そのURLをMCPクライアントの設定に使用します。
- 追加のセットアップは必要ありません!
オプション2: Cloudflare Tunnel (無料、セルフホスト)
Hubitat Cloudのサブスクリプションなしで無料のリモートアクセスを行うには:
- cloudflaredをインストールします。
- トンネルを作成します。
ingress:
- hostname: hubitat-mcp.yourdomain.com
service: http://YOUR_HUB_IP:80
- service: http_status:404
- トンネルのURLを使用します。
https://hubitat-mcp.yourdomain.com/apps/api/123/mcp?access_token=YOUR_TOKEN
ハブ管理者ツール
ハブ管理者の読み取りと書き込みアクセスは、デフォルトでは無効になっており、アプリの設定で明示的に有効にする必要があります。
ハブ管理者ツールの有効化
- HubitatのウェブUIでApps > MCP Rule Server を開きます。
- Hub Admin Accessの下で、以下を切り替えます。
- Enable Hub Admin Read Tools — 読み取り専用のハブ情報を取得するためのツールを有効にします。
- Enable Hub Admin Write Tools — バックアップ、再起動、シャットダウン、Z-Wave修復、およびアプリ/ドライバ管理のためのツールを有効にします。
- ハブにHub Securityが有効になっている場合は、以下も設定します。
- Hub Security Username と Password をHub Securityセクションで設定します。
安全ゲート
すべてのハブ管理者の書き込みツールは、3層の安全ゲートを適用します。
- ハブ管理者の書き込み権限が設定で有効になっている必要があります。
- AIは明示的に
confirm=trueを渡す必要があります。
- 過去24時間以内に完全なハブバックアップが存在する必要があります(自動的に強制されます)。
さらに、既存のアプリ/ドライバを変更または削除するツールは、変更を行う前にアイテムのソースコードを自動的にバックアップします。
アイテムのバックアップと復元
update_app_code、update_driver_code、delete_app、またはdelete_driverを使用すると、サーバーは変更を行う前に元のソースコードを自動的に保存します。
- バックアップは
.groovyファイルとしてハブのローカルFile Managerに保存されます。
mcp-backup-app-<id>.groovyまたはmcp-backup-driver-<id>.groovyという名前で保存されます。
- MCPアプリをアンインストールしても保存されます。
http://<your-hub-ip>/local/<filename>からダウンロードできます。
- 最大20個まで保存され、最も古いものは自動的に削除されます。
- 1時間の保護期間があり、複数回の編集でも編集前の元のコードが保存されます。
MCPを介して復元する方法:
list_item_backupsを使用して利用可能なバックアップを確認します。
- バックアップキーと
confirm=trueを指定してrestore_item_backupを実行します。
手動で復元する方法(MCPを使用しない場合):
- HubitatのウェブUIでSettings > File Managerを開きます。
- バックアップファイル(例:
mcp-backup-app-123.groovy)をダウンロードします。
- Apps Code(またはDrivers Code)を開き、アプリを選択し、ソースコードを貼り付けてSaveをクリックします。
ハブセキュリティのサポート
ハブにHub Securityが有効になっている場合(ウェブUIにログインが必要)、MCPサーバーは自動的に認証を処理します。
- アプリの設定でHub Securityのユーザー名とパスワードを設定します。
- サーバーはセッションクッキーを30分間キャッシュします。
- 古いクッキーは自動的に削除され、再認証されます。
- Hub Securityが有効になっていない場合は、資格情報は必要ありません。
パフォーマンスと制限
ハブハードウェアの推奨事項
| ハブモデル |
推奨事項 |
| 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 Cloudのレスポンス — 最大128KBです(AWS MQTTの制限)。大規模なデバイスリストではページネーションを使用してください。
- リアルタイムイベントストリーミングはサポートされていません(MCPのレスポンスのみ)。
- 日の出/日没の時間は毎日再計算されます。
トラブルシューティング
デバイスが見つからない
アプリの「Select Devices for MCP Access」設定でデバイスが選択されていることを確認してください。
OAuthトークンが機能しない
- Apps Code > MCP Rule Serverを開きます。
- OAuth > Enable OAuth in Appをクリックします。
- Saveをクリックします。
- Appsでアプリを再開いて、新しいトークンを取得します。
ルールがトリガーされない
- アプリの設定で「Enable Rule Engine」がオンになっていることを確認してください。
- 「Debug Logging」を有効にし、Hubitatのログを確認してください。
- トリガーデバイスがMCPアクセス用に選択されていることを確認してください。
- 期間ベースのトリガーの場合、条件が全期間にわたって真であることを確認してください。
ボタンイベントが機能しない
button_eventトリガータイプを使用していることを確認してください(device_eventではなく)。
- ボタンのアクションタイプ(
pushed、held、doubleTapped、またはreleased)を確認してください。
Hubitat Cloudを介して`list_devices(detailed=true)`が失敗する
Hubitat Cloudには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を介してルールを再作成する必要があります。
バグ報告
バグ報告を容易にするには、以下の手順を実行してください。
- デバッグログレベルを設定します:Settings > MCP Debug Log Level > "Debug"、またはAIに
set_log_levelを使用して"debug"に設定させます。
- 問題を再現します。
- AIに
generate_bug_reportツールを使用させます — 診断情報を収集し、提出可能なレポートを作成します。
- GitHub 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式を受け付けます。ユーザーが提供した文字列は検証が必要です。
-
[ ] エンドポイント/ウェブフックトリガー — 難易度: 3 | 作業量: M
実現可能です。 親アプリのmappingsブロックに単一のディスパッチャーエンドポイント(例:/mcp/webhook?ruleKey=<key>)を追加します。親アプリはキーで子ルールを検索し、リクエストの本文/パラメータをイベントデータとしてexecuteRule("webhook", webhookEvt)を呼び出します。ルールごとの動的なパスはmappingsがコンパイル時に設定されるため不可能ですが、クエリパラメータを持つ共有エンドポイントは機能します。OAuthアクセストークンがパスを保護しています。
実装計画:
- 親アプリに
GET/POST /webhookマッピングを追加します。
- 子アプリの
subscribeToTriggers()にwebhookトリガータイプを追加します。
- 親アプリはキー検索を介して一致する子ルールにディスパッチします。
- リクエストの本文、ヘッダー、およびクエリパラメータを擬似イベントにパッケージ化して変数置換に使用します。
-
[ ] ハブ変数変更トリガー — 難易度: 3 | 作業量: M
部分的に実現可能です。 Hubitatはハブ変数の変更に対するネイティブのsubscribe()を公開していません。2つのアプローチがあります。(A) ポーリング — schedule()を5–10秒ごとに使用して、atomicState内の最後に知られている値と現在の値を比較します。これには遅延とハブの負荷が増えます。(B) 変数コネクタの回避策 — HubitatのVariable Connector機能(ファームウェア ≥ 2.3.4)はハブ変数をデバイス属性として公開し、既存のdevice_eventトリガーを介してサブスクライブできます。オプションBの方がクリーンですが、ユーザーがVariable Connectorデバイスを作成する必要があります。
実装計画:
- 構成可能なポーリング間隔を持つ
variable_changeトリガータイプを追加します。
- 最後に知られている値を
atomicState.variableSnapshotsに保存します。
- 各ポーリングサイクルで比較し、変更があればルールを実行します。
- Variable Connectorアプローチを推奨する代替案としてドキュメント化します。
-
[ ] システム起動トリガー — 難易度: 2 | 作業量: S
実現可能です。 Hubitatはsubscribe(location, "systemStart", handler)をサポートしています。system_startトリガータイプを追加します。ハブの再起動後、アプリが復元され、initialize() → subscribeToTriggers()が実行され、systemStartイベントがルールをトリガーします。わずかなエッジケース:すべてのアプリが復元される前にイベントが発生する可能性があります — ハードウェアでのテストが必要です。
実装計画:
- 子アプリに
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トリガーを追加します。
条件の強化