Краткое руководство по отслеживанию активов с помощью LoRaWAN, AWS DynamoDB, AWS Lambda, шлюза AWS API и Google Maps.

LoRaWAN (сокращенно LoRa) позволяет отправлять небольшие пакеты данных датчиков на большие расстояния (5–10 км) при очень низком энергопотреблении.

LoRa означает Long Range и представляет собой протокол широкой сети с низким энергопотреблением, который существенно повлияет на будущее IoT (Интернета вещей).

Это означает, что вы можете использовать датчики там, где вам не хватает электроэнергии или подключения к сети (например, 4G). Это делает LoRa идеальным для таких вещей, как отслеживание транспортных средств (например, данные GPS) и измерение окружающей среды (например, влажности и температуры) без необходимости прокладки кабелей для питания или связи.

В Нидерландах KPN (один из крупнейших здесь операторов связи) не так давно развернул сеть LoRa, и я хотел узнать, как она работает. В частности, я хотел узнать, как интегрировать GPS-слежение с Google Maps.

Конечный результат выглядит так (маршрут, по которому я недавно ездил на остров Тексель)

Я использую устройство Dragino LGT92 LoRaWAN GPS tracker, которое стоит около 45 евро и имеет перезаряжаемый аккумулятор.

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

KPN разработала портал для работы с данными, который называется порталом KPN Things. Они предлагают 6 месяцев бесплатного пробного периода для ограниченного количества устройств. Есть альтернативы с открытым исходным кодом, вроде The Things Network, но охват в моем районе не так хорош.

На портале вы указываете, куда следует отправлять пакеты данных для дальнейшего использования. Я настроил шлюз API AWS, который запускает функцию AWS Lambda для декодирования пакета данных в координаты (широту и долготу). Эти значения хранятся в AWS DynamoDB вместе с меткой времени.

Чтобы получить на своем веб-сайте координаты за последние три дня, я использовал AWS Cognito и AWS SDK для запроса DynamoDB.

Пришло время погрузиться в детали.

Шаг 1. Зарегистрируйте устройство на портале KPN Things

Начнем с регистрации нового устройства на Портале KPN Things, чтобы начать получать пакеты данных.

Сначала вам нужно зарегистрировать учетную запись, что довольно просто. Оказавшись внутри, вы увидите следующий экран.

Вы можете определить проект, если хотите, но для одного устройства это не требуется. Нажмите «Добавить новое устройство», чтобы перейти к следующему экрану и ввести соответствующие данные, такие как имя, описание, DevEUI, AppEUI и AppKey. Последние три необходимы для правильной аутентификации (например, OTAA, беспроводной активации) устройства и поставляются с устройством.

После регистрации вы можете включить устройство и дождаться прихода сообщений.

Иногда устройства не могут получить первоначальный пакет приемки сети. Затем вам нужно попробовать в районе, где не слишком много зданий и / или в более высокой точке с лучшим приемом.

Шаг 2. Настройте AWS DynamoDB для хранения координат

Теперь мы перейдем к AWS-части этого проекта. Устройство отправляет сообщения в сеть, и в конечном итоге нам нужна база данных для хранения координат. Для этого проекта DynamoDB отлично подойдет, поскольку он дешев и прост в установке. Я создал таблицу с устройством в качестве первичного ключа и отметкой времени в качестве ключа сортировки, потому что я использую одну и ту же таблицу для нескольких устройств.

Шаг 3 Настройте функцию AWS Lambda для декодирования сообщений и отправки координат в DynamoDB

Теперь у нас есть база данных и устройство, отправляющее сообщения. На этом этапе мы соединим их с помощью AWS lambda. Это означает, что нам нужно начать кодировать сейчас. В AWS Lambda создайте новую функцию (в моем случае loraMeasurements) и выберите последнюю среду выполнения Node.js.

В блоке кода функции я определил три файла: index.js, decoders.js и devices.js. Я сделал это, потому что хочу использовать одни и те же функции для разных устройств.

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

