С каждым днем появляется все больше различных "умных" устройств. В дополнение к уже привычным смартфонам и автомобилям активно развивается Интернет вещей (IoT). Настройка умного дома становится проще с каждым днем благодаря большому количеству умных устройств по разумной цене и простой установке. Широкая популярность "умных" устройств создает высокий спрос на рынке, и большое количество компаний выпускает множество устройств. Однако при создании собственных устройств компании редко смотрят в сторону взаимодействия своих продуктов с продуктами других компаний. Это создает проблемы, когда пользователю приходится устанавливать несколько приложений для управления умным домом и покупать дополнительные устройства - блоки управления умным домом. Этот факт говорит о том, что пользователям не очень удобно иметь множество приложений и дополнительные расходы.
Прежде чем мы начнем, стоит ввести понятие Интернета вещей. Что такое Интернет вещей? В книге "Четвертая промышленная революция" дается следующее понятие - В своей простейшей форме его можно описать как связь между вещами (продуктами, услугами, местами и т.д.) и людьми, которая стала возможной благодаря подключенным технологиям и различным платформам.(1) Это простое и лаконичное описание сразу дает понять, что Интернет вещей может быть связан с умными домами или системами предупреждения о землетрясениях. Существует множество устройств, которые могут общаться в Интернете вещей, и все эти устройства нуждаются в управлении или получении данных от подключенных устройств. Для этой цели используются шлюзы.
Шлюзы - это устройство, которое является точкой входа для взаимодействия с пользователем. Если подключить IoT к зданию, то шлюз - это дверь. Это устройство, которое обеспечивает связь и обработку данных со всех подключенных к нему устройств, а также предоставляет интерфейс для работы с данными.
Как правило, шлюзы довольно уникальны для каждого производителя умных устройств и не могут работать с устройствами других компаний. Это накладывает ограничения на использование устройств от разных производителей. Так, например, чтобы мы могли использовать умные лампочки от одной компании и умные розетки от другой, нам нужно купить два дополнительных устройства, которые будут работать с устройствами. Чем больше мы хотим разных устройств, тем больше устройств нам приходится покупать.
Основываясь на этой проблеме, мы начали изучать литературу в поисках решений для создания единого шлюза для всех умных устройств.
Во время обзора литературы было решено изучить предыдущие работы по созданию IoT-шлюзов, а также вопросы работы различных протоколов. В первую очередь было решено изучить типичные способы создания сети IoT, чтобы определить сильные и слабые стороны доступных технологий и разработок. Понимание этих вещей позволит скорректировать ход исследований и, прежде чем приступить к реализации, собрать необходимые данные о существующих разработках. Типичное устройство архитектуры умного дома состоит из следующих элементов: сборщики данных, способы связи, облачный сервер.[1] Сборщики данных - это некоторые устройства, которые могут собирать данные о погоде в помещении, данные об открытии и закрытии дверей, водяные датчики и так далее. Все эти устройства общаются с использованием различных протоколов. Для закрытых компаний невозможно понять, какой протокол они используют. Однако существуют также известные всем протоколы, которые позволяют устройствам работать друг с другом. Одним из примеров общего протокола для взаимодействия устройств умного дома является Zigbee. Этот протокол не нов, и многие устройства и умные дома уже успешно реализованы на нем (2), но, как и другие, они требуют взаимодействия со сторонними облачными вычислительными серверами. Во время изучения этого протокола было определено, что он является лучшим решением для реализации нашей исследовательской задачи.
После обзора литературы были выявлены следующие недостатки, которые мы хотели бы решить в ходе нашего исследования. Одним из основных недостатков является предпочтение облачной обработки данных, что не позволяет нам использовать наши устройства умного дома при отсутствии подключения к Интернету. Несмотря на то, что в настоящее время Интернет проведен практически во все уголки нашей планеты, все еще есть регионы с плохим соединением или вообще не подключенные к Интернету. Это не позволяет устанавливать умные устройства в таких местах или требует значительных инвестиций в создание необходимой инфраструктуры, что требует продвинутых знаний и навыков. Мы хотим упростить процесс создания умного дома, создав простое устройство, которое решит многие проблемы. И для решения этих проблем мы решили сделать испытательный стенд, который будет работать с протоколом zigbee и подключать к нему несколько устройств.
После исследования других работ по теме мы определили для себя цели и, прежде всего, решили определить необходимые компоненты системы. Для того чтобы построить испытательный стенд, мы решили сделать минимальные финансовые вложения и найти на рынке некоторые готовые и недорогие устройства, которые позволили бы нам работать с протоколом ZigBee.
В ходе нашего исследования мы обнаружили, что существуют различные устройства для работы с ZigBee. Мы нашли несколько вариантов использования протокола ZigBee, как готовые решения, которые уже работают с этим протоколом, так и USB-устройства, которые позволяют управлять умными устройствами с помощью ПК.
Мы выбрали второй тип устройств, поскольку он позволяет нам работать с устройствами более тонко, и у нас нет ограничений готовых решений. Этот подход позволил нам более точно понять, как работают умные устройства, как мы можем управлять ими и как мы можем получать данные.
Основываясь на этих данных, мы выбрали ZigBee стик CC2652R для работы с нашими устройствами. Этот стик обладает всем необходимым нам функционалом и не требует дополнительной настройки перед использованием.
Определившись с покупкой стика, мы перешли к следующему шагу в создании испытательного стенда и начали исследовать технологии, которые подходили бы нам. Исходя из наших требований, мы определили, что сигналы формата ZigBee нам как-то нужно было обработать. В поиске подходящих технологий мы вернулись к исследованию решений.
Мы нашли две популярные технологии, которые позволяют работать с протоколом ZigBee с использованием нашего устройства. Следующим шагом был сравнительный анализ, чтобы найти наиболее подходящую технологию. Изучая документацию и саму технологию, был выбран проект zigbee2mqtt. Этот проект был выбран по следующим причинам:
После выбора проекта для работы с ZigBee мы определили базовую схему работы. По нашему видению, единый шлюз позволит объединить множество IoT-устройств от разных производителей и предоставить пользователю единый интерфейс для работы с ними.
Определив основные элементы системы и принципиальную схему, мы приступили к реализации испытательного стенда. Для этого, после установки ZigBee2MQTT на локальной машине. Эта система позволяет нам устанавливать приложения в docker-контейнере, что значительно облегчило нашу работу. Как только приложение заработало, мы смогли увидеть доступные интерфейсы и убедиться, что все работает.
Далее мы взяли одно из тестовых устройств и подключили его к нашей системе в соответствии с документацией на сайте ZigBee2MQTT. Каждое устройство имеет уникальное подключение к полученному стенду, которое было учтено в документации проекта ZigBee2MQTT. Это позволило нам быстро протестировать возможности подключенных устройств.
В качестве примера мы использовали умную лампочку. После подключения мы смогли получать данные о текущем состоянии лампочки, а также управлять этим состоянием. HTTP-запросы в формате: базовый_топик/имя_устройства. Таким образом, маршрутизация запроса и отправка сигнала на нужное устройство в сети.
После эксперимента с готовым решением мы решили перейти к следующему этапу эксперимента, а именно, реализации нашего собственного приложения для обеспечения максимального контроля в управлении сетью ZigBee. Прежде чем приступить к эксперименту, мы тщательно изучили документацию, предоставленную Texas Instruments, чтобы создать полное понимание того, как работает стандарт и какие вещи можно реализовать с их чипом СС2652R. После длительного анализа и изучения спецификаций мы приступили к реализации тестового приложения на основе технологии Zigbee Network Processor (ZNP).
Существующая сеть Zigbee была развернута с использованием ранее настроенного компьютера с установленным Zigbee2MQTT. Это сэкономило нам много времени на реализации сети с нуля и позволило быстрее разработать приложение.
Следующее, с чем нам пришлось столкнуться, было то, что не каждая прошивка радиомодуля CC2652R позволяла нам общаться с ним через UART. Это усложнило дело и заставило нас вернуться к изучению документации. В ходе исследования мы выяснили, что существуют различные конфигурации прошивки для разных типов устройств. Изучив этот вопрос, мы нашли некоторые решения в открытом исходном коде, которые помогли нам прошить устройство и начать работу.
ZNP (Zigbee Network Processor) - это тип архитектуры, используемой в устройствах с поддержкой Zigbee. ZNP позволяет разделять функции стеков Zigbee между двумя компонентами: микроконтроллером и RF-модулем. В нашем случае микроконтроллером было мобильное устройство под управлением операционной системы Android, а RF-модулем - модуль с процессором CC2652R. Модуль имеет разъем USB Type A, который не является стандартным портом подключения для устройств Android. Поэтому для обеспечения связи мы подключили 2 устройства с помощью адаптера. Для первого устройства мы использовали адаптер с Type A на Type C, а в другом случае адаптер с Type A на Micro USB.
Только после выполнения этих конфигураций устройство может начать отправку и получение сообщений в сети Zigbee. Эта последовательность команд обеспечивает правильную настройку устройства для участия в сети, поддерживая надежную и эффективную связь. Правильная конфигурация необходима для поддержания стабильности сети и достижения бесперебойной интеграции с другими устройствами Zigbee.
Этот подробный процесс подчеркивает важность тщательной и точной настройки для полного использования возможностей протокола Zigbee, обеспечивая надежную и безопасную связь по всей сети. Для получения дополнительных технических деталей и спецификаций команд обратитесь к документации Zigbee и руководствам по интерфейсу ZNP, предоставленным Texas Instruments.
В ходе поиска устройств, которые будут использоваться в испытательном стенде, мы также обнаружили, что существуют другие устройства, работающие с этим протоколом. В ходе дальнейших исследований мы определили, что можем использовать только платы, способные общаться с этим протоколом. Эти знания позволяют нам сделать вывод, что для простого готового решения мы можем использовать любой готовый микрокомпьютер, который будет сочетаться с платой для работы с устройствами ZigBee.
Таким образом, построив испытательный стенд, мы смогли получить результат в виде готового к работе умного шлюза для работы с различными устройствами. Техническая часть работы дала нам следующее понимание:
Исследование программной части привело нас к тому, что существуют проекты, которые позволяют удобно преобразовывать сигналы ZigBee в программный код и работать с этими данными. В нашем случае мы использовали проект ZigBee2MQTT, который преобразует сигналы ZigBee в формат сообщений протокола MQTT, которые отправляются в очередь для обработки, а затем обрабатываются приложением ZigBee2MQTT. Существующее готовое решение помогло нам увидеть, какой способ общения с устройствами ZigBee наиболее удобен, и помог понять существующие стандарты работы с IoT-устройствами.
MQTT (Message Queuing Telemetry Transport) - это легкий протокол обмена сообщениями по модели "издатель-подписчик", предназначенный для эффективной связи между устройствами по ненадежным сетям. Он обычно используется в приложениях Интернета вещей (IoT) для обеспечения эффективного и надежного обмена данными между устройствами.
Вот некоторые ключевые характеристики MQTT:
На основе этих данных мы смогли получить информацию о том, как в целом происходит взаимодействие с ZigBee на программном уровне и какие подходы мы можем использовать для создания собственного шлюзового решения для умных устройств. Использование протокола MQTT отлично подходит для работы с умными устройствами, поскольку позволяет эффективно работать с короткими и частыми сигналами от умных устройств.
Используя протокол MQTT, мы можем построить собственную коммуникацию для взаимодействия IoT-устройств с нашим шлюзом, что позволит настроить его более тонко. Также возможно использование готового продукта, такого как ZigBee2MQTT, однако это не дает большой гибкости, и для создания единого шлюза для всех IoT-устройств может не подойти.
Использование этого приложения дало нам понимание принципов, по которым мы можем организовать связь и какие данные мы можем получать, но использование стандарта HTTP и стандарта больших данных, такого как JSON, может значительно замедлить работу умных устройств, что сделает их менее отзывчивыми. На этом основании мы учли, что при создании собственного шлюза необходимо учитывать стандарты передачи данных, которые будут использоваться, поскольку они требуют легкости и простоты сериализации этих данных.
В результате также было обнаружено, что, несмотря на то, что в текущей ситуации IoT-шлюзы от разных компаний требуют подключения к сети для работы, наличие Интернета у устройства не является важным фактором. Шлюзы, созданные таким образом, являются автономными и позволяют работать с устройствами Интернета вещей без использования чьего-либо Интернет-подключения или подключения участников. Наличие Интернета может потребоваться только для удаленного управления умными устройствами. Однако современные релизы требуют подключения к сети не только для удаленного управления, но и для управления устройствами в целом, что не позволяет комфортно использовать умные устройства без стабильного подключения к Интернету.
После создания испытательного стенда и проведения ряда тестов мы определили ряд преимуществ и недостатков готовых решений.
Работая над испытательным стендом, мы определили ряд важных моментов для работы с умными устройствами, а также выяснили ряд проблем с текущими решениями. Например, медленный и тяжелый тип данных JSON не всегда может обеспечить оптимальную производительность. Если вы попытаетесь усложнить будущий шлюз в технической части, вы неизбежно столкнетесь со значительным увеличением стоимости компонентов. Эту проблему можно решить, используя бинарные типы данных, которые намного проще обрабатывать менее мощными компьютерами. Использование более простых и легких типов данных, предположительно, увеличит скорость работы с умными устройствами и сделает их более отзывчивыми для пользователя.
Работа с программным обеспечением ZigBee2MQTT дала нам базовое понимание того, как сделать устройства со шлюзом и как мы можем создать собственное программное обеспечение для работы с умными устройствами. Необходимость создания собственной реализации программного обеспечения возникает из-за высоких требований к скорости, которые тестируемое устройство не смогло показать. Также наше собственное решение позволит нам создавать более гибкие настройки, а использование более быстрой технологии значительно сократит время ожидания реакции на вывод пользователя. Использование JavaScript в качестве основного языка для ZigBee2MQTT накладывает определенные ограничения для использования в быстрых умных устройствах, таких как умный шлюз.
В будущих работах мы планируем поэтапно развивать каждый из описанных аспектов шлюза для умных устройств. В первую очередь мы создадим собственную реализацию преобразования сигналов ZigBee в сообщения MQTT, что позволит уменьшить задержку с умными устройствами. Этот этап является важным направлением в понимании принципов создания шлюза и позволит нам заглянуть еще глубже в принципы работы как протоколов, так и самих устройств.
В будущих работах мы проведем серию экспериментов по созданию собственного готового устройства, которое могло бы заменить все обычные шлюзы разных компаний одним шлюзом, используя все знания, которые мы получили в этих и последующих работах.
1. The Fourth Industrial Revolution. Klaus Schwab (2016);
2. The deployment of an IoT network infrastructure, as a localised regional service (2019);
3. ENABLING IOT SERVICES USING WIFI - ZIGBEE GATEWAY FOR A HOME AUTOMATION SYSTEM (2015);
4. A Multi-Protocol IoT Gateway and WiFi/BLE Sensor Nodes for Smart Home and Building Automation: Design and Implementation (2019);
5. Development of an Easy Payment System based on IoT Gateway (2018);
6. Communication Protocol Stack for Constrained IoT Systems (2018);