# Home Assistant 음성제어 명령 구성 정리
작성자 정보
- 최고관리자 작성
- 192.♡.0.1 아이피
- 작성일
컨텐츠 정보
- 180 조회
- 목록
링크
첨부
본문
# Home Assistant 음성제어 명령 구성 정리
## 1. 목적
Home Assistant Assist에서 한국어 음성 명령을 사용자 정의하여 다음 기능을
처리한다.
- 전체/모두/전부/다 등 광범위한 제어 명령은 실제 장치를 동작시키지
않고 차단
- `일괄소등`이라는 전용 명령만 전체 전등 끄기 실행
- 에어컨 설정 온도 조회
- 거실 온도 조회
- 우리집 대표 온도 조회
- 음성 명령 인식은 `/config/custom_sentences/ko/home_control.yaml`에서
구성
- 실제 실행 및 음성 응답은 `configuration.yaml`의 `intent_script:`에서
구성
참고 문서: Home Assistant Voice - Template Sentence Syntax
------------------------------------------------------------------------
## 2. 전체 구성 구조
``` text
사용자 음성
↓
Assist / STT
↓
/config/custom_sentences/ko/home_control.yaml
↓
Intent 선택
↓
configuration.yaml
intent_script:
↓
장치 제어 또는 상태 조회
↓
Assist 음성 응답
```
------------------------------------------------------------------------
## 3. 전체 명령 차단
### 목적
`전체`, `모든`, `모두`, `전부`, `다`와 같은 표현으로 집 안의 여러 장치가
한꺼번에 동작하는 것을 방지한다.
### 차단 대상 예
- 전체 켜줘
- 전체 꺼줘
- 전체 전등 켜줘
- 전체 전등 꺼줘
- 전체 불 켜줘
- 전체 불 꺼줘
- 전체 보일러 켜줘
- 전체 보일러 꺼줘
- 모든 전등 켜줘
- 모든 전등 꺼줘
- 모든 불 켜줘
- 모든 불 꺼줘
- 모든 보일러 켜줘
- 모든 보일러 꺼줘
- 모두 켜줘
- 모두 꺼줘
- 전부 켜줘
- 전부 꺼줘
- 다 켜줘
- 다 꺼줘
### Intent 이름
`StopAllCommand`
### 동작
실제 Home Assistant 서비스는 실행하지 않는다.
### 음성 응답
> 전체 제어 명령은 사용하지 않습니다. 방이나 장치 이름을 말씀해 주세요.
------------------------------------------------------------------------
## 4. 일괄소등 전용 명령
일반적인 `전체 꺼줘`와 `일괄소등`을 분리한다.
### 허용 명령
- 일괄소등
- 일괄 소등
- 일괄소등 해줘
- 일괄 소등 해줘
### Intent 이름
`AllLightsOff`
### 동작
``` yaml
action:
- action: light.turn_off
target:
entity_id: all
```
### 음성 응답
> 일괄소등을 실행했습니다.
### 주의
`entity_id: all`은 Home Assistant의 모든 `light` 엔티티를 대상으로 한다.
실제 집 전등만 대상으로 하려면 별도의 Light Group을 만들어 해당 그룹
엔티티를 지정하는 것이 안전하다.
------------------------------------------------------------------------
## 5. 에어컨 설정 온도 조회
### 질문 예
- 에어컨 설정 온도는 몇도 인가요
- 에어컨 설정 온도 몇도야
- 에어컨 설정 온도 알려줘
- 에어컨 온도 몇도야
### Intent 이름
`GetAirconSetTemperature`
### 대상 엔티티
``` text
climate.geosil_aircon_rs485_ip136_geosil_eeokeon_sangtae_acstate
```
### 조회 속성
`temperature`
`temperature`는 에어컨의 설정 온도이다.
### 응답 예
> 에어컨 설정 온도는 27도입니다.
값을 확인할 수 없는 경우:
> 에어컨 설정 온도를 확인할 수 없습니다.
------------------------------------------------------------------------
## 6. 거실 온도 조회
### 질문 예
- 거실 온도는 얼마 인가요
- 거실 온도 몇도야
- 거실 온도 알려줘
- 거실 몇도야
### Intent 이름
`GetLivingRoomTemperature`
### 대상 엔티티
``` text
sensor.geosil_aircon_rs485_ip136_geosil_eeokeon_silnaeondo_roomtemp
```
### 응답 예
> 거실 온도는 25.6도입니다.
센서가 `unknown` 또는 `unavailable`인 경우:
> 거실 온도를 확인할 수 없습니다.
------------------------------------------------------------------------
## 7. 우리집 온도 조회
현재 구성에서는 거실 실내온도를 `우리집 대표 온도`로 사용한다.
### 질문 예
- 우리집 온도는 얼마 인가요
- 우리 집 온도는 몇도 인가요
- 우리집 온도 알려줘
- 우리집 몇도야
### Intent 이름
`GetHomeTemperature`
### 현재 대상 엔티티
``` text
sensor.geosil_aircon_rs485_ip136_geosil_eeokeon_silnaeondo_roomtemp
```
### 응답 예
> 우리집 온도는 25.6도입니다.
------------------------------------------------------------------------
## 8. `/config/custom_sentences/ko/home_control.yaml`
``` yaml
language: "ko"
intents:
# =========================================================
# 전체 명령 차단
# =========================================================
StopAllCommand:
data:
- sentences:
- "전체 켜줘"
- "전체 꺼줘"
- "전체 전등 켜줘"
- "전체 전등 꺼줘"
- "전체 불 켜줘"
- "전체 불 꺼줘"
- "전체 보일러 켜줘"
- "전체 보일러 꺼줘"
- "모든 전등 켜줘"
- "모든 전등 꺼줘"
- "모든 불 켜줘"
- "모든 불 꺼줘"
- "모든 보일러 켜줘"
- "모든 보일러 꺼줘"
- "모두 켜줘"
- "모두 꺼줘"
- "전부 켜줘"
- "전부 꺼줘"
- "다 켜줘"
- "다 꺼줘"
# =========================================================
# 일괄소등 전용
# =========================================================
AllLightsOff:
data:
- sentences:
- "일괄소등"
- "일괄 소등"
- "일괄소등 해줘"
- "일괄 소등 해줘"
# =========================================================
# 에어컨 설정 온도
# =========================================================
GetAirconSetTemperature:
data:
- sentences:
- "에어컨 설정 온도[는] (몇도 | 몇 도 | 얼마) [인가요]"
- "에어컨 설정 온도 알려줘"
- "에어컨 설정 온도 알려 주세요"
- "에어컨 설정 온도 알려주세요"
- "에어컨 온도 몇도야"
- "에어컨 온도 몇 도야"
# =========================================================
# 거실 온도
# =========================================================
GetLivingRoomTemperature:
data:
- sentences:
- "거실 온도[는] (몇도 | 몇 도 | 얼마) [인가요]"
- "거실 온도 알려줘"
- "거실 온도 알려 주세요"
- "거실 온도 알려주세요"
- "거실 몇도야"
- "거실 몇 도야"
# =========================================================
# 우리집 온도
# =========================================================
GetHomeTemperature:
data:
- sentences:
- "우리집 온도[는] (몇도 | 몇 도 | 얼마) [인가요]"
- "우리 집 온도[는] (몇도 | 몇 도 | 얼마) [인가요]"
- "우리집 온도 알려줘"
- "우리 집 온도 알려줘"
- "우리집 몇도야"
- "우리 집 몇 도야"
```
------------------------------------------------------------------------
## 9. `configuration.yaml`의 `intent_script:`
주의: `configuration.yaml`에 이미 `intent_script:`가 있으면
`intent_script:`를 또 만들지 말고 기존 항목 아래에 Intent들을 추가한다.
같은 Intent 이름을 두 번 작성하면 `Map keys must be unique` 오류가
발생한다.
``` yaml
intent_script:
# =========================================================
# 전체 명령 차단
# =========================================================
StopAllCommand:
speech:
text: >
전체 제어 명령은 사용하지 않습니다.
방이나 장치 이름을 말씀해 주세요.
# =========================================================
# 일괄소등
# =========================================================
AllLightsOff:
action:
- action: light.turn_off
target:
entity_id: all
speech:
text: >
일괄소등을 실행했습니다.
# =========================================================
# 에어컨 설정 온도
# =========================================================
GetAirconSetTemperature:
speech:
text: >
{% set temp =
state_attr(
'climate.geosil_aircon_rs485_ip136_geosil_eeokeon_sangtae_acstate',
'temperature'
)
%}
{% if temp is not none %}
에어컨 설정 온도는 {{ temp | round(0) | int }}도입니다.
{% else %}
에어컨 설정 온도를 확인할 수 없습니다.
{% endif %}
# =========================================================
# 거실 온도
# =========================================================
GetLivingRoomTemperature:
speech:
text: >
{% set temp =
states(
'sensor.geosil_aircon_rs485_ip136_geosil_eeokeon_silnaeondo_roomtemp'
)
%}
{% if temp not in ['unknown', 'unavailable', 'none', ''] %}
거실 온도는 {{ temp }}도입니다.
{% else %}
거실 온도를 확인할 수 없습니다.
{% endif %}
# =========================================================
# 우리집 온도
# =========================================================
GetHomeTemperature:
speech:
text: >
{% set temp =
states(
'sensor.geosil_aircon_rs485_ip136_geosil_eeokeon_silnaeondo_roomtemp'
)
%}
{% if temp not in ['unknown', 'unavailable', 'none', ''] %}
우리집 온도는 {{ temp }}도입니다.
{% else %}
우리집 온도를 확인할 수 없습니다.
{% endif %}
```
------------------------------------------------------------------------
## 10. 최종 음성 명령 동작표
--------------------------------------------------------------------------------
음성 명령 Intent 실제 동작 Assist 응답
----------------- -------------------------- ----------------- -----------------
전체 켜줘 StopAllCommand 실행 안 함 전체 제어 명령은
사용하지 않습니다
전체 꺼줘 StopAllCommand 실행 안 함 전체 제어 명령은
사용하지 않습니다
전체 전등 꺼줘 StopAllCommand 실행 안 함 전체 제어 명령은
사용하지 않습니다
모든 불 꺼줘 StopAllCommand 실행 안 함 전체 제어 명령은
사용하지 않습니다
전부 꺼줘 StopAllCommand 실행 안 함 전체 제어 명령은
사용하지 않습니다
다 꺼줘 StopAllCommand 실행 안 함 전체 제어 명령은
사용하지 않습니다
일괄소등 AllLightsOff 전체 Light OFF 일괄소등을
실행했습니다
에어컨 설정 온도 GetAirconSetTemperature 설정온도 조회 에어컨 설정
몇도야 온도는 ○○도입니다
거실 온도 GetLivingRoomTemperature 거실온도 조회 거실 온도는
얼마인가요 ○○도입니다
우리집 온도 GetHomeTemperature 대표온도 조회 우리집 온도는
얼마인가요 ○○도입니다
--------------------------------------------------------------------------------
------------------------------------------------------------------------
## 11. 핵심 주의사항
1. `home_control.yaml`의 Intent 이름과 `configuration.yaml`의
`intent_script` 이름은 정확히 같아야 한다.
2. 같은 YAML 레벨에서 `GetAirconSetTemperature:` 같은 키를 두 번
작성하면 `Map keys must be unique` 오류가 발생한다.
3. 일반 전체 명령을 차단하려면 켜기뿐 아니라 `전체 꺼줘`, `모두 꺼줘`,
`전부 꺼줘`, `다 꺼줘` 등의 끄기 문장도 `StopAllCommand`에서
처리해야 한다.
4. `일괄소등`은 `AllLightsOff`로 별도 분리하여 일반 전체 명령과
구별한다.
5. `GetAirconSetTemperature`는 climate의 `temperature` 속성을 읽는다.
6. `GetLivingRoomTemperature`와 현재 `GetHomeTemperature`는 거실
실내온도 센서를 사용한다.
7. 설정 변경 후 Home Assistant 구성 검사를 실행하고 문제가 없으면
필요한 재시작/리로드를 진행한다.
첨부 파일을 스킨보드에 구성 PDF보기( W:\g5\skin\board\BS4-Basic-Webzine_11q_pdf_php82\view.skin.php + view_pdf.php구성)
관련자료
-
이전
-
다음작성일 2026.08.22 14:43
댓글 0
등록된 댓글이 없습니다.