Встречаем сценарии умного дома Яндекса, которые сработают даже без интернета

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
В продажу поступили наши новые устройства с поддержкой протокола Zigbee: обновлённая Станция Макс, Яндекс Хаб и комплект датчиков. Но сегодня на Хабре мы поговорим не о них, а о важном изменении в платформе умного дома, о котором нас многие просили.

Меня зовут Марат Мавлютов, я руковожу разработкой умного дома Яндекса. Раньше все созданные пользователями сценарии работали в облаке. Даже те, которые затрагивали устройства и датчики с поддержкой Zigbee. Теперь такие сценарии будут храниться локально, прямо на колонке или хабе. Они работают значительно быстрее облачных и даже в том случае, если интернет в квартире отключат.

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

image


Немного предыстории


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

У этой схемы есть очевидные плюсы и минусы. Она позволяет объединять в одном умном доме устройства разных, несовместимых друг с другом производителей. Общим шлюзом в этом случае выступает открытое API Яндекса.



Но при такой схеме работа умных устройств зависит от двух вещей: качества интернета дома и доступности серверов. Если упал домашний Wi-Fi или случилась авария в дата-центре, то умное устройство просто не сработает.

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

Очевидный выход из этой ситуации — научить девайсы разных вендоров взаимодействовать друг с другом напрямую, без походов в облако. Для этого нужен единый протокол связи вместо зоопарка проприетарных решений. Значит, компаниям надо объединиться и договориться друг с другом. Так родился Zigbee Alliance, к которому присоединились сотни компаний и который подарил жизнь одноимённому протоколу.

Кстати, позднее к альянсу присоединились Apple, Samsung, Google, Amazon, Яндекс и другие крупные разработчики умных устройств, чтобы поддержать разработку перспективного протокола Matter, которому (хочется верить!) суждено заменить Zigbee. Но о Matter мы скажем несколько слов чуть позже.

Итак, впервые мы добавили поддержку Zigbee в Яндекс Станцию 2. Причём разработали собственный модуль. Это существенно расширило возможности умного дома: теперь можно было привязывать какие-то действия к работе датчиков или других устройств. Например, появилась возможность настроить включение кондиционера, когда температура воздуха поднималась выше определённого уровня. При этом, благодаря Zigbee, датчик температуры мог месяцами локально работать на единственной трёхвольтовой батарейке.


В центре платы — модуль Zigbee в Станции 2

Вот только простая поддержка Zigbee-устройств на уровне колонки не решила глобальную проблему. Сценарии умного дома хранились в облаке Яндекса, а значит, без интернета умные устройства не работали.

Первый подход к локальным сценариям


Мы подумали: почему бы не сделать так, чтобы Zigbee-часть сценариев выполнялась локально и хранилась на колонке. Допустим, у меня есть кнопка и лампочка, которые поддерживают Zigbee.

Для них я создал короткий сценарий:

  • включить свет по умной кнопке;
  • включить музыку.

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

Но если первую часть сценария сохранить и выполнять на колонке, а не в облаке, то обе проблемы решатся. Да, без интернета музыка всё равно не будет воспроизводиться, но это вполне ожидаемо.

Представим себе более сложный пример сценария:

  • включить свет по умной кнопке;
  • включить музыку;
  • через 5 минут выключить свет.

Казалось бы, третий шаг тоже может быть выполнен локально. Но не всё так просто: команды сценария выполняются последовательно. Если на одном из этапов случилась проблема (например, пропала сеть), то дальнейшее выполнение сценария прервётся.

Поэтому изначально мы планировали сохранять на колонке только те сценарии, которые содержат в себе исключительно Zigbee-устройства и запускаются кнопкой/выключателем, но не голосом (напомню, голос расшифровывается в текст на сервере). Только в этом случае их работа была бы предсказуемой. К сожалению, у такого решения был очевидный недостаток. Условная лампочка будет включаться с разной скоростью в зависимости от того, какие ещё действия сохранены в сценарии. Но мы хотели, чтобы она включалась быстро в любой ситуации.

В общем, первый подход звучал слишком сложно и не соответствовал тезису «Умный дом — это просто». Нам нужно было найти более простое решение.

Перепридумываем идею и «переносим» бэкенд


