2024/10/22

MA로 재생중인 플레이어에 Next Playlist 재생



Music Assistant에서 구글홈스피커 그룹과 오디오 리시버등 2개 이상의 플레이어를 가지고 있을 때 현재 재생되고 있는 미디어 플레이어에 입력한 playlist가 재생되도록 entity_id를 동적으로 연결하는 자동화.
재생중인 플레이어가 없으면 디폴트값인 미디어플레이어를 켜고 playlist재생.

무선 볼륨 버튼에 등록한 이전 트랙과 다음 트랙 재생은 현재 재생중인 플레이어에 적용되는데 input_select에 만들어 놓은 playlist는 previous playlist와 next playlist를 이용해 이동하려면 플레이어를 지정해 줄 필요가 생겨 만든 자동화.

** 현재 무선 볼륨버튼은 클릭시 미디어 플레이어 on/off, 더블클릭시 미디어 재생중일 때는 next track 이외의 경우는 특정 playlist 재생, 트리플클릭시 미디어 재생중일 때는 next playlist 이외의 경우는 특정 playlist 재생, 볼륨컨트롤시 현재 재생중인 미디어플레이어 볼륨조절.

** 이번 자동화에 chat gpt로 간소화해봤는데 3배정도의 길이의 코드를 변수 선언하고 파이썬의 딕셔너리 자료형을 사용해 현재길이로 줄여놓음. 덕분에 기존에 만들어놨던 자동화들도 다 테스트해보고 괜찮은 건 적용해봄. 간소화 장점이 가독성과 유지관리가 편함.

input_select.yaml
ma_playlist:
  name: MA Playlist
  initial: inst
  options:
    - classic
    - inst
    - comp
    - fork
    - pops
    - mymix

automation.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': '18',
            'inst': '22',
            'comp': '2',
            'fork': '14',
            'pops': '26',
            'mymix': '6'
          } %}
          library://playlist/{{ playlists[trigger.to_state.state] }}