Ce projet est un pont entre le réseau Orange Lora® * et le protocole OMA NGSIV1 utilisé par le courtier de contexte Orion ainsi que par d'autres composants de l'écosystème fiware.
Cet agent IoT est une bibliothèque qui peut être utilisée par exemple dans une application Springboot.
Cet agent permet:
Cette bibliothèque utilise la plate-forme Live Objects® (https://liveobjects.orange-business.com/#/liveobjects) pour gérer les charges utiles de Lora® *.
L'implémentation NGSI V1 est fournie par la bibliothèque Orange-OpenSource / Fiware-NGSI-API.
Voici l'architecture globale de l'agent IoT utilisant la plate-forme Live Objects® pour gérer les charges utiles de l'appareil LORA® *:
Architecture
Créez un projet Maven avec les dépendances de démarrage Spring et notre bibliothèque:
< dependency >
< groupId >com.orange.fiware</ groupId >
< artifactId >openlpwa-iotagent</ artifactId >
< version >X.Y.Z</ version >
</ dependency > où XYZ est la version de la bibliothèque à utiliser (vérifiez les balises GIT).
Vous pouvez modifier certains paramètres d'application en ajoutant:
src/main/resources/application.properties dans votre application.Ceci est une liste des propriétés de l'application:
| Nom | Description | Valeur par défaut |
|---|---|---|
| ContextBroker.Localurl | URL publique à cette instance | http: // localhost: 8081 |
| ContextBroker.remOreurl | URL au courtier distant (Orion) | http: // localhost: 8082 |
| contextbroker.remotefiwarenservice | Nom du service du courtier distant | |
| contextbroker.remotefiwareservicepath | Chemin de service du courtier distant | |
| ContextBroker.remoteAuthToken | Jeton OAuth pour le courtier à distance sécurisé | |
| contextbroker.remoteAuthTokenuri | URI utilisé pour récupérer le jeton d'authentification | |
| contextbroker.remoteclientid | ID du client du courtier contextuel à distance | |
| ContextBroker.RemoteClientSecret | Secret client de courtier contextuel à distance | |
| contextBroker.remoteUserlogin | Connexion des utilisateurs du courtier à distance | |
| contextBroker.remoteUserPassword | Mot de passe utilisateur du courtier contextuel à distance | |
| openlpwaprovider.reresturl | URL de l'API objets en direct ** | https://lpwa.liveobjects.orange-business.com |
| openlpwaprovider.apikey | Clé API objets en direct ** | |
| openlpwaprovider.mqtturi | Live Objets® ** MQTT BROKER URI | TCP: //liveobjects.orange-business.com: 1883 |
| openlpwaprovider.mqttclientid | Live Objects® ** Identificateur de client de courtier MQTT | Fiware-iiotagent-Client |
Afin d'utiliser un appareil Lora® * avec l'agent, veuillez suivre ces étapes:
Avant de commencer à utiliser l'agent, vous devez enregistrer l'appareil sur le portail LPWA Live Objectts® (https://lpwa.liveobjects.orange-business.com). Si votre appareil est correctement enregistré et actif, vous devriez voir les charges utiles à venir sur le site Web.
Les données collectées par les objets en direct peuvent être acheminées vers des files d'attente de messages (FIFO). La création d'une règle de routage se fait en trois étapes:
Vous pouvez créer votre FIFO et définir vos règles de routage sur le portail Live Objectts® (https://lpwa.liveobjects.orange-business.com).
La plate-forme Live Objectts® gère les charges utiles HexaDecimal Lora® *. Il n'est pas possible de décoder la charge utile sur la plate-forme, vous devez donc faire ce processus lorsque vous utilisez l'agent.
Pour faire ce travail, vous devez implémenter l'interface OpenLpwaNgsiConverter avec les deux méthodes suivantes:
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
} La méthode decodeData est appelée pour chaque charge utile de liaison montante envoyée par un appareil. Vous devez implémenter cette méthode pour décoder une charge utile hexadécimale envoyée et créer une liste des attributs de contexte NGSI afin de mettre à jour l'entité NGSI mappée avec l'appareil (voir Démarrer l'agent).
@ Override
public String encodeDataForCommand ( String deviceID , String commandName , ContextAttribute attribute ) {
String data = attribute . getValue (). toString ();
// Build an hexadecimal payload to send a command
} La méthode encodeDataForCommand est appelée pour chaque charge utile de liaison descendante à envoyer à un périphérique (voir la commande Envoyer à un périphérique). Vous devez implémenter cette méthode pour récupérer la commande dans un attribut de contexte NGSI et coder la charge utile hexadécimale correspondante à envoyer à un appareil.
Sans un jeton ou des informations d'identification remplis, l'agent enverra des messages sans essayer de s'authentifier au courtier contextuel distant.
Avec un jeton rempli, l'agent utilisera ce jeton pour s'authentifier avec le courtier de contexte distant avant d'envoyer un message. Si le jeton n'est pas valide, l'agent essaiera d'utiliser les informations d'identification données pour en générer une nouvelle.
Si les informations d'identification sont remplies, l'agent les utilisera pour générer un jeton à partir de l'URI donné. Tant que ce jeton est valide, l'agent continuera à l'utiliser. Si le jeton n'est plus valide, l'agent essaiera de le remplacer par un nouveau, sur la base des informations d'identification données.
La bibliothèque fournit une classe Agent pour gérer l'agent. Vous devez simplement appeler la méthode start en passant 3 paramètres:
AgentSuccessCallback appelé lorsque l'agent est correctement démarré.AgentFailureCallback appelé lorsque l'agent n'est pas correctement démarré.Voici un exemple pour démarrer l'agent:
@ 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 );
}
);
}
}Sous le capot, l'agent se connectera au courtier MQTT d'objets en direct pour récupérer les charges utiles de liaison montante pendant cette étape.
Ce projet est sous la version 2.0 de la licence Apache.