Node-RED Alice: различия между версиями

Материал из Wiren Board
 
(не показана 31 промежуточная версия 3 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE: Настройка Алисы на контроллере Wiren Board}}
{{DISPLAYTITLE: Настройка Алисы на контроллере Wiren Board}}
[[Image: yandex-application.png |300px|thumb|right| Список устройств в приложении Яндекс ]]
[[Image: yandex-application.png |300px|thumb|right| Список устройств в приложении Яндекс ]]
== Описание ==
{{note|info|Обмен данными между контроллером и Яндексом будет идти через сторонний сервис, который мы не контролируем и не можем гарантировать конфиденциальность. Если это вам не подходит, используйте метод описанный в статье [https://habr.com/ru/post/465537/ Яндекс: умный дом по взрослому] — он сложнее и требует затрат, но безопасней. Форк yandex2mqtt с исправлениями: https://github.com/lasthead0/yandex2mqtt}}
Алиса — это облачный голосовой помощник от Яндекс, который с помощью навыков может управлять устройствами умного дома. Все добавленные устройства будут видны в приложении [[Yandex-smart-home |Дом с Алисой]], что позволит вам управлять ими удалённо со своего смартфона, умных колонок с Алисой, Яндекс.Модуля и т.п.
Описанный здесь способ не требует наличия своего домена и сертификата — это на себя берёт сайт https://node-red-alice.ru/, где также перечислены тарифы за использование.
В инструкции используется сторонний модуль с платной подпиской '''node-red-contrib-alice''' у которого есть свой Телеграм-канал, где вы можете задать вопросы и поделиться опытом: [https://t.me/nodered_home_chat NodeRed Home Chat].


== Подготовка ==
== Подготовка ==
Алиса — это голосовой помощник от Яндекс, который с помощью навыков может управлять устройствами умного дома. Все добавленные устройства будут видны в приложении Яндекс, что позволит вам управлять ими удалённо со своего смартфона, умных колонок с Алисой, Яндекс.Модуля и т.п.
{{YouTube
 
| link= https://youtu.be/dtObx94vM3s
| text= Как настроить Алису на контроллере Wiren Board
| width= 350
}}
Для настройки Алисы на контроллере [[Wiren Board]] с помощью Node-RED нам понадобится:
Для настройки Алисы на контроллере [[Wiren Board]] с помощью Node-RED нам понадобится:
* установленный [[Node-Red | Node-RED]],
* установленный Node-RED и [[Node-Red | настроенный модуль WB Nodes]],  
* настроенный модуль [[Node-Red#WB_Nodes |WB Nodes]],  
* модуль [https://flows.nodered.org/node/node-red-contrib-alice node-red-contrib-alice] — его мы установим ниже,
* модуль [https://flows.nodered.org/node/node-red-contrib-alice node-red-contrib-alice] — его мы установим ниже,
* Яндекс-аккаунт и мобильное приложение Яндекс.
* Яндекс-аккаунт и мобильное приложение Яндекс.
Строка 73: Строка 83:
#** Type — тип устройства.
#** Type — тип устройства.
# Нажмите на кнопку '''Add''', чтобы сохранить изменения.
# Нажмите на кнопку '''Add''', чтобы сохранить изменения.
# Вы вернётесь в окно '''Edit On_Off node''', в котором поставьте флажок '''Always answer Alice with success''', которая скажет Алисе не ждать ответа от устройства после отправки команды. Это нужно нам, так как мы не задействуем вход ноды '''On_Off'''.
# Вы вернётесь в окно '''Edit On_Off node''', в котором поставьте флажок '''Always answer Alice with success''' — эта настройка позволит Алисе не ждать ответа от устройства после отправки команды. Это нужно нам, так как мы не задействуем вход ноды '''On_Off'''.
 
Теперь Алиса знает, что у нас есть устройство, но оно пока ничего не делает.


<gallery mode="packed" heights="150px" caption="Настройка Яндекс-устройства">
<gallery mode="packed" heights="150px" caption="Настройка Яндекс-устройства">
Строка 85: Строка 93:
=== Управление устройствами умного дома ===
=== Управление устройствами умного дома ===
[[Image: edit-wb-out-node.png |250px|thumb|right| Настройка ''out node'' ]]
[[Image: edit-wb-out-node.png |250px|thumb|right| Настройка ''out node'' ]]
Чтобы управлять устройствами, подключенными к контроллеру, нам понадобится '''WB Nodes''', который должен быть уже установлен и настроен.
Чтобы управлять устройствами, подключенными к контроллеру, нам понадобится '''WB Nodes''', который должен быть установлен и настроен заранее.


Например, подключим встроенный зуммер контроллера:
Подключим встроенный зуммер контроллера:
# Перетяните в рабочую область ноду '''out''', которая находится слева в группе '''Wiren Board'''.
{{Node-RED Tuning wb-out
# Дважды кликните на ней — откроется окно '''Edit out node''', где укажите:
|name = Buzzer
#* Name — имя, например, Buzzer.
|mqtt-topic = buzzer/enabled
#* Server — MQTT-сервер, связь с которым настраивается при установке модуля ''WB Nodes''.
}}
#* Channel — выберите в открывшемся списке mqtt-топик '''buzzer/enabled'''. Если список пуст, нажмите кнопку ''Refresh Device List''.
#* Command — выберите '''/on'''.
#* Payload — должно быть выбрано msg.payload
# Чтобы сохранить, нажмите кнопку '''Done'''.


[[Image: change-node-converter-bool-to-number.png |250px| thumb | right|  Настройка ноды ''change'']]
[[Image: change-node-converter-bool-to-number.png |250px| thumb | right|  Настройка ноды ''change'']]
Строка 101: Строка 105:
Теперь, когда у нас настроены виртуальное Яндекс-устройство и один из mqtt-топиков контроллера Wiren Board, нам нужно их связать между собой.
Теперь, когда у нас настроены виртуальное Яндекс-устройство и один из mqtt-топиков контроллера Wiren Board, нам нужно их связать между собой.


Перед связыванием нужно учесть две вещи:
Перед связыванием нужно учесть, что:
# виртуальное Яндекс-устройство на выход отправляет сигнал '''true/false'''
# виртуальное Яндекс-устройство на выход отправляет сигнал '''true/false'''
# mqtt-топик контроллера принимает сигнал '''1/0'''.
# mqtt-топик контроллера принимает сигнал '''1/0'''.
Строка 108: Строка 112:
# Перетяните в рабочую область ноду '''change''', которая находится слева в группе '''function'''.
# Перетяните в рабочую область ноду '''change''', которая находится слева в группе '''function'''.
# Дважды кликните на ней — откроется окно '''Edit change node''', укажите имя и настройте правила в блоке '''Rules''':
# Дважды кликните на ней — откроется окно '''Edit change node''', укажите имя и настройте правила в блоке '''Rules''':
#* Change → msg.payload → Search for: false → Replace with: 0
#* Change → msg.payload → Search for, boolean: false → Replace with, number: 0
#* Change → msg.payload → Search for: true → Replace with: 1
#* Change → msg.payload → Search for, boolean: true → Replace with, number: 1
# Нажмите кнопку '''Done'''. Конвертер готов.
# Нажмите кнопку '''Done'''. Конвертер готов.
[[Image: alice-flow.png |250px| thumb | right|  Внешний вид флоу со связями]]
[[Image: alice-flow.png |250px| thumb | right|  Внешний вид флоу со связями]]
Теперь соедините ноды между собой в таком порядке: выход ноды '''On_Off''' → '''Конвертер''' → вход ноды '''mqtt-канала''' контроллера.
Теперь соедините ноды между собой в таком порядке: выход ноды '''On_Off''' → '''Конвертер''' → вход ноды '''out'''.


Чтобы опубликовать изменения, нажмите в правом верхнем углу кнопку '''Deploy'''.
Чтобы опубликовать изменения, нажмите в правом верхнем углу кнопку '''Deploy'''.
Строка 120: Строка 124:
[[Image: nr-alice-feedback-2.png |250px|thumb|right| Настройка ноды ''change'' ]]
[[Image: nr-alice-feedback-2.png |250px|thumb|right| Настройка ноды ''change'' ]]
[[Image: nr-alice-feedback-3.png |250px|thumb|right| Настройка ноды ''On_Off'' ]]
[[Image: nr-alice-feedback-3.png |250px|thumb|right| Настройка ноды ''On_Off'' ]]
[[Image: flow feedback.png |300px|thumb|right| Внешний вид флоу с обратной связью ]]
В примере выше мы настроили управление устройством умного дома, но не сделали считывание его состояния дополним наше флоу и добавим отправку состояния зуммера Алисе.
В примере выше мы настроили управление устройством умного дома, но не сделали считывание его состояния. Давайте дополним наше флоу и добавим отправку состояния зуммера Алисе.


Настраиваем получение значений из mqtt-топика:
Настраиваем получение значений из mqtt-топика:
# Перетяните в рабочую область ноду '''in''', которая находится слева в группе '''Wiren Board'''.
{{Node-RED Tuning wb-in
# Дважды кликните на ней — откроется окно '''Edit in node''', где укажите:
|name = Buzzer
#* Name — имя, например, Buzzer.
|mqtt-topic = buzzer/enabled
#* Server — MQTT-сервер, связь с которым настраивается при установке модуля ''WB Nodes''.
}}
#* Channel — выберите в открывшемся списке mqtt-топик '''buzzer/enabled'''. Если список пуст, нажмите кнопку ''Refresh Device List''.
# Чтобы сохранить, нажмите кнопку '''Done'''.


Полученное значение мы отправим в ноду '''On_Off''', которая передаст информацию в облако, но перед этим нужно учесть три момента:
Полученное значение мы отправим в ноду '''On_Off''', которая передаст информацию в облако, но перед этим нужно учесть три момента:
# нужно включить в ноде '''On_Off''' контроль устройства по сигналу на входе
# нужно включить в ноде '''On_Off''' контроль устройства по сигналу на входе,
# виртуальное Яндекс-устройство на вход принимает сигнал '''true/false'''
# виртуальное Яндекс-устройство на вход принимает сигнал '''true/false''',
# mqtt-топик контроллера отдаёт сигнал '''1/0'''.
# нода '''in''' отдаёт сигнал '''1/0'''.


Сперва включим контроль устройства в ноде '''On_Off''':
Сперва включим контроль устройства в ноде '''On_Off''':
Строка 144: Строка 145:
# Перетяните в рабочую область ноду '''change''', которая находится слева в группе '''function'''.
# Перетяните в рабочую область ноду '''change''', которая находится слева в группе '''function'''.
# Дважды кликните на ней — откроется окно '''Edit change node''', укажите имя и настройте правила в блоке '''Rules''':
# Дважды кликните на ней — откроется окно '''Edit change node''', укажите имя и настройте правила в блоке '''Rules''':
#* Change → msg.payload → Search for: 1 → Replace with: true
#* Change → msg.payload → Search for, number: 1 → Replace with, boolean: true
#* Change → msg.payload → Search for: 0 → Replace with: false
#* Change → msg.payload → Search for, number: 0 → Replace with, boolean: false
# Нажмите кнопку '''Done'''. Конвертер готов.
# Нажмите кнопку '''Done'''. Конвертер готов.


Теперь соедините ноды между собой в таком порядке: выход ноды '''mqtt-канала''' контроллера → '''Конвертер''' → вход ноды '''On_Off'''.
Теперь соедините ноды между собой в таком порядке: выход ноды '''in''' → '''Конвертер''' → вход ноды '''On_Off'''.
 
[[Image: flow feedback.png |600px| Внешний вид флоу с обратной связью ]]


Чтобы опубликовать изменения, нажмите в правом верхнем углу кнопку '''Deploy'''.
Чтобы опубликовать изменения, нажмите в правом верхнем углу кнопку '''Deploy'''.
Строка 167: Строка 170:
# Через пару секунд вы увидите устройство, которое создавали в разделе [[#Виртуальное Яндекс-устройство|Виртуальное Яндекс-устройство]].
# Через пару секунд вы увидите устройство, которое создавали в разделе [[#Виртуальное Яндекс-устройство|Виртуальное Яндекс-устройство]].


Объединение аккаунтов завершено, Алиса может управлять устройствами.
Объединение аккаунтов завершено, теперь можно управлять умными домом через устройства с Алисой или приложение Яндекс.


<gallery mode="packed" heights="200px" caption="Настройка в приложении Яндекс">
<gallery mode="packed" heights="200px" caption="Настройка в приложении Яндекс">
Строка 181: Строка 184:


=== Добавление новых устройств ===
=== Добавление новых устройств ===
После объединения аккаунтов добавлять новые устройства просто: создаёте виртуальные Яндекс-устройства в Node-RED на стороне контроллера и обновляете список на стороне Яндекс:
После объединения аккаунтов добавлять новые устройства просто:
# Откройте '''приложение Яндекс'''.
# Создайте виртуальные Яндекс-устройства в Node-RED на стороне контроллера и опишите логику.
# Перейдите в раздел '''Устройства'''.
# Обновите список устройств на стороне Яндекс:
# Откроется страница '''Мой дом''', нажмите '''+''' и выберите '''Устройство умного дома'''.
#* Откройте '''приложение Яндекс'''.
# На странице '''Добавить устройства''', в разделе '''Связанные аккаунты''' найдите '''NodeRed Home''' и нажмите кнопку '''Обновить'''.
#* Перейдите в раздел '''Устройства'''.
#* Откроется страница '''Мой дом''', нажмите '''+''' и выберите '''Устройство умного дома'''.
#* На странице '''Добавить устройства''', в разделе '''Связанные аккаунты''' найдите '''NodeRed Home''' и нажмите кнопку '''Обновить'''.


После этого в приложении Яндекс появятся новые устройства.
После этого в приложении Яндекс появятся новые устройства.
Строка 191: Строка 196:
== Полезные ссылки ==
== Полезные ссылки ==
* [https://yandex.ru/support/smart-home/third-party/turn-on.html Яндекс.Справка: Установка и настройка умных устройств]
* [https://yandex.ru/support/smart-home/third-party/turn-on.html Яндекс.Справка: Установка и настройка умных устройств]
* [https://support.wirenboard.com/t/dimmer-wb-mdm3-i-plagin-node-red-contrib-alice/10315/4 Диммер WB-MDM3 и плагин node-red-contrib-alice]
* [https://t.me/nodered_home_chat Телеграм-канал автора модуля].

Текущая версия на 20:13, 11 марта 2024

Список устройств в приложении Яндекс

Описание

Обмен данными между контроллером и Яндексом будет идти через сторонний сервис, который мы не контролируем и не можем гарантировать конфиденциальность. Если это вам не подходит, используйте метод описанный в статье Яндекс: умный дом по взрослому — он сложнее и требует затрат, но безопасней. Форк yandex2mqtt с исправлениями: https://github.com/lasthead0/yandex2mqtt Алиса — это облачный голосовой помощник от Яндекс, который с помощью навыков может управлять устройствами умного дома. Все добавленные устройства будут видны в приложении Дом с Алисой, что позволит вам управлять ими удалённо со своего смартфона, умных колонок с Алисой, Яндекс.Модуля и т.п.

Описанный здесь способ не требует наличия своего домена и сертификата — это на себя берёт сайт https://node-red-alice.ru/, где также перечислены тарифы за использование.

В инструкции используется сторонний модуль с платной подпиской node-red-contrib-alice у которого есть свой Телеграм-канал, где вы можете задать вопросы и поделиться опытом: NodeRed Home Chat.

Подготовка

Как настроить Алису на контроллере Wiren Board

Для настройки Алисы на контроллере Wiren Board с помощью Node-RED нам понадобится:

На контроллере должен быть доступ к интернету — Алиса без него не работает.

Настройка делается через встроенный в Node-Red веб-интерфейс, который доступен по адресу http://wb-ip-address:1880, например, http://192.168.42.1:1880.

В примерах мы будем создавать флоу (flows) — это блок-схемы процесса.

Установка модуля

Установка модуля node-red-contrib-alice

Чтобы Node-RED мог работать с Алисой, установите модуль node-red-contrib-alice:

  1. Зайдите в веб-интерфейс Node-RED.
  2. В правом верхнем углу вызовите меню.
  3. В открывшемся окне выберите вкладку Управление палитрой (Manager palette).
  4. Перейдите на вкладку Установка (Install), введите в поле поиска contrib-alice и нажмите на клавиатуре Enter.
  5. Установите пакет с названием node-red-contrib-alice.
  6. Закройте окно с настройками. Установка модуля завершена.

После установки, в левой панели появится секция alice.

Настройка учётной записи для модуля

Перед тем, как передавать данные из контроллера в Алису, нам нужно настроить ноду alice-service:

  1. Перетяните в рабочую область ноду On_Off.
  2. Дважды кликните на ней — откроется окно Edit On_Off node.
  3. В поле Device нажмите на кнопку с карандашом, откроется окно Edit alice-device node.
  4. Теперь в поле Credentials нажмите на кнопку с карандашом, откроется окно Edit alice-service node.
  5. Здесь нужно настроить учётную запись на сервере модуля node-red-contrib-alice:
    • Если у вас нет учётной записи:
      1. нажмите кнопку Register,
      2. заполните поля Email и Password,
      3. нажмите по очереди на кнопки Signup и потом Add.
    • Если у вас уже есть учётная запись:
      1. заполните поля Email и Password,
      2. нажмите на кнопку Add.
  6. Вы вернётесь в окно Edit alice-device node в котором заполните поля и добавьте новое устройство или нажмите Cancel для выхода.

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

Добавление устройства

Как это работает

Добавление новых устройств в общем случае выглядит так:

  1. Описываем на контроллере виртуальное Яндекс-устройство.
  2. Прописываем логику, которое это устройство реализует, например, включение зуммера.
  3. Публикуем флоу кнопкой Deploy.
  4. В мобильном приложении Яндекс обновляем список устройств.

В примере ниже мы добавим переключатель, который будет управлять зуммером контроллера.

Виртуальное Яндекс-устройство

Сперва настраиваем виртуальное Яндекс-устройство — так как у нас переключатель, то выберем ноду On_Off:

  1. Перетяните в рабочую область ноду On_Off.
  2. Дважды кликните на ней — откроется окно Edit On_Off node.
  3. В поле Device нажмите на кнопку с карандашом, откроется окно Edit alice-device node, где:
    • В поле Credentials выберите созданную ранее учётную запись.
    • И заполните поля:
      • Name — имя устройства, которое будет видно в приложении Яндекс.
      • Room — виртуальная комната, в которой находится устройство.
      • Type — тип устройства.
  4. Нажмите на кнопку Add, чтобы сохранить изменения.
  5. Вы вернётесь в окно Edit On_Off node, в котором поставьте флажок Always answer Alice with success — эта настройка позволит Алисе не ждать ответа от устройства после отправки команды. Это нужно нам, так как мы не задействуем вход ноды On_Off.

Управление устройствами умного дома

Настройка out node

Чтобы управлять устройствами, подключенными к контроллеру, нам понадобится WB Nodes, который должен быть установлен и настроен заранее.

Подключим встроенный зуммер контроллера:

  1. Перетяните в рабочую область ноду out, которая находится слева в группе Wiren Board.
  2. Дважды кликните по ней — откроется окно Edit out node, где укажите:
    • Name — имя, например, Buzzer.
    • Server — MQTT-сервер, связь с которым настраивается при установке модуля WB Nodes.
    • Channel — выберите в открывшемся списке mqtt-топик buzzer/enabled. Если список пуст, нажмите кнопку Refresh Device List.
    • Command — выберите /on.
    • Payload — должно быть выбрано msg.payload
  3. Чтобы сохранить, нажмите кнопку Done.
Настройка ноды change

Теперь, когда у нас настроены виртуальное Яндекс-устройство и один из mqtt-топиков контроллера Wiren Board, нам нужно их связать между собой.

Перед связыванием нужно учесть, что:

  1. виртуальное Яндекс-устройство на выход отправляет сигнал true/false
  2. mqtt-топик контроллера принимает сигнал 1/0.

Поэтому нам понадобится конвертер сообщений:

  1. Перетяните в рабочую область ноду change, которая находится слева в группе function.
  2. Дважды кликните на ней — откроется окно Edit change node, укажите имя и настройте правила в блоке Rules:
    • Change → msg.payload → Search for, boolean: false → Replace with, number: 0
    • Change → msg.payload → Search for, boolean: true → Replace with, number: 1
  3. Нажмите кнопку Done. Конвертер готов.
Внешний вид флоу со связями

Теперь соедините ноды между собой в таком порядке: выход ноды On_OffКонвертер → вход ноды out.

Чтобы опубликовать изменения, нажмите в правом верхнем углу кнопку Deploy.

Обратная связь

Настройка ноды in node
Настройка ноды change
Настройка ноды On_Off

В примере выше мы настроили управление устройством умного дома, но не сделали считывание его состояния — дополним наше флоу и добавим отправку состояния зуммера Алисе.

Настраиваем получение значений из mqtt-топика:

  1. Перетяните в рабочую область ноду in, которая находится слева в группе Wiren Board.
  2. Дважды кликните по ней — откроется окно Edit in node, где укажите:
    • Name — имя, например, Buzzer.
    • Server — MQTT-сервер, связь с которым настраивается при установке модуля WB Nodes.
    • Channel — выберите в открывшемся списке mqtt-топик buzzer/enabled. Если список пуст, нажмите кнопку Refresh Device List.
  3. Чтобы сохранить, нажмите кнопку Done.

Полученное значение мы отправим в ноду On_Off, которая передаст информацию в облако, но перед этим нужно учесть три момента:

  1. нужно включить в ноде On_Off контроль устройства по сигналу на входе,
  2. виртуальное Яндекс-устройство на вход принимает сигнал true/false,
  3. нода in отдаёт сигнал 1/0.

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

  1. Дважды кликните на ноде On_Off.
  2. Снимите флажок Always answer Alice with success — теперь Алиса будет ждать ответа от устройства при обращении к нему.
  3. Нажмите кнопку Done.

Теперь настроим конвертер сообщений:

  1. Перетяните в рабочую область ноду change, которая находится слева в группе function.
  2. Дважды кликните на ней — откроется окно Edit change node, укажите имя и настройте правила в блоке Rules:
    • Change → msg.payload → Search for, number: 1 → Replace with, boolean: true
    • Change → msg.payload → Search for, number: 0 → Replace with, boolean: false
  3. Нажмите кнопку Done. Конвертер готов.

Теперь соедините ноды между собой в таком порядке: выход ноды inКонвертер → вход ноды On_Off.

Внешний вид флоу с обратной связью

Чтобы опубликовать изменения, нажмите в правом верхнем углу кнопку Deploy.

Настройка интеграции со стороны Яндекс

Объединение аккаунтов

Теперь свяжем Яндекс-аккаунт с аккаунтом, созданным в модуле node-red-contrib-alice.

Это делается один раз через мобильное приложение:

  1. Откройте приложение Яндекс.
  2. Перейдите в раздел Устройства.
  3. Откроется страница Мой дом, нажмите + и выберите Устройство умного дома.
  4. На странице Добавить устройства, выберите NodeRed Home из списка производителей.
  5. Нажмите на кнопку Привязать к Яндексу, откроется сайт node-red-alice.ru с формой для ввода учётных данных.
  6. Введите в поле Email и пароль данные, которые вы использовали в разделе Настройка учётной записи для модуля.
  7. Нажмите кнопку Объединить, откроется страница Яндекс.Паспорт, где нужно разрешить доступ к учётной записи Яндекс.
  8. Если объединение аккаунтов прошло успешно, появится кнопка Обновить список устройств. Нажмите на неё.
  9. Через пару секунд вы увидите устройство, которое создавали в разделе Виртуальное Яндекс-устройство.

Объединение аккаунтов завершено, теперь можно управлять умными домом через устройства с Алисой или приложение Яндекс.

Добавление новых устройств

После объединения аккаунтов добавлять новые устройства просто:

  1. Создайте виртуальные Яндекс-устройства в Node-RED на стороне контроллера и опишите логику.
  2. Обновите список устройств на стороне Яндекс:
    • Откройте приложение Яндекс.
    • Перейдите в раздел Устройства.
    • Откроется страница Мой дом, нажмите + и выберите Устройство умного дома.
    • На странице Добавить устройства, в разделе Связанные аккаунты найдите NodeRed Home и нажмите кнопку Обновить.

После этого в приложении Яндекс появятся новые устройства.

Полезные ссылки