Найти тему
Smart Home 53

Адаптивная громкость Яндекс Станции с помощью Home Assistant

Умный дом - это целый комплекс взаимосвязанных между собой устройств. В моём случае одним из его элементов является Яндекс Станция. С ее помощью я получаю голосовые уведомления, а также сам отдаю голосовые команды. Но эта статья не об этом, она о том, как комфортно слушать музыку с помощью Станции и не беспокоить при этом соседей.

В комнате, где установлена Станция, у меня довольно хорошая слышимость с соседями, да и умная колонка весьма громкая, поэтому большую часть дня я слушаю музыку на уровне громкости - 2. Но этой громкости абсолютно не хватает для голосовых уведомлений от Алисы. Если я спрошу про погоду на улице - расслышать ответ будет очень сложно. Поэтому решил автоматизировать управление громкостью этой колонки.

Ранее я уже показывал свои автоматизации по установке уровня громкости на дневное и ночное время, но этого оказалось недостаточно.

# Установка громкости на ночь
- alias: "Volume Down at night"
  initial_state: true
  trigger:
    - platform: time
      at: '21:30:00'
  condition: []
  action: 
    - service: media_player.volume_set
      entity_id: media_player.yandex_station_c
      data:
        volume_level: 0.2

        

# Установка громкости на день
- alias: "Volume Down at day"
  initial_state: true
  trigger:
    - platform: time
      at: '6:30:00'
  condition: []
  action: 
    - service: media_player.volume_set
      entity_id: media_player.yandex_station_main
      data:
        volume_level: 0.3

Для того чтобы громкость музыки устанавливалась на необходимое значение, я написал следующую автоматизацию:

# Установка громкости в соответствии с временем после проигрывания музыки
- alias: "Volume after paused"
  initial_state: true
  trigger:
    - platform: state
      entity_id: media_player.yandex_station_main
      from: 'playing'
      to: 'paused'
  action:
    - choose:
      - conditions:
        - condition: time
          after: '06:30:00'
          before: '21:30:00'
        sequence:
          - service: media_player.volume_set
            entity_id: media_player.yandex_station_main
            data:
              volume_level: 0.3
      - conditions:
        - condition: time
          after: '21:30:00'
          before: '06:30:00'
        sequence:
          - service: media_player.volume_set
            entity_id: media_player.yandex_station_main
            data:
              volume_level: 0.2

Таким образом при изменении статуса колонки с проигрывания на паузу громкость колонки в зависимости от времени устанавливается на необходимое значение. Но этого было мало, так как в начале проигрывания днем звук все равно был слишком громким. Поэтому я написал еще одну автоматизацию.

# Установка громкости при проигрывании музыки
- alias: "Volume after playing"
  initial_state: true
  trigger:
    - platform: state
      entity_id: media_player.yandex_station_main
      from: 'paused'
      to: 'playing'
  action:
    - service: media_player.volume_set
      entity_id: media_player.yandex_station_main
      data:
        volume_level: 0.2

Тут все наоборот, когда колонка начинает играть - громкость устанавливается на 2. Вот теперь все идеально, музыка играет на комфортном для меня уровне, если музыка не играет - громкость уведомлений и ответов от Алисы достаточна и слышна нормально.

С проблемой я столкнулся когда попытался спросить у Алисы что-то в процессе проигрывания музыки. И она ответила очень тихо. Пришлось бороться и с этим кейсом. Вот какую автоматизацию я использовал:

# Установка громкости голоса во время проигрывания
- alias: "Volume at talk"
  initial_state: true
  trigger:
    - platform: template
      value_template: "{{ state_attr('media_player.yandex_station_main', 'alice_state') == 'SPEAKING' }}"
  condition:
    condition: state
    entity_id: media_player.yandex_station_main
    state: 'playing'
  action:
    - service: media_player.volume_set
      entity_id: media_player.yandex_station_main
      data:
        volume_level: 0.3
    - wait_template: "{{ state_attr('media_player.yandex_station_main', 'alice_state') == 'IDLE' }}"
    - service: media_player.volume_set
      entity_id: media_player.yandex_station_main
      data:
        volume_level: 0.2

В качестве триггера тут используется шаблон, который срабатывает в тот момент, когда Алиса будет отвечать голосом на Ваш запрос. В качестве условия срабатывания - проигрывание колонкой музыки. Действие тут состоит из двух частей - установка громкости 3, ожидания, когда Алиса прекратит говорить, и наконец возвращение громкости 2.

Система получилось не очень гибкой, можно сделать немного сложнее и конкретно запоминать установленный уровень громкости на колонки и возвращать именно его, но мне это не нужно, эксплуатация такой версии показала себя великолепно. Теперь музыка всегда включается с комфортной для меня громкостью - а если надо, я ее без проблем могу увеличить, голосовые оповещения при этом всегда слышны в комнате, даже если в данный момент играет музыка на самой колонке.

Подписывайтесь на мой канал и страницу в инстаграм @smart.home53, чтобы не пропустить новые статьи.

#умный дом #smart home #home assistant #yandex #яндекс станция #интернет вещей #iot #технологии #алиса #умная колонка