• 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 : Déployez une architecture OM2M sur votre machine

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

Prérequis

1)     Java Version 1.7 MINIMUM

  • Vérifier la version de JAVA avec la commande “java –version”

  • Configurer le "JAVA_HOME" et le "PATH" si besoin, si jamais Java n’est pas reconnu :

-   JAVA_HOME=/usr/local/jdk1...
-   PATH=$JAVA_HOME/bin:$PATH

2)     Installer un client REST

Nous vous proposons d’utiliser Postman. L’application est disponible ici : https://www.getpostman.com/

Exercices :

1)  Récupérer la plateforme OM2M

=> Télécharger l’archive préconfigurée fournie avec cette activité.

2)  Configurer la plateforme

De base, la plateforme est correctement configurée pour une utilisation en local sur une même machine. Si nécessaire, un tutoriel est disponible pour modifier cette configuration.

https://wiki.eclipse.org/OM2M/one/Configuration

3)  Démarrer la plateforme

Afin de démarrer le IN (Infrastructue Node) et un MN (middle Node), nous allons suivre les étapes de ce tutoriel : https://wiki.eclipse.org/OM2M/one/Starting

a)     Lancement d'IN-CSE
  • Allez dans le dossier IN-CSE :

" in-cse / <os> / <ws> / <arch>" 
  •  Démarrez l'IN-CSE en exécutant le script "start.bat" sur Windows, ou "start.sh" sur Linux et Mac OS.

Une fois l'IN-CSE démarré, vous verrez une console OSGi. Vous pouvez taper "ss" + Entrée pour afficher un état récapitulatif de tous les plugins installés. Tapez "exit" pour arrêter la plateforme.

Un exemple de terminal OSGi avec la liste des plugins installés
Un exemple de terminal OSGi avec la liste des plugins installés
b)     Accéder à l’interface Web
  • Ouvrez votre navigateur et connectez-vous à l'adresse " http://127.0.0.1:8080/webpage " pour accéder à l'interface Web IN-CSE.

  • Entrez le nom d'utilisateur "admin" et le mot de passe "admin" puis cliquez sur le bouton de connexion pour afficher l'arborescence des ressources IN-CSE.

Interface Web IN-CSE: authentification
Interface Web IN-CSE : authentification

Après une authentification réussie, la ressource IN-CSE sera affichée. Vous pouvez voir les sous-ressources et attributs cseBase "in-cse".

Vous pouvez vous déconnecter en cliquant sur le bouton "Déconnexion".

Interface Web IN-CSE: ressource cseBase in-cse
Interface Web IN-CSE : ressource cseBase in-cse
c)     Lancement de MN-CSE
  • Accédez au dossier du MN-CSE: " mn-cse/<os>/<ws>/<arch>".

  • Démarrez le MN-CSE en exécutant le script "start.bat" sur Windows ou "start.sh" sur Linux et Mac OS.

Une fois le MN-CSE démarré, vous verrez une console OSGi. Vous pouvez taper "ss" pour signaler un état récapitulatif de tous les plugins installés.

Le MN-CSE s'authentifie automatiquement auprès de l’IN-CSE distant spécifié dans le fichier de configuration de la passerelle. Si le IN-CSE n'est pas déjà en cours d'exécution, le MN-CSE continue d'envoyer des demandes d'authentification (une requête toutes les 10 secondes).

Après une authentification réussie, la ressource "mn-cse" est ajoutée à l'arbre des ressources du in-cse, et la ressource "in-cse" est ajoutée à l'arbre des ressources mn-cse. Vous pouvez maintenant accéder à la ressource MN-CSE enregistrée à partir de l'interface Web IN-CSE sous l'URI "/ in-cse / in-name / mn-cse".

Grâce à l'interface Web, vous pouvez accéder en toute transparence à toutes les passerelles authentifiées. Vous remarquez l'existence d'un MN-CSE authentifié avec l'identifiant "mn-cse".

Cliquez sur la ressource "mn-cse" pour afficher les sous-ressources et attributs du MN-CSE distants. Vous pouvez cliquer sur le bouton "mn-cse" de l'attribut "link" pour vous afficher directement l'arborescence des ressources du MN-CSE.

Interface Web IN-CSE: ressource mn-cse distante
Interface Web IN-CSE : ressource mn-cse distante

L'arborescence des ressources MN-CSE sera affichée. À ce moment-là, l'IN-CSE agira comme un proxy pour rediriger vos requêtes jusqu’au MN-CSE.

Interface Web IN-CSE: ressource cseBase mn-cse
Interface Web IN-CSE : ressource cseBase mn-cse

