diff --git a/concept/01_init.md b/concept/01_init.md new file mode 100644 index 0000000..9f10f49 --- /dev/null +++ b/concept/01_init.md @@ -0,0 +1,239 @@ +# Conception et architecture + +## Introduction + +Phase de conception : processus créatif de décision des roles, relation et interfaçage entre les composants d'un système. + +### Modélisation + +- Support de conception. +- Formalisation de la solution. + +Réduit la complexité du système : +- met en évidence les détails superflu, pour les éliminer. +- met en évidence les caractéristiques importantes à prioriser. + +Création d'un modèle : +- abstrait, non implémenté et dense en concepts +- concu en vue de décrire le système pour son implémentation et ses possible évolutions + +Le modèle sert : +- de document d'échange entre clients et développeurs +- d'outil de conception +- de référence, pour le développement, l'extension et la maintenance + +### Documentation + +Une possibilité : des textes de spécification : +- en langage naturel +- ambigu + +Document de spécification : +- en langage spécifique au domaine +- supposé exaustif + +Langages à différents niveaux de formalisastions. +- langages formels : s'appuient sur les mathématiques, permet des prouver des propriétés des spécifications. +- langages semi-formels : s'appuient sur les caractéristiques techniques de l'implémentation, suppose une expertise chez le lecteur car il en est le vérificateur. + +Langages formels : +- précis, analysable. +- maitrise difficile et usage laborieux. +- principalement restreint aux logiciels critiques. + +Langages semi-formels : +- suffisant. +- simple à lire et rédiger, peut être graphique. +- décrit le système à plusieurs niveau d'abstractions. + +## UML, Introduction générale + +Langage +- Syntaxe et règles d'écriture +- Représentations graphiques normalisées + +Modélisation +- abstraction du fonctionnement de la structure d'un système +- spécification et description + +Unifié +- fusion de plusieurs notations antérieures +- standard défini par l'OMG (Object Management Group) + +Historique +- 1.0.0 en 1997 +- 2.5.1 en 2017 + +en 1990 +- apparition de la programmation structurée objet, nécessité d'une méthodologie de conception adaptée. +- apparition de nombreuses méthodes + +en 1994 +- consensus sur trois méthodes + - OMT Object Modeling Technique : représentation graphique + - BOOSH + - OSEE + +### Usage + +UML est très large en cas d'usage, et d'autres professions s'en servent également. + +En programmation, plusieurs modes : + +- Mode esquisse + - Diagrammes tracés à la main, de manière incomplète. + - Support de communications abstraites pour concevoir des parties technniques et critiques. + +- Mode plan + - diagrammes formels détaillés. + - annotations en langue naturelle. + - Peut être utilisé pour générer des squelettes de codes. + +- Mode programmation + - spécification complète et formelle du système. + - Est utilisé pour générer un code fini et directement utilisable. + +## Vue fonctionnelle du système + +### Vues : + +- Cas d'utilisation + - Description du modèle vu par les utilisateurs du système. + - Besoins attendus par chaque acteur. + +- Logique + - Définition du système vu de l'intérieur + - décrit à haut niveau comment satisfaire les besoins des acteurs + +- Implantation + - Dépendance entre les modules + +- Processus + - Vue temporelle + - illustre le comportement dynamique du système + +- Déploiement + - Distribution des instances du système + +14 types de diagrammes, organisés en hiérarchie + +- Diagrammes structurels : Classes, Objets ... +- Diagrammes comportementaux : Cas d'usage, états ... +- Diagrammes d'interactions : Séquence, communications ... + +### Spécification : + +- Diagrammes de cas d'utilisation + - Illustre les besoins des utilisateurs. +- Diagrammes de séquence + - Scénarios d'intéractions entre le logiciel et l'extérieur. + - Pas de détails sur les différents composants du systèmes. +- Diagrammes d'activité + - Enchainement d'actions représentatn un comportement du logiciel. + +### Conceptions : + +- Diagrammes de classes : structure interne du logiciel +- Diagrammes d'objet : état interne du logiciel à un instant de l'execution +- Diagrammes de séquences : intéractions entre les objets lors d'une procédure + +Briques de bases + +- Les éléments : + - Les abstractions essentielles au modèle. +- Les relations : + - Les relations expriment les liens existatnts entre les différents éléments. +- Les diagrammes : + - Représentations visuelles des éléments du systèmes. + - Donnent une vue partielle du système, l'ensemble de ses diagrammes doit donner une vue globale. + +## Diagramme de cas d'usage + +Pourquoi ? + +- permet au client de spécifer ses besoins : + - Parvenir un accord / contrat entre clients et développeurs. + - Point d''entrée pour les étapes suivantes de conception et développement. + +Décrit un usage +- USage que les acteurs font du système + - Acteur : Entité extérieure qui interagit avec le système + - Une même personne peut jouer le roles de différents acteurs. + - un acteur peut être une personne ou bien un autre système. + - Généralement composés de plusieurs scénarios + - Scénario de base (cas nominal). + - Et ses variantes (cas particuliers). + +Comment découvrir les cas d'usages ? +- délimiter le périmètre du système +- identifier les acteurs interagissant avec le système + - ceux qui utilisent le système + - ceux qui fournissent un service au fonctionnement du système +- identifier les acteurs principaux + - qui utilisera ce système, et pourquoi ? +- définir les cas d'utilisation correpsondant à ces buts + +Éléments + +- Des acteurs : + - un rôle dans le système + - pas forcément une personne physique + - potentiellement un autre logiciel + - une même personne ou système peut représenter plusieurs acteurs + - principal ou secondaire + - principal : provoque spontanément des échanges + - secondaire : solicité par le système pour remplir son rôle + +- Des cas d'utilisations : + - Une procédure qu'un acteur peut déclancher avec le système pour répondre à un besoin. + - Les acteurs impliqués das un cas d'utilisation lui sont liés par une association. + - Unacteur peut utiliser plusieurs fois le même cas d'utilisation. + - Peut être en relation avec d'autres cas d'utilisation : + - Inclusion : A --- includes -> B, 'le cas A inclut le cas B', faire B est une partie de faire A + - Extension : A <-- extends --- B, 'le cas A étends du cas B', faire A peut impliquer de faire B + - Généralisation : A <|------------- B, 'le cas A est une généralisation du cas B', faire B est une manière de faire A + - Les relations indiquent que l'évolution de certains cas d'usages sont susceptible d'avoir un impact sur d'autres. + - Une relation entre deux acteur ne peut être qu'une généralisation. + +Description textuelle + +- formalisation contractuelle +- composée de + - le nom du cas + - acteurs concernés + - séquence d'actions + - pré conditions + - actions + - post-conditions + - contraintes liées à l'interface homme-machine + - assignation du document (version + date + responsable) + +> note : +> En UML, le sens des flèches indique la dépendance d'interface, et non la relation d'inclusion. +> +> c'est à dire : si une flèche va de A vers B +> - A dépends de B +> - une évolution de l'interface de B peut nécessiter une évolution de A. + + +exemple : extraction d'un cas d'usage depuis une documentation technique. + +``` +The 12 bit [Analog to digital converter (ADC)] is a successive approximation analog-to-digital converter. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\_ système étudié + +It has up to 18 multiplexed channels allowing it measure signals from [16 external] and [two internal] sources. + acteurs externes concerné par l'usage _/^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +[A/D conversion of the various channels] can be performed in single, continuous, scan or discontinuous mode. +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\_ description d'un usage/service + +The result of the ADC is stored in a left-aligned or right-aligned 16 bit data register. + +The analog watchdog feature allows the application to detect if the input voltage goes outside the use-defined high or low thresholds. +``` + +le système : **Analog to digital converter (ADC)** +acteurs : user/application, sources +acteurs (alt) : user/application, sources (genéral), **16 external** sources, **two internal** sources +cas d'usages : **A/D conversion of the various channels** diff --git a/iot/01_init.md b/iot/01_init.md new file mode 100644 index 0000000..112e2cc --- /dev/null +++ b/iot/01_init.md @@ -0,0 +1,61 @@ +# Introduction + +## Fondements + +### M2M (Machine to Machine) + +Type de système supposé fonctionner en interfaçant avec d'autres machines plutôt qu'avec un humain ; +Ne nécessitant pas d'interactions humaines après la mise en place et l'allumage. + +- Contemporain des années 1990. + - Provoqué par la démocratisation des technologies céllulaires. +- Usage lourd de réseaux : + - Technologies sans fils. + - Réseaux privées. +- Environement fermé autour de la tâche de l'appareil et peu maléable. + +### IoT (Internet of Things) + +Famille d'objets interconnectés, intégrés dans des applications et capteurs. + +- Hérite des principes de M2M. +- Usage des réseaux Internets. + - Accède au réseau publique. + - Usage d'API, de services décentralisés. +- Environement polymorphique, extensible et adaptable. + + +### Différences + +- Permet plus d'analyses et de traitement sur les données. +- Modèle économique : L'utilisateur achète un service ou un abonnement plutôt qu'un produit. + +### Principes + +- Actionneurs, capteurs, réseau et applications. +- Basé sur des protocoles de communication standardisés pour permettre une inter-opérabilité des appareils. + +### Par rapport à un système embarqué + +Un système embarqué : +- Objet remplissant une ou plusiuers fonctionnalités aidées par un système informatique et optimisé par une efficacité énergétiique et des ressources limitées. +- Exemples : panneau d'affichage urbain, systèmes de contrôle de véhicules, console de jeux. + +## Applications + +- Domotique +- Industrie + - Robotisation + - Optimisation + - Agriculture + +## Architecture + +3 couches : +- Couche perception : capteurs et actionneurs +- Couche réseau : partage des données avec un serveur extérieur qui opèrera un calcul +- Couche application : logiciel client du service + +## Challengening + +. diff --git a/iot/tp1/.gitignore b/iot/tp1/.gitignore new file mode 100644 index 0000000..8f764ee --- /dev/null +++ b/iot/tp1/.gitignore @@ -0,0 +1,2 @@ +acme-onem2m +venv \ No newline at end of file diff --git a/iot/tp1/main.py b/iot/tp1/main.py new file mode 100644 index 0000000..e69de29 diff --git a/iot/tp1/requirements.txt b/iot/tp1/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/iot/tp1/run.sh b/iot/tp1/run.sh new file mode 100755 index 0000000..c4627d1 --- /dev/null +++ b/iot/tp1/run.sh @@ -0,0 +1,12 @@ +#!/bin/sh +set -e +cd "$(dirname "$(realpath "$0")")" + + +if ! [ -d acme-onem2m ] +then ./setup.sh +fi + + +cd acme-onem2m +python3 -m acme diff --git a/iot/tp1/setup.sh b/iot/tp1/setup.sh new file mode 100755 index 0000000..7a93ed8 --- /dev/null +++ b/iot/tp1/setup.sh @@ -0,0 +1,41 @@ +#!/bin/sh +set -e +cd "$(dirname "$(realpath "$0")")" + + +rm -fr ./venv +rm -fr acme-onem2m +python -m venv ./venv +source ./venv/bin/activate +git clone https://github.com/ankraft/ACME-oneM2M-CSE.git acme-onem2m +python -m pip install --requirement=./acme-onem2m/requirements.txt +python -m pip install --requirement=./requirements.txt + +echo " +[basic.config] +cseType=IN +cseID=id-in +cseName=cse-in +adminID=CAdmin +dataDirectory=\${baseDirectory} +networkInterface=0.0.0.0 +cseHost=10.75.69.114 +httpPort=8080 +logLevel=debug +databaseInMemory=True +consoleTheme=dark + +[cse.registration] +; Edit this to add more allowed originators. +allowedCSROriginators=id-in,id-mn,id-asn + +[textui] +startWithTUI=false + +[cse.operation.requests] +enable=true + +[http] +enableUpperTesterEndpoint=true +enableStructureEndpoint=true +" > acme-onem2m/acme.ini diff --git a/iot/tp1/src/part_2/step_a.sh b/iot/tp1/src/part_2/step_a.sh new file mode 100755 index 0000000..cc30e44 --- /dev/null +++ b/iot/tp1/src/part_2/step_a.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +curl -X POST \ + -H 'X-M2M-Origin:Cmysensor' \ + -H 'X-M2M-RI:123' \ + -H 'X-M2M-RVI:3' \ + -H'Content-Type:application/json;ty=2' \ + -H 'Accept:application/json' \ + -d '{"m2m:ae": {"rn":"MySensor", "api": "NMysensor", "rr": true, "srv": ["3"]}}' \ + http://127.0.0.1:8080/cse-in diff --git a/iot/tp1/src/part_2/step_b.sh b/iot/tp1/src/part_2/step_b.sh new file mode 100755 index 0000000..769395f --- /dev/null +++ b/iot/tp1/src/part_2/step_b.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +curl -X POST \ + -H 'X-M2M-Origin:Cmysensor' \ + -H 'X-M2M-RI:123' \ + -H 'X-M2M-RVI:3' \ + -H 'Content-Type:application/json;ty=3' \ + -H 'Accept:application/json' \ + -d '{"m2m:cnt": {"rn":"Container"}}' \ + http://127.0.0.1:8080/cse-in/MySensor diff --git a/iot/tp1/src/part_2/step_c.sh b/iot/tp1/src/part_2/step_c.sh new file mode 100755 index 0000000..0a0a577 --- /dev/null +++ b/iot/tp1/src/part_2/step_c.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +curl -X POST \ + -H 'X-M2M-Origin:Cmysensor' \ + -H 'X-M2M-RI:123' \ + -H 'X-M2M-RVI:3' \ + -H 'Content-Type:application/json;ty=4' \ + -H 'Accept:application/json' \ + -d '{"m2m:cin": {"cnf": "text/plain:0","con": "{\"unit\": \"celsius\", \"value\": \"22\"}"}}' \ + http://localhost:8080/cse-in/MySensor/Container diff --git a/iot/tp1/src/part_2/step_d.sh b/iot/tp1/src/part_2/step_d.sh new file mode 100755 index 0000000..d16852a --- /dev/null +++ b/iot/tp1/src/part_2/step_d.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +curl -X GET \ + -H 'X-M2M-Origin:Cmysensor' \ + -H 'X-M2M-RI:123' \ + -H 'X-M2M-RVI:3' \ + -H 'Content-Type:application/json' \ + -H 'Accept:application/json' \ + http://localhost:8080/cse-in/MySensor/Container/la diff --git a/iot/tp1/src/part_2/step_e.sh b/iot/tp1/src/part_2/step_e.sh new file mode 100755 index 0000000..39d010e --- /dev/null +++ b/iot/tp1/src/part_2/step_e.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +curl -X PUT -H 'X-M2M-Origin:Cmysensor' -H 'X-M2M-RI:123' -H 'X-M2M-RVI:3' -H 'Content-Type:application/json' -H 'Accept:application/json' -d '{"m2m:cnt": {"mni": 10}}' http://localhost:8080/cse-in/MySensor/Container diff --git a/iot/tp1/src/part_2/step_f.sh b/iot/tp1/src/part_2/step_f.sh new file mode 100755 index 0000000..eca693a --- /dev/null +++ b/iot/tp1/src/part_2/step_f.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -e + +curl -X DELETE -H 'X-M2M-Origin:Cmysensor' -H 'X-M2M-RI:123' -H 'X-M2M-RVI:3' -H 'Content-Type:application/json' -H 'Accept:application/json' http://localhost:8080/cse-in/MySensor/Container diff --git a/iot/tp1/src/part_3/step_a.sh b/iot/tp1/src/part_3/step_a.sh new file mode 100755 index 0000000..96c669a --- /dev/null +++ b/iot/tp1/src/part_3/step_a.sh @@ -0,0 +1,28 @@ +#!/bin/sh +set -e +alias log="echo ' +[step_a.sh]'" + + +RN_NAME="CINwithLabel" + + +log creates container +curl -X POST \ + -H 'X-M2M-Origin:Cmysensor' \ + -H 'X-M2M-RI:123' \ + -H 'X-M2M-RVI:3' \ + -H'Content-Type:application/json;ty=2' \ + -H 'Accept:application/json' \ + -d '{"m2m:ae": {"rn":"'$RN_NAME'", "api": "NMysensor", "rr": true, "srv": ["3"]}}' \ + http://127.0.0.1:8080/cse-in + +log emit notification +curl -X POST \ + -H 'X-M2M-Origin:Cmysensor' \ + -H 'X-M2M-RI:123' \ + -H 'X-M2M-RVI:3' \ + -H 'Content-Type:application/json;ty=4' \ + -H 'Accept:application/json' \ + -d '{"m2m:cin": {"rn":"CINwithLabel", "lbl": ["tag:temperature"], "cnf": "text/plain:0", "con": "{\"unit\": \"celsius\",\"value\": \"22\"}"}}' \ + http://127.0.0.1:8080/cse-in/MySensor/Container