-
-
Save DivanX10/66834ad5075da7180131cf3b56f0357a to your computer and use it in GitHub Desktop.
Перед созданием данной автоматизации адаптивная громкость яндекс станции, внимательно прочтите комментарии. | |
Также можете прочитать про 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 |
Строка 140 Чтобы узнать имя своей колонки, посмотрите в панели разработчика состояние yandex_station_volume_level _list. Я думаю _list лишнее.
Вы правы, list тут лишнее, так как нам не нужно выводить список, а нужно ловить имя одной колонки
Что интересно яндекс мини в автоматизации работает тригер:
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 %}
а на Яндекс станции нужно заменить (attribute='name') на (attribute='entity_id')Я правильно понял, что для большой яндекс станции нужно использовать (attribute='entity_id')? Получается, что большая яндекс станция не выводит имя, как у мини?
Да все верно, у меня так : https://gist.github.com/vvv279/c3686e56146c6480d1d30e6a821818d7
А как поведет себя Алиса с данным улучшением если сказать ей "Звук 3" например? Такие команды будут выполняться или нет? Мне кажется судя по коду на колонку просто накатится предыдущая сохраненная сцена.
А как поведет себя Алиса с данным улучшением если сказать ей "Звук 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']
Вы правы, list тут лишнее, так как нам не нужно выводить список, а нужно ловить имя одной колонки
Я правильно понял, что для большой яндекс станции нужно использовать (attribute='entity_id')? Получается, что большая яндекс станция не выводит имя, как у мини?