Содержание:
IoT (Internet of Things), или интернет вещей, считают движущим фактором 4-ой промышленной революции. По прогнозам консалтинговой компании Gartner, количество устройств IoT ежегодно увеличивается практически на треть и к 2020 году может превысить 20 миллиардов. В то же время большинство компаний при реализации проектов для интернета вещей сталкивается с дефицитом специалистов с навыками IoT-разработки.
Концепция IoT включает несколько направлений в IT, например, программирование встраиваемых систем, big data, машинное обучение, мобильную и веб-разработку. Таким образом, заниматься IoT-проектами могут big data-специалисты, iOS и Android-разработчики, веб-программисты.
Ниже мы подробнее расскажем о 5 уровнях архитектуры интернета вещей и необходимых для их реализации технологиях, которые нужно знать для начала карьеры в IoT-разработке.
Идею IoT успешно адаптируют под разные сферы нашей жизни. IoT для управления городской инфраструктурой называют smart city («умный город»), а для дома – smart home («умный дом»). В промышленности IoT помогает предупреждать износ или поломки оборудования. Все активнее IoT применяется в медицине, например, для дистанционного мониторинга за состоянием пациентов. А в сельском хозяйстве технологии IoT позволяют контролировать важные показатели для растений, от состояния почвы до уровня влажности.
IoT – сложное технологическое решение с многоуровневой архитектурой.
Рассмотрим элементы IoT-архитектуры на примере одного из самых распространенных решений в сфере интернета вещей – «умный дом».
К периферийным устройствам в IoT относятся датчики и исполнительные механизмы, которые воздействуют на физические объекты для выполнения каких-либо действий. К примеру, в «умном доме» есть датчики температуры и влажности. Они практически непрерывно генерируют большие объемы данных, которые через сетевые шлюзы передаются на облачные серверы, где находится мозг всей IoT-экосистемы.
В облаке происходит предварительная обработка данных, а затем – анализ, в результате которого на исполнительные устройства автоматически отправляются команды. В IoT, как правило, применяется несколько видов аналитики: потоковая, пакетная и предиктивная. Потоковая аналитика обеспечивает реакцию устройств IoT на определенные изменения окружающей среды. Так, если в комнате повышается температура, то приборы для вентиляции увеличат подачу воздуха. Данные от сенсоров движения в комнатах также анализируются в режиме реального времени, чтобы хозяин «умного дома» мог мгновенно получить оповещение на смартфон, если в квартиру проникнет посторонний человек. А чтобы проследить за тем, эффективно ли различные устройства в квартире потребляют электроэнергию, нужно проанализировать данные, накопленные за месяц. Для этого используется пакетная обработка.
Предиктивная аналитика строится на алгоритмах машинного обучения, которые ищут в исторических данных паттерны или аномалии. В «умном доме» алгоритмы машинного обучения способны распознать закономерности в поведении хозяев квартиры: в какое время они уходят и возвращаются, какой температурный режим предпочитают, чтобы по этому расписанию автоматически выключался или включался свет, настраивался кондиционер.
Пользователи взаимодействуют с IoT-системой через мобильные или веб-приложения. Владелец «умного дома» может отслеживать через приложение показатели датчиков, смотреть графики энергопотребления и управлять подключенными устройствами.
Для разработки ПО для встраиваемых систем, или микроконтроллеров, чаще всего используются языки C или С++. Альтернативой может быть Java Embedded. Также в разработке ПО для встраиваемых систем набирает популярность сравнительно молодой язык программирования Go.
Шлюзы обеспечивают межсетевое взаимодействие в системе IoT: отправляют данные на облачные серверы, а затем передают от них команды к периферийным устройствам. Также шлюзы могут выполнять предварительную обработку данных.
Для программирования шлюзов подходят языки С, С++, Java, Python.
Обработка данных в IoT-системе происходит в облачных сервисах. Сегодня чаще всего используются Microsoft Azure и Amazon Web Services (AWS).
На этом уровне архитектуры выполняется три основные задачи:
Извлечение данных
Так как в IoT-системе данные от датчиков и периферийных устройств генерируются непрерывно, то для их извлечения необходимо использовать сервисы приема потоковых данных:
Azure Event Hubs – сервис для извлечения данных в режиме реального времени, который можно интегрировать с другими инструментами для обработки данных от Microsoft Azure. Event Hubs поддерживает языки программирования Java, Python, Go, а также платформы .NET и Node.js.
Apache Kafka – распределенная система передачи сообщений для сбора потоковых данных, которую можно развернуть на облачной платформе AWS или интегрировать с сервисами Azure. При работе с Apache Kafka можно использовать Java, Python, Scala, .NET, Go, C++.
Amazon Kinesis Data Streams – может агрегировать данные от сотен тысяч источников, формируя из них потоки, которые будут доступны в режиме реального времени другим сервисам AWS. Для работы с Kinesis Data Streams, как и со всеми сервисами AWS, есть широкий выбор языков программирования – Java, Python, PHP, .NET, JavaScript, Go, C++.
Предварительная обработка данных
На данном этапе предварительная обработка необходима, чтобы отфильтровывать поступающие данные и, например, выбирать записи в пределах некоторых временных интервалов. Для этой задачи подходит фреймворк Apache Flink, работать с которым можно на языках Python, Scala, Java.
Хранение данных
В IoT-системах для хранения данных нужны надежные масштабируемые системы, так как количество собранной информации постоянно увеличивается. Чаще всего для хранения больших данных используются системы:
Hadoop Distributed File System (HDFS) – распределенная файловая система для хранения данных. Нативный язык для работы с HDSF – Java, но также можно использовать Scala и Python.
Apache HBase – распределенная база данных, написанная на Java.
Apache Cassandra – распределенная система управления нереляционными базами данных. Cassandra написана на Java, но для работы с ней подойдет и Python.
Чтобы извлечь из собранных данных максимум ценной информации, необходимой для принятия решений, применяются:
Потоковая аналитика данных
Потоковая аналитика позволяет обрабатывать данные практически в режиме реального времени. Таким образом можно выявить в полученных данных отклонения, на которые нужно реагировать.
Для потоковой обработки используются:
Платформа Spark Streaming (входит в фреймворк Apache Spark) получает потоки данных от Kinesis Data Streams или Apache Kafka, обрабатывает их и отправляет в хранилище данных. Написать программу для Spark Streaming можно на Java, Scala и Python.
Azure Stream Analytics преобразует потоковые данные от Azure Event Hubs в режиме реального времени. Для работы с Stream Analytics нужно писать SQL-запросы.
Пакетная обработка данных (batch processing)
Пакетная обработка применяется к данным, которые уже находятся какое-то время в хранилище. Такой подход, в отличие от потоковой обработки, позволяет выявить скрытые закономерности в данных и обычно применяется для создания аналитических отчетов. Данные, полученные в результате пакетной обработки, также могут использоваться для создания моделей машинного обучения.
Так как при пакетной обработке с данными выполняется несколько операций, от фильтрации до статистической обработки, то необходимо уметь работать с технологиями для параллельных вычислений, например, с Hadoop MapReduce.
Обработка сложных событий (processing complex events)
Для выявления сложных закономерностей между событиями, нужно проанализировать множество потоков данных из различных источников. Для этой задачи чаще всего используется Apache Spark Streaming. Фреймворк разбивает потоки данных на микропакеты, которые обрабатываются параллельно, за счет чего возможен быстрый и глубокий анализ. Spark Streaming поддерживает языки Scala и Java.
Разработка моделей машинного обучения
Внедрение алгоритмов машинного обучения в платформу для управления IoT расширяет возможности аналитики данных и повышает автономность подключенных устройств.
Разработчик создает алгоритм машинного обучения, который будет обучаться на исторических данных, чтобы уже в поступающей информации находить неочевидные закономерности или аномалии.
Для машинного обучения понадобится знание Python (библиотека TensorFlow), или Java (Weka, Deeplearning4j), реже применяется R.
Визуализация данных
Визуализация данных позволяет представить результаты обработки больших массивов данных в виде графиков и диаграмм, которые пользователи смогут увидеть в своих приложениях для IoT. Визуализация может использоваться для создания аналитических отчетов или отображения собранной информации в режиме реального времени.
Для визуализации данных лучше всего подходит Python, а именно библиотеки Seaborn, Bokeh, Pygal.
При создании пользовательских приложений для IoT применяются такие же языки программирования и фреймворки, как и для обычной веб и мобильной разработки. Однако для IoT-приложений особенно важна высокая производительность, учитывая объемы получаемых данных и интеграцию с большим количеством устройств.
При разработке веб-приложений для IoT подойдут серверные языки .NET, PHP, Java, а для frontend используются JavaScript, HTML, CSS.
Мобильные приложения для IoT могут быть нативными (для iOS, Android или Windows Phone) или кроссплатформенными, которые разрабатываются на основе технологий Cordova, Xamarin.
IoT как концепция охватывает большой спектр технологий. Хорошей базой для старта в IoT-разработке будут знания по одному из следующих пунктов:
Вне зависимости от того, над встраиваемым или прикладным ПО для IoT вы будете работать, вам стоит изучить архитектуру интернета вещей и научиться работать с облачными сервисами, чтобы понять, как взаимодействуют все компоненты экосистемы. Для этого можно пройти онлайн-курсы от Microsoft или Amazon, в которых объясняется разработка IoT на основе облачных сервисов Azure и AWS.