Умное реле с алисой своими руками

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

Эта история про то, как я случайно собрала себе «умный дом» на базе сервисов Яндекса. А еще она про подводные камни, неожиданные проблемы, появившиеся из-за «не подумала», и про то, как их избежать.

Когда я только переехала в новую съемную квартиру, то первый месяц была занята изучением ее возможностей. Владелец квартиры подошел с умом к ремонту: развел разные комнаты и группы потребителей на отдельные автоматы и вывел везде дополнительные группы розеток — например, только около кровати их 15 (. ). Для верхнего же освещения владелец квартиры установил два типа люстр:

  1. В кухне и гостиной встали бюджетные светодиодные люстры с круглым плафоном и ИК-пультом управления: в магазинах их можно найти от 3 000 рублей. Такие светильники умеют менять яркость, цветовую температуру и включать «режим ночника».
  2. В коридоре и спальне обнаружились светодиодные RGB люстры со встроенными Bluetooth-колонками и управлением через приложение со смартфона, примерно такие:

Разумеется, в первый же день я к ним подключилась и в дальнейшем возлагала на них особые надежды. Забегая вперед, скажу — так я еще ни разу не ошибалась.

Кроме этого, в доме были:

  • Кондиционер
  • Светодиодный занавес с ИК-пультом
  • RGB-лента с ИК-пультом
  • Увлажнитель воздуха с ИК-пультом
  • Умная лампочка Xiaomi Multicolor
  • Робот-пылесос Xiaomi
  • Телевизор

Первое время я упоенно подключала, переключала и жонглировала десятком пультов и приложений, но надоедает это очень быстро — примерно за две недели, после чего все равно возвращаешься к старым добрым клавишным выключателям. А потом я обзавелась Яндекс Станцией с Алисой на борту, и понеслась.

Этап первый. Начинаем с самого легкого

Первым делом я попыталась подключить к Алисе умную лампочку и пылесос – оба из экосистемы MiHome, оба заточены под умный дом, что тут сложного? Тут же я наткнулась на первый подводный камень.

Так получилось, что пылесос (Roborock S6) прошит для российского региона, а лампочка — для европейского, хоть и приобреталась в России – оставим за кадром все возникшие к продавцу неудобные вопросы. Алиса же тянет информацию об устройствах из привязанного аккаунта MiHome, причем воспринимает только регионы Россия или Китай. Жонглирование регионами показало, что:

  • MiHome европейского региона видит и пылесос, и лампочку, зато не дружит с умным домом Яндекса
  • MiHome российского региона видит только пылесос, лампочка ему недоступна
  • MiHome Китая видит только лампочку, пылесос в приложении не отображается — зато умный дом Яндекса его подцепил и успешно управляет. Но карту дома и прогресс уборки теперь не посмотреть.

С горем пополам подключила этих двоих, наигралась, задумалась о расширении возможностей. И тут кроется второй подводный камень: «из коробки» умный дом Яндекса может управлять устройствами только через Wi-Fi. Если гаджеты умеют самостоятельно подключаться к домашней сети без шлюза — то вы на коне. Нет — ставьте промежуточные узлы.

Первоначально мне в голову пришла идея собрать в шкафу одноплатный контроллер, обвешать его свистками и протянуть по дому ИК-передатчики, но оказалось, что все уже придумано до нас. Тот же Яндекс выпустил умный пульт — всенаправленный ИК-передатчик в виде черной шайбочки, который цепляется к домашней сети и эмулирует команды с пульта.

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

Этап второй. Избавляюсь от пультов

Вопреки опасениям, загнать в Яндекс устройства с ИК-пультами оказалось быстро и просто — в приложении дана пошаговая инструкция, как записать в память устройства команды. Но и тут нашлось несколько подводных камней:

  1. Поскольку устройств много, а команд мало, последние часто дублируются. И одна и та же команда используется в нескольких местах. Так, у меня обнаружились одинаковые коды для люстр в гостиной и на кухне. А еще — у увлажнителя и люстры в спальне. Пока в деле были слабенькие штатные пульты, проблем это не создавало. Но:
  2. Пульт Яндекса СЛИШКОМ мощный (из центра квартиры он дотягивается до всех – правда, и дом у меня в обтяжку). А еще он всенаправленный, то есть, «стреляет» сразу во все стороны. В результате — свет в кухне и гостиной включается одновременно (не знаю, как, но сигнал проходит через стену!), а запуск увлажнителя в спальне включает и верхний свет там же. И если первую проблему можно решить, ослабив сигнал передатчика (например, спрятав его за полупрозрачную преграду) в одной комнате и поставив второй передатчик в другой, то решить задачку «Как включить ночью увлажнитель, не перебудив домочадцев» мне пока не удалось.
  3. Некоторые устройства используют одну и ту же команду и на включение, и на выключение. Сначала на это не обращаешь внимания, но на этапе постройки сценариев становится очень неудобно.
  4. Нужно больше розеток! Чем больше в доме RGBT-подсветки, тем меньше свободных розеток. А еще Станция. А еще Пульт. А еще… В общем, разветвители точно не помешают.

