Este projeto é uma ponte entre a rede Orange Lora®* e o protocolo OMA NGSIV1 usado pelo corretor de contexto Orion, bem como por outros componentes do ecossistema Fiware.
Este agente da IoT é uma biblioteca que pode ser usada, por exemplo, em um aplicativo de trampolim.
Este agente permite:
Esta biblioteca usa a plataforma Live Objects® (https://liveObjects.orange-business.com/#/liveObjects) para gerenciar o LORA®* cargas úteis.
A implementação NGSI V1 é fornecida pela biblioteca Orange-OpenSource/Fiware-NGSI-API.
Aqui está a arquitetura global do agente da IoT usando a plataforma Live Objects® para gerenciar o LORA®* Cargas úteis do dispositivo:
Arquitetura
Crie um projeto MAVEN com dependências de botas de primavera e nossa biblioteca:
< dependency >
< groupId >com.orange.fiware</ groupId >
< artifactId >openlpwa-iotagent</ artifactId >
< version >X.Y.Z</ version >
</ dependency > onde XYZ é a versão da biblioteca a ser usada (verifique as tags Git).
Você pode modificar algumas configurações de aplicativos adicionando:
src/main/resources/application.properties em seu aplicativo.Esta é uma lista das propriedades do aplicativo:
| Nome | Descrição | Valor padrão |
|---|---|---|
| contextbroker.localurl | URL público para esta instância | http: // localhost: 8081 |
| ContextBroker.remoteurl | URL para o corretor remoto (Orion) | http: // localhost: 8082 |
| ContextBroker.RemoteFiWarEserService | Nome do serviço de corretor remoto | |
| ContextBroker.RemoteFiWarEserServicePath | Caminho de serviço de corretor remoto | |
| ContextBroker.RemoteAuthToken | Oauth Token para corretor remoto garantido | |
| contextbroker.remoteauthtokenuri | Uri usado para recuperar o token de autenticação | |
| ContextBroker.remoteClientId | ID do cliente do corretor de contexto remoto | |
| ContextBroker.remoteClientSecret | Segredo do cliente do corretor de contexto remoto | |
| ContextBroker.RemoteUserLogin | Login de usuário do corretor de contexto remoto | |
| ContextBroker.RemoteUserPassword | Senha do usuário do corretor de contexto remoto | |
| openlpwaprovider.resturl | Live Objects® ** URL da API | https://lpwa.liveObjects.orange-business.com |
| openlpwaprovider.apikey | LIVE Objects® ** API Key | |
| openlpwaprovider.mqtturi | Live Objects® ** MQTT Broker Uri | tcp: //liveObjects.orange-business.com: 1883 |
| Openlpwaprovider.mqttclientId | Live Objects® ** MQTT Broker Client Identifier | Fiware-IoTagent-Client |
Para usar um dispositivo Lora®* com o agente, siga estas etapas:
Antes de começar a usar o agente, você deve registrar o dispositivo no portal LPWA Live Objects® (https://lpwa.liveObjects.orange-business.com). Se o seu dispositivo estiver corretamente registrado e ativo, você deverá ver as próximas cargas úteis no site.
Os dados coletados por objetos vivos podem ser roteados para filas de mensagens (FIFO). A criação de uma regra de roteamento é feita em três etapas:
Você pode criar seu FIFO e definir suas regras de roteamento no portal Live Objects® (https://lpwa.liveObjects.orange-business.com).
A plataforma LIVE Objects® gerencia Lora®* cargas úteis hexadecimais. Não é possível decodificar a carga útil na plataforma; portanto, você deve fazer esse processo ao usar o agente.
Para fazer esse trabalho, você deve implementar a interface OpenLpwaNgsiConverter com os dois métodos a seguir:
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
} O método decodeData é chamado para cada carga útil de uplink enviada por um dispositivo. Você deve implementar esse método para decodificar uma carga útil hexadecimal enviada e criar uma lista de atributos de contexto NGSI para atualizar a entidade NGSI mapeada com o dispositivo (consulte Iniciar o agente).
@ Override
public String encodeDataForCommand ( String deviceID , String commandName , ContextAttribute attribute ) {
String data = attribute . getValue (). toString ();
// Build an hexadecimal payload to send a command
} O método encodeDataForCommand é chamado para cada carga útil de downlink para enviar para um dispositivo (consulte o comando enviar para um dispositivo). Você deve implementar esse método para recuperar o comando em um atributo de contexto NGSI e codificar a carga útil hexadecimal correspondente para enviar para um dispositivo.
Sem um token ou credenciais preenchidas, o agente enviará mensagens sem tentar se autenticar para o corretor de contexto remoto.
Com um token preenchido, o agente usará esse token para se autenticar para o corretor de contexto remoto antes de enviar uma mensagem. Se o token for inválido, o agente tentará usar as credenciais fornecidas para gerar uma nova.
Se as credenciais forem preenchidas, o agente as usará para gerar um token a partir do URI fornecido. Enquanto este token for válido, o agente continuará a usá -lo. Se o token não for mais válido, o agente tentará substituí -lo por um novo, com base nas credenciais fornecidas.
A biblioteca fornece uma classe Agent para gerenciar o agente. Você deve apenas chamar o método start , passando 3 parâmetros:
AgentSuccessCallback chamado quando o agente é iniciado corretamente.AgentFailureCallback chamado quando o agente não é iniciado corretamente.Aqui está um exemplo para iniciar o agente:
@ 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 );
}
);
}
}Sob o capô, o agente se conectará ao corretor LIVE Objects® MQTT para recuperar cargas úteis uplink durante esta etapa.
Este projeto está no Apache License versão 2.0.