本書では、AI Pyramid プラットフォーム上に Home Assistant Docker をデプロイする基本的な手順について説明します。Atom VoiceS3R 音声アシスタントデバイスを接続し、Atom-Lite のオンボード RGB LED を制御する例を使用して、音声インタラクション制御の設定方法を示します。また、必要に応じてローカル音声サービス(STT/TTS)およびローカル大規模言語モデルの対話機能(Local LLM Conversation)を統合する方法についても説明します。
root、パスワードは 123456)。 # ssh root@ IP Address
ssh root@192.168.100.207
Home Assistant 公式インストールドキュメントを参照するか、以下の Docker コマンドを直接使用します。
/PATH_TO_YOUR_CONFIG:ローカルの設定ディレクトリに置き換え、:/config のマウントはそのまま残します。MY_TIME_ZONE:America/Los_Angeles などのタイムゾーンに置き換えます。タイムゾーンの一覧については、IANA Time Zone Databaseを参照してください。docker run -d \
--name homeassistant \
--privileged \
--restart=unless-stopped \
-e TZ=MY_TIME_ZONE \
-v /PATH_TO_YOUR_CONFIG:/config \
-v /run/dbus:/run/dbus:ro \
--network=host \
ghcr.io/home-assistant/home-assistant:stable
http://homeassistant.local:8123/http://デバイスIP:8123/
本チュートリアルでは、Atom VoiceS3R 音声アシスタント + Atom-Lite RGB LED を例として使用します。以下のファームウェア書き込みボタンをそれぞれクリックしてオンラインでファームウェアを書き込み、Wi-Fi 設定を完了してください。
ファームウェアの書き込み完了後に Wi-Fi 設定オプションが表示されない場合は、デバイスをリセットしてから、もう一度書き込みボタンをクリックして接続してください。
この章では、AI Pyramid 上にローカル音声処理チェーンをデプロイし、Home Assistant の音声アシスタントフローに統合する方法について説明します。完了すると、次の機能を利用できます。
全体の手順は、環境準備、STT 統合、TTS 統合、動作確認の 4 段階に分かれています。
AI Pyramid には、工場出荷時にローカル音声アシスタント Demoがプリインストールされています。ポートやサービスの競合を避けるため、まず自動起動項目を無効にしてデバイスを再起動してください。
vim /etc/rc.local
reboot
ローカル音声サービスのスクリプトパッケージをダウンロードして展開します。このパッケージには、後続の手順で使用する次の主要スクリプトが含まれています。
wyoming_sensevoice_asr_service.py:STT サービススクリプト(ポート 10300 で待ち受け)。wyoming_melotts_service.py:TTS サービススクリプト(ポート 10200 で待ち受け)。ha_llm_proxy.py:ローカル LLM プロキシスクリプト(ポート 8100 で待ち受け)。後続の Local LLMs 統合から呼び出します。wget https://m5stack-doc.oss-cn-shenzhen.aliyuncs.com/1213/ai_pyramid_ha_local_voice_service.tar.gz tar -zxvf ai_pyramid_ha_local_voice_service.tar.gz
apt update
apt install lib-llm llm-sys llm-asr llm-openai-api llm-model-sense-voice-small-10s-ax650
systemctl restart llm-*
pip install openai wyoming nohup python3 wyoming_sensevoice_asr_service.py > asr_service.log 2>&1 & サービスはバックグラウンドで起動し、デフォルトではローカルのポート 10300 で待ち受けます。次のコマンドを使用してログを継続的に確認できます。
tail -f asr_service.log ログに Server listening on tcp://0.0.0.0:10300 と表示されたら、STT サービスは正常に起動しています。
「Settings → Devices & services → Add integration」に移動し、Wyoming Protocol を検索して追加します。
接続パラメータを入力します。
127.0.0.110300
「Settings → Voice assistants」に移動して音声アシスタントを新規作成または編集し、音声認識(STT)を sense-voice-small-10s-ax650 に設定します。
apt install lib-llm llm-sys llm-melotts llm-openai-api llm-model-melotts-en-us-ax650
systemctl restart llm-*
pip install openai wyoming llm-model-melotts-zh-cn-ax650、llm-model-melotts-ja-jp-ax650 など、複数の言語に対応する MeloTTS モデルを必要に応じてインストールできます。nohup python3 wyoming_melotts_service.py > tts_service.log 2>&1 & 次のコマンドで実行ログを確認できます。
tail -f tts_service.log ログに Server started, waiting for connections... と表示されたら、TTS サービスは正常に起動しています。
「Settings → Devices & services → Add integration」に移動し、Wyoming Protocol を検索して追加します。
接続パラメータを入力します。
127.0.0.110200
「Settings → Voice assistants」に移動してアシスタント設定を作成または編集し、テキスト音声変換(TTS)を先ほど追加した MeloTTS に設定します。必要に応じて言語と音声を選択してください(例では American English を使用)。
STT と TTS の統合が完了したら、一連の音声テストを実施することを推奨します。
sense-voice-small-10s-ax650 が選択されていることを確認します。asr_service.log と tts_service.log を監視し、音声リクエスト時にリアルタイムでログが出力されることを確認します。応答がない、または統合を利用できない場合は、次の項目を優先して確認してください。
10300 と 10200 に設定されていること。HACS(Home Assistant Community Store)は、サードパーティ製統合をインストールするための Home Assistant コミュニティ拡張ストアです。
docker exec -it homeassistant bash wget -O - https://get.hacs.xyz | bash -
Ctrl+D を押してコンテナを終了し、Home Assistant を再起動します。docker restart homeassistant
https://github.com/login/device にアクセスし、GitHub 認証を完了します。
home-llm プラグインを直接検索して追加します。http://<HAアドレス>:8123/hacs/repository?owner=acon96&repository=home-llm&category=Integration
この章では、OpenAI 互換 API を介して AI Pyramid のローカルモデル機能を Home Assistant の Local LLMs プラグインに統合し、ローカル環境でのスマート対話とデバイス制御を実現します。
全体の手順は、サービス準備、プロキシ起動、Home Assistant 統合設定、動作検証の 4 段階に分かれています。
Local LLM の実行に必要な依存関係と HA 用モデルをインストールします。
apt install lib-llm llm-sys llm-asr llm-openai-api llm-model-qwen2.5-ha-0.5b-ctxx-ax650
systemctl restart llm-*
pip install fastapi httpx uvicorn 第 6 章の「環境準備」でダウンロードした ai_pyramid_ha_local_voice_service.tar.gz には ha_llm_proxy.py が含まれているため、ここで再度ダウンロードする必要はありません。
この章から直接設定を開始する場合は、先に第 6 章に戻り、スクリプトパッケージのダウンロードと展開を完了してから、後続の手順に進んでください。
nohup python3 ha_llm_proxy.py > ha_llm_proxy.log 2>&1 & デフォルトの待ち受けポートは 8100 です。次のコマンドでログを確認できます。
tail -f ha_llm_proxy.log ログに Uvicorn running on http://0.0.0.0:8100 と表示されたら、プロキシサービスは正常に起動しています。
「Settings → Devices & services → Add integration → Local LLMs」に移動し、バックエンドに OpenAI Compatible 'Conversations' API を選択します。モデル言語は、まずデフォルトの English を選択します。
API Hostname に 127.0.0.1、ポートに 8100 を入力します。
エージェント設定で HA 専用モデルを選択します。
Home Assistant Services にチェックを入れます。
詳細パラメータで Tool Call Prefix、Tool Call Suffix、Maximum Tool Call Attempts を設定し、必ず Enable Legacy Tool Calling にチェックを入れます。
システムプロンプトにデバイス情報を入力します。例を以下に示します。
You are AI, a helpful AI assistant that controls smart home devices.
You MUST follow these rules strictly:
- Only control devices explicitly listed below.
- Never invent, rename, or modify device names, areas, or domains.
- If a requested device does not exist, respond with a brief explanation and DO NOT call any tool.
- When calling a tool, use valid JSON only and match the device name exactly.
Current time and date: {{ now }}
Available devices (authoritative list):
- light.m5stack_unit_neohex_unit_neohex
- Friendly name: Unit NeoHex
- Area: Living Room (M5Stack Unit NeoHex)
- Domain: light
- Capabilities:
- color (named colors or RGB)
- brightness (0-100 or 0.0-1.0)
When a user requests an action:
1. Identify the exact device(s) from the available devices list.
2. Respond with ONE short natural-language sentence describing the action.
3. Immediately call the appropriate tool.
4. Do not include any extra commentary or explanations.
Tool usage rules:
- Use HassLightSet for all light changes.
- Use "name" when controlling a specific device.
- Use "area" only if explicitly requested by the user and the area exists.
- Brightness must be a number within the supported range.
- Color must be a valid named color or RGB value.
Output format:
- Natural language sentence
- Followed by exactly one <functioncall> block
- No text after the function call
### Example (correct behavior)
User: Set the NeoHex in the Living Room to red
Assistant: Setting the Unit NeoHex to red.
homeassistant
{"name":"HassLightSet","arguments":{"name":"light.m5stack_unit_neohex_unit_neohex","rgb_color":"(255,0,0)"}}
システムプロンプト内の各フィールドについて説明します。
Available devices:Home Assistant で利用可能なデバイスの Entity IDFriendly name:デバイスの別名Area:デバイスが配置されているエリアDomain:デバイスの種類Capabilities:照明の色と明るさ、ファンの回転速度、エアコンのモードと温度など、デバイスが持つ機能。この例では、Atom-Lite を RGB LED デバイスとして使用します。
パラメータの詳細については、Model Prompting ドキュメントを参照してください。デバイスの種類ごとのプロンプト例については、後述の「9. 付録:プロンプト例」を参照してください。
モデルをクリックして大規模言語モデルサービス画面を開きます。
アシスタントをクリックしてダイアログを開きます。
turn on the light と入力し、モデルの応答を待ちます。初回の推論はモデルの初期化に時間がかかるため、しばらくお待ちください。
モデルがエラーを返した場合は、「Settings → System → Logs」で詳細を確認できます。
正常な場合、照明がオンになります。
「Settings → Voice assistants」に移動し、設定済みのモデルに切り替えると、音声制御を有効にできます。
ha_llm_proxy.py プロセスが実行中であることを確認します。127.0.0.1:8100 であることを確認します。Entity ID が HA 上の値と一致していることを確認します。- {HA_Device_Entity_ID}
- Friendly name: Switch
- Area: Kitchen
- Domain: switch
- Capabilities:
- on
- off - {HA_Device_Entity_ID}
- Friendly name: RGB Light
- Area: Bedroom
- Domain: light
- Capabilities:
- color (named colors or RGB)
- brightness (0-100 or 0.0-1.0) - {HA_Device_Entity_ID}
- Friendly name: LCD Backlight
- Area: Living Room
- Domain: light
- Capabilities:
- brightness (0-100 or 0.0-1.0)