æ¬æžã§ã¯ã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)