Зато кондиционер и телевизор подтянулись из базы устройств, и пульт теперь умеет эмулировать все функциональные кнопки.

На этом этапе я вспомнила, что телевизор тоже вроде бы «умный», и попыталась подключить его к умному дому напрямую, но потерпела сокрушительное поражение. Оказалось, что нищебродам здесь не место телевизоры LG дружат с Алисой только в версии WebOS 5.0 и выше. У меня же в ТВ 2019 года выпуска стоит версия WebOS 4.9.3. И нет, обновления ОС LG не делают. Покупайте новый. Привет, LG!

Этап третий. Слишком умные люстры. Или нет

После успешного подключения всего мелкого китайского зоопарка я перешла к люстрам с BT-колонками. И тут случилось то самое разочарование: китайские noname-люстры подключить к Яндексу невозможно. По Bluetooth он ими управлять не умеет, в Wi-Fi не умеют уже они, а ИК-пульт оказался только у одной (и то эмулируется калечно: диммирование и плавное изменение цвета вам будет недоступно). Теперь я выбираю между двумя стульями путями: снять их к чертовой матери и купить Xiaomi или же поднять на домашнем сервере Android, в котором эмулировать нажатия пользователя, а уже его пытаться подружить с Яндексом. Оба варианта не очень, если честно.

Этап четвертый. Сценарии

После подключения зоопарка настройка сценариев оказалась проще пареной репы: с точки зрения UI умный дом Яндекса, конечно, крайне прост в освоении. Без нюансов не обошлось и тут — как я уже говорила, по одной команде может срабатывать сразу несколько устройств, а у некоторых одна команда на вкл/выкл.

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

Этап пятый. Кто хозяин в доме?

Последней задачей стало расшарить всю эту автоматизацию домочадцам. Так вот: это невозможно. Совсем. Если ваш умный дом заведен на ваш аккаунт, домашние смогут только командовать Алисой голосом, управление со смартфона им недоступно.

Выходом может стать заведение нового пустого аккаунта, подключение всех устройств на него и выдача пароля семье, но если вы (как я) купили Станцию по подписке — перепривязать ее к другому аккаунту не получится, пока подписка не истечет.

Сколько стоит?

Если считать все устройства (кроме кондиционера, пылесоса и ТВ), то на август 2021 года:

  • Яндекс.Станция с Алисой — от 3 000 рублей
  • Яндекс.Пульт — 1 500 рублей
  • Люстры — около 3 000 рублей за каждую, всего 12 000
  • Светодиодный занавес — 600 рублей
  • RGB-лента — 600 рублей
  • Увлажнитель воздуха — от 3 000 рублей
  • Умная лампочка Xiaomi Multicolor — около 1 000 рублей

Суммарно получилось около 22 000, из которых больше половины — это потолочные светильники. Сама же автоматизация обошлась мне в 4 500 рублей за Станцию и Пульт. Без них, в общем-то, тоже можно обойтись, сама по себе платформа умного дома в Яндексе бесплатная и общедоступная. Но с ними задорнее.

Как не быть мной?

Можно было бы посоветовать «сначала думать, потом только делать», но это не про меня. Поэтому:

  1. Не берите Станцию по подписке, если вы живете не одни. Вам потом наверняка захочется ее перепривязать к семейному аккаунту – а вот нет! Придется ждать 2-3 года.
  2. Не покупайте люстры с Bluetooth-колонками, даже если очень хочется. Даже если вам мамой поклялись, что эти люстры вчера получили Нобелевскую премию, настолько они умные. Во-первых, звук у них — «очень не очень». А во-вторых, задолбаетесь с управлением.
  3. Проверяйте регионы! Иначе будете жонглировать регионами в MiHome и костылить мосты, как я.
  4. Если вам кажется, что розеток хватит, делайте больше розеток. Раза в два. Или даже в три. И еще можно разветвители купить.
  5. Если вы планируете сначала сделать ремонт, а потом протянуть управление – не надо так. Спланируйте все заранее и заведите внутрь стен. Да и наверняка же захотите потом и датчики завести.

