Coder Social home page Coder Social logo

dext0r / ha-yandex-station-intents Goto Github PK

View Code? Open in Web Editor NEW
114.0 114.0 7.0 180 KB

Продвинутое получение команд от Яндекс.Станции и передача их в Home Assistant в виде событий

Python 100.00%
home-assistant home-assistant-component yandex-station

ha-yandex-station-intents's People

Contributors

altapo avatar d51x avatar dependabot[bot] avatar dext0r avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ha-yandex-station-intents's Issues

Можно ли сделать переменную в навыке

Интересует возможность создания переменной при активации автоматизации
Хочется сделать её на порядок умнее
Тоесть после её вопроса я ответил 8 утра к примеру, и далее мне нужно это значение подставить в следующую автоматизацию которая ставит будильник (опять же к примеру)

Событие yandex_intent не отправляется

Проблема, аналогичная #3, однако сама собой не решилась. Я добавляю intents в yandex_station_intents, в приложении Яндекса создаются сценарии, колонка говорит то, что указано. Но при попытке подписаться на событие в настройках разработчика ничего не перехватывается.

Ошибка создания или обновления сценария

Здравствуйте. В УДЯ станции присвоена комната. Сценарии в УДЯ добавились. Но при перезагрузке конфигурации YAML падает ошибка и автоматизации не создаются. Сообщения не приходят.

