HA에 매터허브 애드온을 설치해 기기를 구글홈과 공유하고 템플릿 스위치와 스크립트도 공유기기로 등록. 음성명령은 공유한 기기의 구성요소에 적당한 이름을 정해주고 해당 이름으로 음성명령.
아래 연주음악 템플릿 스위치처럼 unique_id를 정해주면 라벨등 추가정보를 입력할 수 있고 라벨로 필터링한 후 해당기기만 매터허브로 넘길 수 있음. 이 템플릿 스위치로 특정 playlist를 재생하고 플레이어를 off할 수 있도록 하고 이어지는 스크립트는 다음곡과 다음목록의 음성키워드로 만듬.
구글홈에 노출되는 음성키워드는 연주음악과 오디오, 다음곡, 다음목록이며 '연주음악 켜/꺼'로 플레이어 on/off 하며 '다음곡 켜' '다음목록 켜'로 곡과 플레이리스트 이동함.
재생 스피커는 구글홈 스피커그룹과 리시버앰프로 둘 중 현재 재생중인 기기에 다음곡과 재생목록이 적용되도록 자동화 설정. '연주음악'은 구글홈 스피커 그룹을 on/off하는 용도고 '오디오'는 리시버앰프를 on/off하는 용도.
** input_boolean으로 스위치 만들고 on/off에 따라 다음곡, 이전곡으로 자동화 연결해도 좋을 것 같음.
** 리시버앰프에는 옵티컬단자에 연결된 크롬캐스트 오디오가 있어 rm4 mini에서 리모컨 신호를 보내 옵티컬 2번단자로 전환하면서 리시버가 on되고 크롬캐스트 오디오에 playlist를 재생하는 것까지 turn_on동작으로 실행.
** media_player.all 구글홈 스피커 그룹, media_player.castaudio는 리시버앰프에 연결된 크롬캐스트 오디오.
** playlist번호를 찾는건 여기서 참고: https://ntxlds.blogspot.com/2024/11/music-assistant-tip.html
switch.yaml
- platform: template
switches:
music_assistant: # Instrumental
friendly_name: '연주음악'
unique_id: 'inst'
value_template: "{{ is_state('media_player.all_2', 'playing') or
is_state('media_player.castaudio_2', 'playing') }}"
turn_on:
- action: media_player.play_media
data:
media_content_id: library://playlist/8
media_content_type: playlist
entity_id: media_player.all_2
turn_off:
- service: media_player.turn_off
data:
entity_id:
- media_player.all_2
- media_player.castaudio_2
castaudio_music:
friendly_name: '오디오'
unique_id: 'castinst'
value_template: "{{ states('sensor.neo07_watt') | float(0) > 15 }}"
turn_on:
- action: remote.send_command
data:
entity_id: remote.rm4_mini
device: audio
command: source_opt2
- action: media_player.volume_set
data:
volume_level: 0.7
entity_id: media_player.castaudio
- action: media_player.play_media
data:
media_content_id: library://playlist/8
media_content_type: playlist
entity_id: media_player.castaudio_2
turn_off:
- action: remote.send_command
data:
entity_id: remote.rm4_mini
device: audio
command: amp_onoff
- action: media_player.turn_off
data:
entity_id: media_player.castaudio_2
script.yaml
next_track:
alias: '다음곡'
sequence:
- action: media_player.media_next_track
target:
entity_id: >
{{ states.media_player |
selectattr('entity_id', 'in', ['media_player.all_2','media_player.castaudio_2']) |
selectattr('state', 'equalto', 'playing') | map(attribute='entity_id') | first |
default('media_player.all_2') }}
next_playlist:
alias: '다음목록'
sequence:
- action: input_select.select_next
entity_id: input_select.ma_playlist
input_select.yaml
ma_playlist:
name: MA Playlist
initial: 'Inst.'
options:
- 'Classic'
- 'Inst.'
- 'Comp.'
- 'Fork'
- 'Pops'
- 'BGM'
- 'MAmix'
automations.yaml
- id: 입력-Playlist/MA
alias: 입력-Playlist/MA
mode: single
triggers:
- trigger: state
entity_id: input_select.ma_playlist
actions:
- action: media_player.play_media
target:
entity_id: >
{{ states.media_player |
selectattr('entity_id', 'in', ['media_player.all_2','media_player.castaudio_2']) |
selectattr('state', 'equalto', 'playing') | map(attribute='entity_id') | first |
default('media_player.all_2') }}
data:
media_content_type: playlist
media_content_id: >
{% set playlists = {
'Classic': '34',
'Inst.': '23',
'Comp.': '15',
'Fork': '59',
'Pops': '51',
'BGM': '20',
'MAmix': '4'
} %}
library://playlist/{{ playlists[trigger.to_state.state] }}