Ну, а если вы задались вопросами «Зачем это все?» и «Почему Яндекс?», то ответ прост: потому что могу. Было скучно, а компоненты оказались под рукой. В конце концов, кто-то же должен был написать этот пост.

Источник

Яндекс: умный дом по-взрослому

Недавно компания Яндекс запустила свою систему «умного дома». Нам предлагают купить недорогие работающие по Wi-Fi устройства: адаптер в розетку, лампочку и ИК пульт. Интересно, что у разработчиков «умных» устройств появилась возможность создать свои навыки «умного дома», это позволит подключить девайсы к системе Яндекса и управлять ими голосом через Алису. В списках навыков появляется всё больше новых брендов. Алиса прекрасно понимает русскую речь, что делает ее безусловным лидером среди голосовых ассистентов на российском рынке.
Однако, не всё так гладко…

Первый минус: в основном, все предложенные системы — «облачные». Их надежность порой вызывает сомнения, так как их работоспособность на прямую зависит от качества соединения с серверами производителя. А при отключении интернета устройства вовсе превращаются в “тыкву”.

Второй минус: система сценариев. Немаловажная часть умного дома — сценарии. И тут они очень примитивные: Если “фраза такая-то”, то включить “устройство такое то”. Для моего умного дома этого оказалось слишком мало.

Минусы на этом не заканчиваются, но остальное связанно скорее с незрелостью системы. Команда разработчиков Яндекса продолжает активно добавлять различные фичи, а баги — править, за что им большое спасибо!

Изучив документацию, я решил создать навык Яндекс УД и подключить к нему контроллер умного дома. Это позволит не зависеть от облачных серверов, реализовывать любые сценарии локально на контроллере и при этом управлять системой голосом через Алису. Для этого я написал плагин “yandex2mqtt” на Node.js.

Немного теории

— Алиса, включи свет.
После этой фразы происходит магия и включается свет. Но что же за кулисами? Давайте разбираться, как всё это работает.

Яндекс-станция, услышав знакомую команду, отправляет данные на сервер Яндекса, которому мы заранее указали адрес нашего контроллера. Сервер обрабатывает информацию и перенаправляет ее на контроллер в виде Post-запроса. На контроллере промежуточный API (в нашем случае это плагин yandex2mqtt) обрабатывает запрос и перенаправляет его в MQTT топик. Дальше происходит обработка сценария в программе Node-Red.

Node-Red решает, что делать дальше. Если это предусмотрено сценарием, он посылает команду на включение света в соответствующий топик MQTT. Драйвер wb-mqtt-serial реагирует, посылая команду по Modbus на релейный модуль, тот переключает реле. И наконец-то включается свет! Да, путь не близкий, однако для пользователя проходят считанные доли секунд.

Давайте посмотрим на плагин yandex2mqtt поближе. Первое, что требует Яндекс для работы навыка, — oAuth сервис для связки аккаунтов в приложении Яндекс. После того как Яндекс получит токен авторизации от oAuth сервиса, он запрашивает список устройств. Плагин yandex2mqtt отдает в ответ список устройств со всеми свойствами в json формате. Затем они появляются в списке доступных для управления устройств (в так называемом квазаре). Теперь, если скомандовать Алисе включить какое-то устройство из списка, Яндекс пошлёт Post запрос с данными устройства, которое он хочет включить, на контроллер. В ответ плагин подтверждает включение и записывает новое состояние в mqtt топик, указанный в настройках все того же плагина. Если же устройство изменило свой статус без участия Яндекса, то плагин, увидев новые данные в mqtt топике, отправит их Яндексу при запросе статуса, который сейчас происходит, только если зайти в само устройство в квазаре. В иных случаях Яндекс не опрашивает статусы.
Теперь расскажу о некоторых свойствах устройств Яндекс УД.

Тип устройств

Для правильного отображения в “квазаре” и более точного определения команд Алисой Яндекс предлагает присваивать устройствам разные типы. Всего типов 10:

  • devices.types.light — Любой светильник, люстра, лампочка итд.
  • devices.types.socket — Розетка
  • devices.types.switch — Переключатель
  • devices.types.thermostat — Термостат
  • devices.types.thermostat.ac — Кондиционер
  • devices.types.media_device — Медиа устройство
  • devices.types.media_device.tv — Телевизор
  • devices.types.cooking — Кухонная техника
  • devices.types.cooking.kettle — Чайник
  • devices.types.other — Всё остальное, что не подошло под предыдущие пункты.

Умение (capability)

Также у каждого устройства должно быть минимум одно умение (capability).

Всего у Яндекс УД есть 5 типов умений. Каждое умение имеет разную функцию (instance), а некоторые умения имеют несколько таких функций, что добавляет гибкости при настройке устройств.