Initialement, le MN-CSE contient également la ressource CseBase (id = mn-cse) et la ressource AccessRight (id = acp_admin).

Désormais, vous avez déployé l’architecture suivante :

Un IN-CSE, déployé sur localhost :8080 et un MN-CSE, déployé sur localhost : 8181, qui est enregistré à l’IN.

3)  Comprendre et gérer l’arbre de ressources

Dans cette partie, nous utiliserons le client REST "POSTMAN " pour CRÉER, METTRE À JOUR, RÉCUPÉRER et SUPPRIMER des ressources dans l'arbre des ressources d’OM2M.

Ces procédures correspondent respectivement aux méthodes POST, PUT, GET, DELETE du client REST.

Pour accéder à l'interface du développeur, connectez-vous à http://localhost:8080/webpage, comme vu précédemment.

Utilisez « admin » comme utilisateur et « admin » comme mot de passe, si vous n'avez pas modifié la configuration par défaut. Vous pouvez utiliser l'interface pour explorer les ressources existantes au fil des différentes manipulations.

Pour voir un exemple basique de ressources, démarrez le plugin IPE SAMPLE. Pour ce faire, tapez « ss ipe » dans le terminal du MN CSE pour connaître l’identifiant du plugin. Ensuite, tapez « start <id> » en remplaçant <id> par l’identifiant du plugin ipe sample.

Cela va démarrer un plugin qui simule deux lampes et des boutons permettant de les allumer et de les éteindre. Cela va également créer les ressources correspondantes dans l’arbre de ressources d’OM2M.

Vous pouvez allumer/éteindre les lampes et vous pourrez voir, via l’interface Web, la création de nouvelles Content Instances.

a)   Interagir avec l’API REST via un client

Authentification : pour l’originator d'une demande à reconnaître, vous devez ajouter un en-tête spécifique à oneM2M avec HTTP. L'en-tête est formaté comme suit :

x-m2m-origin: <expéditeur>

Vous pouvez ajouter cet en-tête dans le champ d'en-tête du client REST. Utilisez "admin:admin" comme originator pour commencer et interagir avec l'API REST.

i)      Récupérer une ressource   

•       Requête HTTP :

Champ

Valeur

URL

http://127.0.0.1:8080/~/in-cse

Méthode

GET

En-tête

X-M2M-Origin: admin:admin

Accept: application/xml

Corps

(vide)

•       Réponse HTTP à obtenir :

Champ

Valeur

Statut

200 OK

Corps

<? xml version = "1.0" encoding = "UTF-8"?>

 <m2m: cb xmlns: m2m = "http://www.onem2m.org/xml/protocols" rn = "in-name">

     <ty> 5 </ ty>

     <ri> / in-cse </ ri>

     <ct> 20151104T150228 </ ct>

     <lt> 20151104T150228 </ lt>

     <acpi> / in-cse / acp-563660429 </ acpi>

     <cst> 1 </ cst>

     <csi> in-cse </ csi>

     <srt> 1 2 3 4 5 9 14 15 16 17 23 </ srt>

     <poa> http://127.0.0.1:8080/ </ poa>

 </ m2m: cb>

Vous pouvez définir l'en-tête Accept sur application / json si vous souhaitez obtenir une réponse au format JSON au lieu de XML.

ii)      Créer une application "MY_SENSOR"

  • Envoyez une requête HTTP avec les paramètres suivants pour créer une application MY_SENSOR sur la passerelle.

  • Dans la création, nous avons deux en-têtes importants :

=> Content-Type : cet en-tête contient 2 informations séparées par un point-virgule.

  • Le format de l'échange, ici "application / xml".

  • Le type de ressource à créer, ici "ty = 2" (2 pour AE, voir la spécification oneM2M TS-0004 (V2.7.1), Tableau 6.3.4.2.1-1).

Champ

Valeur

URL

http://127.0.0.1:8080/~/in-cse

Méthode

POST

En-tête

X-M2M-Origin: admin: admin

Content-type : application / xml; ty = 2

Corps

 <m2m: ae xmlns: m2m = "http://www.onem2m.org/xml/protocols" rn = "MY_SENSOR">

     <api> app-sensor </ api>

     <lbl> Type/sensor Category/temperature Location/home </lbl>

     <rr> false </ rr>

 </ m2m: ae>

•       Réponse HTTP :

Champ

Valeur

Statut

201 Created

En-tête

Content-Location: /in-cse/ae-CAE449907766

Corps

