Перейти к основному содержимому

iRidi для Яндекс Алисы

Uолосовое управление оборудованием через Яндекс Алису и iRidi

документация обновлена 01.01.2024

Алиса - голосовая помощница от Яндекса, которая появилась на свет в 2017 году. Вам достаточно установить Яндекс-браузер с Алисой:

  • на смартфон,
  • на планшет,
  • на ноутбук или компьютер (нужен микрофон).

Вы также можете использовать Алису на Яндекс-Станции.

Операционные системы, на которых Алиса может работать:

  • iOS,
  • Android,
  • Windows.

Алиса понимает только русский язык. С помощью навыка "Иридий" Алиса может управлять умным домом через iRidi Cloud и сервер iRidi. Вы можете произнести команду "Включи свет" и лампочка загорится. Произнесите "Выключи свет" и лампочка погаснет. Всё просто!

Yandex_Alice_scheme.png

Итак, построить умную систему голосового управления просто:

  • Установите Яндекс-браузер с Алисой на смартфон, планшет или компьютер.
  • Запустите навык "Иридий", который научит Алису взаимодействовать c iRidi.
  • Подключитесь к объекту в облаке iRidi Cloud.
  • Создайте умный дом на основе iRidi Server. Укажите, какие устройства и с какими командами будут в вашем проекте.

Попробуйте поработать с Алисой бесплатно в триальном режиме!

В IRidi есть альтернативный драйвер Яндекс.Алиса Платформа достоинства перечислены ниже:

Плюсы:

  • удобно для клиента: управление происходит простыми командами «Алиса, включи свет»
  • Алиса может озвучивать нужный текст по данным с датчиков системы автоматизации
  • готовые голосовые команды
  • готовый интерфейс от Яндекс
  • возможность пользоваться через приложение
  • не требует запуска навыка.

Создание нового объекта в облаке iRidi Cloud​

  1. Алиса работает только через iRidi Cloud, поэтому создайте объект на нашем облаке, если он ещё не создан.
примечание

Объект - это образ реального умного дома или здания на iRidi Cloud.

Как создать объект в iRidi Cloud.

  1. Узнайте секретный ключ (secret key) Вашего объекта, перейдя по ссылке. Авторизуйтесь, если необходимо (кнопка "Вход" в правом верхнем углу) и выберите объект.
примечание

Начиная с версии 1.3.2, iRidi Server сам узнает секретный ключ, поэтому его запоминать не нужно.

Yandex_Alice03(2).png

Работа в iRidi Studio​

Настройка драйвера​

примечание

Алиса работает только с серверными проектами.

  1. Создайте серверный проект. iRidi Studio > File > New > New Server Project

  2. Добавьте драйвер Yandex Alice в проект.

YandexAlice1.png

  1. Настройте параметры:
  • Object key : введите Secret key облачного объекта,
  • Answer if success : ответ Алисы по умолчанию, если полученная голосовая команда найдена в списке обратных связей,
  • Answer if error : ответ Алисы в иных случаях.
примечание

Начиная с версии 1.3.2, iRidi Server сам узнает секретный ключ, поэтому его запоминать не нужно.

  1. Каждый фидбек драйвера Алисы - это одна голосовая команда на русском языке. Добавьте необходимое число фидбеков, введя в параметр Name текст голосовой команды.

YandexAlice2.png

Обработка голосовых команд по сценариям​

Голосовые команды можно обрабатывать двумя способами:

  • по сценариям,
  • в скрипте.

Обработка по сценариям наиболее простая для понимания, лучше подходит для разработчиков, не владеющих тонкостями программирования.

Подробнее о сценариях.

  1. Перейдите на вкладку Routine (сценарии) и нажмите "+" для добавления нового сценария.

YandexAlice3.png

  1. Задайте имя сценария (Name ).

  2. Добавьте условие WHEN , нажав "+". Укажите в поле Feedback голосовую команду драйвера "Yandex Alice", в поле Value введите число 1. Таким образом сценарий будет отслеживать появление голосовой команды (через одну секунду тэг голосовой команды автоматически сбрасывается в значение 0).

