• 20 hours
  • Hard

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 12/12/19

Exercice d'entraînement : Intégrez une nouvelle technologie dans une architecture oneM2M

Log in or subscribe for free to enjoy all this course has to offer!

Interagissez avec un IPE déjà intégré

Cette activité préparatoire a pour but de vous faire mieux comprendre le rôle de l’IPE par la pratique avant d’en développer un vous-même.

Lancez l’IPE

Dans le terminal avec lequel vous avez lancé OM2M, tapez la commande ss ipe. Un résultat de la forme suivante devrait s’afficher :

"Framework is launched."

 id  State       Bundle
 34  RESOLVED    org.eclipse.om2m.ipe.sample_1.0.0.20170911-0907

L’id permet d’indiquer avec quel service on veut interagir, ici l’ipe de démonstration (appelé ipe sample). Tapez ensuite start 34, en remplaçant 34 par l’id que vous avez obtenu à la commande précédente. Après un défilement de logs dans la console, une fenêtre intitulée “Sample Simulated IPE” s’affiche. Vous pouvez appuyer sur les interrupteurs pour contrôler les lampes via l’interface graphique.

Interagissez avec l’IPE

Si vous vous connectez à l’interface Web de votre instance locale d’OM2M, vous remarquerez l’apparition de ressources sous votre CSE, intitulées LAMP_*. Ces ressources ont été créées par l’IPE afin de permettre via OM2M l’interaction avec les lampes. Si vous examinez le container DESCRIPTOR sous LAMP_0, il contient une content instance (cin_…) qui décrit l’interface de la lampe. À l’aide des fonctions décrites par ce descripteur (accessibles en bas du tableau à droite), vous pouvez aussi contrôler les lampes. De plus, si vous observez les ressources sous le container DATA, elles évoluent lorsque vous cliquez sur l’interface graphique.

L’IPE assure bien sa fonction d’interface bidirectionnelle entre OM2M et la technologie spécifique (ici l’interface graphique simulant les lampes).

Intégrez une nouvelle technologie

La technologie source

Pour rendre cet exercice accessible au plus grand nombre, la technologie à intégrer se base comme dans la première partie de l’activité sur des objets simulés. Cette fois-ci, vous devrez intégrer des capteurs avec lesquels vous pouvez interagir via une librairie, accessible dans l’archive mooc-ipe-helper.jar.

La classe principale de l’interface de cette technologie est le SensorManager. C’est lui qui permet de créer les plateformes, c’est-à-dire l’ensemble des capteurs liés entre eux. Une plateforme est associée à un lieu auquel l’utilisateur pourrait accéder physiquement pour consulter les données sur un écran, par exemple. Chaque plateforme est repérée par un identifiant unique. Le SensorManager permet aussi d’ajouter des capteurs sur les plateformes.

Il existe différents types de capteurs, tous héritant de la classe VirtualSensor. Chaque capteur est lui aussi associé à une pièce, celle pour laquelle il surveille une propriété (luminosité, température…). Notons dès à présent qu’un capteur peut être associé à une plateforme, sans pour autant que les deux soient dans la même pièce. Tous les capteurs de cette technologie sont passifs : ils ne communiquent pas de résultat si on ne leur en demande pas.

Le comportement attendu dans OM2M

L’application doit être associée à une ApplicationEntity, qui représente le SensorManager. Sous cette AE, chaque plateforme devra être représentée par un container dont un label précisera la localisation. Pour chaque capteur affilié à la plateforme, un container sera créé sous le container représentant ladite plateforme, associé à un label pour en définir le centre d’intérêt (température, luminosité…) et la localisation. Enfin, votre IPE devra implémenter une boucle d’attente active : il interrogera le réseau de capteurs à intervalles réguliers, et créera des content instances sous les capteurs pour indiquer le résultat des mesures.

Les outils à votre disposition

Pour vous aider dans votre travail, la libraire ipe-helper, en plus d'implémenter le comportement des capteurs virtuels, donne accès à des fonctions qui facilitent l'interaction avec OM2M.

ResourceCreator et Serializer

Comme son nom l’indique, le ResourceCreator permet de créer des objets représentant des ressources d'OM2M. Selon les ressources et leurs propriétés, divers attributs sont attendus pour leur création ou leur manipulation. En particulier, vous noterez que, pour ajouter des labels à une ressource, vous devrez faire appel à sa fonction getLabel() qui permet d’accéder à une référence vers sa liste de labels, et d'ajouter des labels à cette même liste.

