Home Assistant + ローカルLLM:プライベートなスマートホーム、通信なしで cloud
Google Home、Alexa、SmartThingsといったクラウド型スマートホームは、家庭内で起きていることに関する情報を断片的に、継続して遠隔サーバーへ送信します。プライバシーを重視したローカルLLMによるスマートホームは、この構図を逆転させます。自宅のHome Assistantサーバーが照明やサーモスタットを制御し、Ollamaモデルがユーザーの要求をアクションに変換し、ローカルネットワークの外には何も送信されません。このガイドでは、OllamaをHome Assistantに接続する具体的な方法、遅延を2秒未満に抑えるための軽量モデルの選び方、そしてプライバシー面で実際に得られる利点を解説します。
#家庭用IoT向けにローカルLLMを導入する理由は?
クラウドクラシック環境では、各発話が遠隔サーバーに送られ、トランスクリプトされ、理解され、実行されます。トランスクリプトは保存され、場合によってはサブコントラクターに提供されてモデルトレーニングに使用され、製造元はあなたが家に帰るタイミング、寝室を点灯する時間、夜のプレイリストを開始するタイミングを知ることができます。多くの家庭にとって、このような情報が過剰な第三者に提供されているのは問題です。
Home Assistantは根本的な問題に対処します。これはオープンソースのプラットフォームであり、お使いのハードウェア上で動作し、ローカルでスマートデバイスと通信します(Zigbee、Z-Wave、Matter、MQTT)。Ollama経由でローカルLLMを追加することで、自由な文(「リビングの暖房を2度下げて」「1階のすべてのライトを消して」など)を理解できるアシスタントが得られ、音声やコマンドがLANの外に送信されることはありません。
- 実際のプライバシー保護
- 利用データは第三者に送信されません。利用習慣に基づく広告用プロファイルも作成されません。
- オフラインで動作
- インターネット接続が切れたり、クラウドプロバイダーで障害が起きたりしても、自宅のスマートホームは引き続き指示に応答します。
- 予測可能な遅延
- データセンターとの通信の往復がなくなり、レイテンシは手元のマシンだけに依存します。
- 完全な制御
- モデルは自分で選び、好きなときに更新し、より良いモデルが登場したら置き換えられます。
#前提条件
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
- Home Assistantを導入済み
- 最低でも、Ollamaのネイティブ統合を含むバージョン2024.6が必要です。できれば最新の安定版を使ってください。HA OS、HA Container、HA Supervisedのいずれでも利用できます。
- Ollama 用のマシン
- 十分な性能があれば、OllamaはHAと同じマシンで動かせます。LAN上の別のPCで動かすこともできます。M4搭載のMac mini、i7搭載のNUC、または8 GB以上のGPUメモリを備えたPCなら、十分に対応できます。
- Ollama インストール済み
- デーモンがポート11434で稼働していること。curl http://localhost:11434 で確認してください。応答は Ollama is running となる必要があります。まだ何も導入していない場合は、まず当サイトのOllamaインストールガイドに従ってください。
- 安定したローカルネットワーク
- 理想的には、HAとOllamaを同じVLANに配置し、Ollamaサーバーには固定IPを設定します。両者の間でポート11434を開放しておく必要があります。
- 適したモデル
- その点はすぐ後で説明します。ここでは、tool calling(ツール呼び出し)に対応したモデルが必要だと覚えておいてください。
#スマートホームの操作指示に適した軽量モデル
ホームオートメーションに適したモデルは、必ずしも最大のモデルではありません。(1)Home Assistant のサービスを呼び出せるよう、ツール呼び出しに適切に対応していること、(2)フランス語が得意であること、(3)素早く応答することが必要です。Q4_K_M で量子化した3B~8Bのモデルが、最もバランスのよい選択です。
- Qwen 3.5 9B(Q4_K_M、VRAM約6.6 GB)
- 2026年における8 GB環境の定番モデルです。堅実なツール呼び出し、優れたフランス語性能、画像認識機能、256kのコンテキスト長を備え、GPUでの応答遅延も許容範囲です。ホームオートメーションを始めるのに適した選択肢です。
- Granite 4.2 8B(Q4_K_M、VRAM 約5.3 GB)
- IBM 製、Apache 2.0 ライセンス。128k のコンテキストに対応し、トークン消費が非常に少ないモデルです。ツール呼び出しは信頼性が高く、無駄がありません。Qwen が指示から逸れる場合の代替として適しています。
- Granite 4.2 3B(Q4_K_M、VRAM約2.2GB)
- 控えめな構成(Pi 5、GPUなしのNUC)向けです。必要なリソースは非常に少なく、ツール呼び出しにも対応していますが、複雑な指示では信頼性が下がります。短く明確な文を使ってください。
- Gemma 4 12B(Q4_K_M、VRAM約7.6 GB)
- RTX 3060 12GB以上のカードをお持ちの場合に適しています。マルチモーダル対応、Apache 2.0ライセンス。曖昧な指示(「リビングを居心地のよい雰囲気にして」)への対応と文脈理解が明確に向上します。
- Mistral Small 24B (Q4_K_M, ~14 GB VRAM)
- フランス語に非常に強い汎用モデルで、VRAMが16 GB以上のグラフィックスカードでの使用が推奨されます。家の機能を厳密に制御するだけでなく、内容の豊かな対話にも余裕を持って対応できます。
#1. OllamaをHome Assistantに接続する
Home Assistantでは、バージョン2024.6以降、Ollama連携が公式に提供されています。configuration.yamlを変更せず、インターフェースからすべて設定できます。
- 01Ollama側でモデルをダウンロードするOllamaをホストするマシンで、以下のシェルコマンドを実行してください。ダウンロードサイズは選択されたモデルによって3〜5GBです。
- 01Ollama をLAN上で利用可能にするデフォルトでは、Ollamaはlocalhostでのみ接続を待ち受けます。Home Assistant(別のマシンで動作している可能性もあります)から呼び出せるように、サービスをすべてのネットワークインターフェースで待ち受けるようにしてください。
- 01Home Assistant への統合を追加設定 > デバイスとサービス > インテグレーションを追加 > 「Ollama」を検索。
- 02URLを入力してくださいURL:http://IP-DU-SERVEUR-OLLAMA:11434(例:http://192.168.1.42:11434)。Ollama が HA Container と同じマシンで動作している場合は、http://host.docker.internal:11434 を使用してください。
- 03モデルの選択Home Assistantは自動的にOllamaに問い合わせ、利用可能なモデルの一覧を表示します。qwen3.5:9bを選択してください。
- 04制御の有効化(Control Home Assistant)インテグレーションのオプションで「Control Home Assistant」にチェックを入れてください。これにより、LLMがサービスを呼び出せるようになります(照明をつける、消す、温度を調整する)。この項目にチェックを入れなければ、LLMは会話をするだけです。
#2. 適切なエンティティをアシスタントから利用できるようにする
Home Assistantが管理するエンティティは、数百に及ぶこともあります(センサー、コンセント、電球、ビュー、自動化など)。それらをすべてLLMに送ると、コンテキストがいっぱいになり、モデルを混乱させてしまいます。コツは、アシスタントが実際に制御する必要のあるものだけを公開することです。
- 01設定 > 音声 > 公開すべてのエンティティの一覧です。アシスタントに操作させるものを有効にしてください。照明、サーモスタット、コンセント、シャッターなどが対象です。人間にとって役に立たない内部センサー(PiのRAM、Zigbeeの信号など)は無効にしてください。
- 02自然な言葉で名前を付け直すlight.salon_lampe_principale_zigbee_3 というエンティティ名は分かりにくいので、「リビングルームのメインランプ」に変更してください。人に分かりやすい名前なら、LLMは正しいエンティティをはるかに確実に選べます。
- 03ゾーンごとにグループ化各エンティティをゾーンに割り当てます(リビングルーム、キッチン、寝室など)。これにより、LLMは「リビングルームの灯りを消す」という指示を、手動で各ランプをリストアップする必要なく理解できます。
- 04テストする設定 > 音声 > アシスタントで、Ollama パイプラインのチャットアイコンをクリックし、「寝室の温度は何度ですか?」、続いて「リビングのメインの照明をつけて」と試してください。
#3. 100%ローカルな音声パイプライン(オプション)
HAアプリで文字を入力する代わりに音声で話しかけたい場合、Assistを使えば、音声認識 → LLM → 音声合成をすべてローカルで連携させられます。GoogleやAmazonへの依存は一切ありません。
- ウェイクワード — openWakeWord
- HAの公式アドオン。PiまたはESP32のサテライト端末(Atom Echo、M5Stack)上で、起動キーワード(「Hey Jarvis」、「Nabu」)を検出します。
- STT(音声認識)— Whisper
- faster-whisperをベースにしたHA公式アドオンです。フランス語の短いコマンドにはtinyまたはbaseモデルで十分です。ある程度の性能があるCPUなら、文字起こしにかかる時間は約1〜2秒です。
- LLM — Ollama (既に設定済み)
- トランスクリプションを受け取り、適切なHAツールを呼び出し、確認文を返します。
- TTS(text-to-speech:音声合成)— Piper
- 公式のHAアドオン。ネイティブのフランス語音声(fr_FR-siwis-medium、fr_FR-tom-medium)。非常に高速で、1文あたり約200 msです。
4つのアドオンをインストールして起動した後、「設定」>「音声」>「アシスタント」でパイプラインを構築できます。STTにはWhisper、会話エージェントにはOllamaの統合、TTSにはPiperを選択してください。これで、外部への接続なしに、音声で自宅を制御できるようになります。
#遅延:ローカル対クラウド
よく無視されるポイントです。クラウドは魔法ではありません。各リクエストはデータセンターを往復し、サーバー側の待ち行列も発生します。ローカル環境では、その半分の距離を省くことができます。
- クラウド(Google/Alexa)
- クラウドでの STT(約400 ms)+クラウドでの意図認識(約300 ms)+クラウド経由の HA のアクション実行(約200 ms)+TTS(約300 ms)=平均1.2~1.8秒。ネットワークが混雑している場合は、さらに時間がかかります。
- ローカル — Pi 5 + CPUで動作する3BのLLM
- STT Whisper tiny(約800 ms)+ LLM 3B(CPUで約3〜5秒)+ アクション実行(約50 ms)+ TTS Piper(約200 ms)= 4〜6秒。単発の操作指示なら許容できますが、頻繁に使うとストレスを感じます。
- ローカル — PC+8B LLM+8 GBのGPU
- Whisper base(約400 ms)+LLM 8B Q4(約600〜900 ms)+アクション(約50 ms)+TTS(約200 ms)=1.3〜1.6秒。クラウドを使わず、Google Homeと同じくらい高速です。
- ローカル — Mac mini M4 24GB
- 統合 GPU と統一メモリのおかげで、完全なパイプラインは約 1.1〜1.4 秒です。おそらく、24/7 で動作する LLM によるスマートホーム用途において、パフォーマンスと消費電力のバランスが最も良い選択肢です。
#実際にLANの外へ出るもの(何もありません)
データがどこまで扱われるのか、具体的に確認しましょう。HA + Ollama + Whisper + Piperを適切に構成した環境では、次のようになります。
- マイクで収録した音声
- ローカルの Whisper で処理されます。音声データがネットワークの外に出ることはありません。
- 音声指示を書き起こしたテキスト
- ローカルのOllamaに送信されます。文字起こしされた内容は一切ネットワークの外に出ません。
- あなたのデバイスとゾーンのリスト
- ローカルの Ollama が正しいエンティティを呼び出せるように共有されます。この情報は LAN 内にとどまります。
- HAによる判断とアクション
- HAによって実行されます。HAはローカルでZigbee/Z-Wave/Matter/MQTTと直接通信します。
- Piperによる音声応答
- 音声はローカルで合成されます。合成音声をオンラインから取得することはありません。
外部への通信が発生し得るのは、HA、Ollama、モデルの更新時だけです。更新をいつ実行するかはご自身で決められます。厳格に運用する場合は、インストール後にHAマシンのインターネット接続を切断することもできます。それでもすべて引き続き動作します。
#ヒントとトラブルシューティング
- LLMは英語で応答します
- Ollamaの統合にシステムプロンプトを追加します。「あなたはスマートホームのアシスタントです。常にフランス語で、短い一文で回答してください。」この指示だけで、Qwen 3.5やGranite 4.2では十分です。
- 存在しないエンティティを作り上げてしまう
- モデルが小さすぎるか、エンティティ名が曖昧な場合に見られる症状です。エンティティ名を自然言語でわかりやすく付け直し、公開するエンティティの数を減らすか、VRAMに余裕があればGemma 4 12Bに切り替えてください。
- 正しいサービスを呼び出しているのに、対象エリアが間違っている
- HA で各エンティティに「area」が割り当てられていることを確認してください。エリアが未設定だと、モデルが推測に頼り、名前が似ているエンティティを取り違えます。
- 数時間後から遅延が著しく低下します
- Ollama がモデルをダウンロードしました。OLLAMA_KEEP_ALIVE=24h(または一週間の場合は168h)でサービスを起動してください。
- HA からの接続で「Connection refused」
- Ollama はまだ127.0.0.1上でリスニングしています。systemdユニット内のOLLAMA_HOST=0.0.0.0:11434を確認し、再起動してください。HAマシンからcurlでテストを行ってください。
- CPUでの実行時に発熱するPi 5
- CPUでLLMを動かすと、4つのコアすべての使用率が100%になります。すべてをPi上で動かしたいなら、冷却ファン(またはPi 5用のArgon ONE V3ケース)を追加してください。そうでなければ、Ollamaを別のホストで動かしてください。
- Ollama をLANにのみ制限したいですか
- 0.0.0.0:11434ではなく、LANの特定のIPアドレスで接続を待ち受けるように設定してください(例:OLLAMA_HOST=192.168.1.42:11434)。Ollamaは、ほかのインターフェースからの接続を受け付けなくなります。
#さらに詳しく
これで、ローカルLLMを使ったホームオートメーションアシスタントが動作する状態になりました。さらに活用するためのアイデアをいくつか紹介します:
- LinuxへのOllamaインストール
- LinuxマシンをOllamaに専用に割り当てる場合(24時間365日稼働するスマートホーム用途として最もクリーンなシナリオ)、Linuxインストールガイドではsystemd、GPU NVIDIA/AMD、およびネットワーク設定について説明しています。
- Raspberry Pi 5上でLLMを実行
- 8 GBのPi 5でCPUのみを使って動かせるモデルを具体的に評価するためのガイド。トークン/秒のベンチマークと、1B〜3Bモデルの選び方を扱います。
- 量子化の選択(Q4、Q5、Q8)
- Q4_K_Mがホームオートメーションに最適なバランスである理由と、どのような場合にQ5_K_Mへ上げる、またはQ3へ下げるのが合理的かを理解するために。
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。