2025/03/24

TTS 방송중 미디어 볼륨 낮추고 방송후 복원


TTS 방송중일 때 재생중인 미디어 플레이어의 볼륨을 낮추고 방송 후 다시 이전볼륨으로 돌아가는 스크립트.

** 저장할 미디어의 볼륨 리스트 변수를 만들고 플레이 체크후 볼륨 다운.
** TTS방송.
** 플레이중인 미디어의 이전 볼륨 복원.


알림 전용 미디어 플레이어는 따로 있어야 하며 미디어 그룹에 제외돼 있어야 함.

여기선 구글스피커 그룹, 크롬캐스트 구글TV, 크롬캐스트 오디오를 대상으로 플레이중일 때 볼륨다운후 TTS 방송, 이후 이전 볼륨 복원.

scripts.yaml
tts_notify:
  fields:
    message:
      required: true
      selector:
        text:
  sequence:
    - variables:
        previous_volumes: "{{ {'all': state_attr('media_player.all', 'volume_level'),
        'castbedroom': state_attr('media_player.castbedroom', 'volume_level'),
        'castaudio': state_attr('media_player.castaudio', 'volume_level')} }}"
    - repeat:
        for_each: 
          - all
          - castbedroom
          - castaudio
        sequence:
          - if:
              - condition: template
                value_template: "{{ is_state('media_player.' ~ repeat.item, 'playing') }}"
            then:
              - action: media_player.volume_set
                data:
                  volume_level: 0.2
                  entity_id: "media_player.{{ repeat.item }}"
    - action: tts.edge_tts_say
      data:
        message: "{{ message }}"
        entity_id: media_player.notify
    - wait_template: "{{ is_state('media_player.notify', 'playing') }}"
    - wait_template: "{{ is_state('media_player.notify', 'idle') }}"
    - repeat:
        for_each: 
          - all
          - castbedroom
          - castaudio
        sequence:
          - if:
              - condition: template
                value_template: "{{ is_state('media_player.' ~ repeat.item, 'playing') }}"
            then:
              - action: media_player.volume_set
                data:
                  volume_level: "{{ previous_volumes[repeat.item] }}"
                  entity_id: "media_player.{{ repeat.item }}"


자동화에 스크립트 적용.
automations.yaml
alias: 알림-종료/건조기 
  triggers:
    - trigger: state
      entity_id: sensor.dryer_status
      from: 'on'
      to: 'off'
      for: '00:00:30'
  actions:
    - action: script.tts_notify
      data:
        message: 건조기 사용을 마쳤습니다.