Last active
September 22, 2023 22:36
-
-
Save DivanX10/66834ad5075da7180131cf3b56f0357a to your computer and use it in GitHub Desktop.
Home Assistant. Яндекс колонка. Адаптивная громкость
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
Перед созданием данной автоматизации адаптивная громкость яндекс станции, внимательно прочтите комментарии. | |
Также можете прочитать про scene.create https://www.home-assistant.io/integrations/scene#creating-scenes-on-the-fly . это позволяет сохранять историю сущностей | |
Я использую удобную конифгурацию и используется код, который исправно работает с packages https://sprut.ai/client/blog/3180 | |
Большую часть нужно делать через GUI (я пометил это # Вставлять через GUI), только сенсор (# Создать файлик yaml) нужно делать через yaml. В GUI перед созданием скрипт или автоматизацию, | |
нажать на 3 точки. Эти 3 точки находятся справа, вверху, далее выбираем текстовый редактор и можно вставить код целиком. | |
############################ Добавляем яндекс станции в группу ############################ | |
Открываем файлик groups.yaml находящийся в папке config и добавляем | |
#Колонки Список яндекс станции | |
yandex stations: | |
name: "Яндекс станции" | |
all: false | |
entities: | |
- media_player.yandex_station_00000001 # указываем id своей колонки 01 | |
- media_player.yandex_station_00000002 # указываем id своей колонки 02 | |
- media_player.yandex_station_00000003 # указываем id своей колонки 03 | |
############################ Вспомогательный элемент ############################ | |
# Вставлять через GUI | |
# Алиса будет говорить на выбранной громкости | |
input_number.yandex_station_volume_level: | |
name: "Яндекс станция: Громкость" | |
min: 0 | |
max: 1 | |
step: 0,1 | |
mode: slider | |
icon: mdi:account-tie-voice | |
############################ Сенсоры ############################ | |
# Создать файлик yandex_station_volume_level.yaml | |
# Сенсор отображает статус говорящей колонки по ID, а также показывает в атрибутах громкость каждой колонки | |
# Если нужен сенсор, который отображает по имени, то смотрите на вариант ниже, но для правильной работы нужен entity_id колонки | |
# Данный сенсор нужно закинуть в packages или в configuration.yaml. В атрибутах указываем любое помещение и вставляем наши колонки. | |
# Тот текст который на русском, можно изменить. Помещении указываем свое и вставляем ID своей колонки | |
# Помещение: "{{ state_attr('вставляем свою колонку','volume_level') }}" | |
sensor: | |
- 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: | |
Гостиная: "{{ state_attr('вставляем свою колонку','volume_level') }}" | |
Кухня: "{{ state_attr('вставляем свою колонку','volume_level') }}" | |
Спальня_01: "{{ state_attr('вставляем свою колонку','volume_level') }}" | |
# Спальня_02: "{{ state_attr('media_player.yandex_station_2222222222','volume_level') }}" | |
# Детская: "{{ state_attr('media_player.yandex_station_2222222222','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 %} | |
############################ Скрипты ############################ | |
Вставлять через GUI. Создаем скрипт, в котором сначала идет сохранение в историю уровня громкости, а после выставляется та громкость, | |
которую выбрали через регулировку громкости. | |
В скрипте меняем только alias \ scene_id \ media_player.yandex_station_0000000000000 | |
1) alias - это название скрипта | |
2) Там где "scene_id: living_room_yandex_station_volume_level" указываем нужную комнату для сохранения уровня громкости | |
примеры для помещении: | |
- scene_id: living_room_yandex_station_volume_level | |
- scene_id: bedroom_yandex_station_volume_level | |
- scene_id: kitchen_yandex_station_volume_level | |
3) Вместо media_player.yandex_station_0000000000000 указываем ID своей яндекс колонки | |
# Имя скрипта для примера: script.yandex_station_adaptive_volume_alice_speaks_louder_livingroom | |
alias: 'Яндекс станция: Адаптивная громкость. Алиса говорит громче. История (Гостиная)' | |
sequence: | |
- condition: template | |
value_template: >- | |
{% set ya_vol = states("input_number.yandex_station_volume_level")|float %} | |
{% set ya_room_vol = state_attr("media_player.yandex_station_0000000000000","volume_level") %} | |
{% if ya_room_vol < ya_vol and ya_room_vol < 0.7 %} true | |
{% else %} false | |
{% endif %} | |
- service: scene.create | |
data: | |
scene_id: living_room_yandex_station_volume_level | |
entities: | |
media_player.yandex_station_0000000000000: | |
state: media_player.yandex_station_0000000000000 | |
volume_level: > | |
{{ state_attr("media_player.yandex_station_0000000000000","volume_level") }} | |
- service: media_player.volume_set | |
data: | |
volume_level: '{{ states("input_number.yandex_station_volume_level") }}' | |
target: | |
entity_id: media_player.yandex_station_0000000000000 | |
icon: mdi:account-tie-voice | |
mode: single | |
############################ Автоматизация ############################ | |
# Вставлять через GUI | |
# Указываем свое имя яндекс станции.Вместо имени "Яндекс Мини на кухне" или "Яндекс Мини в гостиной" и т.д подставляем свою колонку. | |
# Чтобы узнать имя своей колонки, посмотрите в панеле разработчика состояние yandex_station_volume_level_list. Спросите у Алисы что-нибудь и увидите имя ответившей колонки | |
# Ниже представлены две одинаковые автоматизации, только в первом случае, это мой пример без комментариев и как есть, | |
# а во втором случае я использую комментарии | |
# Мой пример автоматизации | |
alias: 'Яндекс станция: Адаптивная громкость' | |
description: '' | |
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 == "Яндекс Мини | |
на кухне" %} true {% else %} false {% 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 == "Яндекс Мини в | |
гостиной" %} true {% else %} false {% 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 == "Яндекс Мини в | |
гостиной" %} 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 == "Яндекс Мини | |
на кухне" %} false {% else %} true {% endif %} | |
id: Яндекс Мини на кухне перестала говорить | |
condition: [] | |
action: | |
- choose: | |
- conditions: | |
- condition: trigger | |
id: Яндекс Мини в гостиной говорит | |
- condition: state | |
entity_id: media_player.yandex_station_00000 | |
state: playing | |
sequence: | |
- service: script.yandex_station_adaptive_volume_alice_speaks_louder_livingroom | |
- conditions: | |
- condition: trigger | |
id: Яндекс Мини на кухне говорит | |
- condition: state | |
entity_id: media_player.yandex_station_00000 | |
state: playing | |
sequence: | |
- service: script.yandex_station_adaptive_volume_alice_speaks_louder_kitchen | |
- conditions: | |
- condition: trigger | |
id: Яндекс Мини в гостиной перестала говорить | |
- condition: state | |
entity_id: media_player.yandex_station_00000 | |
state: playing | |
sequence: | |
- scene: scene.living_room_yandex_station_volume_level | |
- conditions: | |
- condition: trigger | |
id: Яндекс Мини на кухне перестала говорить | |
- condition: state | |
entity_id: media_player.yandex_station_00000 | |
state: playing | |
sequence: | |
- scene: scene.kitchen_yandex_station_volume_level | |
default: [] | |
mode: single | |
# Шаблон. Это тоже самое, что и выше, только с комментариями. | |
# Чтобы узнать имя своей колонки, посмотрите в панеле разработчика состояние yandex_station_volume_level_list. Спросите у Алисы что-нибудь и увидите имя ответившей колонки | |
alias: 'Яндекс станция: Адаптивная громкость' | |
description: '' | |
trigger: | |
- platform: template # {% if ya_where == "Указываем имя своей колонки" %} вместо "Указываем имя своей колонки" подставляем имя колонки, которое вы | |
# присвоили в настройках яндекс умный дом. Также имя колонки можно узнать, вставив код в шаблон. Панель разработчика => Шаблон. В столбце слева отобразится имя колонки | |
value_template: >- | |
{% set ya_where = expand('group.yandex_stations') | |
|selectattr('attributes.alice_state', 'eq', 'SPEAKING') | | |
map(attribute='name') | list | join(",") %} {% if ya_where == "Указываем имя | |
своей колонки" %} true {% else %} false {% 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 == "Указываем имя | |
своей колонки" %} true {% else %} false {% 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 == "Указываем имя | |
своей колонки" %} 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 == "Указываем имя | |
своей колонки" %} false {% else %} true {% endif %} | |
id: ( Указываем имя колонки ) перестала говорить # скобку убираем и вписываем любое имя колонки. Это имя тригера, которое используется для запуска действия при выборе | |
condition: [] | |
action: | |
- choose: | |
- conditions: | |
- condition: trigger | |
id: ( Указываем имя колонки ) говорит # имя тригера | |
- condition: state | |
entity_id: media_player.yandex_station_00000 | |
state: playing | |
sequence: | |
- service: script.yandex_station_adaptive_volume_alice_speaks_louder_livingroom | |
- conditions: | |
- condition: trigger | |
id: ( Указываем имя колонки ) говорит # имя тригера | |
- condition: state | |
entity_id: media_player.yandex_station_00000 | |
state: playing | |
sequence: | |
- service: script.yandex_station_adaptive_volume_alice_speaks_louder_kitchen | |
- conditions: | |
- condition: trigger | |
id: ( Указываем имя колонки ) перестала говорить # имя тригера | |
- condition: state | |
entity_id: media_player.yandex_station_00000 | |
state: playing | |
sequence: | |
- scene: scene.living_room_yandex_station_volume_level | |
- conditions: | |
- condition: trigger | |
id: ( Указываем имя колонки ) перестала говорить # имя тригера | |
- condition: state | |
entity_id: media_player.yandex_station_00000 | |
state: playing | |
sequence: | |
- scene: scene.kitchen_yandex_station_volume_level | |
default: [] | |
mode: single |
А как поведет себя Алиса с данным улучшением если сказать ей "Звук 3" например? Такие команды будут выполняться или нет? Мне кажется судя по коду на колонку просто накатится предыдущая сохраненная сцена.
Специально для вас снял видео
https://drive.google.com/file/d/1zLUE-DWj0OVwxvSpd93NFDDv7clD0jvR/view?usp=sharing
Перестала работать автоматизация, в журнале Error while executing automation automation.iandeks_stantsiia_adaptivnaia_gromkost: expected float for dictionary value @ data['volume_level']
заходите в группу https://t.me/smart_home_divan
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
А как поведет себя Алиса с данным улучшением если сказать ей "Звук 3" например? Такие команды будут выполняться или нет? Мне кажется судя по коду на колонку просто накатится предыдущая сохраненная сцена.