<? xml version = "1.0" encoding = "UTF-8"?>

 <m2m: ae xmlns: m2m = "http://www.onem2m.org/xml/protocols" rn = "MY_SENSOR">

     <ty> 2 </ ty>

     <ri> ae-CAE449907766 </ ri>

     <pi> / in-cse </ pi>

     <ct> 20151104T151858 </ ct>

     <lt> 20151104T151858 </ lt>

     <lbl> Type / capteur Catégorie / température Location / home </ lbl>

     <acpi> / in-cse / acp-89704715 </ acpi>

     <api> app-sensor </ api>

     <aei> CAE449907766 </ aei>

     <rr> false </ rr>

 </ m2m: ae>

Vous pouvez vérifier que l'application est bien créée sur l'interface Web.

iii)      Découvrir les ressources en fonction de leurs libellés

Vous pouvez découvrir les ressources disponibles en fonction de « labels » de recherche à l'aide de la ressource de découverte. Le paramètre fu (acronyme de "Filter Usage") indique qu'il s'agit d'une requête de découverte. Le lbl ("Label") indique l'étiquette spécifique sur laquelle appliquer le filtre.

•       Requête HTTP :

Champ

Valeur

URL

http://127.0.0.1:8080/~/in-cse?fu=1&lbl=Type/sensor

Méthode

GET

En-tête

X-M2M-Origin: admin:admin

Accept: application/xml

Corps

(vide)

•       Réponse HTTP :

Champ

Valeur

Statut

200 OK

Corps

 <? xml version = "1.0" encoding = "UTF-8"?>

 <m2m: disres xmlns: m2m = "http://www.onem2m.org/xml/protocols">

     <ref ty = "2"> <uri-de-la-ressource> </ ref>

 </ m2m: disres>

iv)      Créer un container DESCRIPTOR

•       Envoyez une requête HTTP avec les paramètres suivants pour créer une ressource container DESCRIPTOR sous l'application MY_SENSOR.

Champ 

Valeur

URL

http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR

Méthode

POST

En-tête

X-M2M-Origin: admin:admin

Content-type: application/xml;ty=3

Corps

<m2m:cnt xmlns: m2m = "http://www.onem2m.org/xml/protocols" rn = "DESCRIPTOR">

 </m2m:cnt>

•       Réponse HTTP :

Champ

Valeur

Statut

201 Created

En-tête

Content-Location: /in-cse/cnt-478855064

Corps

 <? xml version = "1.0" encoding = "UTF-8"?>

 <m2m:cnt xmlns: m2m="http://www.onem2m.org/xml/protocols" rn="DESCRIPTOR">

     <ty> 3 </ty>

     <ri> cnt-478855064 </ri>

     <pi> / in-cse / ae-CAE449907766 </pi>

     <ct> 20151104T155844 </ct>

     <lt> 20151104T155844 </lt>

     <acpi> / in-cse / acp-89704715 </acpi>

     <cni> 0 </cni>

     <cbs> 0 </cbs>

 </ m2m:cnt>

v)      Créer une description contentInstance

•       Envoyez une requête HTTP avec les paramètres suivants pour créer une ressource d'instance de contenu de description sous le container "DESCRIPTOR".

Champ

Valeur

URL

http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR/DESCRIPTOR

Méthode

POST

En-tête

X-M2M-Origin: admin:admin 
Content-Type: application/xml;ty=4

Corps

<m2m:cin xmlns:m2m="http://www.onem2m.org/xml/protocols">

    <cnf>application/xml</cnf>

    <con>

        &lt;obj&gt;

            &lt;str name=&quot;type&quot; val=&quot;Temperature_Sensor&quot;/&gt;

            &lt;str name=&quot;location&quot; val=&quot;Home&quot;/&gt;

            &lt;str name=&quot;appId&quot; val=&quot;MY_SENSOR&quot;/&gt;

            &lt;op name=&quot;getValue&quot; href=&quot;/in-cse/in-name/MY_SENSOR/DATA/la&quot;

         in=&quot;obix:Nil&quot; out=&quot;obix:Nil&quot; is=&quot;retrieve&quot;/&gt;

        &lt;/obj&gt;

    </con>

</m2m:cin>

vi)      Créer un container DATA

•       Envoyez une requête HTTP avec les paramètres suivants pour créer une ressource de container "DATA" sous l'application "MY_SENSOR".

Champ

Valeur

URL

http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR

Méthode

POST

En-tête

X-M2M-Origin: admin:admin

Content-type: application/xml;ty=3

Corps

<m2m:cnt xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="DATA">

</m2m:cnt>

vii)      Créer une donnée avec un contentInstance