1. devices.capabilities.on_off — Включение и выключение.

  • on

2. devices.capabilities.color_setting — Управление цветом.

  • rgb
  • hsv
  • temperature_k

3. devices.capabilities.mode — Переключение режимов.

  • thermostat
  • fan_speed

4. devices.capabilities.range — Управление диапазоном.

  • brightness
  • temperature
  • volume
  • channel

5. devices.capabilities.toggle — Выключение звука.

При правильной комбинации всех свойств устройства Алиса без проблем понимает все отданные ей команды по управлению Умным домом. Тут, конечно, есть некие трудности с комбинированием умений. В документации явно не указано, какие умения можно комбинировать, а какие нельзя. Но с этим нам поможет “метод научного тыка”.

Так, к примеру, я выяснил, что кондиционер содержит четыре умения:

  • fan_speed

Остальные свойства описывать не буду, там всё довольно просто.

Чтобы всё заработало, требуется:

Контроллер

Моя “умная” квартира управляется контроллером Wiren Board 6. Но можно использовать любой другой контроллер на линуксе, который потянет Node.js и Node-Red. Например, Raspberry pi или ПК.

Домен

Желательно, конечно, иметь белый IP адрес и купить домен, но это необязательно. Можно использовать DDNS — например, www.noip.com.

Тут всё просто: регистрируемся, создаем бесплатный хостнейм, вписываем свой IP адрес. У некоторых роутеров есть специальная настройка DDNS, куда можно вписать данные noip.com. Роутер будет автоматически отправлять IP адрес при его смене. Если такой настройки в роутере нет, можно установить программу noip на контроллер и добавить её в автозапуск. Программа будет делать ровно то же самое, что и роутер со специальной настройкой DDNS — обновлять Ваш ip адрес в базе noip.com

Таким образом, мы имеем статический адрес, который перенаправляет все запросы на наш контроллер.

Порты 443 и 80

Сейчас почти у каждого человека дома есть роутер. Помимо очевидных его функций, он также является барьером для локальной сети от нежелательных гостей извне. Но в определённых случаях нам требуется доступ к внутренней сети снаружи. Производители роутеров это предусмотрели и добавили функцию NAT (Network Address Translation).

Момент настройки роутера я расписывать не стану, так как он разный для каждого производителя. Как это сделать, читайте в инструкции к Вашему роутеру. Ключевые слова для гугления: Port Forwarding, Port Mapping, NAT.

Необходимо пробросить порт для доступа к yandex2mqtt (может быть любой, я выбрал 443) и 80 порт (нужен только для получения SSL сертификата. После получения сертификата 80 порт можно закрыть).

SSL-сертификат

Сразу расставим все точки над «и»: самоподписанные сертификаты работать не будут.
Большинство регистраторов доменов (например, reg.ru) дарят своим клиентам бесплатные SSL-сертификаты для основного домена (www.yourdomain.ru). Если вы купили домен специально для Алисы, то Вы можете воспользоваться предоставленным SSL-сертификатом.

Если же собственного домена Вы не имеете, либо для Алисы у Вас выделен другой поддомен (например, alice.yourdomain.ru), то нужно получить сертификат на этот поддомен, либо на адрес, предоставленный DDNS-службой.

Для этого предлагаю воспользоваться бесплатной услугой получения SSL-сертификата от letsencrypt.org.

Для получения сертификата необходимо установить программу certbot, запустить и указать все данные, которые она запросит. При этом должен быть свободен и доступен снаружи порт 80. Я советую внимательно изучить инструкцию от letsencrypt.

Останавливаем сервисы watchdog и nginx.

Пробрасываем 80 порт в роутере.

Запускаем программу certbot:

После запуска программа задаст несколько простых вопросов

1. Ваш e-mail. Просто введите адрес и нажмите enter

2. Вам предлагают прочесть пользовательские соглашения. Если вы со всем согласны, просто введите “A”, что означает Agree, то есть согласен.

3. Программа просит разрешения на отправку Вашего адреса электронной почты разработчикам. Введите N.

4. Введите свой домен, на который хотите получить сертификат (можно ввести тот, что мы получили в noip ранее). Тут я привожу пример ошибочного ввода. Префикс http:// вводить не нужно.

Если Вы всё сделали правильно, то увидите следующее:

Значит, сертификат успешно получен. Запомните путь к сертификату и ключу, он потребуется при настройке плагина yandex2mqtt. Для безопасности закройте 80 порт в настройках роутера, он больше не пригодится.

Включаем сервисы watchdog и nginx.

Сертификат от letsencrypt выдаётся на 3 месяца. Не забывайте обновлять.

