Этот проект представляет собой мост между сетью Orange Lora®* и протоколом OMA NGSIV1, используемым контекстным брокером Orion, а также другими компонентами экосистемы FIWARE.
Этот агент IoT - это библиотека, которую можно использовать, например, в приложении Springboot.
Этот агент позволяет:
Эта библиотека использует платформу Live Objects® (https://liveobjects.orange-business.com/#/liveObjects) для управления полезными нагрузками LORA®*.
Реализация NGSI V1 предоставляется в библиотеке Orange-Opensource/Fiware-NGSI-API.
Вот глобальная архитектура агента IoT, используя платформу Live Objects® для управления полезными нагрузками устройства LORA®*:
Архитектура
Создайте проект Maven с Spring Boot -зависимостями и нашей библиотекой:
< dependency >
< groupId >com.orange.fiware</ groupId >
< artifactId >openlpwa-iotagent</ artifactId >
< version >X.Y.Z</ version >
</ dependency > где XYZ является версией библиотеки для использования (проверьте теги GIT).
Вы можете изменить некоторые настройки приложения либо добавить:
src/main/resources/application.properties в вашем приложении.Это список свойств приложения:
| Имя | Описание | Значение по умолчанию |
|---|---|---|
| ContextBroker.Localurl | публичный URL в этом случае | http: // localhost: 8081 |
| ContextBroker.Remoteurl | URL на удаленный брокер (Orion) | http: // localhost: 8082 |
| ContextBroker.RemotefiWareservice | Название службы удаленного брокера | |
| ContextBroker.RemotefiWareservicePath | путь службы удаленного брокера | |
| ContextBroker.Remoteauthtoken | Токен oauth для обеспеченного удаленного брокера | |
| ContextBroker.Remoteauthtokenuri | URI использовался для извлечения токена аутентификации | |
| ContextBroker.Remoteclientid | Удаленный контекст -брокер идентификатор клиента | |
| ContextBroker.RemoteClientEcret | Отдаленный контекст -брокер -секрет клиента | |
| ContextBroker.RemoteUserLogin | Удаленный контекст -брокер вход пользователя | |
| ContextBroker.RemoteUserPassword | Удаленный контекст -брокер пароль пользователя | |
| openlpwaprovider.resturl | Live Objects® ** URL API | https://lpwa.liveobjects.orange-business.com |
| openlpwaprovider.apikey | Live Objects® ** API -ключ | |
| openlpwaprovider.mqtturi | Live Objects® ** MQTT Broker URI | tcp: //liveobjects.orange-business.com: 1883 |
| openlpwaprovider.mqttclientid | Live Objects® ** идентификатор клиента MQTT Broker | Fiware-iotagent-client |
Чтобы использовать устройство Lora®* с агентом, следуйте этим шагам:
Прежде чем начать использовать агент, вы должны зарегистрировать устройство на портале LPWA Live Objects® (https://lpwa.liveobjects.orange-business.com). Если ваше устройство правильно зарегистрировано и активно, вы должны увидеть предстоящие полезные нагрузки на веб -сайте.
Данные, собранные живыми объектами, могут быть направлены в очереди сообщений (FIFO). Создание правила маршрутизации выполняется в трех шагах:
Вы можете создать свой FIFO и определить свои правила маршрутизации на портале Live Objects® (https://lpwa.liveobjects.orange-business.com).
Платформа Live Objects® управляет LORA®* шестнадцатеричными полезными нагрузками. Невозможно расшифровать полезную нагрузку на платформе, поэтому вы должны сделать этот процесс, когда используете агент.
Чтобы выполнить эту работу, вы должны реализовать интерфейс OpenLpwaNgsiConverter с двумя следующими методами:
public class MyOpenLpwaNgsiConverter implements OpenLpwaNgsiConverter {
@ Override
public List < ContextAttribute > decodeData ( String deviceID , String data ) {
// Decode the hexadecimal payload to build a list of NGSI context attributes
} Метод decodeData вызывается для каждой полезной нагрузки восходящей линии связи, отправленной устройством. Вы должны реализовать этот метод для декодирования шестнадцатеричной полезной нагрузки, отправленной и создания списка атрибутов контекста NGSI, чтобы обновить объект NGSI, отображаемая с устройством (см. Запуск агента).
@ Override
public String encodeDataForCommand ( String deviceID , String commandName , ContextAttribute attribute ) {
String data = attribute . getValue (). toString ();
// Build an hexadecimal payload to send a command
} Метод encodeDataForCommand требуется для каждой полезной нагрузки нисходящей линии связи для отправки на устройство (см. Команду отправить на устройство). Вы должны реализовать этот метод для извлечения команды в атрибуте контекста NGSI и кодировать соответствующую шестнадцатеричную полезную нагрузку для отправки на устройство.
Без токена или заполненных учетных данных агент отправит сообщения, не пытаясь аутентифицировать подлинность удаленного контекстного брокера.
С заполненным токеном агент будет использовать этот токен для аутентификации в удаленном контекстном брокере перед отправкой сообщения. Если токен недействителен, агент попытается использовать заданные учетные данные для создания нового.
Если учетные данные заполнены, агент будет использовать их для генерации токена из данного URI. Пока этот токен действителен, агент будет продолжать использовать его. Если токен больше не является действительным, агент попытается заменить его новым, основываясь на данных учетных данных.
Библиотека предоставляет класс Agent для управления агентом. Вы должны просто вызвать метод start , проходя 3 параметра:
AgentSuccessCallback вызванный, когда агент правильно запускается.AgentFailureCallback вызванный, когда агент не запускается правильно.Вот пример, чтобы начать агент:
@ SpringBootApplication
@ ComponentScan ( "com.orange" )
public class Application implements ApplicationListener < ApplicationReadyEvent > {
private static Logger logger = LoggerFactory . getLogger ( Application . class );
@ Autowired
private Agent agent ;
public static void main ( String [] args ) {
new SpringApplicationBuilder ()
. sources ( Application . class )
. bannerMode ( Banner . Mode . LOG )
. run ( args );
}
@ Override
public void onApplicationEvent ( ApplicationReadyEvent applicationReadyEvent ) {
agent . start ( new MyOpenLpwaNgsiConverter (),
() -> {
logger . debug ( "IoT agent started" );
},
ex -> {
logger . error ( "IoT agent not started" , ex );
}
);
}
}Под капотом агент подключится к брокеру Live Objects® MQTT, чтобы получить полезные нагрузки восходящей линии связи на этом этапе.
Этот проект находится под версией лицензии Apache 2.0.