-
-
Save vvv279/c3686e56146c6480d1d30e6a821818d7 to your computer and use it in GitHub Desktop.
Яндекс станция Адаптивная громкость
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# /.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