YandexAlice4.png

Вы можете добавлять в условия WHEN столько разных голосовых команд, сколько вам нужно.

YandexAlice5.png

  1. Добавьте действие, выполняемое по сценарию, нажав "+" в разделе THEN . Выберите Send Number , укажите канал, которым будете управлять, и значение, которое будет в канал записываться при выполнении сценария.

  2. Затем добавьте ещё одно действие, при этом выберите Send Text , укажите канал Alice Answer драйвера Алисы и напишите текст, который вы хотите, чтобы Алиса произнесла в ответ на голосовую команду.

YandexAlice6.png

  1. При необходимости вы можете добавить в сценарий условие BUT ONLY IF .

  2. Итак, один сценарий готов. Вы можете создать множество различных сценариев.

YandexAlice7.png

Подсказка

Обработка голосовых команд в скрипте​

Обработка в скрипте более сложна, но обладает преимуществом: в скриптах можно реализовать гораздо более гибкую логику нежели в сценариях.

Подробнее о скриптах.

  1. Добавьте скрипт обработки голосовых команд в проект, нажав на кнопку "JS" и затем "+" и "New script".

  2. Вставьте скрипт:

var Alice = IR.GetDevice("Yandex Alice"); // имя драйвера Алисы
var device = IR.GetDevice("Modbus TCP"); // имя драйвера
var lamp = 0; // Лампа
var heat = 0; // Нагрев
var temperature = 20; // Уставка температуры отопления
var answer; // Ответ Алисы
IR.AddListener(IR.EVENT_TAG_CHANGE, Alice, function(name, value) {
switch (name) {
case "включить свет":
case "включи свет":
lamp = 1;
answer = "свет включен";
break;
case "выключить свет":
case "выключи свет":
case "отключить свет":
case "отключи свет":
lamp = 0;
answer = "свет выключен";
break;
case "переключить свет":
case "переключи свет":
lamp = !lamp;
answer = "свет переключен";
break;
case "включить отопление":
case "включи отопление":
heat = 1;
answer = "отопление включено";
break;
case "выключить отопление":
case "выключи отопление":
case "отключить отопление":
case "отключи отопление":
heat = 0;
answer = "отопление отключено";
break;
case "выключить все":
case "выключи все":
case "отключить все":
case "отключи все":
lamp = 0;
heat = 0;
answer = "свет и отопление выключены";
break;
case "отопление теплее":
case "теплее":
temperature = temperature + 1;
answer = "я сделала теплее";
break;
case "отопление холоднее":
case "холоднее":
case "прохладнее":
temperature = temperature - 1;
answer = "я сделала прохладнее";
break;
case "отопление 16":
temperature = 16;
answer = "установлено 16 градусов";
break;
case "отопление 18":
temperature = 18;
answer = "установлено 18 градусов";
break;
case "отопление 20":
case "отопление стандарт":
temperature = 20;
answer = "установлено 20 градусов";
break;
case "отопление 22":
case "отопление комфорт":
temperature = 22;
answer = "установлено 22 градуса";
break;
default:
IR.Log("Команда не запрограммирована!");
answer = "я не поняла команду";
}
IR.Log("Получена команда: " + name + ", значение: " + value + ", отправлен ответ: " + answer);
IR.Log("Лампа: " + lamp + ", Отопление: " + heat + ", Температура: " + temperature);
device.Set("Лампа", lamp); // управление устройствами в сети Modbus TCP
device.Set("Нагрев", heat);
device.Set("Температура", temperature);
Alice.Set("Alice Answer", answer); // отправка ответа Алисе
});
Подсказка

Обработка голосовых команд в скрипте (произвольные команды)​

В iRidi Server 1.3.2 и выше доступен новый способ обработки голосовых команд в скрипте. В целом он похож на способ, описанный в предыдущем разделе, но в этом случае не нужно составлять список всех голосовых команд в драйвере Yandex Alice . Вместо этого оставьте лишь одну обратную связь с именем Voice Command .