Source: custom_components/yandex_station_intents/__init__.py:248
Integration: Yandex.Station Intents ([documentation](https://github.com/dext0r/ha-yandex-station-intents), [issues](https://github.com/dext0r/ha-yandex-station-intents/issues))
First occurred: 00:37:17 (2 occurrences)
Last logged: 00:37:17

Ошибка создания или обновления сценария '--- Как дела'
Ошибка создания или обновления сценария '--- Кто нибудь дома'
Traceback (most recent call last):
  File "/config/custom_components/yandex_station_intents/__init__.py", line 248, in _async_setup_intents
    await quasar.async_add_or_update_intent(
  File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 201, in async_add_or_update_intent
    r = await self._session.put(f'{URL_USER}/scenarios/{intent_quasar_id}', json=payload)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/yandex_station_intents/yandex_session.py", line 174, in put
    return await self._request('put', url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/yandex_station_intents/yandex_session.py", line 195, in _request
    r = await getattr(self._session, method)(url, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 400, in _request
    raise RuntimeError("Session is closed")
RuntimeError: Session is closed

В /config/configuration.yaml

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

yandex_station_intents:
  intents:
    Как дела:
    Кто нибудь дома: Сейчас проверю

Ошибка подключения к УДЯ

С неделю-две назад как-то незаметно перестала работать интеграция. Запись добавляется (и через Yandex.Station, и через куки), но пишет, что нет устройств (при этом в интеграции Yandex.Station есть три устройства). Пробовал удалить добавить/ Также пробовал скачать повторно в HACS. Ничего из этого не помогло.
Screenshot-1.png
Версия интеграции: 0.5.0

лог ошибки

Logger: custom_components.yandex_station_intents.yandex_quasar
Source: custom_components/yandex_station_intents/yandex_session.py:180
Integration: Yandex.Station Intents (documentation, issues)
First occurred: 6 августа 2023 г. в 13:46:34 (31 occurrences)
Last logged: 12:10:52

Ошибка подключения к УДЯ
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 980, in _wrap_create_connection
return await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1085, in create_connection
raise exceptions[0]
File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1069, in create_connection
sock = await self._connect_sock(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/asyncio/base_events.py", line 973, in _connect_sock
await self.sock_connect(sock, address)
File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 634, in sock_connect
return await fut
^^^^^^^^^
File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 674, in _sock_connect_cb
raise OSError(err, f'Connect call failed {address}')
ConnectionRefusedError: [Errno 111] Connect call failed ('::', 443, 0, 0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 270, in connect
self._ws = await self._session.ws_connect(url, heartbeat=45)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/yandex_station_intents/yandex_session.py", line 180, in ws_connect
return await self._session.ws_connect(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 779, in _ws_connect
resp = await self.request(
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 536, in _request
conn = await self._connector.connect(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 540, in connect
proto = await self._create_connection(req, traces, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 901, in _create_connection
_, proto = await self._create_direct_connection(req, traces, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1209, in _create_direct_connection
raise last_exc
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1178, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 988, in _wrap_create_connection
raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host push.yandex.ru:443 ssl:default [Connect call failed ('::', 443, 0, 0)]

информация о системе
Версия core-2023.7.3
Тип установки Home Assistant OS
Среда разработки false
Supervisor true
Docker true
Пользователь root
Виртуальное окружение false
Версия Python 3.11.4
Семейство операционных систем Linux
Версия операционной системы 6.1.39
Архитектура ЦП x86_64

Фразы с шаблонами

Есть ли возможность задавать фразы с шаблонами? К примеру "Громкость на телеке 20", а вместо 20 указать переменную какую-нибудь, и её передавать уже в автоматизацию, к примеру

Параметр Extra_phrases не добавляет дополнительные фразы в Умный дом Яндекса при обновлении

Добрый день,

при создании нового параметра "extra_phrases" работает штатно.

Выключи пылесос:
  extra_phrases:
    - отправь пылесос на базу

Эта команда создаст сценарий Яндекса с именем ---Выключи пылесос и фразами "выключи пылесос" и "отправь пылесос на базу".

Стоит мне добавить дополнительных фраз:

Выключи пылесос:
  extra_phrases:
    - отправь пылесос на базу
    - останови пылесос
    - останови уборку
    - прекрати уборку
    - отмени уборку

.. как ничего не происходит.

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

Не удалось настроить интеграцию

После установки настраиваю конфигурацию, ошибка "Не удалось настроить интеграцию".

Авторизацию пробовал через куки и через компонент YandexStation.

Журнал след:
2024-01-31 10:03:39.886 DEBUG (MainThread) [custom_components.yandex_station_intents.yandex_session] Авторизация в Яндекс с помощью токена
2024-01-31 10:03:41.331 DEBUG (MainThread) [custom_components.yandex_station_intents.yandex_quasar] Получение списка устройств
2024-01-31 10:03:42.204 DEBUG (MainThread) [custom_components.yandex_station_intents.yandex_session] Авторизация в Яндекс с помощью токена
2024-01-31 10:03:42.669 DEBUG (MainThread) [custom_components.yandex_station_intents.yandex_session] Повтор get https://iot.quasar.yandex.ru/m/user/devices
2024-01-31 10:03:43.008 DEBUG (MainThread) [custom_components.yandex_station_intents.yandex_session] Авторизация в Яндекс с помощью токена
2024-01-31 10:03:43.425 DEBUG (MainThread) [custom_components.yandex_station_intents.yandex_session] Повтор get https://iot.quasar.yandex.ru/m/user/devices
2024-01-31 10:03:43.774 DEBUG (MainThread) [custom_components.yandex_station_intents.yandex_session] Авторизация в Яндекс с помощью токена

Не все сценарии пробрасываются в УДЯ

В какой-то момент активационные фразы пропали или начали путаться.
На запрос "включит телевизор" срабатывает другой интент (видно, если в разработчике подписаться на событие)
или совсем не срабатывает (Алиса отвечает как на обычную фразу).

Я не знаю куда копать.
Переустанавливал, удалял вручную и службой (как в FAQ), сценарии в УДЯ исчезают, потом появляются (как и положено с минусами вначале), но не все.
`Уровень: ОШИБКА
Эта ошибка возникла в пользовательской интеграции.
Регистратор: custom_components.yandex_station_intents
Источник: custom_components/yandex_station_intents/init.py:262
интеграция: Yandex.Station Intents (документация, проблемы)
Первое сообщение: 14:30:51 (24 сообщений)
Последнее сообщение: 14:51:18

Ошибка создания или обновления сценария '--- Выключи телевизор'
Ошибка создания или обновления сценария '--- Найди телефон Вероники'
Ошибка создания или обновления сценария '--- Найди телефон Натальи'
Ошибка создания или обновления сценария '--- Отбей домофон'
Ошибка создания или обновления сценария '--- Открой домофон'`

В HA создано в configuration:
yandex_station_intents: intents: !include includes/Integration/YandexIntent.yaml

В файле YandexIntent.yaml

Найди телефон Андрея:
extra_phrases:
- Потерял телефон
- Где мой телефон
- Найди телефон
say_phrase: Сейчас найду

Найди телефон Натальи: # не работает
extra_phrases:
- Наташка потеряшка
- Где телефон Натальи
- Найди телефон Натальи
say_phrase: Мы там все уронили

Найди телефон Вероники: # не работает
extra_phrases:
- Вероника потеряшка
- Где телефон Вероники
- Найди телефон Вероники
say_phrase: Все потерять тоже дар

Открой домофон:
extra_phrases:
- Открой домофон
- Запусти
- Сизам откройся
say_phrase: Запустила звонящего

Отбей домофон:
extra_phrases:
- Отбей домофон
- Не впускай
- Пошел вон
say_phrase: Пускай под дверью постоит

Включи телевизор:
extra_phrases:
- Включи телевизор
- Включи ящик
- Включи телек
say_phrase: Не стоит включать телевизор и мозг одновременно. Это несовместимые вещи.

Выключи телевизор:
extra_phrases:
- Выключи телевизор
- Выключи ящик
- Выключи телек
say_phrase: Пора глазкам отдохнуть.

Включи ресивер:
extra_phrases:
- Включи ресивер
- Включи звук
- Включи центр
say_phrase: "{{ ['Договорились', 'Хорошо', 'Я тебя услышала', 'Оки-доки']|random }}"

Выключи ресивер:
extra_phrases:
- Выключи ресивер
- Выключи звук
- Выключи центр
say_phrase: "{{ ['Договорились', 'Хорошо', 'Я тебя услышала', 'Оки-доки']|random }}"`

**Лог журнала HomeAssistant: **
2024-05-18 14:51:16.689 ERROR (MainThread) [custom_components.yandex_station_intents] Ошибка создания или обновления сценария '--- Включи телевизор' Traceback (most recent call last): File "/config/custom_components/yandex_station_intents/__init__.py", line 262, in _async_setup_intents await quasar.async_add_or_update_intent( File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 207, in async_add_or_update_intent assert resp["status"] == "ok", resp AssertionError: {'request_id': 'dfdc0c7b-e6fb-4807-b71b-f8e467887fd2', 'status': 'error', 'code': 'VOICE_TRIGGER_PHRASE_IS_ALREADY_TAKEN', 'message': 'Активационная фраза для сценария уже используется'} 2024-05-18 14:51:16.755 ERROR (MainThread) [custom_components.yandex_station_intents] Ошибка создания или обновления сценария '--- Выключи ресивер' Traceback (most recent call last): File "/config/custom_components/yandex_station_intents/__init__.py", line 262, in _async_setup_intents await quasar.async_add_or_update_intent( File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 207, in async_add_or_update_intent assert resp["status"] == "ok", resp AssertionError: {'request_id': '4f041fb5-463b-4018-9212-c6e7e8ebdebe', 'status': 'error', 'code': 'VOICE_TRIGGER_PHRASE_IS_ALREADY_TAKEN', 'message': 'Активационная фраза для сценария уже используется'}

Конфликт с функцией Assist

При вызове функции Assist в логах появляется:

2023-03-09 08:19:03.928 ERROR (MainThread) [homeassistant.helpers.integration_platform] Error processing platform yandex_station_intents.intent
Traceback (most recent call last):
  File ".venv-2023/lib/python3.10/site-packages/homeassistant/helpers/integration_platform.py", line 51, in _async_process_single_integration_platform_component
    await integration_platform.process_platform(hass, component_name, platform)
  File ".venv-2023/lib/python3.10/site-packages/homeassistant/components/intent/__init__.py", line 203, in _async_process_intent
    await platform.async_setup_intents(hass)
AttributeError: module 'custom_components.yandex_station_intents.intent' has no attribute 'async_setup_intents'

KeyError: 'updated_devices'

2021-11-17 19:23:58 ERROR (MainThread) [custom_components.yandex_station_intents.yandex_quasar] Неожиданное событие: WSMessage(type=<WSMsgType.TEXT: 1>, data='{"version":"1","uid":"1130000004004374","service":"alice-iot","operation":"update_scenario_list",КУСЬ-КУСЬ\\",\\"name\\":\\"ХА мтидадвиынивеынустыкиткыиякстрнрятск\\",\\"icon\\":\\"home\\",\\"icon_url\\":\\"https:\\\\\\/\\\\\\/avatars.mds.yandex.net\\\\\\/get-iot\\\\\\/icons-scenarios-home.svg\\\\\\/orig\\",\\"executable\\":true,\\"devices\\":[\\"Яндекс Мини Кухня\\"],\\"triggers\\":[{\\"type\\":\\"scenario.trigger.voice\\",\\"value\\":\\"мтидадвиынивеынустыкиткыиякстрнрятск\\"}],\\"is_active\\":true}],\\"scheduled_scenarios\\":[],\\"source\\":\\"update_scenario_launch\\"}","tags":[],"position":0}', extra='') (KeyError('updated_devices'))
Traceback (most recent call last):
  File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 242, in connect
    await self._on_message(msg.json())
  File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 272, in _on_message
    for dev in message['updated_devices']:
KeyError: 'updated_devices'

Ошибка при вызове yandex_station_intents.clear_scenarios

Приветствую, спасибо за компонент!
Пробую добавить компонент через Device&Services->Add двумя способами: через импорт credentials Yandex Station и через копирование токена из конфига. В обоих случаях интеграция сообщает об успехе, но в списке интеграций показывается вот это (см. скрин). При этом в логе нет никаких ошибок, даже при включении yandex_station_intents: debug в настройках логера. Yandex Station с этим токеном работает.

Settings_–_Home_Assistant

Вижу, что в списке сервисов есть сервисы YS.intents, пробую очистить список интентов. Получаю две ошибки в логе (ключ на всякий случай изменил):

Logger: homeassistant.helpers.script.websocket_api_script
Source: custom_components/yandex_station_intents/__init__.py:91
Integration: Yandex.Station Intents ([documentation](https://github.com/dext0r/ha-yandex-station-intents), [issues](https://github.com/dext0r/ha-yandex-station-intents/issues))
First occurred: 4:19:00 PM (1 occurrences)
Last logged: 4:19:00 PM

websocket_api script: Error executing script. Unexpected error for call_service at pos 1: 'f222dc050d3199785c9260cc7ad60908'
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 447, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 680, in _async_call_service_step
    await service_task
  File "/usr/src/homeassistant/homeassistant/core.py", line 1627, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1664, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/config/custom_components/yandex_station_intents/__init__.py", line 91, in _clear_scenarios
    quasar = hass.data[DOMAIN][entry.entry_id][DATA_QUASAR]
KeyError: 'f222dc050d3199785c9260cc7ad60908'

и

Logger: homeassistant.helpers.script.websocket_api_script
Source: custom_components/yandex_station_intents/__init__.py:91
Integration: Yandex.Station Intents ([documentation](https://github.com/dext0r/ha-yandex-station-intents), [issues](https://github.com/dext0r/ha-yandex-station-intents/issues))
First occurred: 4:19:00 PM (1 occurrences)
Last logged: 4:19:00 PM

websocket_api script: Error executing script. Unexpected error for call_service at pos 1: 'f222dc050d3199785c9260cc7ad60908'
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 447, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 680, in _async_call_service_step
    await service_task
  File "/usr/src/homeassistant/homeassistant/core.py", line 1627, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1664, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/config/custom_components/yandex_station_intents/__init__.py", line 91, in _clear_scenarios
    quasar = hass.data[DOMAIN][entry.entry_id][DATA_QUASAR]
KeyError: 'f222dc050d3199785c9260cc7ad60908'

Расширить описание для подключения через mode=device

Лично у меня при подключении служебного плеера в УДЯ (Yandex Station Intents) была проблема:

Служебный плеер Yandex Station Intents не найден в УДЯ. Убедитесь, что он разрешён в фильтрах в компоненте Yandex Smart Home, обновите список устройств в УДЯ и перезагрузите эту интеграцию.

В целом ошибка описывает проблему нормально, но непонятно, что делать. При синхронизации устройств в УДЯ возникает окно настройки этого служебного плеера. Яндекс просит переименовать это устройство, чтобы им можно было пользоваться голосом, т.е. название должно быть русским. Через некоторое время обнаружил, что это окно можно проигнорировать, хотя Яндекс и пометит устройство, что его нужно настроить

Предлагаю добавить в ReadMe пометку по этому поводу. Или указать, как назвать на русском этот плеер, чтобы Яндекс не бесил надписью "Требуется настройка". Только тогда надо будет немного расширить поиск вот здесь

Просто хочу описать проблему, в целом можно её проигнорировать.

Say_phrase: random phrase

Возможно ли сделать ответ рандомной фразой из списка? Или только одна фраза возможна?

Возможность разбить конфигурацию yandex_station_intents на несколько полей

Описание:

https://www.home-assistant.io/docs/configuration/splitting_configuration/#example-combine-include_dir_merge_list-with-automationsyaml

Home Assistant позволяет разбивать конфигурацию таким способом:

# My own handmade automations
automation manual: !include_dir_merge_list automations/

# Automations I create in the UI
automation ui: !include automations.yaml

То есть, я могу смержить несколько разных директорий/файлов в одно поле конфигурации, указав разные "метки" после названия поля.

Запрос:
Хотелось бы иметь такую же возможность для yandex_station_intents:

yandex_station_intents feature1:
  intents: !include_dir_merge_named src/features/feature1/intents

yandex_station_intents feature2:
  intents: !include_dir_merge_named src/features/feature2/intents

Или даже

yandex_station_intents:
  intents feature1: !include_dir_merge_named src/features/feature1/intents
  intents feature2: !include_dir_merge_named src/features/feature2/intents

Причина:
Со временем число конфигураций разрастается и становится сложнее добавлять что-то новое в свой умный дом, не запутавшись в миллионах файлов и конфигураций. Разбиение конфигов по фичам сделает процесс добавления новой функциональности более простым, а структуру директорий более красивой.

Референсы:
Если я все правильно понял, то здесь как раз в цикле пробегаются по всем "платформам", то есть меткам "automation".

  • domain_key - делает "automation" из "automation 1"
  • config_per_platform - позволяет пробежаться по всем разбитым конфигам, зная только DOMAIN
  • async_validate_config - пример использования, проверка конфига с таким разбиением на несколько меток
  • Чуть по другому то же самое выпоняется для скриптов

Если это переиспользовать, то по идее можно достаточно просто добавить поддержку подобного синтаксиса, ничего при этом не сломав.

xivaws-error

Неожиданное событие: WSMessage(type=<WSMsgType.TEXT: 1>, data='{"operation":"xivaws-error","message":"sign expired"}', extra='') (JSONDecodeError('Expecting value: line 1 column 1 (char 0)'))

Traceback (most recent call last):
  File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 242, in connect
    await self._on_message(msg.json())
  File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 271, in _on_message
    message = json.loads(payload['message'])
  File "/usr/local/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.9/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Обработка интентов с регулярными выражениями

Возможно ли сделать интенты с переменными вставками?
Например:
intents:
На телевизоре включи *:
* - любое продолжение, которое обрабатывается в автоматизации через регулярные выражения
Цель: Есть ТВ на платформе Яндекс.ТВ, но не ТВ от Яндекс, поэтому "тандема" до сих пор нет. Но в HA можно перебрасывать команды Алисе из ТВ от Алисы из колонки простым regex_replace(find='(На телевизоре)|(включи \S+)', replace='\2', ignorecase=False). Все работает, но сейчас нужно писать в конфиге каждую возможную фразу, а смысла по сути в \S+ нет.

2023.3

После обновления ошибка
WARNING (MainThread) [homeassistant.config_entries] Config entry 'xxxxxxx' for yandex_station_intents integration not ready yet: too many values to unpack (expected 2); Retrying in background

Несколько аккаунтов Яндекс

Дома несколько колонок Яндекс на разных аккаунтах у разных членов семьи (муж,жена, дети). Очень не хватает возможности использовать YS.Intents на колонках - работает только на одной колонке

Отработка команды в дополнение к произнесенной фразе

На примере...
Допустим, в УДЯ есть объект типа "Освещение", имеющий имя "Свет на кухне".
В штатной конфигурации (т.е., без "яндекс-интентов") на команду "Алиса, выключи свет на кухне" будет просто выключен свет.
Но хотелось бы, чтобы на эту же команду Алиса не просто выключила свет, но еще и сказала что-нибудь - например, "Сейчас выключу".
Можно ли подобную задач решить с помощью "Яндекс-интентов"?
В принципе, я понимаю, что задачу можно решить "обходным путём" - то есть, не просто прописать ответную фразу, но еще создать автоматизацию, где триггером будет событие yandex_intent c текстом "Выключи свет на кухне", а последующим действием будет передача команды "Выключи свет на кухню" через вызов службы media_player.play_media с параметром media_content_type: command.
Но всё же хотелось бы более простого варианта - чтобы не городить дополнительную автоматизацию.

Вторая колонка не работат с автоматизацией

Есть две колонки

  1. Яндекс Станция мини 2. Версия прошивки: 0.99.1.2.1195680191.20220126.47
  2. Яндекс Станция макс. Версия прошивки: 1.99.1.7.1187699409.20220118.61

При настройке интентов и автоматизаций из Вашего примера вторая станция (Макс) все отрабатывает отлично,
а первая (мини 2) проговаривает интент, но не говорит сообщение из автоматизации.
То есть при вопросе: "Кто нибудь дома" она говорит: "Сейчас проверю" и не отрабатывает сообщение из автоматизации.

Станция макс при этом отрабатывает все отлично.

Не могли бы подсказать в чем может быть проблема.
Спасибо

Увеличение времени генерации TTS

Каким-то образом после настройки Yandex.Station Intents сильно увеличивается время генерации TTS. Проблему обсуждал в https://t.me/c/1337651089/69157 по рекомендации удалил устройство, все компоненты (связанные с колонками) сносил и ставил заново, перенастраивал. В процессе этого тестирования HA перестал ловить события yandex_intent с тестируемой колонки. При этом вызов media_player.play_media на генерацию текста стал отрабатывать нормально (до этого было 4-6 сек). После перенастройки Yandex.Station Intents и Yandex Smart Home, события начали поступать в HA, но время генерации текста увеличилось до прежнего.

Ошибка, возможно капча от Яндекса

Добрый день, Артем (@dext0r) !

Получаю в логах, заметил после обновления на HA 2023.11.0 :
2023-11-02 16:20:33.389 ERROR (MainThread) [custom_components.yandex_station_intents] Ошибка создания или обновления сценария '--- Кто нибудь дома'
Traceback (most recent call last):
File "/config/custom_components/yandex_station_intents/init.py", line 248, in _async_setup_intents
await quasar.async_add_or_update_intent(
File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 201, in async_add_or_update_intent
r = await self._session.put(f'{URL_USER}/scenarios/{intent_quasar_id}', json=payload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/yandex_station_intents/yandex_session.py", line 174, in put
return await self._request('put', url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/yandex_station_intents/yandex_session.py", line 189, in _request
assert m, raw
AssertionError:

<title>400</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; color: #000; background-color: #fff; } body .content { padding: 15px 70px 80px; font-size: 15px; line-height: 20px; margin: 20px 0 30px; } .header { height: 48px; } .header__logo { display: inline-block; overflow: hidden; min-width: 130px; height: 36px; white-space: nowrap; text-indent: 100%; background-repeat: no-repeat; background-position: center center; background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNzggOTEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbD0ibm9uZSI+PHBhdGggZD0iTTI0OS43ODkgODQuODY4OVY3Mi40MTQ2QzI0NSA3NS42MjQ1IDIzNi45NzYgNzguNDQ5MiAyMjkuNDY5IDc4LjQ0OTJDMjE4LjIxIDc4LjQ0OTIgMjEzLjkzOSA3My4xODUgMjEzLjI5MSA2Mi4zOTk4SDI1MC40MzZWNTQuMzEwOUMyNTAuNDM2IDMxLjg0MTcgMjQwLjQ3MSAyMy4zNjc3IDIyNS4wNjkgMjMuMzY3N0MyMDYuMzAzIDIzLjM2NzcgMTk3LjM3MiAzNy42MTk1IDE5Ny4zNzIgNTcuMTM1NkMxOTcuMzcyIDc5LjYwNDcgMjA4LjUwMyA5MC41MTgzIDIyOC4xNzUgOTAuNTE4M0MyMzguMDExIDkwLjUxODMgMjQ1LjI1OSA4Ny45NTA0IDI0OS43ODkgODQuODY4OVpNMzQ2LjA4MSA5MC41MTgzQzM1My4xOTkgOTAuNTE4MyAzNTguMjQ3IDg5LjIzNDMgMzYyIDg2LjUzOFY3NC4wODM3QzM1OC4xMTcgNzYuNzggMzUzLjQ1OCA3OC40NDkyIDM0Ni45ODcgNzguNDQ5MkMzMzUuOTg2IDc4LjQ0OTIgMzMxLjQ1NiA2OS45NzUxIDMzMS40NTYgNTYuNjIyQzMzMS40NTYgNDIuNjI2OSAzMzcuMDIxIDM1LjQzNjggMzQ3LjExNiAzNS40MzY4QzM1My4wNyAzNS40MzY4IDM1OC44OTQgMzcuNDkxMSAzNjIgMzkuNDE3MVYyNi40NDkyQzM1OC43NjQgMjQuNjUxNiAzNTMuMDcgMjMuMzY3NyAzNDUuNDM0IDIzLjM2NzdDMzI1Ljc2MSAyMy4zNjc3IDMxNS41MzcgMzcuMzYyNyAzMTUuNTM3IDU3LjAwNzJDMzE1LjUzNyA3OC41Nzc2IDMyNS41MDIgOTAuNTE4MyAzNDYuMDgxIDkwLjUxODNaTTEwOC43MTcgMjQuNjUxNlY1MC4yMDIySDg4LjEzODJWMjQuNjUxNkg3Mi43MzY3Vjg5LjIzNDNIODguMTM4MlY2Mi4yNzE0SDEwOC43MTdWODkuMjM0M0gxMjQuMTE4VjI0LjY1MTZIMTA4LjcxN1pNMTkzLjYxOSA3Ny4xNjUySDE4Ni43NTlWMjQuNjUxNkgxNDEuODQ5VjMwLjE3MjZDMTQxLjg0OSA0NS45NjUyIDE0MC44MTQgNjYuMzggMTM1LjM3OCA3Ny4xNjUySDEzMC41ODlWMTA0SDE0NC44MjZWODkuMjM0M0gxNzkuMzgyVjEwNEgxOTMuNjE5Vjc3LjE2NTJaTTI5OC45NyA4OS4yMzQzSDMxNi40NDNMMjkxLjcyMyA1NC40MzkzTDMxMy40NjYgMjQuNjUxNkgyOTcuOTM1TDI3Ni4xOTIgNTQuNDM5M1YyNC42NTE2SDI2MC43OVY4OS4yMzQzSDI3Ni4xOTJWNTcuNTIwOEwyOTguOTcgODkuMjM0M1pNMjI0LjgxIDM1LjQzNjhDMjMyLjQ0NiAzNS40MzY4IDIzNC43NzYgNDEuNzI4MiAyMzQuNzc2IDQ5LjgxNzFWNTEuMTAxSDIxMy4yOTFDMjEzLjY4IDQwLjgyOTQgMjE3LjQzMyAzNS40MzY4IDIyNC44MSAzNS40MzY4Wk0xNzEuMzU4IDc3LjE2NTJIMTQ5LjYxNUMxNTMuODg2IDY3LjQwNzIgMTU1LjA1MSA0OS44MTcxIDE1NS4wNTEgMzguNjQ2N1YzNi43MjA4SDE3MS4zNThWNzcuMTY1MloiIGZpbGw9ImJsYWNrIj48L3BhdGg+CiAgICAgICAgPHBhdGggZD0iTTQ0LjEzMzcgODkuMjM0Nkg1OS43OTRWMEgzNy4wMTUzQzE0LjEwNzIgMCAyLjA3MDc5IDExLjY4NCAyLjA3MDc5IDI4Ljg4ODlDMi4wNzA3OSA0Mi42MjcyIDguNjcxNDMgNTAuNzE2IDIwLjQ0OSA1OS4wNjE3TDAgODkuMjM0NkgxNi45NTQ2TDM5LjczMzMgNTUuNDY2N0wzMS44Mzg0IDUwLjIwMjVDMjIuMjYxIDQzLjc4MjcgMTcuNjAxNyAzOC43NzUzIDE3LjYwMTcgMjcuOTkwMUMxNy42MDE3IDE4LjQ4ODkgMjQuMzMxOCAxMi4wNjkxIDM3LjE0NDggMTIuMDY5MUg0NC4xMzM3Vjg5LjIzNDZaIiBmaWxsPSIjRkMzRjFEIj48L3BhdGg+PC9zdmc+'); background-size: contain; margin-left: 5px; margin-right: 5px; } .header__code { font-size: 32px; display: inline-block; overflow: hidden; width: 76px; text-align: center; color: #fff; background-color: #999; } .content__h1 { font-size: 21px; font-weight: 400; } .content__h2 { font-size: 15px; font-weight: 800; } .footer { line-height: 30px; height: 30px; padding: 0 25px; border-top: 1px solid #eee; } .footer__copyright { font-size: 13px; } .link { color: #44b; } .link:hover { color: #e00; } </style>
<div class='header'>
    <a target="_blank" class="header__logo" href="https://www.ya.ru">Yandex</a>
    <div class='header__code'>400</div>
</div>
<div class='content'>
    <pre></pre>
    
        
<h1 class="content__h1">Bad Request</h1>
<p>Если у вас возникли проблемы, пожалуйста, воспользуйтесь <a target="_blank" class="link" href="https://yandex.ru/support/smart-captcha/?unique_key=/#help" onclick="ym(72876589, 'reachGoal', 'support_complain', { 'req_id': '' }); return true;">формой обратной связи.</a></p>
<p></p>

    
</div>
<div class='footer'><span class='footer__copyright'>©&nbsp;Yandex</span></div>
<!-- Yandex.Metrika counter -->
<script
    type="text/javascript">(function (m, e, t, r, i, k, a) { m[i] = m[i] || function () { (m[i].a = m[i].a || []).push(arguments) }; m[i].l = 1 * new Date(); k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a) })(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(15897442, "init", { clickmap: true, trackLinks: true, accurateTrackBounce: true, webvisor: true, ut: "noindex", params: { "req_id": "", "unique_key": "", "http_code": "400" } });</script>
<noscript>
    <div><img src="https://mc.yandex.ru/watch/15897442?ut=noindex" style="position:absolute; left:-9999px;" alt="" /></div>
</noscript><!-- /Yandex.Metrika counter -->
2023-11-02 16:20:33.482 ERROR (MainThread) [custom_components.yandex_station_intents] Ошибка создания или обновления сценария '--- Что полить' Traceback (most recent call last): File "/config/custom_components/yandex_station_intents/__init__.py", line 248, in _async_setup_intents await quasar.async_add_or_update_intent( File "/config/custom_components/yandex_station_intents/yandex_quasar.py", line 201, in async_add_or_update_intent r = await self._session.put(f'{URL_USER}/scenarios/{intent_quasar_id}', json=payload) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/yandex_station_intents/yandex_session.py", line 174, in put return await self._request('put', url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/yandex_station_intents/yandex_session.py", line 189, in _request assert m, raw AssertionError: <title>400</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; color: #000; background-color: #fff; } body .content { padding: 15px 70px 80px; font-size: 15px; line-height: 20px; margin: 20px 0 30px; } .header { height: 48px; } .header__logo { display: inline-block; overflow: hidden; min-width: 130px; height: 36px; white-space: nowrap; text-indent: 100%; background-repeat: no-repeat; background-position: center center; background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNzggOTEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbD0ibm9uZSI+PHBhdGggZD0iTTI0OS43ODkgODQuODY4OVY3Mi40MTQ2QzI0NSA3NS42MjQ1IDIzNi45NzYgNzguNDQ5MiAyMjkuNDY5IDc4LjQ0OTJDMjE4LjIxIDc4LjQ0OTIgMjEzLjkzOSA3My4xODUgMjEzLjI5MSA2Mi4zOTk4SDI1MC40MzZWNTQuMzEwOUMyNTAuNDM2IDMxLjg0MTcgMjQwLjQ3MSAyMy4zNjc3IDIyNS4wNjkgMjMuMzY3N0MyMDYuMzAzIDIzLjM2NzcgMTk3LjM3MiAzNy42MTk1IDE5Ny4zNzIgNTcuMTM1NkMxOTcuMzcyIDc5LjYwNDcgMjA4LjUwMyA5MC41MTgzIDIyOC4xNzUgOTAuNTE4M0MyMzguMDExIDkwLjUxODMgMjQ1LjI1OSA4Ny45NTA0IDI0OS43ODkgODQuODY4OVpNMzQ2LjA4MSA5MC41MTgzQzM1My4xOTkgOTAuNTE4MyAzNTguMjQ3IDg5LjIzNDMgMzYyIDg2LjUzOFY3NC4wODM3QzM1OC4xMTcgNzYuNzggMzUzLjQ1OCA3OC40NDkyIDM0Ni45ODcgNzguNDQ5MkMzMzUuOTg2IDc4LjQ0OTIgMzMxLjQ1NiA2OS45NzUxIDMzMS40NTYgNTYuNjIyQzMzMS40NTYgNDIuNjI2OSAzMzcuMDIxIDM1LjQzNjggMzQ3LjExNiAzNS40MzY4QzM1My4wNyAzNS40MzY4IDM1OC44OTQgMzcuNDkxMSAzNjIgMzkuNDE3MVYyNi40NDkyQzM1OC43NjQgMjQuNjUxNiAzNTMuMDcgMjMuMzY3NyAzNDUuNDM0IDIzLjM2NzdDMzI1Ljc2MSAyMy4zNjc3IDMxNS41MzcgMzcuMzYyNyAzMTUuNTM3IDU3LjAwNzJDMzE1LjUzNyA3OC41Nzc2IDMyNS41MDIgOTAuNTE4MyAzNDYuMDgxIDkwLjUxODNaTTEwOC43MTcgMjQuNjUxNlY1MC4yMDIySDg4LjEzODJWMjQuNjUxNkg3Mi43MzY3Vjg5LjIzNDNIODguMTM4MlY2Mi4yNzE0SDEwOC43MTdWODkuMjM0M0gxMjQuMTE4VjI0LjY1MTZIMTA4LjcxN1pNMTkzLjYxOSA3Ny4xNjUySDE4Ni43NTlWMjQuNjUxNkgxNDEuODQ5VjMwLjE3MjZDMTQxLjg0OSA0NS45NjUyIDE0MC44MTQgNjYuMzggMTM1LjM3OCA3Ny4xNjUySDEzMC41ODlWMTA0SDE0NC44MjZWODkuMjM0M0gxNzkuMzgyVjEwNEgxOTMuNjE5Vjc3LjE2NTJaTTI5OC45NyA4OS4yMzQzSDMxNi40NDNMMjkxLjcyMyA1NC40MzkzTDMxMy40NjYgMjQuNjUxNkgyOTcuOTM1TDI3Ni4xOTIgNTQuNDM5M1YyNC42NTE2SDI2MC43OVY4OS4yMzQzSDI3Ni4xOTJWNTcuNTIwOEwyOTguOTcgODkuMjM0M1pNMjI0LjgxIDM1LjQzNjhDMjMyLjQ0NiAzNS40MzY4IDIzNC43NzYgNDEuNzI4MiAyMzQuNzc2IDQ5LjgxNzFWNTEuMTAxSDIxMy4yOTFDMjEzLjY4IDQwLjgyOTQgMjE3LjQzMyAzNS40MzY4IDIyNC44MSAzNS40MzY4Wk0xNzEuMzU4IDc3LjE2NTJIMTQ5LjYxNUMxNTMuODg2IDY3LjQwNzIgMTU1LjA1MSA0OS44MTcxIDE1NS4wNTEgMzguNjQ2N1YzNi43MjA4SDE3MS4zNThWNzcuMTY1MloiIGZpbGw9ImJsYWNrIj48L3BhdGg+CiAgICAgICAgPHBhdGggZD0iTTQ0LjEzMzcgODkuMjM0Nkg1OS43OTRWMEgzNy4wMTUzQzE0LjEwNzIgMCAyLjA3MDc5IDExLjY4NCAyLjA3MDc5IDI4Ljg4ODlDMi4wNzA3OSA0Mi42MjcyIDguNjcxNDMgNTAuNzE2IDIwLjQ0OSA1OS4wNjE3TDAgODkuMjM0NkgxNi45NTQ2TDM5LjczMzMgNTUuNDY2N0wzMS44Mzg0IDUwLjIwMjVDMjIuMjYxIDQzLjc4MjcgMTcuNjAxNyAzOC43NzUzIDE3LjYwMTcgMjcuOTkwMUMxNy42MDE3IDE4LjQ4ODkgMjQuMzMxOCAxMi4wNjkxIDM3LjE0NDggMTIuMDY5MUg0NC4xMzM3Vjg5LjIzNDZaIiBmaWxsPSIjRkMzRjFEIj48L3BhdGg+PC9zdmc+'); background-size: contain; margin-left: 5px; margin-right: 5px; } .header__code { font-size: 32px; display: inline-block; overflow: hidden; width: 76px; text-align: center; color: #fff; background-color: #999; } .content__h1 { font-size: 21px; font-weight: 400; } .content__h2 { font-size: 15px; font-weight: 800; } .footer { line-height: 30px; height: 30px; padding: 0 25px; border-top: 1px solid #eee; } .footer__copyright { font-size: 13px; } .link { color: #44b; } .link:hover { color: #e00; } </style>
<div class='header'>
    <a target="_blank" class="header__logo" href="https://www.ya.ru">Yandex</a>
    <div class='header__code'>400</div>
</div>
<div class='content'>
    <pre></pre>
    
        
<h1 class="content__h1">Bad Request</h1>
<p>Если у вас возникли проблемы, пожалуйста, воспользуйтесь <a target="_blank" class="link" href="https://yandex.ru/support/smart-captcha/?unique_key=/#help" onclick="ym(72876589, 'reachGoal', 'support_complain', { 'req_id': '' }); return true;">формой обратной связи.</a></p>
<p></p>

    
</div>
<div class='footer'><span class='footer__copyright'>©&nbsp;Yandex</span></div>
<!-- Yandex.Metrika counter -->
<script
    type="text/javascript">(function (m, e, t, r, i, k, a) { m[i] = m[i] || function () { (m[i].a = m[i].a || []).push(arguments) }; m[i].l = 1 * new Date(); k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a) })(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(15897442, "init", { clickmap: true, trackLinks: true, accurateTrackBounce: true, webvisor: true, ut: "noindex", params: { "req_id": "", "unique_key": "", "http_code": "400" } });</script>
<noscript>
    <div><img src="https://mc.yandex.ru/watch/15897442?ut=noindex" style="position:absolute; left:-9999px;" alt="" /></div>
</noscript><!-- /Yandex.Metrika counter -->
2023-11-02 16:20:33.569 ERROR (MainThread) [custom_components.yandex_station_intents] Ошибка создания или обновления сценария '--- Спокойной ночи'

Настройка фильтра в Yandex Smart Home

Режим device (условно-устаревший):

Требует установленный компонент Yandex Smart Home, в фильтрах необходимо разрешить media_player.yandex_station_intents

Поясните, пожалуйста, как провернуть?

Пробовал вот так

yandex_smart_home:
  filter:
    include_entities:
      - media_player.yandex_station_intents
Yandex.Station Intents
Служебный плеер Yandex Station Intents не найден в УДЯ. Убедитесь, что он разрешён в фильтрах в компоненте Yandex Smart Home, обновите список устройств в УДЯ и перезагрузите эту интеграцию.

Создание интентов через триггер conversation, как идея на будущее

Ранее в ТГ https://t.me/yandex_smart_home/77603 было предложение по доработке компонента, хотел бы написать что я нашел и что в итоге получил)
Суть идеи была добавлять триггеры для интентов через platform: conversation в авто или скрипте, при создании нового триггера как то получать все "предложения триггеров" (полазил по исходникам, нашел что оно хранится и проверяется, но не понял можно и как получить их https://github.com/home-assistant/core/blob/858fb1fa376af47e570b0a9f718502de2b0d2636/homeassistant/components/conversation/default_agent.py#L153) и добавлять их в список поштучно как это сейчас работает через ямл.
Это что касается получения списка не из ямла, но вот то что касается просто вызова триггера conversation, то там минимум добавить вот тут после


Что то типа такого, у меня сработало, скрин.

from homeassistant.components import conversation

result = await conversation.async_converse(
                hass=self._hass,
                text=event_data['text'],
                language='ru',
                conversation_id=event_data['entity_id'],
                context=None,
            )

Снимок экрана 2024-01-27 в 21 15 52

и там так же на подходе https://github.com/home-assistant/core/pull/108231  , где будет возможность из авто вернуть ответ в  conversation, аналог say_phrase, сейчас на все ответ Done.
Теперь о плохом :) триггер conversation не несет никакой инфы кроме текста или объектов в тексте и дополнительно добавить что то нельзя https://github.com/home-assistant/core/blob/858fb1fa376af47e570b0a9f718502de2b0d2636/homeassistant/components/conversation/trigger.py#L79

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

Алиса болтает при отработке интента

Заметил, что при отработке интента, если громкость колонки на максимуме, то колонка произносит фразу типа "Куда уж громче" или "Соседи говорят, что и так всё хорошо слышат" или "Уже максимум". То есть, такое ощущение, что кроме интента, Алиса отрабатывает команду "Сделай громче" , а так как громкость уже на максимуме, то идет соответствующая реакция.
В то же время в тексте сценария имеется фраза "Сделай тише на 0", а не "громче". Поэтому непонятно, откуда бертся инструкция на "громче".
P.S. Это происходит на всех моих трёх колонках, а именно: Яндекс Лайт, Irbis A и DEXP Smartbox.
На всякий случай привожу конфигурацию интента:

yandex_station_intents:
  intents:
    Включи телевизор:
automation:
  - alias: Алиса Включи телевизор
    trigger:
      - platform: event
        event_type: yandex_intent
        event_data:
          text: Включи телевизор
    action:
      - service: androidtv.adb_command
        data:
          entity_id: media_player.as4k_ci_pro
          command: POWER

Магические фразы, которые не передаются в HA

Добрый день,

Спасибо за классную интеграцию!

В целом у меня все работает, события отлавливаются в HA, автоматизации работают.

Столкнулся с особенностью: фраза "Свет в гостинной" не передается в HA. Колонка привязана к комнате со служебным наименованием (комнаты "гостинная" вообще нет).

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

Мог бы кто-нибудь попробовать отловить эту фразу в HA?

Мне такая фраза нужна для управления светом - если включен, то выключить, если выключен, то включить.

Просьба прояснить функционал

Пример из документации (урезан для удобства):

yandex_station_intents:
  intents:
    Кто нибудь дома: Сейчас проверю 
    Не выключай свет в прихожей: 
      say_phrase: Договорились

В первом примере текст голосового отклика указан сразу после команды, а во втором примере - через параметр "say_phrase".
Какая функциональная разница между этими способами, и какой из них когда рациональнее применять?

И еще один вопрос: можно ли (и как) задать для голосового отклика случайный выбор текста из нескольких вариантов.
Например, я хочу, чтобы на команду "Не выключай свет в прихожей" Алиса отвечала случайно выбранной фразой из вариантов "Договорились", "Окей, хозяин" и "Хорошо, так и быть".

Дополнительная валидация конфигурации

Сейчас в качестве интента может использоваться любая фраза, даже со знаками препинания. Однако в УДЯ есть ограничение: Пишите кириллицей, без пунктуации и спецсимволов. Между словами и числами ставьте пробелы

Нужно реализовать дополнительную проверку конфигурации, которая бы не позволила использовать "неправильные" символы.

Не передается управление в

Добрый день!

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

Плагин успешно считывает intents из yaml и записывает в ЯндексСценарии.
Но в действии остается только "Сделай тише 0---," - это корректно?

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

При этом в родительском плагине от AlexxIT обработка идет успешно, но помимо выполнение команды на включение лампочки, Алиса еще и трек включает :)

Home Assistant: Версия core-2021.11.5
Вариант установки: venv
ОС установки: Alpine Linux 3.15 LXC
Способ установки Yandex Station Intents: HACS
Оборудование: ЯндексСтанция Лайт.
Плагин Yandex Smart Home не установлен.

Алиса умеет различать голоса

Всем дорого дня. Возник такой вопрос.
Сейчас колонки умеют различать голоса. Есть ли возможность сделать данный функционал в рамках этой интеграции?
К примеру, на фразу ребёнка (Алиса его знает) - выполнять одно действие, на мою фразу (точно такую же) выполнять другое действие, а на эту же фразу от чужого человека - ничего не делать

Ограничить длину имени сценария

В УДЯ изменилось ограничение на длину имени сценария до жалких 25 символов :( Поэтому теперь нужно срезать имя сценария до 22 символов, а уникальность имени обеспечить индексом интента.

Невозможно отловить событие с текстом "Пауза" / "Стоп"

Здравствуйте. Невозможно отловить событие с текстом "Пауза", "Стоп" и их вариациями. Хотя событие с обратным действием "Продолжай" отлавливается. При этом видно, что при использовании слов "Пауза" / "Стоп" не создаётся / удаляется сценарий в УДЯ, стоит добавить 1 букву - он тут же создается.

Один аккаунт Яндекс для нескольких HA

Добрый день.
Спасибо за отличный компонент.
Столкнулся со следующей ситуацией - у меня есть один аккаунт УДЯ, в нем создано несколько домов, в каждом свои колонки.
Есть несколько инсталляция НА(т.е. один дом в УДЯ соответствует дому НА).
Активировав вашу интеграцию в нескольких домах НА, не получается создать отдельные списки фраз в yaml, свои в каждом доме - одна интеграция в НА "затирает" другую в УДЯ и наоборот(кто последний перегрузился).

Т.е. неплохо бы добавить к названиям сценариев в yaml еще и id дома.

И от сюда вторая "проблема" - так как сценарии в УДЯ, к сожалению, не делятся по домам, а представлены общим списком, то если будет решено описанное выше, хорошо если их название будет вида "--- id_дома - название_сценария"

Заранее Спасибо!

не приходят события от колонки

Здравствуйте,
Установил компонент, создал тестовые фразы > в приложении УДЯ создались сценарий, но текстовое событие не приходит - подписался на yandex_intent (developer-tools/event).

yandex_station_intents:
intents:
Включи свет в гостиной: Хорошо
Тест: Хорошо

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.