728x90
안 쓰는 구형 스마트폰을 Home Assistant “스마트 스피커”로 집안의 작은 비서로 부활한 스마트폰
안드로이드 스마트폰 1대만 있으면 구글스피커 없이도 음성 안내(TTS), 음악/사운드 재생, 자동화 알림까지 모두 구현할 수 있습니다. Companion App 단기 완성 → Tasker+MQTT 고급화하는 간단한 방법입니다.
개요 — 어떤 방식이 좋은가요?
- 가장 간단(5분 완성): Home Assistant 앱의 모바일 알림 + TTS
notify.mobile_app_...
서비스로 즉시 음성 안내 가능- “센서만 잡히는데요?”가 정상입니다(앱만 설치해선
media_player
엔티티는 생기지 않음)
- 가장 유연(강력 추천): Tasker + MQTT
- HA → MQTT 명령(
say:
,play:
등) → 스마트폰(Tasker)이 TTS/오디오 재생 - 플레이/정지/볼륨/플레이리스트 등 모바일 기기 전체 제어까지 확장 가능
- HA → MQTT 명령(
- 보너스(선택): 가상 엔티티/UI 구성
- MQTT Discovery로 가상 엔티티(button/number/select 등) 노출, Lovelace 카드로 미디어 컨트롤 패널 만들기
- “진짜
media_player
” 에뮬레이션은 가능하지만, 규격이 까다로워 버튼/넘버/셀렉트 조합을 권장
준비물
- 안드로이드 스마트폰(충전 고정, 스탠드 권장)
- Home Assistant(Any) + 내부망 Wi-Fi
- Home Assistant Android Companion App
- (고급) Tasker + MQTT 플러그인(또는 Tasker의 MQTT 액션)
- (선택) 로컬 TTS Piper 애드온
체크리스트
- VLAN 분리(스마트홈/관리망) + HA 원격접속은 TLS/인증 필수
- MQTT 계정·비밀번호, 필요 시 TLS 활성화, 토픽 화이트리스트
- 안드로이드 절전 예외·방해 금지 해제·알림 우선순위 높음
- ADB 디버깅 상시 Off, 필요한 경우에만 일시 On
- 로그: HA 호출 이력, MQTT 접속 로그, Tasker 실행 이력 정기 점검
5분 완성: Companion App로 TTS 안내
1. 스마트폰 기본 설정
- Wi-Fi 고정(IP 예약), 자동 잠금/절전 예외에 Home Assistant 앱 추가
- 알림 허용(소리/팝업/잠금화면 표시 “허용”)
2. Companion App 등록
- 스마트폰에 Home Assistant 앱 설치 → HA URL 로그인
- HA 개발자도구 → 서비스에서
notify.mobile_app_<기기명>
확인
3. 즉시 TTS 테스트
service: notify.mobile_app_<기기명>
data:
title: "시스템 알림"
message: "테스트 음성입니다."
data:
ttl: 0
priority: high
tts: true
- 잠금 화면/무음에서도 읽히도록
priority: high
,ttl: 0
권장
4. 자동화 예시(현관문 열림 → 음성)
alias: "현관: 문 열림 안내"
trigger:
- platform: state
entity_id: binary_sensor.door_front
from: "off"
to: "on"
action:
- service: notify.mobile_app_<기기명>
data:
title: "현관 알림"
message: "현관문이 열렸습니다."
data:
ttl: 0
priority: high
tts: true
mode: single
포인트: Companion App만으로도 음성 안내 품질/지연이 매우 우수합니다.
고급: Tasker + MQTT로 “스마트 스피커”화
1. MQTT 브로커(HA 애드온: Mosquitto)
- 애드온 설치 → 사용자/비밀번호 생성(예:
ha
/ 강력암호) - HA 설정 → 통합구성요소 → MQTT 추가, 브로커 연결
- (선택) TLS 적용 시 인증서/포트 설정
예시(mosquitto ACL, 필요 시)
user ha
topic readwrite home/phone01/#
topic readwrite homeassistant/#
2. Tasker 설정(스마트폰)
- Tasker 설치 (+ MQTT 플러그인 또는 Tasker의 MQTT 액션 사용)
- 프로필 → Event: MQTT Subscribe
- Topic:
home/phone01/cmd
- Topic:
- 태스크(명령 파서) — 메시지 규칙:
say:문장
→ TTS 읽기play:URL
→ URL 오디오/MP3 재생vol:0-15
→ 볼륨 설정(미디어 볼륨)stop
→ 정지
Tasker 액션 예시(핵심만)
- If
%mqtt_msg ~R ^say:(.*)
→ Say →Text: %mq1
,Stream: Media
,Pitch/Speed: 취향
- Else If
^play:(.*)
→ Open URL →URL: %mq1
(http/https mp3/stream) - Else If
^vol:(\d+)
→ Audio → Media Volume →%mq1
- Else If
^stop$
→ Media Control → Stop
- 상태 보고(선택)
- MQTT Publish →
home/phone01/state
에 JSON 출력 - 예:
{"status":"idle","volume":10}
- LWT(유언 메시지) 설정 시 오프라인 탐지 가능
- MQTT Publish →
300x250
3. HA에서 명령 보내기(서비스 예시)
1) 말하기
service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: "say:거실 온도는 {{ states('sensor.living_temp') }}도 입니다."
2) 사운드/음악 재생
service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: "play:https://example.local/media/chime.mp3"
3) 볼륨/정지
service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: "vol:8"
service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: "stop"
4. 자동화 시나리오(예시)
A) 아침 브리핑(날씨+일정 → 말하기 + 음악)
alias: "아침 브리핑"
trigger:
- platform: time
at: "07:30:00"
action:
- service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: >
say:{{ now().strftime('%-m월 %-d일 %A') }} 아침입니다.
현재 기온 {{ states('sensor.outdoor_temp') }}도,
강수확률 {{ states('sensor.pop') }}퍼센트 입니다.
- delay: "00:00:05"
- service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: "play:https://example.local/media/playlist/morning.m3u"
mode: single
B) 보안 이벤트(침입 감지 → 경고·사이렌)
alias: "보안: 침입 경고"
trigger:
- platform: state
entity_id: binary_sensor.intrusion
to: "on"
action:
- service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: "say:경고! 침입이 감지되었습니다. 확인이 필요합니다."
- service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: "play:https://example.local/media/siren.mp3"
mode: restart
로컬 TTS(Piper) 연동 — 더 자연스럽고 빠르게
1. TTS 설정
# configuration.yaml
tts:
- platform: piper
voice: ko_KR-<설치한_보이스명>
2. 파일 생성 → 스마트폰 재생
Piper는 음성 파일을 만듭니다. 파일 경로나 “마지막 TTS 파일” 경로는 설치 방식에 따라 다를 수 있습니다.
alias: "Piper 브리핑 + 재생"
sequence:
- service: tts.piper_say
data:
entity_id: media_player.dummy # 재생용이 아닌 파일 생성 트리거 용도
message: "지금은 {{ now().strftime('%H시 %M분') }} 입니다."
- delay: "00:00:02"
- service: mqtt.publish
data:
topic: "home/phone01/cmd"
payload: "play:https://example.local/media/tts/last_tts.mp3"
운영 팁: NAS/HA Media 폴더에 TTS 출력 디렉터리 고정 → 고정 URL로 Tasker play: 호출.
가상 엔티티 & 대시보드(UI) — 깔끔한 컨트롤 패널
“진짜 media_player
” 에뮬은 스펙이 까다로워 아래 조합을 권장합니다.
1. MQTT Discovery로 버튼/넘버/셀렉트 공개
플레이/정지 버튼
# Publish once (Discovery)
topic: homeassistant/button/phone01_play/config
payload: {"name":"Phone01 Play","command_topic":"home/phone01/cmd","payload_press":"play:https://example.local/media/radio.m3u","unique_id":"phone01_play"}
topic: homeassistant/button/phone01_stop/config
payload: {"name":"Phone01 Stop","command_topic":"home/phone01/cmd","payload_press":"stop","unique_id":"phone01_stop"}
볼륨 넘버
topic: homeassistant/number/phone01_vol/config
payload: {"name":"Phone01 Vol","command_topic":"home/phone01/cmd","min":0,"max":15,"step":1,"mode":"slider","unique_id":"phone01_vol","set_value_template":"vol:{{ value }}"}
플레이리스트 셀렉트
topic: homeassistant/select/phone01_playlist/config
payload: {
"name":"Phone01 Playlist",
"command_topic":"home/phone01/cmd",
"options":["news","jazz","rain"],
"unique_id":"phone01_playlist",
"command_template":"{% if value=='news' %}play:https://example/media/news.m3u{% elif value=='jazz' %}play:https://example/media/jazz.m3u{% else %}play:https://example/media/rain.m3u{% endif %}"
}
2. Lovelace 카드(예시)
type: vertical-stack
cards:
- type: entities
title: Phone01 Controls
entities:
- button.phone01_play
- button.phone01_stop
- number.phone01_vol
- select.phone01_playlist
실제 media_player 없이도 대시보드 조작감을 충분히 낼 수 있습니다.
운영 기준 점검 포인트
- 네트워크/접근제어
- HA, MQTT는 내부망 한정(필요 시 VPN)
- 외부 노출은 TLS + 인증 + IP 제한
- 스마트홈 VLAN 따로, 관리단에서만 설정 변경
- MQTT 보안
- 사용자/비밀번호 필수, 익명 접속 금지
- 토픽 최소권한(예:
home/phone01/#
만) - 가능하면 TLS(서버 인증서/클라이언트 인증서)
- LWT로 단말 이탈 탐지, QoS=1 이상 고려
- 스마트폰 하드닝
- 불필요 앱·권한 제거, 절전 예외
- ADB Off(필요 시 순간 On, Wi-Fi 디버깅은 더 엄격)
- 화면 잠금/부팅 자동 실행(Tasker) 설정
- 무결성/미디어 경로
- 재생 URL은 내부 NAS/HA Media 폴더 등 신뢰 경로로 고정
- (선택) 서명/토큰·만료시간 적용, 디렉터리 인덱싱 차단
- 관제/로그
- HA 자동화 호출 이력, Mosquitto 접속 로그, Tasker 동작 로그 주기 점검
- 이상 토픽/빈도 감시(탐지 룰) → 알림/차단
트러블슈팅
- 앱만 설치했는데 media_player가 안 보여요
→ 정상입니다. Companion App은 센서/알림 중심입니다. TTS는notify.mobile_app
로 처리하고, 고급 컨트롤은 Tasker+MQTT로 확장하세요. - TTS가 안 들려요
→ 방해금지/무음/절전/알림 우선순위 확인,priority: high
,ttl: 0
적용 - URL 재생이 실패해요
→ 내부 DNS/인증서/접근권한 확인, HTTP Range/Content-Type 점검, Wi-Fi 연결 유지 - 지연이 느려요
→ Piper(로컬 TTS) 사용, 같은 AP(5GHz) 사용, HA·MQTT·미디어 저장소 근접 배치
추천 시나리오
- 빠른 구축:
notify.mobile_app
+tts:true
→ 음성안내 완료 - 유연 확장: Tasker+MQTT로
say:
/play:
/vol:
/stop
명령 체계 → 음악/효과음/브리핑 자동화 - 깔끔 UI: MQTT Discovery(버튼/넘버/셀렉트) + Lovelace 카드 → 리모컨 수준 조작
- 보안 필수: MQTT 인증/TLS, ADB 상시 Off, 토픽 최소권한+로그 관제
728x90
그리드형(광고전용)
댓글