Сегодня я хотел бы обсудить тему сервера Умного дома, на которую я попытаюсь распространить физический принцип суперпозиции.
Думаю, нет смысла глубоко вникать здесь, что такое принцип суперпозиции. Все мы можем найти информацию о ней в сети. Единственное, что я скажу здесь о ней простыми словами, чтобы напомнить и сэкономить Вам время. Принцип суперпозиции, это идея о том, что некий результирующий эффект, который достигается на выходе, есть сложная сумма других разносторонних, порой противоположных эффектов. Ключевые слова здесь «сложная сумма». Я употребил слово «сложная», чтобы подчеркнуть, что это не всегда простое сложение. Например, принцип суперпозиции в квантовой физике вызывает особый эффект воспринимаемый нами как диалектический парадокс жизни и смерти кота Шрёдингера.
Так где же в Умном доме есть место для принципа суперпозиции? По моему мнению, есть одно противоречивое место в домашней автоматизации, которое до сих пор не получило ясного ответа. Звучит оно достаточно просто:
Где должен находиться сервер Умного дома, в облаке или в локальной сети?
Сервер Вашего Умного дома, это самый сложный и важный элемент. С одной стороны, сервер в локальной сети выглядит разумным решением потому, что даёт пользователю некую независимость от провайдеров услуг. С другой стороны, очевидно, что этот сервер всё равно должен иметь доступ к Интернету для удаленного управления и уведомлений. Кроме этого, может случиться так, что отдельные проекты могут быть распределенными по разным серверам, но при этом быть взаимосвязанными между собой. Следовательно, возникает вопрос: если так или иначе всё завязано на Интернет, разве не разумно будет иметь сервер в облаке?
Понятие автоматизации тесно связано с понятием автономности. Естественное и справедливое желание владельца Умного дома стремиться предусмотреть тот случай, когда облачный сервер окажется вне доступа к умным устройствам жилища. Хотя, на практике все мы понимаем, что без Интернета никуда, нас так или иначе разъедает изнутри мысль: А вот если отключат?
Одним словом, мы можем бесконечно долго ходить по кругу, приводя контраргументы того или иного варианта. В конечном счете, когда все аргументы иссякнут, каждая сторона закончит отстаивание своего виденья вопроса фразой: «Исходя из приведенных аргументов, я верю в то, что вариант … является единственно верным». После этого, можно формировать приспешников своей религии и устраивать священные войны.
В моём понимании, это типичный пример диалектического вопроса, вопроса который состоит из двух противоположностей. Эти противоположности несут в себе открытое противоречие, которое можно разрешить, но только перейдя на другой качественный уровень.
Я не буду утомлять Вас дальнейшей философией и перейду к практическому разрешению этого вопроса, которое я решил оформить в виде проекта SmartESP (SmartESP.net). Суть идеи проекта состоит в том, что сервер Умного дома находится в суперпозиции. Другими словами, программный комплекс может работать как облачный, так и локальный.
Пожалуй главный момент, это именно архитектура SmartESP. Думаю, легко спутать и решить, что локальный сервер с доступом извне, это по сути уже часть облака. Нет. Облачный сервер в моём понимании, это по-настоящему независимое от превратностей локальных провайдеров решение, которое может размещаться в стабильных дата-центрах.
В чём же принцип суперсервера SmartESP? Думаю, нам надо отказаться от технологии веб-сокетов, связывающей контроллеры с сервером. Это, удобно, просто для пользователя, но заводит нас в тупик. Сервер же SmartESP предпочитает работать с контроллерами просто и по временнóму плану, требуя для этого прямого подчинения.
Почему веб-сокеты это плохо? Это плохо потому, что устанавливаемый сокет требует обмена сигналами keepalive. Что это значит? Это значит, что контроллер, находящийся в большинстве случаев за NAT и выступающий инициатором соединения волен требовать ответа сервера, когда ему вздумается. Становится очевидно, что при масштабировании такой системы связи, возникнет ситуация, когда количество сигналов keepalive будет, то густо, то пусто. Получается крайне неэффективный вариант, когда мы должны проектировать систему на худшее стечение обстоятельств, но которые по факту могут быть крайне редки.
Что тогда? Тогда необходим шлюз. Шлюз будет устанавливать единственный канал, может даже тот же веб-сокет, через который будет отправлять суммарные данные контроллеров. Например, есть шлюзы широко известных компаний, которые предоставляют своё закрытое облако, плюс, попутно отказались от стандартного WiFi в пользу BLE. Однако, этот шлюз без облака техногиганта превращается в «кирпич».
И вот здесь собственно и берет начало, та идея проекта SmartESP организовать взаимодействие с контроллерами напрямую, используя для этого тоже шлюз, но шлюз открытого варианта, коим легко может стать домашний маршрутизатор поддерживающий функцию VPN-клиента.
Да, именно маршрутизатор (роутер) с VPN-соединеним к серверу, где установлен сервис SmartESP, делает прозрачной связь сервера с контроллерами. Именно таким образом, сервер SmartESP осуществляет прямой контроль над всеми контроллерами Умного дома. И самое главное, что теперь не так важно где будет находиться сервер в облаке или в локальной сети. Так или иначе он является инициатором соединения с контроллером, зная его адрес, а является ли данный контроллер «близко» или «далеко», это лишь вопрос маршрута.
Так, а где по итогу лучше разместить сервер? А там, где захотите в этот момент времени. Вполне разумно использовать заранее подготовленный нами сервер в облаке, потому что так проще. Но также вполне разумно будет и установить его на свой компьютер в локальной сети. В особенности, если скажем у Вас уже есть свой сервер, выполняющий другие функции. Благо, используя Docker-контейнер, сделать это легко, не беспокоясь о совместимости.
Всё что Вам нужно для переключения между своими серверами локальным и облачным, это просто перекинуть настройки проектов через конфигурационный файл. Хотя, конечно, возможно вскоре появится еще более простой способ это сделать, как говорится, нажатием одной кнопки.
Подводя итог, я хотел бы сказать, что высказанные мною мысли и реализованный концепт-проект SmartESP, это предположение и попытка использовать опыт физико-философских концепций для решения практических текущих задач домашней автоматизации. Следовательно, это решение широко обсуждаемо. Буду признателен за конструктивную критику. Плюс, для всех тех, кто захочет опробовать расширенные возможности сервера SmartESP, просьба обратиться в личку для предоставления промо-купонов. Текущей мощности сервера вряд ли хватит для всех желающих, поэтому готовы поработать с наиболее заинтересовавшимися.