Напомню, с момента своего появления сценарии прерывали работу, если на каком-то шаге возникала ошибка. Коллеги предложили отказаться от этого принципа. Точнее, дать людям возможность выбрать. Так мы и сделали: в интерфейсе приложение «Дом с Алисой» появилась возможность выбрать один из двух вариантов выполнения сценария.



Это небольшое, но важное изменение позволило переосмыслить наш подход к локальным сценариям. Теперь мы могли не бояться сценариев, в которых действия локальных устройств шли вперемешку с облачными функциями.

Чтобы такие гибридные сценарии работали локально, нам нужен было научить колонку не просто хранить их, но и выступать для них полноценным бэкендом. Например, если в сценарии есть запуск Wi-Fi-пылесоса, то именно Станция должна отправить в облако Яндекса соответствующую команду.

Так мы и сделали: перенесли всю логику на умную колонку. Может показаться, что самое сложное в этом процессе — это уместить то, что работало на мощностях дата-центров в устройстве с более скромными ресурсами. Но нет: вся эта логика была не такой уж и прожорливой. Настоящий вызов — это разобраться во всём многообразии возможных сценариев и шаг за шагом поддержать их на уровне колонки. Например, где хранить сценарий, если колонок с поддержкой Zigbee в доме несколько? Решили, что храним его на той же колонке, к которой обращается сценарий при запуске. Были изменения и на аппаратном уровне. Мы добавили в обновлённый Макс и Хаб ионисторы, которые не дадут внутренним часам сбиться, даже если пропадёт электричество.

Некоторые другие вопросы нам ещё только предстоит решить: например, как в офлайне поступать с событиями, которые привязаны к точному времени заката или восхода (рассчитывать алгоритмически по координатам, кэшировать расписание или как-то ещё). В общем, мы продолжаем работать над совершенствованием локальных сценариев, поэтому можете присылать свои пожелания и наблюдения к нам в поддержку через приложение «Дом с Алисой» или делиться ими в нашем уютном сообществе в Telegram.

Локальные сценарии: итоги


Теперь сценарии хранятся и работают локально, если они стартуют по команде от Zigbee-устройства. При этом внутри сценария могут быть и другие действия, требующие интернета. Колонка будет отрабатывать и их (если, конечно, не пропадёт сеть). А даже если и пропадёт, то у вас есть возможность выбрать: прерывать выполнение сценария при первой же проблеме или игнорировать их и продолжать.

Локальные сценарии работают на обновлённой Станции Макс и раскатываются на Станции 2. А для тех пользователей, у кого дома стоят другие наши Станции (без поддержки Zigbee), мы выпустили Яндекс Хаб. Кстати, Хаб умеет локально управлять устройствами ещё и с помощью встроенного ИК-передатчика.

И ещё кое-что важное. Все эти устройства уже готовы на аппаратном уровне поддержать перспективный протокол Matter. В этом году мы выпустим апдейт прошивки с поддержкой этого протокола.

Внедрив локальные сценарии, мы добились двух вещей:

  • быстродействия, потому что мы сократили время на передачу сигнала от одного устройства другому;
  • автономности, потому что умные устройства продолжат работать, даже если интернет пропадёт.

Локальные сценарии — это первый шаг в сторону полностью локального умного дома. Но это уже совсем другая история.
Источник: https://habr.com/ru/companies/yandex/articles/729554/


Интересные статьи

Интересные статьи

Пробуем поставить Opensource облачное хранилище NextCloud для повседневного пользования на домашний компьютер с ОС Windows. Подробный гайд.В этой статье:Анализ целесообразности развертывания облака до...
Часто слышу мнение, что для работы программистом, человеку нужно со школьной скамьи изучить все языки программирования, иметь аналитическое мышление и высшие баллы по математике.. Отсутствие любого пу...
Здравствуйте, друзья.Давайте продолжим разговор о системе оповещения Snom PA1. В этот раз поговорим в первую очередь о сценариях использования устройства и схемах в котор...
TL;DR: Я решил создать автоматизированную email-рассылку, предназначенную для наблюдения за фондовой биржей, дающую сведения об индексах S&P 500, Nasdaq и Dow Jones во время премаркет-сессии ...
Современный Angular — это мощный фреймворк с множеством возможностей, вместе с которыми приходят и сложные, на первый взгляд, концепции и механизмы. Особенно это заметно тем, кто только начал раб...