Home Assistantとの連携

この連携を使うと、AIキャラクターがチャットの中から、照明、空調、カバー、メディアプレイヤーなどの実際のスマートホームデバイスを操作できます。Home AssistantのオートメーションからMarinara Engineへメッセージを送ることもできます。Home Assistantは、スマートホームデバイス向けの無料のオープンソースプラットフォームです。Home Assistantを使っていない場合、このガイドは必要ありません。

この連携で追加されるもの

この連携は、Home Assistantの中にインストールして、Marinaraサーバーと結び付ける小さなソフトウェアです。初回セットアップで、次のものを自動で作ります。ツールのアドレスをコピーしたり、ツールを手作業で設定したりする必要はありません。

始める前に

.envファイルは、Marinaraサーバーの設定を書いたプレーンテキストのファイルです。場所はサーバー設定リファレンスを参照してください。この連携はWebhookを使います。Webhookとは、あるアプリから別のアプリへデータを送るためのWebアドレスです。Home AssistantのWebhookはローカルの平文httpアドレスで、Marinaraは安全のため、こうしたアドレスをデフォルトでブロックします。この設定で、それを許可します。次の行を追加して保存してください。再起動しなくても反映されます。ふつうは数秒以内(長くても約30秒)です。

WEBHOOK_LOCAL_URLS_ENABLED=true

Home Assistantが別のデバイスで動いている場合

この連携はユーザー名もパスワードも使わずに接続し、セットアップの画面にも入力欄はありません。

どの方法を選ぶかは、リモートアクセスを参照してください。

連携をインストールする

HACSに追加する

  1. Home AssistantでHACSを開きます。
  2. 三点メニューを開き、Custom repositories(カスタムリポジトリー)をクリックします。
  3. リポジトリーの入力欄にhttps://github.com/Pasta-Devs/Marinara-Engineを入力します。
  4. カテゴリーをIntegrationにして、Addをクリックします。
  5. Marinara Engineを検索してインストールします。
  6. Home Assistantを再起動します。

セットアップする

  1. Settings → Devices & Services(設定 → デバイスとサービス)を開き、Add Integration(統合を追加)をクリックします。
  2. Marinara Engineを検索します。
  3. Marinaraが動いているHostとPortを入力します。デフォルトはlocalhostと7860です。
  4. Submitをクリックします。

うまくいかなかった場合: Marinaraに到達できないと、Home Assistantはエラーを表示します。トラブルシューティングを参照してください。

成功すると、連携はHome Assistantに専用のWebhookを登録します。さらに、そのWebhookを指すツールをMarinaraのFunctionsセクションに作り、有効なツールをすべて列挙したHome Assistantエージェントを作り、後述のエンティティーを作ります。

エージェントをチャットに追加する

エージェントを作っても、すべてのチャットに付くわけではありません。スマートホームを操作したいチャットごとに追加してください。

  1. チャットを開き、Chat Settings(チャット設定)をクリックします。
  2. Agentsセクションを開きます。
  3. Home Assistantエージェントを追加します。

Roleplay、Conversation、Gameのどのチャットでも動きます。追加すると、そのチャットのAIがツールを使えるようになります。ほかにオンにするものはありません。

動作を確認する

  1. そのチャットで、Turn on the office lightsのようなふつうの文章で依頼を入力して送信します。
  2. AIがha_turn_onなどのツールを呼び出し、照明が点灯するはずです。そのあとAIが実行したことを伝えます。

何も起きない場合は、WEBHOOK_LOCAL_URLS_ENABLED=trueが設定されているか確かめ、トラブルシューティングを参照してください。

AIに使わせるツールを選ぶ

ツールは8つのカテゴリーに分かれています。Marinaraにどれを使わせるかを選ぶには、Settings → Devices & Services(設定 → デバイスとサービス)を開き、Marinara EngineをクリックしてからConfigure(設定)をクリックします。項目は2つあります。

カテゴリーデフォルトツール
Lights & SwitchesOnha_turn_on, ha_turn_off, ha_toggle, ha_set_brightness, ha_set_color, ha_set_color_temp
ClimateOnha_set_temperature, ha_set_hvac_mode
Covers (Blinds & Garage)Onha_open_cover, ha_close_cover, ha_set_cover_position
LocksOffha_lock, ha_unlock
Media PlayersOnha_media_play, ha_media_pause, ha_set_volume
Scenes & ScriptsOnha_activate_scene, ha_run_script
QueryOnha_get_state, ha_list_areas, ha_list_entities, ha_notify
Generic Service Calls (Advanced)Offha_call_service

Warning: Generic Service Calls (Advanced)を使うと、AIはHome Assistantの任意のサービスを呼び出せます。Locksを使うと、ドアの施錠と解錠ができます。どちらもデフォルトでオフです。必要な場合だけオンにしてください。

