Skip to content

Instantly share code, notes, and snippets.

@vvv279
Last active August 23, 2021 11:24
Show Gist options
  • Save vvv279/c3686e56146c6480d1d30e6a821818d7 to your computer and use it in GitHub Desktop.
Save vvv279/c3686e56146c6480d1d30e6a821818d7 to your computer and use it in GitHub Desktop.
Яндекс станция Адаптивная громкость
# /.homeassistant/includes/packages/device/yandex_station_volume_level.yaml
# Огромное спасибо @SmartHomeDivan:
# https://www.youtube.com/watch?v=T17HUMdDxHo
# https://gist.github.com/DivanX10/66834ad5075da7180131cf3b56f0357a
# Значение XXXXXXxXXXXxXXXxXXXX меняем на свою станцию
# Данный нужно закинуть в packages
yandex_station_volume_level:
################################################################################
# Яндекс станция: Адаптивная громкость
################################################################################
# groups: # /.homeassistant/groups.yaml
# yandex_stations:
# name: "Яндекс станции"
# all: false
# entities:
# - !secret media_player_yandex_station
# - media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX
input_number:
################################################################################
#
################################################################################
yandex_station_volume_level:
name: 'Яндекс станция Громкость'
min: 0
max: 1
step: 0.1
mode: slider
icon: mdi:account-tie-voice
sensor:
################################################################################
# Счетчик для Яндекс станции
################################################################################
# ------------
# Создать файлик yaml
# Сенсор отображает статус говорящей колонки по ID, а также показывает в атрибутах громкость каждой колонки
# Если нужен сенсор, который отображает по имени, то смотрите на вариант ниже, но для правильной работы нужен entity_id колонки
# Данный сенсор нужно закинуть в packages или в configuration.yaml. В атрибутах указываем любое помещение и вставляем наши колонки.
# Тот текст который на русском, можно изменить. Помещении указываем свое и вставляем ID своей колонки
# Помещение: "{{ state_attr('вставляем свою колонку','volume_level') }}"
- platform: template
sensors:
yandex_station_volume_level:
friendly_name: "Яндекс станция Громкость Говорит"
value_template: >-
{% if expand('group.yandex_stations') | selectattr('attributes.alice_state', 'eq', 'SPEAKING') | map(attribute='entity_id') | list | join(",") %}
{{ expand('group.yandex_stations') | selectattr('attributes.alice_state', 'eq', 'SPEAKING') | map(attribute='entity_id') | list | join(",") }}
{% else %}
off
{% endif %}
icon_template: >-
{% if is_state('sensor.yandex_station_volume_level', 'off') %}
mdi:account-tie-voice-off
{% else %}
mdi:account-tie-voice
{% endif %}
attribute_templates:
Спальня_01: "{{ state_attr('media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX','volume_level') }}"
# Гостиная: "{{ state_attr('media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX','volume_level') }}"
Кухня: "{{ state_attr('media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX','volume_level') }}"
# Спальня_02: "{{ state_attr('media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX','volume_level') }}"
# Гостиная: "{{ state_attr('media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX','volume_level') }}"
################################################
# При желании можете вывести второй сенсор, который отображает статус говорящей колонки по имени (имя будет таким, как указали в УДЯ)
- platform: template
sensors:
yandex_station_last_activity_name:
friendly_name: "Последняя активная яндекс станция Имя"
value_template: >-
{% if expand('group.yandex_stations') | selectattr('attributes.alice_state', 'eq', 'LISTENING') | map(attribute='name') | list | join(",") %}
{{ expand('group.yandex_stations') | selectattr('attributes.alice_state', 'eq', 'LISTENING') | map(attribute='name') | list | join(",") }}
{% else %}
off
{% endif %}
icon_template: >-
{% if is_state('sensor.yandex_station_last_activity_name', 'off') %}
mdi:account-tie-voice-off
{% else %}
mdi:account-tie-voice
{% endif %}
script:
# Вставлять через GUI
# Скрипт №1. Яндекс станция: Адаптивная громкость. Алиса говорит громче
# Можно изменить порог после которого алиса будет менять громкость. Порог меняется в строке {% if ya_all_vol <= 0.5 %}
yandex_station_adaptive_volume_alice_speaks_louder:
alias: Яндекс станция Адаптивная громкость. Алиса говорит громче
sequence:
- service: media_player.volume_set
data:
volume_level: >-
{% set ya_living_room_vol = state_attr('sensor.yandex_station_volume_level','Гостиная') %}
{% set ya_kitchen_vol = state_attr('sensor.yandex_station_volume_level','Кухня') %}
{% set ya_bedroom_01_vol = state_attr('sensor.yandex_station_volume_level','Спальня_01') %}
{% set ya_all_vol = ya_living_room_vol or ya_kitchen_vol or ya_bedroom_01_vol%}
{% if ya_all_vol <= 0.7 %}
{{ states('input_number.yandex_station_volume_level') }}
{% else %}
{% endif %}
target:
entity_id: '{{states("sensor.yandex_station_volume_level")}}'
mode: single
icon: mdi:account-tie-voice
# Скрипт №2. Яндекс станция: Кухня. Уровень громкости. История
yandex_station_bedroom_01_volume_level_history:
alias: Яндекс станция Спальня. Уровень громкости. История
sequence:
- service: scene.create
data:
scene_id: bedroom_01_yandex_station_volume_level
entities:
media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX:
state: '{{ states("sensor.yandex_station_volume_level") }}'
volume_level: >-
{{ state_attr('media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX','volume_level') }}
mode: single
icon: mdi:account-tie-voice
# Скрипт №3. Яндекс станция: Гостиная. Уровень громкости. История
yandex_station_living_room_volume_level_history:
alias: Яндекс станция Гостиная. Уровень громкости. История
sequence:
- service: scene.create
data:
scene_id: living_room_yandex_station_volume_level
entities:
media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX:
state: '{{ states("sensor.yandex_station_volume_level") }}'
volume_level: >-
{{ state_attr('media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX','volume_level') }}
mode: single
icon: mdi:account-tie-voice
automation:
# Вставлять через GUI
# Указываем свое имя яндекс станции.Вместо имени "Яндекс Мини на кухне" или "Яндекс Мини в гостиной" и т.д подставляем свою колонку.
# Чтобы узнать имя своей колонки, посмотрите в панеле разработчика состояние yandex_station_volume_level. Спросите у Алисы что-нибудь и увидите имя ответившей колонки
- alias: Яндекс станция Адаптивная громкость всех колонок
description: При ответе, Алиса будет говорить громче, а после выставится исходная громкость
initial_state: true #false true
trigger:
- platform: template
value_template: >-
{% set ya_where = expand('group.yandex_stations')
|selectattr('attributes.alice_state', 'eq', 'SPEAKING') |
map(attribute='name') | list | join(",") %} {% if ya_where ==
"media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX" %} true {% else %}
false {% endif %}
id: Яндекс Мини на кухне говорит
- platform: template
value_template: >-
{% set ya_where = expand('group.yandex_stations')
|selectattr('attributes.alice_state', 'eq', 'SPEAKING') |
map(attribute='entity_id') | list | join(",") %} {% if ya_where ==
"media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX" %} true {% else %}
false {% endif %}
id: Яндекс в спальне говорит
- platform: template
value_template: >-
{% set ya_where = expand('group.yandex_stations')
|selectattr('attributes.alice_state', 'eq', 'SPEAKING') |
map(attribute='entity_id') | list | join(",") %}
{% if ya_where == "media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX" %}
false {% else %} true {% endif %}
id: Яндекс в спальне перестала говорить
- platform: template
value_template: >-
{% set ya_where = expand('group.yandex_stations')
|selectattr('attributes.alice_state', 'eq', 'SPEAKING') |
map(attribute='name') | list | join(",") %} {% if ya_where ==
"media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX" %} false {% else %}
true {% endif %}
id: Яндекс Мини на кухне перестала говорить
condition: []
action:
- choose:
- conditions:
- condition: trigger
id: Яндекс в спальне говорит
- condition: state
entity_id: media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX
state: playing
sequence:
- service: script.yandex_station_living_room_volume_level_history
- service: script.yandex_station_adaptive_volume_alice_speaks_louder
- service: media_player.media_pause
target:
entity_id: media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX
- conditions:
- condition: trigger
id: Яндекс Мини на кухне говорит
- condition: state
entity_id: media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX
state: playing
sequence:
- service: script.yandex_station_bedroom_01_volume_level_history
- service: script.yandex_station_adaptive_volume_alice_speaks_louder
- conditions:
- condition: trigger
id: Яндекс в спальне перестала говорить
sequence:
- scene: scene.living_room_yandex_station_volume_level
# - service: media_player.media_play
# target:
# entity_id: media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX
- conditions:
- condition: trigger
id: Яндекс Мини на кухне перестала говорить
- condition: state
entity_id: media_player.yandex_station_XXXXXXxXXXXxXXXxXXXX
state: playing
sequence:
- scene: scene.bedroom_01_yandex_station_volume_level
default: []
mode: single
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment