Будучи адептом идеи "вкалывают роботы, а не человек", в попытках автоматизировать свой дом, с целью больше никогда не вставать с дивана понял, что облачные решения вроде Алисы и Гугла слишком медленны, ненадежны и дороги для студента. Так еще и какая-то злобная компания будет слышать все что происходит в моем доме! На постоянной основе! В общем, было решено делать своего голосового помощника, да чтобы не просто выполнял команды, а еще и поговорить с тобой мог. Еще несколько видео с демонстрацией работы в конце поста.
Для начала пара слов о том, что имеется в безумном доме:
cервер Intel NUC 5I3RYK - 2 шт.;
USB ZigBee координатор - 1 шт.;
умная беспроводная кнопка– 2 шт.;
электромеханический замок 12в – 1 шт.;
умные лампочки – 1 шт.;
умное реле – 1 шт.;
датчик температуры и влажности – 1 шт.;
камера видеонаблюдения – 2 шт.
Установлено все следующим образом, пока оборудована только любезно выделенное мне родственниками пространство в 9 квадратных метров, но имеем что имеем:
Подключить все планируется по этой схеме. Задумка сделать архитектуру клиент-сервер связана с тем, что будет один сервер голосового помощника, который взаимодействует с УД, внешним миром, и клиенты с речевым модулем на нескольких устройствах в разных точках дома:
Реализация на данный момент выглядит так:
Все объединено в Home Assistant:
камеры китайское Г, поэтому постоянно отваливаются. на момент написания поста заменены на нормальные
С системой УД разобрались, теперь к самому помощнику. Задачи перед ним стоят следующие:
выполнение сценариев УД, прописанных в хоум ассистант либо внутри самого помощника
управление устройствами УД по отдельности по именам
имитация диалога с пользователем, если в сказанной человеком фразе нет команды
поиск информации в Интернете
В качестве языка выбрал питон. ибо просто.
Для реализации распознавания голоса была использована библиотека Vosk с маленькой готовой речевой моделью для русского языка. Большая не запускалась. Ни на процессоре, ни на видеокарте, висит и все. Ну да и бог с ней.
Чтобы помощник мог разговаривать с пользователем, ему нужно знать, что ответить. Скачал несколько готовых баз для чат-ботов, объединил, адаптировал. Получилась система вопрос-ответ. Тупенькая, но для начала пойдет. Объем 78.000 пар вопрос-ответ. С этим помощник сможет хотя бы более-менее осмысленно отвечать на вопросы, и это полностью локально. А беседы я с ним водить и не собирался.
Логика работы, согласно поставленным задачам заключается в следующем:
Помощник распознает начало фразы, в качестве триггера - резкое повышение громкости звука относительно фона. За конец фразы принято возвращение громкости в норму, равное окружающему шуму.
При помощи языковой модели распознаются слова, и превращаются в массив данных, разделенных по слову
Распознанные слова сравниваются с массивом имен, чтобы однозначно определить, была ли адресована сказанная фраза помощнику. При этом не имеет значения, сказано имя в начале, в конце или в середине. (Робот, включи лампу. Включи лампу Бот.) Можно использовать несколько имен.
Распознаем, содержится ли в сказанной фразе какая-либо команда для бота. В коде команды представляют собой набор слов, которыми с наибольшей вероятностью пользователь задаст команду. Опытным путем выяснил, что при совпадении 2-х и более слов команды ее можно смело выполнять. (На этом этапе не помешало бы сделать управление каждым устройством по отдельности, то есть получение с сервера умного дома названий устройств и т.д.), но пока я до этого не дошел. Задал через "обычные" команды два сценария для управления замком двери - да и все пока. Распознал команду - отправил ее на серверную часть помощника. Серверная часть помощника провзаимодействовала с сервером Умного Дома, отправила ответ о выполнении/не выполнении команды обратно в клиент, клиент произнес ответ для пользователя.
В клиенте (первый элемент массива - название команды, последующие - содержание):
['погода на улице', 'погода','погодой','улице','за','окном','сегодня'],
close_door_and_turn_on_lock() - функция которая общается с сервером умного дома и что-то делает
Отдельно реализована функция поиска в Википедии, триггерящаяся на слова "что такое" или "кто такой", выполняет поиск в энциклопедии и зачитывает первые два предложения. Этого достаточно для отражения сути.
Говоря в общем о взаимодействии сервера и клиента, в данный момент я использую веб-сокеты для передачи информации между ними. Позднее планирую перейти на restAPI, чтобы сервер и клиент равноправно триггерили друг друга на выполнение каких-то действий. То есть чтобы например сервер, анализируя погодные условия, мог послать в клиент фразу для произношения "через два часа начнется дождь".
5. Если не нашли ни команды, ни триггера для поиска в википедии, включаем сценарий имитации диалога. Он работает по методу сопоставления гештальт-паттернов, придуманным в 1983 году Джоном У. Рэтклиффом и Джоном А. Обершелпом и опубликован в журнале доктора Добба в июле 1988 года. Простым языком, мы, имя базу вопрос-ответ, сравниваем сказанную пользователем фразу с каждым вопросом в этой базе, на выходе получая массив коэффициентов подобия (на сколько заданный вопрос соответствует конкретному имеющемуся) от 0 (нет ни одной совпадающей буквы) до 1 (полное совпадение), после чего ответ, где коэффициент подобия оказался наибольшим, выводим в речевой движок и пользователь слышит ответ.
Вот и вся суть. Ниже прикрепляю несколько видео с демонстрацией работы помощника. Планы на будущее этого проекта:
написать код для управления каждым умным устройством по отдельности, по именам получаемым с сервера Умного дома
заменить метод гештальт-паттернов на какой-никакой обучающийся ИИ
расширить парк умных устройств, написать новые сценарии взаимодействия с ними
В мире умных домов часто приходится выбирать между удобством и функционалом. Раздумывая над тем, каким может быть идеальный умный дом, мы пришли к идее MajorDom — системе, которая стремится изменить этот баланс и упростить быт без жертв. В этом посте поделимся нашим видением и некоторыми основными принципами новой экосистемы, включая приватность, автономность и широкую поддержку устройств.
automate smart — not hard (MajorDom)
В этой статье мы не будем вдаваться во все подробности технических деталей, реализаций и протоколов, а сосредоточимся на более общем, абстрактном, пользовательском описании системы, иначе статья выйдет слишком длинной, но мы обязательно вернемся ко всем деталям позже
Домашние гаджеты
Сегодня существует много разных гаджетов для дома: светильники, шторы, обогреватели, пылесосы, датчика безопасности и микроклимата. Они созданы для того, чтобы облегчить жизнь, но не всё так однозначно.
Раньше каждое устройство имело свой протокол управления, свои стандарты, свои методы безопасности и каждому из них нужно было отдельное приложение или пульт. Чем больше устройств в доме, тем больше времени нужно посвятить управлению ими, что превращается в новую рутину. Это похоже на жонглирование слишком большим количеством мячей.
Приложения для домашних гаджетов
Существующие решения
Системы "умного" дома (или домашней автоматизации) должны были решить эту проблему, но до идеала им еще далеко. Есть два типа таких систем: проприетарные от цифровых корпораций и народные с открытым кодом. К сожалению, и у тех, и у тех есть минусы. Предлагаю составить график, в котором по оси x будет легкость использования сложной к простой, а по оси y - умность и функциональность системы.
График: легкость использования к умности системы
Окажется, что все проприетарные системы находятся где-то в центре-внизу. Они дают некоторый функционал, с которым может справиться обычный человек, потратив какое-то время на изучение. Чаще всего эти системы являются закрытыми и поддерживают только свой ограниченный список устройств в своем специальном приложении. Их функциональность сводится к замене физического выключателя кнопкой в телефоне или простыми голосовыми командами. Иногда встречаются элементарные автоматизации, точнее скрипты, которые нужно писать вручную.
В то же время они слишком зависят от облачных решений. Сбой сервера, изменения в политике, новые регуляции или простое отсутствие интернета означают отключение умного дома.
Но, что хуже всего, самые популярные системы принадлежат рекламным или маркетплейсным гигантам, зарабатывающим на продаже персональных данных пользователей. Это основа их бизнес-модели, из-за чего они не могут измениться, поэтому о доверии и приватности здесь не может быть и речи.
Осьминог монополии (отсылка к "standard oil octopus")
Тем, кто хочет больше возможностей или не хочет слежки, приходится переходить на открытые решения и платить за это сложностью настройки и установки. Это область выше и левее центра, но часто это того стоит. Открытые системы предлагают больше свободы, возможности интеграции с любыми устройствами и протоколами благодаря плагинам, неограниченные кастомизации и полный контроль. Единственное, это задачка для технарей, желающих проводить вечера за изучением форумов и разработкой. Точно так же некоторым нравится проводить часы в гараже перебирая все детали машины. Я не говорю, что это плохо, ведь у каждого есть свои хобби, но большинство людей хочет автомобиль, чтобы просто на нем ездить. Конечно, вы можете нанять профессионала, который займется всеми устройствами и безопасностью, потратив на это целое состояние. Но что, если вы не хотите ни нанимать профессионала, ни становиться им самостоятельно?
Мы хотим сделать систему, которая займет правый верхний угол: будет работать прямо из коробки, поддерживать широкий спектр устройств, надежно хранить данные пользователей, при этом будет умнее и функциональнее остальных.
График: легкость использования к умности системы (мажордом)
Экосистема умного дома
Поговорим о том, как устроены экосистемы умного дома и чем они отличаются от систем домашней автоматизации. Все начинается с устройств, напрямую управляющих домом: лампы, реле, модули с мотором. Это первый "физический" уровень. Вторым уровнем пусть будет интерфейс "application layer". Свяжем их через wifi или bluetooth.
Экосистема умного дома: приложение и устройство
Но представим, что у нас несколько устройств, у каждого по своему приложению. Выглядит не очень удобно, да?
Экосистема умного дома: несколько приложений и устройств
Теперь переведем устройства на более энергоэффективные радиопротоколы. Но как подключить их к смартфону? Добавим посредника в виде хаба, у которого с одной стороны радиомодуль, а с другой - тот же wifi. В качестве бонуса подключим к хабу все устройства того же производителя. Теперь в приложении может быть несколько устройств, но только одного бренда. Так выглядят закрытые "экосистемы". Каждая использует свои протоколы и стандарты, так что они не совместимы между собой.
Закрытые экосистемы умного дома с хабом
Но, что хуже, далеко не все приложения умеют общаться с хабом напрямую в пределах локальной сети (LAN) и используют сервер даже когда вы находитесь дома. Это тот случай, когда отключение интернета означает полный блэкаут, а наличие интернета - возможность удаленного управления домом из облака (доверяете ли вы облаку компании, зарабатывающей на продаже ваших персональных данных, но не заботящейся об их сохранности?).
Закрытые экосистемы умного дома с хабом и облаком
Чтобы это исправить, заменим проприетарный хаб на raspberry pi с какой-нибудь open source системой домашней автоматизации, а также добавим плагины для интеграции устройств. Это позволяет объединить все устройства в одну систему, например, чтобы программировать общие автоматизации или продвинутые сценарии. Уже лучше, но пропала одна мелочь под названием интерфейс.
Универсальный open source хаб умного дома
К счастью, некоторые open source решения идут комплектом с вебным фронтендом или даже мобильным приложением (но не всегда с user-friendly интерфейсом). Добавив еще пару плагинов, мы можем пробросить часть устройств (или все, если очень повезет) в приложение какой-то из экосистем. В таком случае хаб выступает посредником или адаптером для устройств сторонних производителей. Но теперь мы зависимы от этой экосистемы и получаем те проблемы, о которых шла речь в начале статьи. В качестве альтернативы, мы можем подключить другой плагин с кастомным облаком, но это уже становится или слишком сложно, или все еще недостаточно безопасно.
Универсальный open source хаб умного дома c инфраструктурой экосистем
Хочу заметить, что не всегда проприетарный хаб можно полностью заменить на кастомный. Часто вам понадобится иметь оба хаба (проприетарный и кастомный), чтобы система поддерживала оригинальные приложения и устройства. В итоге это может превратиться в запутанный клубок технологий.
Универсальный open source хаб умного дома c инфраструктурой экосистем (сложности)
Кстати, этот пример мне кое-что напоминает:
Нестабильная цифровая инфраструктура
Итак, у нас есть 4 уровня: устройства, хаб (автоматизации, программное управление), сервера, интерфейс (приложения, голосовые ассистенты, итд). Экосистема — это все 4 уровня и их связь, а не какой-то один. Чтобы все работало идеально, мы делаем не просто один из уровней, например, систему автоматизации на уровне хаба. Мы делаем все три верхних уровня: приложение, голосовой ассистент, облако и хаб с максимальной поддержкой устройств других производителей, таким образом получая максимальную совместимость и интеграцию всей системы из коробки: автономную, приватную, независимую и безопасную. Это - МажорДом.
Архитектура экосистемы умного дома MajorDom
Чем наша система будет умнее: наша философия
В фундаменте своей работы мы закладываем следующие принципы:
Полная приватность личных данных — дом не место для чужих глаз. Конфиденциальность — базовое право каждого пользователя.
Автономность — максимальная независимость от внешнего мира, отключенный интернет не должен стать проблемой
Легкость настройки и использования — технологии должны служить человеку, а не наоборот
Максимальная поддержка разных устройств, протоколов и интеграций - в дополнение к предыдущему пункту
Никаких искусственных ограничений — не быть эпл и дать возможность глубокой настройки и кастомизации тем, кому это нужно
Итак, мы собираемся заново изобрести умный дом. По нашему мнению, настоящий умный дом состоит из невидимой армии устройств, которые работают автономно в фоновом режиме, улучшая вашу повседневную жизнь и прикрывая вашу спину. По сути это цифровой дворецкий.
Настоящий умный дом должен быть независимым от внешнего мира. Никаких сбоев из-за отказа интернета или случайного сервера. Это полностью автономная экосистема, которой больше ничего не требуется: ни интернета, ни облачных сервисов, ни даже человека.
В то же время система должна быть простой в использовании. Никаких долгих установок и настроек. Отсутствие периодического изменения настроек. Никакого написания кода. Просто достать из коробки и включить. Технологии должны работать на вас, помните?
Описание MajorDom
Но как нам это сделать? Прежде всего, системе нужно имя. Мы выбрали для неё название MajorDom, которое отлично отражает её сущность. (от англ. majordomo — мажордом, дворецкий, управляющий домом)
Приватность
Пока остальные системы представляют собой черные ящики, мы считаем, что MajorDom должен иметь открытый исходный код, чтобы не было никаких скрытых манипуляций, любой человек мог открыть его, прочитать, выделить проблемы, предложить изменения или даже внести свой вклад.
Хотя исходный код общедоступен, данные пользователя защищены как никогда раньше. Чтобы сделать систему приватной и автономной, большая часть данных хранится локально на устройствах, в основном хабе. Это гарантирует конфиденциальность, а поскольку все данные хранятся локально, автоматизация и все остальные функции прекрасно работают даже при отсутствии интернета в отличие от систем, которые всегда полагаются на подключение к серверу, поскольку все данные хранятся где-то в интернете.
Но в некоторых случаях данные необходимо передавать через интернет, например, с помощью удаленного управления, когда вы не дома. В этом случае данные надежно шифруются (end-to-end), а ключи хранятся только на физических устройствах пользователя. Это означает, что вы всегда можете получить удаленный доступ к своему дому, но только вы и никто другой, включая админов и разработчиков.
Поддерживаемые устройства
Конечно, прежде чем настраивать автоматизации, в доме нужны устройства. Zigbee Alliance, переименованный в Connectivity Standards Alliance или CSA, — это объединение различных компаний, занимающихся умным домом, которые решили создать универсальный протокол связи для всех устройств домашней автоматизации. Они назвали этот протокол Matter. И MajorDom с ним совместим. Это означает, что вы можете добавить любое совместимое с Matter устройство в свою систему MajorDom. И это еще не все.
matter протокол
Matter изначально поддерживает только самые распространенные базовые устройства, поэтому мы создали протокол связи Merlin. Благодаря более гибкой архитектуре он не только существенно расширяет список поддерживаемых устройств, но и делает его бесконечным.
Мерлин протокол
В то же время мы понимаем, что сегодня только малая часть уже выпущенных устройств поддерживает один из этих протоколов, поэтому мы также собираемся добавить интеграции устройств, использующих zigbee, z-wave, wifi и BLE, таким образом став самой универсальной экосистемой.
Умная комната с устройствами на разных протоколах в системе MajorDom
Интерфейс
Мобильное приложение MajorDom на фоне хаба
Мы наконец-то собрали в одном месте все устройства, но как с ними общаться? Для этого мы разработали красивое мобильное приложение, доступное практически на всех платформах, включая устройства Android — телефоны, планшеты и часы, а также устройства Apple — iPhone, iPad, Mac, Apple Watch, Apple TV, CarPlay и даже новый шлем Vision Pro. Приложения так же включают виджеты, которые можно разместить на домашнем экране, экране блокировки или в любом другом месте, поддерживаемом операционной системой, что позволит управлять домом даже не запуская приложение.
По-настоящему умный дом большую часть времени должен работать автономно, в фоновом режиме, чтобы вы этого даже не замечали. Но как мы собираемся это автоматизировать, если никто не хочет писать скрипты?
Вместо этого:
Скрипты для автоматизаций умного дома
Для автоматизации мы добавили в приложение вторую вкладку, которая поможет легко настроить любой сценарий. Но это было слишком просто и мы пошли дальше.
Приложение MajorDom: вкладка автоматизаций
Чтобы еще больше упростить этот процесс, мы изобрели технологию умных предложений, которая предсказывает, что вы хотите автоматизировать. Иногда она настолько умна, что даже не требует помощи пользователя. Например, вы можете просто добавить все устройства и начать использовать их, не добавляя никакой автоматизации или сценария. Через некоторое время эта технология предложит сцены и автоматизацию на основе ваших привычек. Вы даже можете разрешить ей добавлять сцены и автоматизации без подтверждения, полностью в фоновом режиме. Настоящие умные автоматизации.
Арчи — умный голосовой ассистент
Автоматизация — это хорошо для ежедневной рутины, но иногда требуется более индивидуальный подход. Арчи в этом профессионал. В отличие от других "ассистентов", он понимает вас с высокой точностью, знает контекст, улавливает по несколько сложных запросов за сообщение и общается так, будто вы разговариваете с настоящим помощником, а не просто диктуете голосовые команды!
Умная колонка MajoDom Audio с голосовым ассистентом Арчи.
Перевод: — Арчи, проверь мое расписание — У вас встреча с командой разработки в 3 часа и планы на ужин в 7. Также, не забудьте, что сегодня день рождения у вашей мамы. У вас есть достаточно времени на звонок между 4 и 6 часами вечера
Арчи предназначен не только для контроля дома, но и для каждого аспекта повседневной жизни, от управления заметками до предоставления общей информации и голосовых уведомлений.
Как настоящий профессиональный мажордом, Арчи говорит на многих языках. Он может одновременно слушать до трех заранее выбранных языков и отвечать на соответствующем.
Арчи унаследовал все основные ценности MajorDom: конфиденциальность, автономность, простота в использовании и настоящая умность. Он может работать офлайн, но интернет расширяет его возможности до неограниченного диапазона, а благодаря использованию крупных языковых моделей, навыки этого ассистента ближе к настоящему искусственному интеллекту, чем когда-либо прежде в истории человечества.
Демонстрация голосового ассистента Арчи в мобильном приложении MajorDom на фоне умной колонки MajorDom Audio и хаба MajorDom Hub.
Работа из коробки: делаем свои устройства
"Люди, серьезные на счет софта, должны делать своё железо" — эта цитата особенно актуальна для умного дома. Это единственный способ обеспечить беспроблемную интеграцию множества протоколов из коробки. То же самое касается ассистента: не каждая платформа потянет офлайн распознавание, обработку и синтез речи. К тому же, полностью доверять ему можно только тогда, когда знаешь, что на устройстве нет постороннего ПО с доступом к микрофону. Вот почему мы разрабатываем два собственных устройства: хаб MajorDom Hub для управления устройствами, автоматизацией и порталом в экосистему — это как руки дома. И колонка MajorDom Audio для голосового ассистента — уши и голос дома.
Умная колонка MajorDom Audio и хаб MajorDom Hub
И еще кое-что… для активных пользователей
Мы хотим максимально упростить интеграцию идей пользователей — будь то аппаратное или программное обеспечение. С этой целью мы спроектировали два основных инструмента, позволяющих каждому внести свой вклад.
«Idea Forge» (Кузница идей)
Во-первых, при разработке MajorDom мы создали «Idea Forge» (Кузницу идей). Эта платформа превращает предложения пользователей в реальные фичи. Любой желающий может предоставить идеи через форму на сайте. Необязательно быть программистом; достаточно одной светлой мысли. Эти предложения затем появляются на доске голосования сообщества, что позволяет каждому влиять на процесс разработки. Демократия в действии. Самые популярные идеи рассматриваются к реализации командой MajorDom. Речь идет не только о пользователях; речь идет о превращении пользователей в создателей.
Но это не просто игра в ожидание. Если вы любите приключения или просто не можете дождаться, вы можете засучить рукава и написать любую фичу самостоятельно.
Во-вторых, мы максимально упрощаем работу для всех разработчиков. Разрабатываем модульную прошивку хаба с поддержкой плагинов и удобные библиотеки с подробной документацией.
Заключение
На данный момент проект находится в стадии активной разработки, но большая часть упомянутого уже реализована, включая ядро системы, интеграции некоторых протоколов, удаленное управление, автоматизации, офлайн часть Арчи и мобильное приложение. Дальнейшие новости будем публиковать здесь, но так же рекомендую подписаться на соответствующие страницы проекта в социальных сетях. Записаться на ранний доступ можно на сайте majordom.io в один клик.
Присоединиться к проекту
Проект является довольно сложным и масштабным, а качественный результат требует много часов работы профессиональных инженеров, программистов и дизайнеров. В современном капиталистическом мире только коммерческая разработка может гарантировать стабильный результат.
Предзаказы, Кикстартер, Донаты
В будущем проект будет опубликован на кикстартер — платформу краудфандинга, на которой можно будет оформить самые ранние предзаказы устройств, но поддержать проект финансово можно уже сейчас на patreon или buymeacoffee.
Стать частью команды
В нашей команде уже есть дизайнеры, инженеры софта для фронта, бэка, мобильных приложений, хаба и голосового ассистента. В то же время мы ищем промышленных дизайнеров, embedded инженеров для железа, а так же программистов, разбирающихся в низкоуровневых деталях популярных протоколов в сфере умного дома. Если вы занимаетесь чем-то другим, но хотите присоединиться к проекту, пишите свои предложения, будем рады всем.
Инвесторам
Мы также рассматриваем получение инвестиций от $50k pre-seed раунда за долю компании. Говоря о цифрах, текущий рынок умного дома оценивается в 100 миллиардов долларов США, с прогнозируемым ростом до 600 миллиардов в 2033 году. Похоже на отличную возможность вложения.
Несколько лет назад я увлекся проектированием системы умного дома и создал для себя удобное пространство, в котором не нужно открывать дверь курьеру или включать настольную лампу для работы. Покажу, что подключил и как работает система. Сразу спойлер: умный дом не зависит от наличия интернета или облачных сервисов.
Привет, я - Иван Григорьев, управляющий партнер LARD. За период своей сознательной жизни я сменил множество увлечений. Так, я модифицировал прошивки двигателей для автомобилей, разрабатывал свои DIY-устройства, связанные с автомобилями. Они расширяли функциональность, позволяли интегрировать в автомобиль то, что не стояло там с завода. Всё это очень увлекало, я мог часами погружаться в тему и изучать до тех пор, пока глаза не покраснеют.
Сейчас у меня тоже есть увлечение — это умный дом. Расскажу, как строю у себя дома полноценную экосистему.
Начинал с готовых систем умного дома, но быстро разочаровался
Мое увлечение умным домом началось в 2019 году. Уже тогда на рынке было много различных бюджетных систем от Яндекса, Xiaomi, Tuya. Я протестировал многие: подключил несколько устройств, завел какие-то базовые автоматизации и быстро понял, что готовая экосистема — это развлечение на один раз. С такими системами огромные проблемы:
Ограниченный набор устройств. Чаще всего готовые системы умного дома являются закрытыми и поддерживают только устройства от конкретных производителей. Каждая из них имеет собственную экосистему умных устройств, и, за редким исключением, они несовместимы друг с другом. Пользователи вынуждены использовать сторонние хабы, чтобы объединять устройства разных производителей, это создает неудобства, ограничения возможностями хабов, нестабильность системы.
Ограниченная функциональность. Проблема вытекает из первого ограничения. Например, я пользуюсь экосистемой от Xiaomi и хочу, чтобы по команде включался режим кинопросмотра: закрывалась штора, менялся режим освещения и включался телевизор. Но телевизор не входит в систему Xiaomi, значит, его нельзя интегрировать в умный дом, и приходится включать вручную. Да, есть ИК-пульт, но всё же.
Зависимость от интернет-соединения. Еще один немаловажный момент: такие системы управляются через облачные сервисы, их работа напрямую зависит от наличия и качества канала доступа в интернет. Если доступ нестабилен или пропадает, устройствами невозможно управлять. А еще это ограничивает возможности масштабирования — к бытовому Wi-Fi-роутеру с сохранением стабильной работоспособности можно одновременно подключить небольшое количество устройств.
В итоге получается, что перечень возможностей для объединения различных компонентов в рамках одной системы ограничен. Конечно, есть производители умного дома, которые предлагают более профессиональные решения. У них шире возможности, но проблемы остаются те же самые.
Не захотел мириться с ограничениями и перешел на Zigbee2MQTT и Home Assistant
Не люблю жить с ограничениями и стремлюсь создавать собственные системы, поэтому решил перейти на open source решение, которое работает по локальной сети, практически независимо от наличия интернета.
Отказался от Wi-Fi и выбрал протокол Zigbee. Это беспроводной протокол, структура которого строится на работе нескольких компонентов:
Координатор. Отвечает за инициализацию сети, передачу команд между устройствами и обработку данных. В сети Zigbee может быть только одно устройство-координатор, оно выполняет роль контролирующей станции.
Роутеры. Устройства, предназначенные для перенаправления данных между другими устройствами в сети. Они помогают расширять зону покрытия и повышать надежность соединения.
Устройства. Конечные девайсы, подключенные к сети Zigbee, которые принимают и передают данные, — те самые датчики, светильники, термостаты.
В сети Zigbee узлы могут сами менять маршруты соединений, переходя с роутера на роутер, с роутера на координатор и наоборот. Протокол независим от интернет-соединения, а интеграция Zigbee2MQTT поддерживает устройства более чем 400 вендоров и позволяет в рамках одного умного дома интегрировать огромное их количество — до 65 535 согласно спецификации Zigbee 3.0. У самих устройств высокая энергоэффективность, беспроводное питание и низкое энергопотребление.
Развернул свой сервер умного дома на базе мини-ПК Raspberry Pi 4 Model B 8Gb в корпусе Argon One M.2. Установил в него Zigbee-стик v.4 на CC2652. Благодаря интеграции Zigbee2MQTT я могу в любой момент интегрировать в систему практически любые устройства из более чем трёх тысяч девайсов различных вендоров, и для этого не требуется подключать сторонние хабы, объединять их с помощью костыльных решений.
В качестве программного обеспечения выбрал Home Assistant. Это система управления умным домом с открытым исходным кодом.
Перед тем как сделать выбор, я сравнивал OpenHAB, Domotix и Home Assistant. Одним из главных преимуществ Home Assistant является ее гибкость: система позволяет настраивать автоматические действия и сценарии, а также создавать собственные программные интерфейсы для управления устройствами. Кроме того, Home Assistant поддерживает интеграцию с другими системами управления умным домом — например, Apple HomeKit или Умный дом от Яндекса.
У других систем также есть подобные интеграции, но Home Assistant сейчас наиболее активно развивается. У него огромное комьюнити, участники которого помогают в развитии по всему миру.
Среди недостатков Home Assistant можно выделить то, что не все задачи можно решить при помощи графического интерфейса. Несмотря на то что за последний год команда разработки ПО сделала большой шаг в пользу создания инструментов для no-code-настройки, пока необходимы хотя бы минимальные знания для ручных настроек и написания кода — это может быть проблемой для начинающих.
Спроектировал собственный интерфейс управления
Код интерфейса управления я писал параллельно с установкой датчиков и первых умных устройств. В Home Assistant есть блочный no-code-конструктор, но он недостаточно гибкий, и мне гораздо интереснее выстраивать систему с чистого листа. Как только появляется новый блок управления или устройство, я добавляю соответствующий элемент на рабочий экран в интерфейсе.
Проектировать умный дом ничуть не сложнее, чем верстать любую панель управления ERP-системой: смысл тот же самый.
Сейчас на главный экран выведены дашборды для мониторинга температуры и влажности в нескольких комнатах, а также кнопки для быстрого управления устройствами
Для каждой зоны в квартире разработал отдельные экраны мониторинга и управления устройствами. На них вывел графики температуры и влажности, управление группами устройств в конкретных помещениях.
На экран гостиной выведены кнопки для управления очистителем воздуха и мультимедийной системой: приставкой, телевизором, умной колонкой
Данные на каждом экране разделены на три тематических блока: освещение, климат, мультимедиа.
В спальне тоже есть управление освещением, а еще мониторинг влажности и управление уборкой.
Виджеты с графиками показывают состояние помещений в реальном времени: климат, активные устройства.
На кухне у меня подключены управляемые розетки, поэтому я могу следить за их состоянием и отключать, если кто-то забыл выдернуть вилку.
В прихожей можно настроить режим домофона
Интерфейс управления системой доступен с любых устройств. На входе в квартиру я установил планшет, и теперь он выполняет роль главной панели управления. Можно, проходя мимо, включить любое устройство — например, по нажатию запустить пылесос перед уходом из дома или голосом попросить это сделать Алису или Google Assistant.
Автоматизировал управление освещением и отоплением
Освещение. Первое, с чего обычно начинают устройство умного дома, — это автоматизация освещения. Можно установить проходные или сценарные выключатели, датчики движения, умные лампочки, подсветку — и с помощью одной кнопки управлять целой группой освещения.
Самый распространенный сценарий — освещение в прихожей. Приходишь в квартиру, открываешь входную дверь, и срабатывает датчик движения. Включается свет. Когда уходишь, датчик перестает фиксировать движение, и через 2–3 минуты свет гаснет.
Сейчас у меня в гостиной несколько различных источников света. Есть основная люстра, контурная подсветка, торшер и освещение за телевизором, а еще настольная лампа на рабочем столе. На входе в комнату я установил выключатель с шестью клавишами и с его помощью могу управлять устройствами, которые физически не связаны с выключателем и друг с другом — для этого достаточно написать скрипт. Могу добавить в контур другое устройство: например, к Новому году подключил управление елочной гирляндой.
Для разных источников света можно настроить автоматизации — и лампы будут включаться по времени или по датчику
Отопление. У меня батареи с регулировкой температуры: на коллекторе есть поворотный механизм, с помощью которого можно регулировать нагрев. Вместо стандартного регулятора на каждую батарею я установил беспроводные термоголовки Moes BRT-100-TRV.
У умной термоголовки вместо поворотного механизма — сенсорное управление
Они работают от батареек, но, как я уже говорил, Zigbee-устройства очень энергоэффективные, поэтому термоголовки работают без замены аккумуляторов уже два года. Также установил датчики температуры, чтобы система считывала уровень тепла в помещении в целом, а не рядом с батареей.
Так же подключается отопление, которое управляется через щит управления отоплением, — в этом случае подбираются термоголовки намного проще и чаще всего с постоянным питанием и устанавливаются на главный коллектор.
Сейчас система снимает показания с датчика и позволяет управлять термоголовкой удаленно. Достаточно установить желаемую температуру, и при ее достижении термоголовка будет отключать нагрев. Если температура в помещении будет ниже установленной, термоголовки откроются, и батареи начнут греться. Также учитывается режим проветривания по датчику открытия окна.
Интерфейс управления температурой: можно ее прибавить, убавить или отключить отопление совсем
Добавил в систему управление различными устройствами и настроил автоматизации
Умные гаджеты — часть комфортного дома, а поскольку ограничения по брендам или количеству устройств на мою систему уже не распространяются, я интегрировал в умный дом:
увлажнитель воздуха;
очиститель воздуха;
робот-пылесос;
Яндекс Станцию;
приставку PlayStation 5;
телевизор;
умный карниз.
Под каждое устройство в интерфейсе Home Assistant разрабатывал отдельные экраны.
Экран управления роботом-пылесосом
Экран управления очистителем воздуха
Экран управления мультимедиа
Чтобы система работала без моего участия, настраивал автоматизации. Перечислю несколько сценариев:
Режимы освещения. Например, в ночном режиме по датчику движения загорается свет, а в дневном — нет. Настроил режим chill-out, и в гостиной по нажатию одной кнопки включается легкая подсветка для кинопросмотра.
Выключение всех устройств по нажатию выключателя в спальне. Очень удобно перед сном погасить везде свет.
Автоматическая регулировка температуры в помещении в соответствии с заданными значениями.
Настроил несколько нестандартных сценариев: управление настольной лампой через датчик в кресле и автоматизацию домофона
Конечно, у меня к системе умного дома подключены телевизоры, увлажнитель воздуха, голосовой помощник — это классика. Но кроме этого я настроил несколько нестандартных сценариев, удобных лично для меня:
Освещение рабочего места. В рабочее кресло у меня встроен датчик давления. Он сигнализирует системе умного дома, когда кто-то садится на кресло. Автоматически включается настольная лампа. Когда кресло освобождается, датчик перестает передавать сигнал, и лампа сама гаснет — не нужно тянуться к выключателю.
Умный домофон. Домофон тоже интегрирован с системой умного дома, у него есть несколько режимов: «Открыто», «Курьер» и «Закрыто». В режиме «Открыто» система автоматически открывает дверь звонящему, а когда «Закрыто» — сбрасывает звонок. Режим «Курьер» открывает дверь первому, кто звонит в домофон. Этот режим интегрирован со смартфоном — в систему умного дома поступают уведомления из определенных приложений. Например, Яндекс Еда присылает пуш о том, что курьер выехал, — система его считывает и активирует режим «Курьер», открывает ему дверь, а мне в телеграм-бота присылает уведомление о том, что курьер поднимается.
Другой пример автоматизации управления домофоном — по геопозиции. Умный дом считывает местоположение моего смартфона и, если я нахожусь в определенном радиусе от системы, на ближайшие 10 минут активирует режим «Открыто» по геопозиции, и мне не нужно доставать ключи — достаточно набрать номер квартиры, и дверь откроется. Такую настройку можно выполнить для нескольких устройств — например, членам семьи.
Подключил вентиляцию в ванной и теперь хочу интегрировать в умный дом управление водоснабжением
Обычно вытяжка в ванной завязана на включение основного света. Свет горит, вентилятор включен, вытяжка работает. Но как только ты принял душ и выключил свет, вентиляция отключается, а влажность в помещении остается, и достаточно большая.
У меня включением вентиляции управляет отдельное реле, интегрированное в умный дом. Установлены пороги, при какой влажности должна включиться вытяжка, а когда — закончить работу, и должна ли она включаться по движению внутри ванной комнаты.
Поменять настройки или перейти на ручное управление можно в интерфейсе Home Assistant
Вентиляция — история про удобство. Я решил пойти дальше и сделать еще одну полезную модернизацию — управление водоснабжением и умную систему защиты от протечек. Если в ванной установлены датчики, в момент протечки дома будет включаться колонка и сообщать: «Потоп!», а мне придет уведомление в Телеграме. А еще планирую установить на коллектор актуаторы, чтобы вовремя и удаленно отключить подачу воды.
Также в планах настроить энергомониторинг (можно снимать показания счетчиков и контролировать энергопотребление в каждом помещении или по группам) и приточную вентиляцию (проветривание + система оттока застоявшегося воздуха из квартиры).
Зачем это всё?
Встречал мнение, что существует полезная часть умного дома — установить датчики открывания окон, дверей, дыма, а есть развлекательная — подключить голосового помощника, чайник, похвастаться гостям. Я не разделяю это мнение и считаю, что по-настоящему умный дом, как и любой гаджет, должен помогать во всех аспектах жизни:
Безопасность. И за нее отвечают не только датчики открывания окон и дверей. Когда все устройства интегрированы в одну систему, можно удаленно, не находясь в квартире, управлять ими. Если уходишь или уезжаешь из дома, можно проверить, что все они отключены. А система управления водоснабжением сообщит о протечке, и можно будет перекрыть воду автоматически, до возвращения домой.
Различные режимы автоматизации. Очень неудобно запоминать, какая кнопка на выключателе за что отвечает. Неудобно вручную запускать различные устройства, подходя к каждому. Привычнее мыслить сценариями: посмотреть фильм, поработать, отдохнуть. Круто, когда по нажатию одной кнопки включается всё, что нужно. В умном доме можно настроить автоматизации, а еще сменяющиеся автоматически режимы — например, день или ночь. Днем свет при движении в прихожей включать не нужно. Если это ночь, там другая история и другие настройки.
Мониторинг. Можно создавать отдельные дашборды для любого устройства и в динамике отслеживать в помещениях уровень влажности, освещенности, тепла. Проверить, сколько работала PlayStation и играли ли дети в игры вместо уроков :)
В создании умного дома нет цели, только путь. Мне по кайфу это увлечение, да и мыслительный процесс должен сменяться физическим, как считаете? Давайте обсудим :)
Про рабочие проекты в различных отраслях бизнеса, которые мы реализуем с помощью цифровых решений, я рассказываю у себя в телеграм-канале.
Для всех поклонников футбола Hisense подготовил крутой конкурс в соцсетях. Попытайте удачу, чтобы получить классный мерч и технику от глобального партнера чемпионата.
А если не любите полагаться на случай и сразу отправляетесь за техникой Hisense, не прячьте далеко чек. Загрузите на сайт и получите подписку на Wink на 3 месяца в подарок.
Уважаемые пикабушники! Не рекламы ради, совета для. Подскажите. Есть возможность делать всякие электронные устройства, управляющие схемы, в общем, любую электронику: есть паяльники, компьютеры, источники тока, генераторы сигналов, осциллографы и прочее. Есть и коллеги, готовые участвовать. Вопрос: кому и в каком виде это все может быть актуально? Хотим дать рекламу и объявления, но похожего чего-то на том же авито не нахожу. Думаю ориентироваться либо на производство, где всегда актуальна автоматизация, либо на частных лиц, например, в системах создания умного дома. Накидайте каких-нибудь ещё идей и примеров, пожалуйста.
Привет, любители технологий! Сегодня я рад представить вам S.T.A.R.K. (Speech and Text Algorithmic Recognition Kit). Если вы когда-либо мечтали создать голосового ассистента, который будет современным, продвинутым и невероятно интуитивным, S.T.A.R.K. - лучшее решение.
Почему именно S.T.A.R.K.?
Автономность и конфиденциальность: S.T.A.R.K. работает полностью на устройстве, гарантируя сохранность ваших данных.
Распознавание контекста: С S.T.A.R.K. вы можете легко определять контекст и параметры для последующих запросов, а также одновременно выполнять несколько команд.
Асинхронные команды: Запустите задачу и продолжайте использовать ваш голосовой ассистент. S.T.A.R.K. уведомит вас о завершении.
Множественные ответы: Получайте обновления в реальном времени для текущих задач, будь то мониторинг процесса загрузки или отслеживание доставки.
Продвинутый синтаксический анализ: Специальная синтаксическая система упрощает извлечение любого параметра из строк.
Расширяемость с помощью ведущих языковых моделей: Улучшите когнитивные способности S.T.A.R.K., интегрируя его с ведущими языковыми моделями, такими как ChatGPT.
Поддержка нескольких языков: Взаимодействуйте со своим голосовым ассистентом на нескольких языках.
Полная настройка: Создавайте сложные команды, интегрируйте различные голосовые или текстовые интерфейсы и даже переопределяйте существующие классы.
Поддержка сообщества: Присоединяйтесь к репозиторию STARK-PLACE и пользуйтесь библиотекой расширений от сообщества.
Присоединяйтесь к нам
Для более подробного изучения каждой функции и понимания всех возможностей S.T.A.R.K. посетите официальную документацию и репозиторий на GitHub. Если вам понравился фреймворк, не забудьте добавить звезду ⭐ репозиторию.
В сфере быстро развивающихся технологий умных домов тесно переплетаются с нашей повседневной жизнью, предоставляя нам комфорт, удобство и эффективное управление бытовыми системами. Хочу поделиться рассказом о нашем опыте создания инновационной настенной сенсорной панели для умных домов.
В данной статье я расскажу о пути разработки панели для умных домов, о том, какие технические трудности преодолевала наша команда, совершенствовала функциональность и обеспечивала стабильную работу панели. Путь начался с маленьких шагов, но привел к созданию продукта, который сегодня успешно интегрируется в умные дома, предоставляя комфортное и удобное использование для клиентов.
Расскажу о том, откуда вообще взялась идея.
Наша компания уже длительное время работает в сфере умных домов. Нашей основной задачей является создание и настройка систем автоматизации для домов и квартир. В одном из наших проектов заказчику потребовалось устройство для управления несколькими зонами тёплого пола. Так как в квартире было установлено оборудование от различных производителей, найти подходящее устройство, управляющее 8 зонами теплого пола на 1 панели, было проблематично.
Из-за отсутствия решений на рынке мы решили идти своим путем. Спустя некоторое время разработки прошивки и интерфейса была готова первая версия панели.
Эта версия включала в себя 8 кнопок с иконками комнат, где был установлен теплый пол.
При разработке этой версии панели к нам приходило множество идей по добавлению новых функций и возможностей. Мы осознавали масштаб будущих перспектив и решили не останавливаться на достигнутом. Благодаря использованию открытого протокола связи (MQTT), мы открыли большое количество возможностей, ранее недоступных.
После полугода тестирования первой версии мы решили увеличить масштаб и управлять всеми устройствами умного дома при помощи панели. Это был переход на совершенно новый уровень. Мы хотели, чтобы панель не только работала надежно и стабильно, но и гармонично вписывалась в окружающее пространство. При работе мы столкнулись с довольно большим количеством проблем о нескольких самых популярных расскажу ниже.
1. Обратная связь
Так например, одной из главных проблем, с которой мы столкнулись, была сложность с обратной связью. В нашем интерфейсе состояние работы чего-либо обозначается белой точкой. Например, когда точка есть, свет включен; когда точки нет, свет выключен. Но что делать, когда связь с лампочкой из-за каких-то неполадок была потеряна? Мы подошли к решению так:
Теперь панель при нажатии на кнопку включения или выключения света ждет 1 секунду отклика. Если через 1 секунду ответ не придет, состояние вернется обратно.
2. Быстрое обновление прошивки
Еще одной проблемой для нас стало обновление прошивки. Каждый раз, когда мы изменяли какие-либо настройки панели, приходилось разбирать ее и обновлять прошивку. Так как на тот момент панель находилась на этапе тестирования, процесс обновления прошивки выполнялся довольно часто, и каждый раз разбирать панель было довольно утомительно и, что самое неприятное, происходил износ деталей панели. Решение оказалось не простым, но оно того стоило. Мы разработали систему обновления прошивки по воздуху.
Достаточно просто зайти в веб-интерфейс и выбрать файл прошивки.
3. Быстрая смена настроек
Мы также позаботились о удобной настройке панели. Раньше, например, если у Wi-Fi поменялся пароль, нужно было лезть в прошивку и изменять его там. В общем, слишком много действий ради одного пароля.
Сейчас для настройки не только Wi-Fi, но и настроек MQTT мы используем веб-интерфейс.
При работе с разными проектами мы заметили, что панели от некоторых производителей не соответствуют требованиям заказчиков. В некоторых из них не хватает элементов управления, а в других интерфейс панели не сочетается с интерьером дома. Из этого вытекает наша главная особенность - полная кастомизация интерфейса.
Уже сейчас, вы можете добавить или изменить какой-либо блок интерфейса можно легко и без лишних трудностей. Например, если у клиента вдруг изменился тип освещения, то раньше ему было необходимо полностью переделывать весь интерфейс, а сейчас достаточно просто изменить нужный ему блок под его нужные функции.
Наша команда успешно завершила весь процесс – от разработки дизайна до программирования и установки сенсорной панели в доме заказчика. И радостно констатировать, что результаты нашей работы полностью оправдали ожидания. Особенно приятно, что весь продукт был встречен заказчиком с восторгом и полным удовлетворением.
И вот сегодня наша собственная сенсорная панель успешно находит своё место в умных домах. Что касается панели, установленной в умном доме, то она уже больше года работает стабильно и без проблем.
На этом работа с панелью далеко не закончена, и нам предстоит дальнейшая её модернизация для добавления новых функций и дизайнов интерфейса и т. д. Если вас заинтересовала наша панель и вы захотели узнать больше о её функциях и возможностях, рекомендуем посетить наш сайт: Skirell.ru
В предыдущей статье я рассказал о том, как возникла идея создания умного дома. Теперь я хочу более подробно рассмотреть архитектуру первой версии этой системы.
МажорДом состоит из нескольких ключевых компонентов: девайсы, хаб, облако, мост, мобильное приложение и голосовой ассистент.
Девайсы обеспечивают управление физическими устройствами в доме. С помощью радиомодулей и протокола "Мерлин", они обмениваются данными, получают команды от хаба и отправляют ему события.
Хаб является центральным элементом системы. Он обеспечивает управление девайсами и координирует их работу. Хаб хранит основную базу данных с информацией о пользователях, доме, комнатах и девайсах. Через локальный HTTP-сервер и WS-сервер, хаб предоставляет API для работы с базой данных и высокоуровневого управления девайсами.
Облако является серверной частью и играет важную роль в обеспечении авторизации пользователей. На облаке хранится база данных пользователей, домов, хабов и их права доступа. Так же в облаке хранятся модели устройств со списком параметров и система обновлений прошивок.
Мост представляет собой WS-сервер, который обеспечивает связь между хабом и удаленными пользователями через интернет. Он позволяет отправлять команды и получать информацию с хаба, не находясь в домашней локальной сети.
Таких мостов в системе может быть несколько и они могут располагаться в разных местах. Клиенты выбирают ближайший или наименее загруженный мост для минимизации задержек при обмене данными.
Одна из главных особенностей системы "МажорДом" - ее отказоустойчивость. Даже при сбое работы одного или нескольких мостов, система продолжает функционировать. Остальные доступные мосты берут на себя задачи вышедших из строя мостов, обеспечивая непрерывность обмена данными между хабом и клиентами.
Нестрашна даже полная потеря интернет-соединения на хабе. Вся логика и обработка команд происходят локально, что обеспечивает независимость от интернет-соединения и сохраняет возможность управления устройствами в локальной сети. Но такой сценарий редкость, ведь хаб может подключаться одновременно по wifi и ethernet кабелю, а в будущем будет добавлена поддержка сим-карт сотовой сети.
Управление умным домом осуществляется через мобильное приложение, которое предоставляет удобный интерфейс для пользователей. Однако на практике, роль мобильного приложения часто сводится к настройке системы, а ежедневное управление устройствами осуществляется с помощью автоматических сценариев и голосового ассистента.
Как и хаб, голосовой ассистент может работать полностью офлайн, что обеспечивает безопасность, конфиденциальность и надежность использования.
Самое главное: теперь установить систему "МажорДом" могут даже те, кто не имеет опыта в программировании. В следующей статье я поделюсь подробным руководством о том, как это сделать.
«Чат на чат» — новое развлекательное шоу RUTUBE. В нем два известных гостя соревнуются, у кого смешнее друзья. Звезды создают групповые чаты с близкими людьми и в каждом раунде присылают им забавные челленджи и задания. Команда, которая окажется креативнее, побеждает.
В 2019 году я впервые узнал про возможность распознавания и синтеза речи на языке python. Гугл ассистент, сири, кортана и другие ассистенты тогда были еще более ограниченными и беспомощными, чем сейчас. О добавлении своих команд речи не шло от слова совсем. Тогда я и загорелся идеей создать своего голосового помощника, который не будет уступать даже Джарвису Тони Старка.
В процессе работы над ядром, начал задумываться, где этого ассистента хостить. Держать ноут постоянно включенным не вариант, а других компьютеров у меня не было. На помощь пришли одноплатные компьютеры raspberry pi. Я хотел, чтобы мой голосовой ассистент мог включать и выключать свет, управлять светодиодной лентой и шторами. С такими задачами отлично справляется ардуино. Оставалось только найти способ передавать команды с распбери. Использовать wifi и bluetooth не хотел с самого начала. Нашел в интернете информацию про модули nrf24l01, попробовал, понравилось.
Такая система работала довольно неплохо. Но было два ключевых недостатка:
Радиус действия ограничивался чувствительностью микрофона. С хорошим микрофоном все работало идеально в пределах комнаты, но не дальше.
Для каждого параметра каждого устройства надо было добавлять одинаковые голосовые команды, в которых отличались только адрес и сообщение. Неудобно, но пока терпимо.
Для решения первой задачи, в голосового ассистента я добавил http интерфейс на джанго, который мог принимать аудиофайл или строку. В комбинации с мобильным приложением на котлине, я получил беспроводной микрофон, таким образов расширив зону работы до радиуса действия роутера, то есть с комнаты до всей квартиры и даже чуть больше. Носить телефон по дому не всегда было удобно, так что через пару дней появилось приложение и на часах на wear os, что оказалось невероятно удобным решением.
Но я захотел большего: иметь доступ к своему помощнику всегда, а не только дома. Самым простым вариантом оказалось использование телеграм-бота как интерфейс ввода-вывода. Но меня не покидало ощущение, что бот — это что-то не то. Я решил оставить его только как временное решение, пока занят разработкой чего-то лучше.
Я хотел получить возможность использовать свое мобильное приложение для доступа к ассистенту на расстоянии. Надо было всего лишь придумать способ отправить запрос на локальный джанго сервер, не находясь при этом в локальной сети. Я был готов открывать и пробрасывать порты на роутере, но провайдер не дал мне белый ip. Тогда я попробовал ngrok. В первое время работало хорошо, но в бесплатной версии сервер периодически падал и менял адрес. Вариант с впн-туннелем я отбросил почти сразу. Стоимость vps была равна стоимости подписки на ngrok, но реализация была в разы сложнее.
Тогда я вспомнил, что у меня есть бесплатный хостинг для php сайтов на beget и переизобрел Long Polling и очереди. Реализация была максимально простой: приложение отправляло запрос на хостинг. Там php код добавлял тело (json) запроса в конец массива и записывал в локальный файл. Малина дома каждую секунду отправляла запрос на чтение этого файла, после чтения массив чистился. Таким образом мне удалось отправлять команды домой из любой точки планеты страны! Аналогичным образом я сделал получение ответа от ассистента: продублировал реализацию и поменял роли. Два файла и четыре эндпоинта на бесплатном хостинге на пыхе дали мне стабильную двустороннюю связь с моим домашним помощником. Чуть позже научил ассистента самостоятельно отправлять мне сообщения, например, с номером аудитории следующей пары в начале каждой перемены. Не успел всем похвастаться в колледже, как кто-то стал спамить мне домой. Пришлось добавить авторизацию: логин и пароль задавались хардкодом в приложении, а на сервере была проверка в стиле.
if ($login == 'markparker' && $password == 'MyVeryStrongP@ssw0rd!') {};
Репозитории приложения были приватные, а сервер был вообще без репы (зачем репа на один файл до 100 строк?), так что такого уровня безопасности мне более чем хватало.
Чуть позже в системе появился первый автоматический триггер команды. Через небольшой костыль в моем приложении я смог ловить событие, когда на телефоне срабатывает будильник. Этот триггер запускал первый полноценный сценарий: одновременно открывались шторы, ассистент озвучивал время, погоду и расписание пар в колледже. Если в комнате все еще было темно, плавно включалась лампа. В этот момент я чувствовал себя настоящим Тони Старком.
Тогда я захотел добавить больше автоматических сценариев, используя датчики движения, присутствия, освещенности и так далее. В этот момент стал сильнее ощущаться второй недостаток, о котором я писал ранее. Появилось много дублирования кода, работать с которым становилось уже не так удобно. В проекте была только сущность команды, не было понятия устройств и триггеров. И тогда до меня дошло, как сильно вырос мой голосовой ассистент: я уже делал полноценный умный дом, а не вопросно-ответного помощника.
Это осознание привело меня к решению отделить голосового ассистента и сделать умный дом самостоятельным проектом, ориентируясь уже на управление устройствами, а не на голосовые команды. И я решил делать это сразу по-взрослому, с полноценным сервером, базами данных, авторизацией и мобильным приложением. Чуть позже преподаватель в колледже подсказал, что вместо моего костыля с записью массива в файл на php, можно использовать вебсокеты. Именно так я и реализую позже управление устройствами через интернет. Спасибо, Александр Анатолиевич!
В остальном общая концепция не изменилась: хаб в виде одноплатного компьютера управляет ардуинами через радиомодуль nrf24l01. Подробнее про архитектуру я расскажу в следующей статье.