Le rôle du Serializer est de transformer ces objets Java en une représentation XML standard, et donc compréhensibles par n’importe quelle plateforme implémentant le standard oneM2M en général, et donc, vous vous en doutez, par OM2M en particulier.

HTTPRequest, HTTPPost et HTTPGet

Ces objets permettent de manipuler et d’envoyer des requêtes HTTP à travers une interface de haut niveau. Vous retrouverez, dans les méthodes offertes par ces objets, les éléments que vous avez déjà dû manipuler dans POSTMAN : query strings, headers, body…

Clonez et complétez le projet mooc-ipe

Le projet que vous devez développer est déjà configuré, et sa structure partiellement en place. Vous pouvez le récupérer en clonant le git https://framagit.org/laas-sara-iot/mooc-ipe.git :

git clone https://framagit.org/laas-sara-iot/mooc-ipe.git

Celui-ci contient deux dossiers : ipe, dans lequel est stocké le code que vous devrez compléter, et ipe-helper, qui contient le code source de la librairie complémentaire. Vous n'aurez pas à modifier ce dernier, qui n'est donné quà titre indicatif. Importez le projet mvn du dossier ipe dans votre environnement de développement.

Vous devez implémenter l’interface IVirtualSensor dans la classe IPE. En exécutant le code à l’aide de la commande mvn exec:java -Dexec.classpathScope=compile, vous exécuterez le main de la classe Controller.

L’interface IVirtualSensor

L’ensemble des fonctions que vous devez compléter sont déclarées dans l’interface IVirtualSensor. La Javadoc de cette interface vous indique le rôle de chaque fonction, ainsi que le sens de ses arguments. Cette interface est implémentée par la classe IPE, dans laquelle vous devrez compléter les méthodes issues de IVirtualSensor. Vous êtes libre de déclarer d’autres classes pour vous aider dans votre travail.

Indications complémentaires

- Dans oneM2M, chaque type de ressource est représenté par un entier. La liste complète est accessible dans la spécification du standard, mais voici un rappel de ceux dont vous aurez besoin dans cette activité.

  • Application Entity : 2

  • Container : 3

  • Content instance : 4

- Le choix de l’application id de l’Application Entity que vous devez créer est laissé à votre discrétion.

Testez votre solution

À l’issue de votre travail, votre code doit permettre de créer des plateformes et des capteurs en parallèle dans la librairie et dans OM2M.

Par exemple, l’exécution du code suivant :

IPE ipe = new IPE();
 SensorManager sm = ipe.createSensorManager("SensorManager");
 ipe.createPlatform(sm.getId(), new Platform("Home_Platform", T_Room.BEDROOM));
 ipe.createPlatform(sm.getId(), new Platform("Garden_Platform", T_Room.LIVINGROOM));
 ipe.addSensor(sm.getId(), "Home_Platform", new TemperatureSensor("Bedroom_Thermometer", T_Room.BEDROOM));
 ipe.addSensor(sm.getId(), "Home_Platform", new TemperatureSensor("Livingroom_Thermometer", T_Room.LIVINGROOM));
 ipe.addSensor(sm.getId(), "Home_Platform", new TemperatureSensor("Bedroom_Thermometer", T_Room.BEDROOM));
 ipe.addSensor(sm.getId(), "Garden_Platform", new TemperatureSensor("Garden_Thermometer", T_Room.GARDEN));
 ipe.readSensor(sm.getId(), "Home_Platform", "Livingroom_Thermometer");
 ipe.readSensor(sm.getId(), "Garden_Platform", "Garden_Thermometer");

Doit donner l’arbre de ressource suivant : OM2M resource tree.

Et doit donner ces résultats quand on interroge la librairie :

 System.out.println("Number of platforms : "+sm.getAllPlatforms().size());
 for(Platform p : sm.getAllPlatforms()){
      System.out.println("Pour "+p.getName()+" : "+p.getAllSensor().size()+" sensors");
}

Number of platforms : 2

Pour Home_Platform : 2 sensors

Pour Garden_Platform : 1 sensors

Accéder à la correction

Un exemple de code implémentant le comportement attendu est disponible sur le dépôt git, sur la branche correction :

git checkout correction
Signaler un bug

Si le code fourni ne se comporte pas comme indiqué, vous pouvez nous notifier du problème rencontré via le système de tickets associé au dépôt : https://framagit.org/laas-sara-iot/mooc-ipe/issues. Attention, ce système est uniquement destiné à signaler les problèmes TECHNIQUES de la librairie, et n'a pas pour but de poser des questions concernant l'apprentissage.

Example of certificate of achievement
Example of certificate of achievement