Voice Command - это обратная связь, в которую записываются произвольные голосовые команды в виде строки. Такой подход имеет много премуществ:

  • Вы не создаёте множество серверных тегов, за которые нужно платить.
  • Вы можете извлекать из строки Voice Command числовое значение из голосовой команды вида "отопление 17,5" с помощью функций split() и parseFloat() и затем использовать это число для управления оборудованием. Пример кода приведён ниже.
  1. Добавьте скрипт обработки голосовых команд в проект, нажав на кнопку "JS" и затем "+" и "New script".

  2. Вставьте скрипт:

var Alice = IR.GetDevice("Yandex Alice"); // имя драйвера Алисы
var device = IR.GetDevice("Modbus TCP"); // имя драйвера
var lamp = 0; // Лампа
var heat = 0; // Нагрев
var temperature = 20; // Уставка температуры отопления
var answer; // Ответ Алисы
IR.AddListener(IR.EVENT_TAG_CHANGE, Alice, function(name, value) {
if (name == "Voice Command") {
switch (value) {
case "включить свет":
case "включи свет":
lamp = 1;
answer = "свет включен";
break;
case "выключить свет":
case "выключи свет":
case "отключить свет":
case "отключи свет":
lamp = 0;
answer = "свет выключен";
break;
case "переключить свет":
case "переключи свет":
lamp = !lamp;
answer = "свет переключен";
break;
case "включить отопление":
case "включи отопление":
heat = 1;
answer = "отопление включено";
break;
case "выключить отопление":
case "выключи отопление":
case "отключить отопление":
case "отключи отопление":
heat = 0;
answer = "отопление отключено";
break;
case "выключить все":
case "выключи все":
case "отключить все":
case "отключи все":
lamp = 0;
heat = 0;
answer = "свет и отопление выключены";
break;
case "отопление теплее":
case "теплее":
temperature = temperature + 1;
answer = "я сделала теплее";
break;
case "отопление холоднее":
case "холоднее":
case "прохладнее":
temperature = temperature - 1;
answer = "я сделала прохладнее";
break;
case "отопление стандарт":
temperature = 20;
answer = "установлено 20 градусов";
break;
case "отопление комфорт":
temperature = 22;
answer = "установлено 22 градуса";
break;
default:
/*Вы можете извлекать число XX из голосовой команды вида "отопление XX" и
затем использовать следующим образом: */
var command = value.split(" "); // Разбиение команды вида "отопление XX" на части
if (command[0] == "отопление" && command.length == 2) {
var number = parseFloat(command[1].replace(",", ".")); // Извлечение числа XX
if (number >= 16 && number <= 22) {
temperature = number;
answer = "установлено " + number + " градусов";
} else {
answer = "число вне диапазона";
}
} else {
IR.Log("Команда не запрограммирована!");
answer = "я не поняла команду";
}
}
IR.Log("Получена команда: " + name + ", значение: " + value + ", отправлен ответ: " + answer);
IR.Log("Лампа: " + lamp + ", Отопление: " + heat + ", Температура: " + temperature);
device.Set("Лампа", lamp); // управление устройствами в сети Modbus TCP
device.Set("Нагрев", heat);
device.Set("Температура", temperature);
Alice.Set("Alice Answer", answer); // отправка ответа Алисе
}
});

Загрузка проекта в облако и на сервер​

  1. Авторизируйтесь на сайте iRidi.

  2. Загрузите файл проекта .sirpz в облако iRidi Cloud.

Yandex_Alice12.png

  1. Запустите iRidi Server.

  2. Зайдите в веб-интерфейс сервера, набрав в адресной строке браузера: IP-адрес сервера:8888 (Если iRidi Server запускается на том же компьютере, на котором он настраивается, то наберите: 127.0.0.1:8888)

  3. Наберите пароль доступа по умолчанию 2007. Нажмите кнопку "LOGIN".

  4. Найдите вкладку Cloud / Projects .

  5. Загрузите проект из облака на сервер, нажав кнопку "CLOUD SYNC" и затем "Download" напротив нужного проекта.

