Обращаю внимание: при реализации нужно учесть что колонки могут быть НЕ на одном аккаунте. Также возникла идея реализации такого же функционала на основе Bluetooth Mesh сети.
Добавить возможность реагировать на команду только ближайшей Алисе.
Очень актуально если дома несколько умных колонок.
Задача подразумевает работу внутри одной сети, с одним аккаунтом.
Предложение таким же образом связать несколько аккаунтов находится здесь: https://yaboard.com/task/5dbaa58c4930d2408498ddc3
При наличии в ограниченном пространстве ( квартире, доме ) нескольких "умных колонок" (УК) от Яндекса с функцией управления голосом ( Станция, DEXP, Irbis-A), на одну голосовую команду часто отзываются несколько станций. Должна отзываться только УК, к которой было обращение. Как вариант реализации: УК при получении активационной фразы ("Алиса!") уведомляют соседние УК и на основании каких-то технических параметров активационной фразы, путем выборов решают, какая из УК должна обработать команду, а какая - проигнорировать. Примитивный вариант реализации на основе Broadcast-ов и уровня громкости активационной фразы: 1. УК уведомляет сеть о своем присутствии в сети ( например, Broadcast-ом ) 2. УК получает информацию о наличии "соседей" и перечень этих соседей, и, если соседи есть. Если соседи отсутствуют, то УК не занимается взаимодействием с соседями. Если соседи присутствуют, то: 3. УК постоянно ожидает уведомления от соседей о событии активации и технических параметрах X активационной фразы ( громкость, активационное имя ) и хранит эти данные в течении небольшого времени ( менее 1 с ) 4. При получении активационной команды УК уведомляет соседей о получении активационной фразы, полученной с параметрами X (громкость, активационное имя). УК продолжает обрабатывать команду, но ставит на нее некоторую маркировку, говорящую о том, что выполнение команды именно этой УК под вопросом. 5. Каждая УК сравнивает свои параметры X с параметрами, полученными от соседей за последние несколько миллисекунд. Если оказывается, что активационное имя совпадает, а уровень громкости активационной фразы, зафиксированный самой УК меньше, чем громкость, сообщенная УК-соседями, то УК считает что команда предназначалась УК с более высоким уровнем громкости и соответственно отменяет обработку команды. Если же собственная громкость активационной фразы больше чем сообщенная УК-соседями, то УК выполняет команду. 6. Если данных от УК-соседа за определенное время не поступило, то можно считать что он не расслышал активационную фразу.