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

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

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

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. В этом году мы выпустим апдейт прошивки с поддержкой этого протокола.

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

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

Локальные сценарии — это первый шаг в сторону полностью локального умного дома. Но это уже совсем другая история.

Комментарии (34)


  1. VasilievVictor
    18.04.2023 08:38
    +4

    А можете сделать wake-on-lan, когда по команде колонке(или же Алисе на смартфоне), в локальной сети, станцией, будет запускаться пакет по заданному адресу? На удивление такая простая функция отсутствует(ну или не нашел) у всех популярных производителей и требует довольно сложной и не надежной реализации.


    1. TimurRyabinin
      18.04.2023 08:38
      +1

      Здравствуйте! Я из Яндекса. Записал ваше пожелание и передал команде разработчиков ????


      1. VasilievVictor
        18.04.2023 08:38
        +1

        Спасибо, это позволит включать компьютер удаленно(как дома голосом, так и находясь далеко от дома), а также, в большинстве своем, телевизоры ))


        1. OptimumOption
          18.04.2023 08:38
          +1

          Делается на основе HomeAssistant "как два пальца об асфальт". Вот с выключением сложнее, да, но тоже решаемо...


          1. VasilievVictor
            18.04.2023 08:38

            )), прям так просто, вначале его нужно установить, настроить, или на сервере, в докере, или на отдельном устройстве. Потом туда завернуть голосовые команды Алисы. А при необходимости удаленного включения, вывести Homeassistant в наружу(уже без Алисы) и т.п. - легче не придумаешь. А тут, со станцией, прописал голосовую команду и сценарий и все.


      1. boo4a
        18.04.2023 08:38

        В прошлом году такое предложение не вызвало интереса у команды разработки. Надеюсь, они передумают)
        Но куда более полезна была бы И-логика в сценариях. Вот это можете им передать?


  1. armorat
    18.04.2023 08:38
    +2

    Осталось реализовать следующую напрашивающуюся идею - автономная работа и самой колонки тоже :-)


    1. Pavel7
      18.04.2023 08:38
      +2

      Осталось реализовать следующую напрашивающуюся идею

      Так уже давно сделали за яндекс https://github.com/AlexxIT/YandexStation


      1. gorodskih
        18.04.2023 08:38

        Может я что-то делаю не так. Я настраивал прямое подключение. Но при отсутствии интернета Алиса всё равно говорит "интернета нету, идите нафиг".

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


        1. BattleTech
          18.04.2023 08:38

          Ну так про это даже в статье есть ) конечно распознавание текста только в облаке. Написали же, что внутренние сценарии возможны только ОТ кнопок


          1. gorodskih
            18.04.2023 08:38

            Ну так про это даже в статье есть

            TL;DR

            только ОТ кнопок

            Это ж только если есть хаб от яндекса? А я про home assistant


  1. Buchachalo
    18.04.2023 08:38
    +1

    А вот у меня проблемы со светом в доме летом. Алиса запускает насосы через умные розетки. Но если не было света в момент переключения состояния, то при подачи напряжения колонка не отработает сценарий. Было бы здорово что бы она проверяла, отработал ли скрипт на момент времени, а если нет то перевела стояние устройств на нужное.


  1. ZloiDevil
    18.04.2023 08:38
    +5

    Ну да, только homekit может работать без интернета во всем спектре сценариев. И замок открыть и гараж и цветы полить. Так что спасибо, останусь с homekit. Удивлен что до Яндекса только сейчас дошло, что так можно(нужно) было


    1. VasilievVictor
      18.04.2023 08:38
      +1

      напомните, а что требуется, чтобы HomeKit нормально работал? Раньше, насколько помню, минимально это постоянно включенный на зарядку IPad, сейчас писали, что только новый Apple TV. А иначе все сценарии работать будут, мягко говоря, не очень. У меня он тоже есть, и в него заведено много оборудования, в том числе и через home assistant, или у Вас все работает по другому?


      1. balanila
        18.04.2023 08:38

        Нужен Apple TV (4 gen or later) или HomePod


        1. cofein51
          18.04.2023 08:38

          А как оно переносит отключение света о котором писали выше?


  1. K0shi
    18.04.2023 08:38
    +1

    1) Предполагается ли открытый API для взаимодействия с локальными сценариями внутри локальной сети (по http или бинарными командами через заданные порты)? Например, для взаимодействия с home assistant, sls шлюзом и другими серверами умного дома без интернета. Существующие решения работают только через сервера яндекса. Такое решение также позволит интегрировать wifi устройства собственной разработки в сеть умного дома.

    2) Есть ли в планах отрыть API zigbee для создания собственных устройств автоматизации?


  1. shadrap
    18.04.2023 08:38
    +4

    Я вот искренне удивлён,что такая мощная компания до сих пор занимается в плане домашней автоматизации "натягиванием совы на глобус". Мне кажется, покрайней мере, по аналогии с автопилотом или роботом доставщиком, можно было бы по амбициознее задачи ставить? Сделайте камеру с идентификацией объектов, сделайте микроволновый сенсор периметра, присутствия, сделайте эту бестолковую Алису хотя бы локальной?

    Что за успехи вы тут описываете? Локальные сценарии, в моей доморощенной системке, они уже лет 6-7 как живут, а вам нужно уже о сценариях обрабатываемых встроенным в чип ИИ рассказывать!


    1. evnuh
      18.04.2023 08:38
      +1

      Сначала нужно чтобы кто-то другой за бугром это сделал, а Яндекс уже скопирует по-своему!


    1. vviz
      18.04.2023 08:38
      +2

      Они правильно делают. Все вендоры тащат логику к себе, это очень удобно в конечном итоге всем (за исключением гиков) — вычислительная мощность локально требуется ничтожной, все проблемы решаются обученным персоналом централизованно. Да, минус есть громадный — нужен стабильный канал доступа в инет. Но в развитых странах на данный момент это не проблема — поэтому такой вариант работы "умного дома" себя вполне оправдывает. Для части нашей строны это важно — поэтому движение в сторону локального выполнения логики это хорошо, ИМХО. И как думается, мнение гика здесь не актуально — гик сделает сам как ему нужно. А вот обывательский рынок важен — большая кнопка "Сделать хорошо" должна работать всегда.


      1. shadrap
        18.04.2023 08:38

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

        Вспомнить то же Амазон - Даш баттон это было 1000 лет назад , но это была интеграция. У яндекса 500 тысяч сервисов , а они тут рассказывают как лампочку сначала включить , а потом выключить...


      1. markoni
        18.04.2023 08:38
        +2

        Вендоры тащат логику к себе не из-за проблемы вычислительной мощности. Для отдельно взятого дома/квартиры - она и так ничтожна. А для того, чтобы на этом зарабатывать. В небольших поселках/деревнях (в т.ч. и в "развитых" странах), могу сказать по Литве, Польше, Германии, "стабильный канал интернет", он же и единственный - мобильный. И я не сказал бы, что он сильно стабильный. И невозможность включить свет, из-за того, что гроза и пропала связь - такое себе. Поэтому, как минимум, локальное управление должно присутствовать. Ну, а по-нормальному - механическое/локальное дублирование, где это возможно.


    1. Akr0n
      18.04.2023 08:38
      +2

      Вы серьезно полагаете, что софтовую часть Алисы можно полностью засунуть в корпус колонки? Да ещё и с пассивным охлаждением и блоком питания не на пару киловатт.


      1. shadrap
        18.04.2023 08:38
        -1

        Ну если LLma можно запустить на цпу и 16гб, то почему бы и нет? Пусть это будет не колонка пока,а потом можно и ориентированный проц запилить и Они обязательно появятся с таким бумом..

        Ещё раз повторю - вопрос не в реализации, вопрос в идеях.


        1. BarakAdama
          18.04.2023 08:38
          +3

          Как правило, основной вопрос именно в реализации — идей на ближайшие лет сто хватит. Например, Алиса это не только модель для генерации текстов, но и распознавание речи, и синтез речи. А ещё ведь нужны ресурсы на всё остальное: на достаточно сложную работу микрофонов с шумоподавлением, на декодинг 4К-видео, на работу с сетью и т. п. При этом на колонке, конечно же, нет 16 гигов оперативной памяти, а производительность процессора ограничена ценой, пассивным охлаждением и прочими факторами :) Но прогресс не стоит на месте. Всё будет. Рано или поздно.


      1. dorofej
        18.04.2023 08:38

        Я серьезно полагаю, что Apple как-то смогла заставить Siri работать локально в iOS 15, вышедшей 2 года назад.


  1. Muzzy0
    18.04.2023 08:38

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

    Скажите, вы, серьёзно, занимаетесь умным домом и, одновременно, считаете обычный выключатель "аналоговым" устройством?


    1. MaprapuH Автор
      18.04.2023 08:38
      +1

      Спасибо за замечание. В данном случае слово "аналоговый" используется как художественный антипод "умному" и "беспроводному" и, конечно же, речь не идет о работе с аналоговыми сигналами, вы правы.
      Надеюсь, ваш мудрый комментарий не позволит ввести в заблуждение неподготовленного читателя статьи =)


      1. Muzzy0
        18.04.2023 08:38
        +1

        В данном случае слово "аналоговый" используется как художественный антипод "умному" и "беспроводному"

        Скажите, а у вас статья художественная или техническая? ;)


  1. Reason89
    18.04.2023 08:38

    Решил приобрести камеру, которая работала бы с Алисой и по фразе: "Покажи мне парковку" выводила бы изображение на телевизор. Данную опцию анонсировали ещё осенью.

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

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


  1. tm2
    18.04.2023 08:38

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

    1. Сценарий в котором принимает участие не 1 , а несколько датчиков. Сейчас не умеете

    2. Оповещение о событии на мобильный телефон пользователя (пуш или звонок)


  1. rusmarthome
    18.04.2023 08:38
    -1

    Теперь понятно почему Яндекс стал встраивать в свои колонки zigbee. Вместо того чтобы получше разобраться с matter они зачем-то пошли на поле zigbee хабов. Matter работает поверх IP (zigbee его как правило не использует, но есть использующий аналог - Thread). Чтобы отдать команду с яндекс станции на устройство zigbee - например aqara нужно будет локально по протоколу matter через ip дать команду на шлюз aqara с matter - например m2. Ну а яндекс решил срезать и сразу подключить устройства по zigbee. При этом matter остается в стороне - но появятся проблемы с zigbee хабом. Самое интересное что нужно бы развивать локально работающего ассистента (для команд умного дома) и поддержку matter - как идут все лидеры. Но путь Яндекса пошел в универсальный zigbee хаб. Причем мне кажется что sprut хаб они догнать вряд ли смогут. Похоже путь яндекса это путь не совсем туда...


    1. cofein51
      18.04.2023 08:38

      Всё так плохо и лучше купить обычную станцию и к ней хаб? Или как ?

      Не совсем понятно простым людям которые хотят колонку без всяких доп устройств в виде хабов и рассчитывали её взять


  1. armspecial
    18.04.2023 08:38

    я, если честно, не понял, можно ли к вашему хабу и к колонке подключить устройства Tuya.