Web_Cloud.png

Важно

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

Настройка Алисы​

Настройка Алисы осуществляется один раз при создании умной системы голосового управления, для этого можно использовать любой смартфон, планшет или компьютер.

  1. Установите Яндекс-браузер как приложение в App Store, Play Market или для компьютера.

  2. Запустите в Алисе навык "Иридий". Вы можете сделать это, произнеся "Запусти навык Иридий" или написав ей этот текст в чате.

Yandex_Alice01(1).png

  1. Перейдите по ссылке на сайт iRidi mobile. (Авторизуйтесь, если необходимо.) Выберите объект, которым будет управлять Алиса. Нажмите кнопку "Add Yandex Alice device".

Yandex_Alice04(2).png

  1. Нажмите кнопку "Сгенерировать автоматически" или введите свою активационную фразу и нажмите "Применить".

Yandex_Alice05(2).png

  1. Посмотрите активационную фразу. Начнётся отсчёт времени 300 секунд.

Yandex_Alice06(1).png

  1. Произнесите Алисе "Активация по коду 8894" в течение 300 секунд отсчёта, где 8894 - ваш сгенерированный код.
примечание

Произносить и писать фразу "Активация по коду ****" необходимо полностью. Если передать навыку только код, то активация не произойдет.

Yandex_Alice02(4).png

примечание
  • Произнесите число по правилам русского языка: "восемь тысяч восемьсот девяносто четыре". В чате код допускается писать цифрами.
  • В облако iRidi должен быть загружен проект с драйвером Yandex Alice с секретным ключом.
  1. Алиса подключится к облаку iRidi Cloud.

  2. Добавьте необходимое количество дополнительных устройств с Алисой к объекту iRidi, повторив шаги 3-7.

Тестирование голосового управления​

Конечный пользователь:

  • запускает Яндекс-браузер с Алисой,
  • запускает навык "Иридий",
  • произносит команды управления умным домом.

Секреты Алисы​

Особенности работы с iRidi​

  • Вы можете зарегистрировать одно устройство Yandex Alice на нескольких объектах iRidi. Учтите, что голосовые команды от этого устройства будут передаваться на все доступные (работающие) серверы iRidi, в связи с этим возникать конфликты управления. Не забывайте удалять неработающие или тестовые проекты с Алисой из iRidi Cloud.

  • Алиса надёжно хранит подключение к iRidi Cloud в своей памяти. Если устройство с Алисой перезагрузить, то связь автоматически восстановится.

  • Если Вам нужно разорвать связь Алисы с объектом iRidi, то произнесите или наберите в чате Алисы "отключиться от объекта".

  • Чтобы выйти из навыка "Иридий", произнесите или напишите "прекрати" или "хватит".

Голосовые команды​

  • Чтобы быстро войти в навык "Иридий" и произнести голосовую команду управления умным домом произнесите следующую команду: "Алиса, попроси Иридий включить свет."

Одна такая команда запускает навык и сразу выполняет включение света!

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

  • Алиса преобразует числа прописью в числовой вид, например, произнесённые голосовые команды "минус шестнадцать с половиной" или "минус шестнадцать целых пять десятых" преобразуется в строку "-16,5".

  • Все произнесённые слова с буквой "ё" Алиса передаёт в iRidi с заменой на букву "е". Однако вы можете вводить букву "ё" в чате Алисы, и она отправит эту букву без изменений.

  • Вы можете также использовать строчные символы латиницы, но Алиса не умеет распознавать латинский алфавит с голосовым управлением, однако вы сможете вводить латинские буквы в чате Алисы.

  • Длительная пауза при произнесении команды интерпретируется как конец команды.