•       Envoyez une requête HTTP avec les paramètres suivants pour créer une ressource d'instance de contenu de données sous le container "DATA".

Champ

Valeur

URL

http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR/DATA

Méthode

POST

En-tête

X-M2M-Origin: admin:admin
Content-Type: application/xml;ty=4

Corps

<m2m:cin xmlns:m2m="http://www.onem2m.org/xml/protocols">

    <cnf>message</cnf>

    <con>

      &lt;obj&gt;

        &lt;str name=&quot;appId&quot; val=&quot;MY_SENSOR&quot;/&gt;

        &lt;str name=&quot;category&quot; val=&quot;temperature &quot;/&gt;

        &lt;int name=&quot;data&quot; val=&quot;27&quot;/&gt;

        &lt;int name=&quot;unit&quot; val=&quot;celsius&quot;/&gt;

      &lt;/obj&gt;

    </con>

</m2m:cin>

viii)      Créer une application "MY_SENSOR" en utilisant JSON

•       Comme OM2M prend en charge JSON, vous pouvez envoyer une requête HTTP avec les paramètres suivants pour créer une application MY_SENSOR sur la passerelle à l'aide de JSON au lieu de XML.

Champ

Valeur

URL

http://127.0.0.1:8080/~/in-cse

Méthode

POST

En-tête

X-M2M-Origin: admin:admin

Content-type: application/json;ty=2

Corps

  {

    "m2m: ae": {

      "api": "app-sensor",

      "rr": "faux",

      "lbl": ["Type / capteur", "Catégorie / température", "Lieu / domicile"],

      "rn": "MY_SENSOR"

    }

  }

Vous pouvez interagir avec le système de la même manière en utilisant JSON au lieu de XML avec un équivalent du corps XML.

(En revanche, faites attention aux balises pour utiliser un tableau JSON, par exemple :

"lbl": "["label-1","label-2"].)

ix)      Abonnez-vous aux données de MY_SENSOR

•       Téléchargez l'exemple de serveur de surveillance à partir de ce lien : https://www.laas.fr/projects/IOT/sites/www.laas.fr.projects.IOT/files/u77/monitor.jar

•       Démarrez le serveur Monitor à l'aide de la commande suivante : java -jar monitor.jar

•       Le moniteur commence à écouter sur le port = 1400 et avec un contexte = /monitor.

Exemple dans la console : le serveur est bien démarré et écoute sur le bon port avec le bon contexte
Exemple dans la console : le serveur est bien démarré et écoute sur le bon port avec le bon contexte.

Maintenant, vous pouvez :

•       Envoyer une requête HTTP avec les paramètres suivants pour créer une ressource "Abonnement" pour recevoir des événements asynchrones à partir de l'application "MY_SENSOR". C’est-à-dire que, quand il y aura des changements, vous recevrez une notification.

•       L'URL d'écoute du moniteur ( http://127.0.0.1:1400/monitor ) doit être ajoutée sur la balise "nu" de la représentation de l'abonnement.

•       Exemple de requête HTTP :

Champ

 Valeur

URL

http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR/DATA

Méthode

POST

En-tête

X-M2M-Origin: admin:admin

Content-type: application/xml;ty=23

Corps

<m2m:sub xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="SUB_MY_SENSOR">

    <nu>http://localhost:1400/monitor</nu>

    <nct>2</nct>

</m2m:sub>

•       Vérifiez l'abonnement créé sur l'interface Web (apparition d’une ressource SUB).

•       Créez une nouvelle ressource d'instance de contenu d'événement sous le container "DATA", comme vu précédemment.

•       Le nouvel événement est envoyé par la plateforme aux abonnés intéressés.

•       Voici un exemple de la représentation XML "Notify" que vous recevrez :

<?xml version="1.0" encoding="UTF-8"?>

<m2m:sgn xmlns:m2m="http://www.onem2m.org/xml/protocols">

   <nev>

      <rep rn="cin_name1">

         <ty>4</ty>

         <ri>cin-46677406</ri>

         <pi>/in-cse/cnt-397256037</pi>

         <ct>20151104T162611</ct>

         <lt>20151104T162611</lt>

         <st>0</st>

         <cnf>message</cnf>

         <cs>11</cs>

         <con>hello world</con>

      </rep>

      <rss>1</rss>

   </nev>

   <sud>false</sud>

   <sur>/in-cse/in-name/MY_SENSOR/DATA/SUB_MY_SENSOR</sur>

</m2m:sgn>

•       Le moniteur reçoit une ressource "Notify" incluant le nouveau "ContentInstance".

Example of certificate of achievement
Example of certificate of achievement