Este proyecto es un puente entre la red Orange Lora®* y el protocolo OMA NGSIV1 utilizado por el corredor de contexto de Orión, así como por otros componentes del ecosistema Fiware.
Este agente IoT es una biblioteca que se puede usar, por ejemplo, en una aplicación SpringBoot.
Este agente permite:
Esta biblioteca utiliza la plataforma Live Objects® (https://liveobjects.orange-business.com/#/liveobjects) para administrar las cargas de Lora®*.
La implementación de NGSI V1 es proporcionada por la biblioteca Orange-Opensaurce/Fiware-NGSI-API.
Aquí está la arquitectura global del agente IoT que utiliza la plataforma Live Objects® para administrar cargas útiles de dispositivos Lora®*:
Arquitectura
Cree un proyecto maven con dependencias de arranque de primavera y nuestra biblioteca:
< dependency >
< groupId >com.orange.fiware</ groupId >
< artifactId >openlpwa-iotagent</ artifactId >
< version >X.Y.Z</ version >
</ dependency > donde XYZ es la versión de la biblioteca para usar (verifique las etiquetas Git).
Puede modificar algunas configuraciones de aplicación, ya sea agregando:
src/main/resources/application.properties en su aplicación.Esta es una lista de las propiedades de la aplicación:
| Nombre | Descripción | Valor predeterminado |
|---|---|---|
| contextbroker.localurl | URL pública a este caso | http: // localhost: 8081 |
| contextbroker.remoteurl | URL al corredor remoto (Orion) | http: // localhost: 8082 |
| contextbroker.remotefiWareservice | Nombre del servicio de corredor remoto | |
| contextbroker.remotefiWareservicePath | ruta de servicio de corredores remotos | |
| contextbroker.remoteAuthToken | Token de OAuth para corredor remoto seguro | |
| contextbroker.remoteAuthTokenuri | URI utilizado para recuperar el token de autenticación | |
| contextbroker.remoteclientid | ID de cliente de Broker de contexto remoto | |
| contexteboker.remoteclientsecret | Contexto remoto Secreto del cliente de Broker | |
| contextbroker.remoteUserlogin | Contexto remoto Broker Inicio de sesión del usuario | |
| contextbroker.remoteUserPassword | Contexto remoto Broker contraseña de usuario | |
| Openlpwaprovider.resturl | Live Objects® ** API URL | https://lpwa.liveobjects.orange-business.com |
| Openlpwaprovider.apikey | Live Objects® ** Clave de API | |
| Openlpwaprovider.mqtturi | Live Objects® ** MQTT Broker Uri | tcp: //liveobjects.orange-business.com: 1883 |
| OpenLPWAPROVIDER.MQTTCLIENTID | Live Objects® ** Identificador del cliente MQTT Broker | fiware-iotagent-cliente |
Para usar un dispositivo Lora®* con el agente, siga estos pasos:
Antes de comenzar a usar el agente, debe registrar el dispositivo en el portal LPWA Live Objects® (https://lpwa.liveobjects.orange-business.com). Si su dispositivo está correctamente registrado y activo, debe ver las próximas cargas en el sitio web.
Los datos recopilados por los objetos en vivo se pueden enrutar a colas de mensajes (FIFO). La creación de una regla de enrutamiento se realiza en tres pasos:
Puede crear su FIFO y definir sus reglas de enrutamiento en Live Objects® Portal (https://lpwa.liveobjects.orange-business.com).
La plataforma Live Objects® administra las cargas útiles hexadecimales hexadecimales. No es posible decodificar la carga útil en la plataforma, por lo que debe hacer este proceso cuando use el agente.
Para hacer este trabajo, debe implementar la interfaz OpenLpwaNgsiConverter con los dos métodos siguientes:
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
} El método decodeData se considera para cada carga útil de enlace ascendente enviada por un dispositivo. Debe implementar este método para decodificar una carga útil hexadecimal enviada y crear una lista de atributos de contexto NGSI para actualizar la entidad NGSI mapeada con el dispositivo (consulte Inicio del agente).
@ Override
public String encodeDataForCommand ( String deviceID , String commandName , ContextAttribute attribute ) {
String data = attribute . getValue (). toString ();
// Build an hexadecimal payload to send a command
} Se requiere que el método encodeDataForCommand cada carga útil de enlace descendente envíe a un dispositivo (ver comando Enviar a un dispositivo). Debe implementar este método para recuperar el comando en un atributo de contexto NGSI y codificar la carga útil hexadecimal correspondiente para enviar a un dispositivo.
Sin una token o credenciales completadas, el agente enviará mensajes sin intentar autenticarse con el corredor de contexto remoto.
Con un token completado, el agente usará este token para autenticarse con el corredor de contexto remoto antes de enviar un mensaje. Si el token no es válido, el agente intentará usar las credenciales dadas para generar una nueva.
Si se completan las credenciales, el agente las usará para generar un token del URI dado. Mientras este token sea válido, el agente continuará usándolo. Si el token ya no es válido, el agente intentará reemplazarlo con uno nuevo, basado en las credenciales dadas.
La biblioteca proporciona una clase Agent para administrar el agente. Simplemente debe llamar al método start que pasa 3 parámetros:
AgentSuccessCallback que se llama cuando el agente se inicia correctamente.AgentFailureCallback llamado Callback llamado cuando el agente no se inicia correctamente.Aquí hay un ejemplo para iniciar el 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 );
}
);
}
}Debajo del capó, el agente se conectará al corredor Live Objects® MQTT para recuperar las cargas útiles de enlace ascendente durante este paso.
Este proyecto está bajo la Licencia Apache Versión 2.0.