Синтезация речи​

  • Алиса может произносить текст только в ответ на какую-нибудь голосовую команду, она не может начать говорить произвольно в любой момент. При этом она ожидает ответ в течение 1,5 секунд после голосовой команды. Если ответ не поступает, Алиса выходит из навыка "Иридий".

  • Если в скрипте или в сценарии не предусмотрена передача Алисе ответа, то сервер примерно через 0,5 секунд автоматически отправит ей ответы по умолчанию - Answer if success или Answer if error (см. параметры драйвера). Не забывайте на каждую голосовую команду отправлять ответ, тогда ответы по умолчанию не будут применяться.

  • Алиса может произносить практически любой текст с любыми знаками препинания. Она довольно неплохо держит интонацию и знает правильное ударение многих слов. Но вы можете отправить Алисе ответ в формате Текст как пишется [текст как слышится], например, Команда неизвестна[команда неизвесна].

"Текст как пишется" актуален только для тех устройств с Алисой, которые отображают диалог на экране.

  • Текст в квадратных в скобках называется ещё Text-To-Speech или кратко TTS. Используйте справку от Яндекс для понимания правил составления TTS.

  • Используйте синтезатор речи Yandex SpeechKit для быстрой проверки произношения.

  • Максимальное число символов для написания и для произношения - 1024 (в сумме 2048 символов).

Контекстное управление​

Для более удобного управления одноименными устройствами в разных комнатах, можно настроить контекстное управление. Например, когда мы отдаем Алисе команду включить свет, нам нужно, чтобы свет включился только в одной определенной комнате. Это можно сделать следующим образом:

  1. Создайте в драйвере Яндекс.Алиса теги:
  • "Я в кухне",
  • "Я в спальне",
  • "Я в гостиной",
  • и т.д.

YandexAlice8.png

  1. Создайте виртуальные каналы и теги с одинаковыми именами cont_kitchen, cont_bedroom, cont_livingroom и т.д.

YandexAlice9.png

  1. Выполните шлюзование данных между виртуальными каналами и тегами:
  • создайте шлюзование данных;
  • для каждого виртуального канала пропишите в свойстве Script Modifier название функции из скрипта.

YandexAlice10.png

  1. Создайте правила в разделе Routine:
  • Правило 1

    WHEN Алиса.Тег.Я в кухне == 1 THEN cont_kitchen = 1, cont_bedroom = 0, cont_livingroom = 0

YandexAlice11.png

Аналогично создайте правила для остальных комнат:

  • Правило 2

    WHEN Алиса.Тег.Я в спальне == 1 THEN cont_kitchen = 0, cont_bedroom = 1, cont_livingroom = 0

  • Правило 3

    WHEN Алиса.Тег.Я в гостиной == 1 THEN cont_kitchen = 0, cont_bedroom = 0, cont_livingroom = 1

  1. Создайте в драйвере Яндекс.Алиса тег "Включи свет"

  2. Создайте правила в разделе Routine:

  • Правило 4

    WHEN Алиса.Тег.Включи свет == 1 THEN Команда.Включи_свет_в_кухне, BUT_ONLY_IF cont_kitchen = 1

YandexAlice12.png

Таким же образом создаем правила для остальных комнат:

  • Правило 5

    WHEN Алиса.Тег.Включи свет == 1 THEN Команда.Включи_свет_в_спальне, BUT_ONLY_IF cont_bedroom = 1

  • Правило 6

    WHEN Алиса.Тег.Включи свет == 1 THEN Команда.Включи_свет_в_гостиной, BUT_ONLY_IF cont_livingroom = 1

Таким образом, в зависимости от контекста, сервер может по разному реагировать на одни и те же голосовые команды. Например, в контексте "Я в кухне" при получении команды "включи свет" сервер включит свет на кухне. А в контексте "Я в гостиной" по этой же команде сервер включит свет в гостиной.

Просто добавьте проверку контекста в скрипт или в сценарии (в условие BUT ONLY IF ).

Сам контекст может изменяться как соответствующими голосовыми командами, так и автоматически - по сигналам с датчиков движения или GPS-трекера мобильного устройства с Алисой. Функциональность контекстного управления следует тщательно продумать. Учтите, что объектом могут управлять несколько устройств с Алисой.