ほとんどのツールは、デバイス1つか部屋の名前を受け付けます。部屋の名前を指定すると、その部屋にある該当デバイスすべてに作用します。カテゴリーの変更は、Marinara Sync HA Toolsを押すか、Home Assistantを再起動すると反映されます。

Home Assistantのエンティティー

この連携は、Marinara Engineという名前のデバイスの下に、次のエンティティーを作ります。

エンティティー種類動作
Marinara Chat CountセンサーMarinaraのチャットの総数
Marinara Active Agent Countセンサー有効になっているMarinaraのエージェントの数
Marinara Active Chatセレクトサービスが対象にするチャットを選びます
Marinara Agent: (name)スイッチエージェントを1つオンまたはオフにします。エージェントごとに1つずつあります
Marinara Abort Generationボタン生成中のAIの返信を中止します
Marinara Sync HA Toolsボタンすべてのツールを送り直し、Home Assistantエージェントを作り直します

この連携は、新しいチャットやエージェントがないかを30秒ごとにMarinaraへ確認します。そのため、作ったばかりのものが表示されるまで最大30秒かかることがあります。

設定を変えたあとの同期

Marinara EngineデバイスのページでMarinara Sync HA Toolsを押します。既存のツールをその場で更新し、Home Assistantエージェントを削除していた場合は作り直し、カテゴリーをオフにしたツールを無効にします(削除はしません)。Marinaraの中でHome Assistantのツールを手作業で編集しないでください。次の同期で編集内容が上書きされ、ツールも再びオンに戻ります。

オートメーションからMarinaraを操作する

この連携は、オートメーション用にHome Assistantのサービスを2つ追加します。これらはMarinaraではなく、Home Assistantの中で動きます。どちらもデフォルトでPrimary Chatを対象にします。

Send Message (marinara_engine.send_message)

玄関のドアが開いたことをAIに伝えるオートメーションです。

automation:
  trigger:
    platform: state
    entity_id: binary_sensor.front_door
    to: "on"
  action:
    service: marinara_engine.send_message
    data:
      message: "Someone has arrived at the front door."
      trigger_generation: true

Trigger Generation (marinara_engine.trigger_generation)

目に見えるメッセージを送らずに、AIの返信を始めます。

トラブルシューティング

セットアップ画面に接続できないと表示される

Marinaraが動いていること、HostとPortが待ち受けているアドレス(デフォルトはlocalhostと7860)と一致していることを確かめてください。Home Assistantが別のデバイスにある場合、そのデバイスがIP_ALLOWLISTに載っていないかぎり、Marinaraはブロックします。連携はパスワードを送れないので、ログインで保護されたMarinaraも連携を拒否します。リモートアクセスを参照してください。これらの条件はセットアップ後も変わりません。あとからMarinaraがそのデバイスをブロックすると、センサーとチャットの一覧は何も表示しないまま更新されなくなります。

AIがデバイスのツールを使おうとするが何も起きない

Webhookの呼び出しがブロックされている可能性が高いです。.envにWEBHOOK_LOCAL_URLS_ENABLED=trueを追加して保存してください。設定していないと、httpが許可されていない、またはプライベートアドレスが拒否された、という内容でツールの呼び出しが失敗することがあります。MarinaraとHome Assistantが同じコンピューターにある場合、連携は内部アドレスを自動で使います。Marinaraが別のデバイスにある場合は、Home Assistantのローカルアドレスにそのデバイスから到達できるか確かめてください。

ツールがFunctionsに出てこない

Marinara Sync HA Toolsを押すか、Home Assistantを再起動してから、PresetsパネルのFunctionsを確認します。

Home Assistantエージェントがチャットに出てこない

MarinaraのAgentsにエージェントがあるか確認します。ない場合は、Marinara Sync HA Toolsを押して作り直します。そのあとChat Settings → Agents(チャット設定 → エージェント)で追加します。

Webhookのアドレスを手動で調べる

各ツールにはアドレスが設定済みなので、これが必要になることはほとんどありません。Home AssistantでSettings → Devices & Services → Marinara Engine(設定 → デバイスとサービス → Marinara Engine)を開きます。Webhookは次の形式です(8123はHome Assistantのデフォルトのポート番号です)。

http://<homeassistant-ip>:8123/api/webhook/<webhook-id>

アンインストール

Home AssistantのSettings → Devices & Services → Marinara Engine(設定 → デバイスとサービス → Marinara Engine)で連携を削除します。これでエンティティーは消えます。MarinaraのFunctionsセクションにあるツールとHome Assistantエージェントは残ります。不要であれば、Marinaraで手動で削除してください。

関連ガイド