Перейти к содержанию

Алиса, IoBroker и MQTT: различия между версиями

Материал из Wiki yaboard
Нет описания правки
Нет описания правки
 
(не показано 19 промежуточных версий 2 участников)
Строка 3: Строка 3:
__TOC__
__TOC__


{{Skills}}


{{Hands}}
{{Hands}}
Строка 13: Строка 11:


Предлагаемый способ:
Предлагаемый способ:
* Подойдёт тем, кто не хочет или не может использовать [https://github.com/ioBroker/ioBroker.iot/blob/master/README.md готовый драйвер], или в готовом оказалось недостаточно функционала.
* Подойдёт тем, кто не хочет или не может использовать [https://github.com/ioBroker/ioBroker.iot/blob/master/README.md готовый драйвер], или в нём оказалось недостаточно возможностей.
* Позволяет поделиться '''(расшарить) свои устройства на другие аккаунты Яндекса''': например, для нескольких членов семьи.
* Позволяет поделиться '''(расшарить) свои устройства на другие аккаунты Яндекса''': например, для нескольких членов семьи.


  В статье использована только функция "включить/выключить". На самом деле в [https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/device-types-docpage/ документации УДЯ] намного больше поддерживаемых устройств и их возможностей.
  В статье показана только функция "включить/выключить". На самом деле в [https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/device-types-docpage/ документации УДЯ] намного больше поддерживаемых устройств и их возможностей - как всегда, всё зависит от фантазии)




Строка 25: Строка 23:
# Домен + публичный IP с пробросом порта
# Домен + публичный IP с пробросом порта
# SSL-сертификат к этому домену.
# SSL-сертификат к этому домену.
# Плагин y2mqtt ([https://github.com/munrexio/yandex2mqtt ссылка на гит] + там описан процесс установки)
# Плагин y2mqtt ([https://github.com/lasthead0/yandex2mqtt ссылка на гит] + там описан процесс установки) (обновлю только ссылку, остальное лень)
# Драйвер mqtt в роли "сервер/брокер"
# Драйвер mqtt в роли "сервер/брокер"
# Платформа Яндекса [https://dialogs.yandex.ru/developer Диалоги] (мы будем создавать приватный навык).
# Платформа Яндекса [https://dialogs.yandex.ru/developer Диалоги] (мы будем создавать приватный навык).
Строка 35: Строка 33:




=== Домен и SSL ===
== Домен и SSL ==




Строка 47: Строка 45:




=== Настройка драйвера MQTT Broker/Client ===
== Настройка драйвера MQTT Broker/Client ==




Строка 54: Строка 52:
* Порт - произвольный. Главное, чтобы не совпадал с теми, что уже заняты (например, дефолтный порт брокера совпадает с устройствами sonoff).
* Порт - произвольный. Главное, чтобы не совпадал с теми, что уже заняты (например, дефолтный порт брокера совпадает с устройствами sonoff).
* Данные аутентификации: логин, пароль. Галочку "SSL" не ставим, логин и пароль также понадобятся позже.
* Данные аутентификации: логин, пароль. Галочку "SSL" не ставим, логин и пароль также понадобятся позже.
[[Файл:Settings iob mqtt broc.jpg|обрамить|без]]
'''порт и данные аутентификации пишем произвольные, но запоминаем их: они понадобятся дальше, при настройке конфигурационного файла плагина.'''


Настройка окончена!  
Настройка окончена!  
Строка 61: Строка 63:




=== Настройка плагина y2mqtt ===
== Настройка плагина y2mqtt ==




Используем [https://github.com/munrexio/yandex2mqtt этот плагин] (ссылка на Git). Шаги по его установке описаны во многих статьях, так что укажем только тонкости, на которые стоит обратить внимание:
Используем [https://github.com/lasthead0/yandex2mqtt этот плагин] (ссылка на Git). Шаги по его установке описаны во многих статьях, так что укажем только тонкости, на которые стоит обратить внимание:
# После установки (npm install) не запускайте мост. Нужно настроить конфиг, добавить в автозагрузку. Всё согласно мануалу.  
# После установки (npm install) не запускайте мост. Нужно настроить конфиг, добавить в автозагрузку. Всё согласно мануалу.  
# НЕ редактируйте конфиг из консоли! Лучше скачать файл на компьютер (например, WinScp), отредактировать (в np++) и вернуть обратно.
# НЕ редактируйте конфиг из консоли! Лучше скачать файл на компьютер (например, WinScp), отредактировать (в np++) и вернуть обратно.




Настройки конфиг файла (/mnt/data/root/yandex2mqtt/config.js) и комментарии:
Настройки конфиг файла ('''/mnt/data/root/yandex2mqtt/config.js''') с комментариями:


==== блок mqtt ====


Сюда прописываете адрес сервера, где крутится Iobroker, порт, логин и пароль, запомненные раньше при настройке драйвера MQTT Broker/Client:
=== блок mqtt ===
 
 
Указываем адрес сервера, где крутится Iobroker, порт, логин и пароль (запомненные нами при настройке драйвера MQTT Broker/Client):


  mqtt: {
  mqtt: {
Строка 83: Строка 87:




==== блок https ====
=== блок https ===




Строка 95: Строка 99:




==== блок clients ====
=== блок clients ===




Впишем произвольные данные, которые потом укажем при создании навыка на платформе Яндекс.диалоги
Впишем произвольные данные, которые тоже запомним и потом укажем при создании навыка на платформе Яндекс.диалоги


     clients: [
     clients: [
Строка 111: Строка 115:




==== блок users ====
=== блок users ===




Отвечает за шаринг устройств на другие аккаунты Яндекса. Создаём нужное количество профилей.
Отвечает за шаринг устройств на другие аккаунты Яндекса. Создаём нужное количество профилей, которые пригодятся нам на последнем шаге инструкции. Назовём условно "регистрацией плагина"


     users: [{
     users: [{
Строка 126: Строка 130:
             username: 'user-2',
             username: 'user-2',
             password: 'password',
             password: 'password',
             name: 'Administrator'
             name: 'User'
         },
         },
     ],
     ],




==== блок devices ====
=== блок devices ===




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


    devices: [
devices: [
    //_______________Первое устройство______________//свет зал
    {
        {
        name: 'свет',  // Имя устройства для [https://yandex.ru/quasar приложения Яндекс] (назвать можно как угодно).
            name: 'свет',  // имя устройства, которое отобразится в [https://yandex.ru/quasar квазаре] Яндекса, после объединения списка устройств. обозвать можно как угодно.
        room: 'склад',  // Комната для приложения Яндекс. Можно сразу указать нужную, но я кладу всё на "склад", а потом перераспределяю.
            room: 'склад',  // имя комнаты, в которую по-умолчанию будут помещаться устройства. можно сразу указать нужную, я кладу всё на склад, а потом из квазара распределяю.
        type: 'devices.types.light', // тип устройства (описаны в [https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/device-types-docpage документации] Яндекса).
            type: 'devices.types.light',   //тип устройства, которые описаны в [https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/device-types-docpage доке].
        mqtt: [
            mqtt: [
              {
                {
                type: 'on',
                    type: 'on',
                set: '/devices/yandex/controls/svet_zal/on',  // эти стейты/топики появляются в mqtt-брокере (svet_zal заменяйте на свои)
                    set: '/devices/yandex/controls/svet_zal/on',  //эти стейты появляются в mqtt брокере (svet_zal заменять на свои)
                stat: '/devices/yandex/controls/svet_zal'
                    stat: '/devices/yandex/controls/svet_zal'
            },
                },
        ],
               
        capabilities: [
            ],
            {
            capabilities: [
                type: 'devices.capabilities.on_off',
                {
                retrievable: true,
                    type: 'devices.capabilities.on_off',
                state: {
                    retrievable: true,
                    instance: 'on',
                    state: {
                    value: true
                        instance: 'on',
                }
                        value: true
            },
                    }
        ]
                },
    },
               
            ]
        },
    //__________Конец первого устройства__________//




После того, как файл /скачали, отредактировали и вернули в исходную папку/, вернемся к мануалу по настройке плагина и выполним <span class="tocopy">npm start</span>.
После того, как файл конфигурации скачали, отредактировали и вернули в исходную папку, выполним <span class="tocopy">npm start</span>.


  В мануале плагина об этом не сказано, но чтобы проверить его доступность, нужно открыть домен по порту, указанному в блоке "https" (где указывали пути к сертификатам), пример:
  В мануале плагина об этом не сказано, но <small>(спасибо @Habaaaa за важное дополнение)</small> чтобы проверить его доступность, нужно открыть домен по порту, указанному в блоке "https" (где указывали пути к сертификатам), например:
  https://alice.domain.ru:4321
  https://alice.domain.ru:4321


Если плагин корректно встал и работает, Вы должны увидеть ответ (спасибо @Habaaaa за важное дополнение):
Если плагин корректно установлен и работает, вы увидите ответ:


  OAuth 2.0 Server
  OAuth 2.0 Server
Строка 182: Строка 182:




=== Создание приватного навыка ===
== Создание приватного навыка ==




Переходим на [https://dialogs.yandex.ru/developer платформу Диалоги] и создаем диалог, выбрав пункт "умный дом":
Открываем [https://dialogs.yandex.ru/developer сайт платформы Диалоги] и создаем диалог, выбрав пункт "умный дом":
* Название - на ваш вкус
* Название - на ваш вкус
* Backend - Endpoint URL - указываем ваш домен + порт (из блока https, откуда получили "OAuth 2.0 Server"), и страницу https://alice.domain.ru:4321/provider
* Backend - Endpoint URL - указываем ваш домен + порт (из блока https, откуда получили "OAuth 2.0 Server"), пример: https://alice.domain.ru:4321/provider
* Тип доступа - приватный.
* Тип доступа - приватный.
* Остальные обязательные поля (имя, подзаголовок, описание, иконка) - так же на ваш вкус.
* Остальные обязательные поля (имя, подзаголовок, описание, иконка) - так же на ваш вкус.
Строка 201: Строка 201:




=== Объединяем навык и платформу Iobroker ===
== Объединяем навык и платформу Iobroker ==
 
 
Здесь же, в навыке, есть вкладка "тестирование".
* Открываем её, жмём "плюсик", добавить "другое устройство". Там будет наш единственный навык.
* Выбираем его, откроется страница авторизации.
* Вводим логин/пароль от учетки, созданные в конфиге, в блоке "users". Везде разрешаем-предоставляем доступ.
* Обновляем список устройств. И, если всё прошло удачно, видим заполненный список.
* Теперь в квазаре (приложение Яндекс) их можно переименовать, и привязать к нужным комнатам.
 


<gallery>
Файл:Iob dialogs test.jpg|
Файл:Iob dialogs test add dev.jpg|
Файл:Iob dialogs test join.jpg|
Файл:Iob dialogs test authorize.jpg|
</gallery>


Здесь же, в навыке, есть вкладка "тестирование" - открываем её, жмём "плюсик", добавить "другое устройство" там будет единственный наш навык, выбираем его, откроется страница авторизации.


Теперь вводим логин/пароль от учетки, созданные в конфиге, в блоке "users". Везде разрешаем-предоставляем доступ.


Далее, обновить список устройств. И если всё прошло удачно, Вы увидите список устройств!


Перейдя в квазар, их можно переименовать, переместить по комнатам.


== Стейты/топики в mqtt ==




=== Стейты/топики в mqtt ===
После того, как устройства появились в квазаре, в MQTT-брокере появятся виртуальные стейты (они же - mqtt-топики) на каждое созданное устройство.


В примере конфига - это "svet_zal" с одним состоянием "on/off".


После того, как устройства появились в квазаре, в mqtt брокере появятся виртуальные стейты, на каждое устройство, которое мы создали. В моем примере это "svet_zal".
В моем примере будет всего одно состояние: on/off.
Дальше, применяя скрипты, наращиваем управление нужными устройствами. Всё предельно просто: следим за изменением стейта и активируем нужное устройство.
Дальше, применяя скрипты, наращиваем управление нужными устройствами. Всё предельно просто: следим за изменением стейта и активируем нужное устройство.


  '''Важное замечание:''' на тех скриптах, которые включают устройства иными способами: кнопками, из телеграма, по крону, иными способами, желательно прописать так же изменение стейта для брокера. У меня бывали сбои, когда устройство было включено с кнопки, и уже mqtt отказывался включать его повторно, поэтому я везде поставил заглушки, которые меняют стейты в брокере.
  '''Важное замечание:''' в скриптах, которые включают устройства иными способами (кнопками, через Telegram, cron, иными способами) желательно прописать и изменение стейта для брокера.  
У автора бывали сбои, когда устройство было включено с кнопки, и уже mqtt отказывался включать его повторно.
Пришлось вписывать заглушки, которые меняют стейты в брокере.
''(странно прозвучало, надеюсь, меня поняли)''
 
Если всё отзывается на голос, устройства срабатывают - можно перейти к "шарингу" своих устройств.
 


== Доступ к другим аккаунтам Яндекса (шаринг устройств) ==


=== Доступ к другим аккаунтам Яндекса (шаринг устройств) ===


Часто пользователи колонок Яндекса задаются вопросом, '''как предоставить доступ к своим устройствам другим членам семьи'''. Легко:
* В конфиг-файле плагина ('''блок "users"''', см выше) создаем нужное количество учетных записей (логин/пароль произвольные, но их надо запомнить для дальнейшей авторизации);
* В аккаунте Яндекса, '''которому''' предоставляем доступ (муж, жена, кошечка, собачка), переходим на платформу Диалоги и создаем приватный навык (по аналогии с основным);
* После сохранения и публикации навыка, открываем вкладку "Тестирование", добавляем наш навык, и авторизовываемся в веб-интерфейсе под одной из регистраций плагина (user-1, user-2 из примера '''блока "users"''');
* Обновляем список устройств и можем по-своему переименовать устройства и комнаты;
* Если сильно разобраться и запотеть, я думаю, возможно даже указать, какие устройства будут доступны в каждом аккаунте (например, чтобы дети не включали свет у родителей).


Очень часто, пользователей колонок Яндекса мучает вопрос: как предоставить доступ к своим устройствам другим членам семьи?
В этой статье я уже отмечал, что в конфиг-файле плагина есть настройка нескольких учетных записей.
После того, как Вы полностью настроили интеграцию Iobroker и "Алисы", у Вас всё отзывается на голос и включаются устройства, можно перейти к "шарингу" своих устройств.


*Создаем в блоке "users" нужное количество учетных записей;
*В том аккаунте, которому хотим предоставить доступ, переходим на платформу Яндекс.диалоги и создаем приватный навык, по аналогии с основным;
*После сохранения и публикации навыка, открываем вкладку "тестирование", добавляем наш навык, но авторизовываемся уже под другой учёткой, которую создали отдельно; 
*Обновляем список устройств и можем по-своему переименовать устройства и комнаты;
*Если сильно разобраться и запотеть, я думаю, возможно даже заведомо указать, какие устройства будут доступны в каждом аккаунте. (например, чтобы дети не включали свет у родителей)


[[Category:Умный дом]]
[[Category:Умный дом]]
[[Category:Диалоги]]
[[Category:Диалоги]]

Текущая версия от 09:37, 3 мая 2024

Требуются прямые руки И вдумчивое отношение к инструкции
Мы не несём никакой ответственности за правильное или неправильное применение, или неприменение, и/или неспособность применить данное руководство.
Телефон вызова экстренных служб - 112.

Введение

Предлагаемый способ:

  • Подойдёт тем, кто не хочет или не может использовать готовый драйвер, или в нём оказалось недостаточно возможностей.
  • Позволяет поделиться (расшарить) свои устройства на другие аккаунты Яндекса: например, для нескольких членов семьи.
В статье показана только функция "включить/выключить". На самом деле в документации УДЯ намного больше поддерживаемых устройств и их возможностей - как всегда, всё зависит от фантазии)

Требования и ресурсы

Нам понадобятся:

  1. Домен + публичный IP с пробросом порта
  2. SSL-сертификат к этому домену.
  3. Плагин y2mqtt (ссылка на гит + там описан процесс установки) (обновлю только ссылку, остальное лень)
  4. Драйвер mqtt в роли "сервер/брокер"
  5. Платформа Яндекса Диалоги (мы будем создавать приватный навык).


Если не испугали необходимые требования и ресурсы - приступаем к настройке.

За основу взята эта статья, только я не использую прокси. Мой сервер крутится на Raspberry за NATом

Домен и SSL

Первое, что понадобится - это домен. Я выбрал себе домен третьего уровня, alice.domain.ru. Затем необходимо получить SSL-сертификат к этому домену (достаточно Let`s Encrypt).

Необходимо запомнить/записать пути к полученным сертификатам, это понадобится позже.

После того, как Вы зарегистрировали домен и получили сертификат, проверьте его валидность. Если проверка завершилась успешно - двигаемся к следующему шагу.

Настройка драйвера MQTT Broker/Client

Из списка драйверов Iobroker устанавливаем "MQTT Broker/Client". Открываем настройки:

  • Тип - сервер/брокер
  • Порт - произвольный. Главное, чтобы не совпадал с теми, что уже заняты (например, дефолтный порт брокера совпадает с устройствами sonoff).
  • Данные аутентификации: логин, пароль. Галочку "SSL" не ставим, логин и пароль также понадобятся позже.
порт и данные аутентификации пишем произвольные, но запоминаем их: они понадобятся дальше, при настройке конфигурационного файла плагина.

Настройка окончена!

Чтобы проверить доступность, можно запустить, например, Windows-клиент и попробовать подключиться по указанным параметрам. В случае успеха иконка mqtt.0 драйвера загорится зелёным.

Настройка плагина y2mqtt

Используем этот плагин (ссылка на Git). Шаги по его установке описаны во многих статьях, так что укажем только тонкости, на которые стоит обратить внимание:

  1. После установки (npm install) не запускайте мост. Нужно настроить конфиг, добавить в автозагрузку. Всё согласно мануалу.
  2. НЕ редактируйте конфиг из консоли! Лучше скачать файл на компьютер (например, WinScp), отредактировать (в np++) и вернуть обратно.


Настройки конфиг файла (/mnt/data/root/yandex2mqtt/config.js) с комментариями:

блок mqtt

Указываем адрес сервера, где крутится Iobroker, порт, логин и пароль (запомненные нами при настройке драйвера MQTT Broker/Client):

mqtt: {
       host: '192.168.1.2',
       port: 1234,
       user: 'test',
       password: 'test'
},

блок https

Здесь нужно прописать пути к SSL-сертификатам, которые Вы получили в пункте Домен и SSL, а также указать еще один свободный порт - для работы этого плагина.

https: {
       privateKey: '/etc/letsencrypt/live/alice.domain.ru/privkey.pem',
       certificate: '/etc/letsencrypt/live/alice.domain.ru/fullchain.pem',
       port: 4321
},

блок clients

Впишем произвольные данные, которые тоже запомним и потом укажем при создании навыка на платформе Яндекс.диалоги

   clients: [
   {
       id: '1',
       name: 'Yandex',
       clientId: 'login',
       clientSecret: 'password',
       isTrusted: false
       },
   ],

блок users

Отвечает за шаринг устройств на другие аккаунты Яндекса. Создаём нужное количество профилей, которые пригодятся нам на последнем шаге инструкции. Назовём условно "регистрацией плагина"

   users: [{
           id: '1',
           username: 'user-1',
           password: 'password',
           name: 'Administrator'
       },
       {
           id: '2',
           username: 'user-2',
           password: 'password',
           name: 'User'
       },
   ],

блок devices

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

devices: [
    {
        name: 'свет',   // Имя устройства для приложения Яндекс (назвать можно как угодно).
        room: 'склад',  // Комната для приложения Яндекс. Можно сразу указать нужную, но я кладу всё на "склад", а потом перераспределяю.
        type: 'devices.types.light', // тип устройства (описаны в документации Яндекса).
        mqtt: [
             {
                type: 'on',
                set: '/devices/yandex/controls/svet_zal/on',  // эти стейты/топики появляются в mqtt-брокере (svet_zal заменяйте на свои)
                stat: '/devices/yandex/controls/svet_zal'
            },
        ],
        capabilities: [
            {
                type: 'devices.capabilities.on_off',
                retrievable: true,
                state: {
                    instance: 'on',
                    value: true
                }
            },
        ]
    },


После того, как файл конфигурации скачали, отредактировали и вернули в исходную папку, выполним npm start.

В мануале плагина об этом не сказано, но (спасибо @Habaaaa за важное дополнение) чтобы проверить его доступность, нужно открыть домен по порту, указанному в блоке "https" (где указывали пути к сертификатам), например:
https://alice.domain.ru:4321

Если плагин корректно установлен и работает, вы увидите ответ:

OAuth 2.0 Server

Без этого сообщения дальнейшие действия бессмысленны. Если оно не появилось, то проверьте:

  • Корректность установки плагина
  • Доступность портов, указанных в конфиг-файле
  • Корректность ssl сертификатов

Если сообщение есть - переходим к приватному навыку:

Создание приватного навыка

Открываем сайт платформы Диалоги и создаем диалог, выбрав пункт "умный дом":

  • Название - на ваш вкус
  • Backend - Endpoint URL - указываем ваш домен + порт (из блока https, откуда получили "OAuth 2.0 Server"), пример: https://alice.domain.ru:4321/provider
  • Тип доступа - приватный.
  • Остальные обязательные поля (имя, подзаголовок, описание, иконка) - так же на ваш вкус.

Далее, в самом низу есть пункт "Связка аккаунтов", также создаём:

Везде жмём "Сохранить", затем "Опубликовать".

Объединяем навык и платформу Iobroker

Здесь же, в навыке, есть вкладка "тестирование".

  • Открываем её, жмём "плюсик", добавить "другое устройство". Там будет наш единственный навык.
  • Выбираем его, откроется страница авторизации.
  • Вводим логин/пароль от учетки, созданные в конфиге, в блоке "users". Везде разрешаем-предоставляем доступ.
  • Обновляем список устройств. И, если всё прошло удачно, видим заполненный список.
  • Теперь в квазаре (приложение Яндекс) их можно переименовать, и привязать к нужным комнатам.

Стейты/топики в mqtt

После того, как устройства появились в квазаре, в MQTT-брокере появятся виртуальные стейты (они же - mqtt-топики) на каждое созданное устройство.

В примере конфига - это "svet_zal" с одним состоянием "on/off".

Дальше, применяя скрипты, наращиваем управление нужными устройствами. Всё предельно просто: следим за изменением стейта и активируем нужное устройство.

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

Если всё отзывается на голос, устройства срабатывают - можно перейти к "шарингу" своих устройств.

Доступ к другим аккаунтам Яндекса (шаринг устройств)

Часто пользователи колонок Яндекса задаются вопросом, как предоставить доступ к своим устройствам другим членам семьи. Легко:

  • В конфиг-файле плагина (блок "users", см выше) создаем нужное количество учетных записей (логин/пароль произвольные, но их надо запомнить для дальнейшей авторизации);
  • В аккаунте Яндекса, которому предоставляем доступ (муж, жена, кошечка, собачка), переходим на платформу Диалоги и создаем приватный навык (по аналогии с основным);
  • После сохранения и публикации навыка, открываем вкладку "Тестирование", добавляем наш навык, и авторизовываемся в веб-интерфейсе под одной из регистраций плагина (user-1, user-2 из примера блока "users");
  • Обновляем список устройств и можем по-своему переименовать устройства и комнаты;
  • Если сильно разобраться и запотеть, я думаю, возможно даже указать, какие устройства будут доступны в каждом аккаунте (например, чтобы дети не включали свет у родителей).