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

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

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

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

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

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

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

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

  • iOS,
  • Android,
  • Windows.

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

Yandex_Alice_scheme.png

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

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

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

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

Плюсы:

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

Создание нового объекта в облаке iRidium cloud

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

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

Как создать объект в iRidium cloud.

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

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

Yandex_Alice03(2).png

Работа в iRidium studio

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

примечание

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

  1. Создайте серверный проект. iRidium 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, iRidium 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); // отправка ответа Алисе
});
Подсказка

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

В iRidium 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. Авторизируйтесь на сайте iRidium.

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

Yandex_Alice12.png

  1. Запустите iRidium server.

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

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

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

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

Web_Cloud.png

Важно

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

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

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

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

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

Yandex_Alice01(1).png

  1. Перейдите по ссылке на сайт iRidium 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

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

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

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

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

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

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

Особенности работы с iRidium

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Алиса может произносить текст только в ответ на какую-нибудь голосовую команду, она не может начать говорить произвольно в любой момент. При этом она ожидает ответ в течение 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-трекера мобильного устройства с Алисой. Функциональность контекстного управления следует тщательно продумать. Учтите, что объектом могут управлять несколько устройств с Алисой.