Затем я вырезаю соответствующую полезную нагрузку из сообщения и пропускаю ее через декодер (подробнее об этом ниже). После декодирования координаты отправляются в DynamoDB с помощью AWS SDK.

Сообщение от устройства (также называемое полезной нагрузкой) содержит шестнадцатеричную строку из 11 байтов (например, cbc20569038c017fff7fff).

Первые четыре байта предназначены для широты, а вторые четыре байта - для долготы.

У Dragino есть обширные руководства пользователя на своем веб-сайте, в которых подробно объясняется, как декодировать полезную нагрузку. Их примеры вдохновили меня написать следующую функцию, которая работает на моих устройствах.

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

Теперь у нас есть устройство, отправляющее полезные данные в сеть LoRa, функцию декодера для извлечения координат и базу данных для их хранения.

Чтобы запустить функцию Lambda, мы должны настроить AWS API Gateway. Вы можете сделать это, добавив триггер к лямбда-функции. Мастер проведет вас через шаги (я создал открытый HTTP API, см. Ниже).

Созданный API выглядит так:

https: // ‹кое-что› .execute-api.eu-west-1.amazonaws.com / prod / loraMeasurements.

Скопируйте этот API и вернитесь на портал KPN Things, чтобы настроить место назначения для сообщений.

Шаг 4 Добавьте API на портал KPN Things

На портале KPN Things перейдите к «Добавить новое место назначения», выберите конечную точку HTTPS в качестве типа назначения и вставьте только что скопированный URL-адрес. Экран назначения будет выглядеть примерно так, как показано ниже.

Теперь мы завершили левую часть конвейера данных: устройство отправляет сообщения в сеть, и сообщение пересылается на AWS API Gateway. API запускает функцию Lambda для извлечения и декодирования полезной нагрузки сообщения и записывает полученные координаты в DynamoDB.

На следующем шаге мы настроим функцию в javascript, чтобы получать координаты из DynamoDB и наносить их на карты Google Maps.

Шаг 5 Настройте функцию JavaScript для получения последних координат

Когда вы начинаете отслеживать вещи с помощью GPS-трекера, вы должны защищать свои данные, чтобы избежать проблем с конфиденциальностью. Чтобы иметь возможность использовать координаты на своем веб-сайте, я использовал AWS Cognito для создания учетных данных для запросов к DynamoDB. Не так давно я написал статью об использовании учетных данных Cognito, поэтому, пожалуйста, перейдите туда, чтобы узнать, как это настроить.



Для своего веб-сайта я создал следующую функцию для построения координат за последние три дня в Google Maps. Для использования Google Maps вам необходимо получить API-ключ.

Добавив объект карты на свою html-страницу, вы получите карту, показанную в начале статьи.

Резюме

В этой статье я хотел показать вам, как я использовал GPS-трекер LoRaWAN для отслеживания вещей и отображения его координат на веб-сайте с помощью AWS Lambda, AWS API Gateway, AWS DynamoDB и Google Maps. Я показал вам, как сообщения устройства отправляются в сеть KPN LoRa, как они пересылаются в API, который запускает функцию лямбда для декодирования полезной нагрузки и сохранения координат в базе данных. Затем я показал вам, как можно использовать координаты на веб-сайте с помощью функции JavaScript и API Карт Google.

Основная цель, которую я потратил на этот проект, заключалась в том, чтобы узнать о LoRa, поскольку он окажет значительное влияние на внедрение Интернета вещей и промышленного Интернета вещей. С LoRa вы можете устанавливать маломощные устройства повсюду, и вам не нужно прокладывать кабели для питания и связи. Поскольку LoRa может отправлять данные на большие расстояния, это делает его идеальным для менее густонаселенных районов и мобильных ресурсов.

Заявление об ограничении ответственности: подписание журнала IoT Magazine дает массу преимуществ :) Консультации с экспертами из разных отраслей являются важными. Отправьте свой запрос здесь, и мы свяжем вас с нужными экспертами в области Интернета вещей. Он мог сидеть по соседству, мало ли.