Node.js и плагин yandex2mqtt

Настраиваем репозиторий node.js

Далее устанавливаем или обновляем все необходимые компоненты

После успешной установки копируем репозиторий yandex2mqtt на контроллер.

Заходим в папку.

Cоздайте юнит systemd:

Перейдите в папку /etc/systemd/system/ на контроллере и создайте файл с названием yandex2mqtt.service. Скопируйте в него следующее:

После этого сохраните изменения и закройте файл.

Для включения юнита введите в консоль команду:

Теперь можно запускать и останавливать плагин командами

Все необходимые настройки плагина находятся в файле /mnt/data/root/yandex2mqtt/config.js
Отредактируйте этот файл в соответствии с Вашими параметрами.
SSL-сертификат обязательно должен быть fullchain.

После настройки запустите yandex2mqtt командой:

После настройки и запуска моста советую проверить сертификат на этом сайте.

Просто введите свой домен, который собираетесь использовать для доступа к Алисе. Для корректной работы сертификат должен пройти все проверки. Иначе ничего не заработает.

1. Перейти на страницу dialogs.yandex.ru/developer
2. Залогиньтесь под своим аккаунтом.
3. Нажать “создать диалог”
4. Выбрать пункт “Умный дом”
5. Ввести обязательные параметры:

  • Название — Любое название.
  • Endpoint URL — адрес типа вашдомен/provider, где вместо “вашдомен” адрес из noip или ваш домен, для которого получен ssl-сертификат.

  • Приватность — выбрать “Не показывать в каталоге” (Обязательно! Иначе навык не пройдет мгновенную модерацию)
  • Имя и Email разработчика — указать Ваши данные.
  • Описание — любой текст
  • Иконка — любая иконка.

6. Связка аккаунтов:

Нажать “добавить новую”

  • Первые два пункта — указываем данные из config.js / clients :

1. Идентификатор приложения — clientId

2. Секрет приложения — clientSecret

  • URL авторизации — вашдомен/dialog/authorize
  • URL для получения токена — вашдомен/oauth/token
  • URL для обновления токена — вашдомен/oauth/token

7. Сохранить навык

8. Нажать “На модерацию”

9. Нажать “Опубликовать”

1. Зайти в приложение Яндекс на телефоне

2. В меню выбрать Устройства/Умный дом

3. Нажать “Добавить устройство”

4. Выбрать свой навык

5. Нажать “Объединить аккаунты”

6. Откроется страница авторизации

Ввести логин и пароль (задается в файле config.js в блоке users)

7. Нажать “Разрешить”.

8. Нажать “Обновить список устройств”

Теперь Алисе можно отдавать команды для управления добавленными устройствами. В указанные mqtt топики будут приходить соответствующие команды.

Осталось привязать к этим топикам какие-то действия.

Node-Red

Для системы автоматизации был выбран Node-Red. Это отличный инструмент визуального программирования. Процедуру установки и настройки можно подсмотреть тут.

Процесс настройки и автоматизации умного дома потянет на целую статью, а то и две. Да и таких статей уже много. Вместо этого — небольшой пример использования плагина, как включить лампочку голосом.

Для удобства на контроллере Wiren Board 6 в веб интерфейсе создаем виртуальное устройство.
В движок правил wb-rules нужно вписать



MQTT топики этого виртуального устройства впишем в config.js на тип умения “on” устройства “Свет”:

Теперь при фразе “Алиса, включи/выключи Свет” переключается виртуальное устройство.

Перейдем в Node-Red, который установили по инструкции.

Для удобной работы с Wiren Board 6 также можно использовать дополнительную “ноду” node-red-contrib-wirenboard.

В контроллер поставлен модуль расширения WBE2R-R-ZIGBEE, что позволило подключиться к “Икеевской” умной лампочке серии ТРОДФРИ по ZigBee-протоколу.

Теперь дело за малым. Закинуть несколько блоков в рабочее поле Node-Red, соединить “ниточками” и нажать Deploy.

Икеевская лампочка подключена через плагин zigbee2mqtt, поэтому в mqtt топик лампочки для управления нужно отправлять json. Для этого между виртуальным девайсом WB и mqtt топиком лампочки вставим простую функцию.

Нажимаем Deploy. Проверяем.

Алиса, включи Свет!

Итак, сегодня мы научились подключать Алису к системе автоматизации. Возможно в некоторых случаях это слишком сложно, проще купить обычную wi-fi лампочку, и этого хватит. Но если Вы задумали собрать себе по-настоящему умный дом, то простыми способами тут не обойтись. А стоит оно того или нет, каждый решит сам. Спасибо за внимание!

Источник

Adblock
detector