<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rex</id>
		<title>Wiki de Projets IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rex"/>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Rex"/>
		<updated>2026-07-18T04:52:04Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P20_2022_2023_rapport_final.pdf&amp;diff=92338</id>
		<title>Fichier:P20 2022 2023 rapport final.pdf</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P20_2022_2023_rapport_final.pdf&amp;diff=92338"/>
				<updated>2025-01-30T12:12:28Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA5_2020/2021_P2&amp;diff=92337</id>
		<title>IMA5 2020/2021 P2</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA5_2020/2021_P2&amp;diff=92337"/>
				<updated>2024-12-11T17:25:55Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Network Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Aujourd’hui la qualité de l’air et plus globalement la pollution atmosphérique est un enjeu environnemental majeur, notamment dans le cadre du travail. Ce danger fait l’objet de préoccupations depuis plusieurs années et apparaît aujourd’hui comme un problème majeur de santé publique. Notre projet a pour objectif de répondre à cette problématique en proposant une analyse en temps réel de la qualité de l’air des locaux de Polytech. En effet, l’amélioration de la qualité de l’air passe en premier lieu par l’étude de celle-ci, il est primordial de connaître notre environnement avec précision.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Nos objectifs se séparent en 3 parties :&lt;br /&gt;
*Le développement de stations émettrices.&lt;br /&gt;
Nous devons développer le firmware des stations émettrices pour que ces dernières puissent intégrer les capteurs que nous avons à dispositions (température, humidité, pression, CO2, H2S, …) et envoyer ces données par ondes radio via nos modules Lora, ce code devra être le plus générique possible en vue de l’intégration de futurs capteurs. Nous devons également mettre en place un shield pour que la modularité de ces stations soit accrue et que l’ajout de capteur soit facilement faisable. Notre microcontrôleur, notre module antenne Lora ainsi que nos capteurs seront placés dans une boîte ce qui constituera notre station. Cette boîte permettra de rendre notre station plus compacte et plus esthétique tout en garantissant un accès facile aux composants internes de cette dernière.&lt;br /&gt;
*La mise en place d’un réseau LoRaWaN. &lt;br /&gt;
La mise en place de notre réseau LoRaWAN passe par plusieurs éléments. Tout d’abord ce qu’on appelle des end-points ou nœuds terminaux (nos stations émettrices). Ces stations envoient leurs informations par ondes radios, qui sont reçues par nos passerelles Kerlink. Le but de ces passerelles est de faire le lien entre nos stations et notre network serveur. Notre tâche est donc de configurer ces passerelles mais également notre network serveur qui réceptionne toutes les informations de nos stations. Finalement notre dernière tâche est de mettre en place un serveur applicatif qui stockera l’ensemble des données pour pouvoir par la suite les présenter à l’utilisateur. Bien entendu notre chaîne de transmission devra être sécurisée avec un système de chiffrement (clé publique/privée).&lt;br /&gt;
*La récupération et l'affichage des données.&lt;br /&gt;
Notre dernier objectif représente notre partie applicative. Une fois les données enregistrées et stockées dans notre base de données, nous devons mettre en place un application qui sera mise à disposition des utilisateurs pour consulter les données sur la qualité de l’air. Certaines de ces données ne seront pas totalement traitées, il faudra donc pouvoir les repérer et leur appliquer un dernier traitement avant de les présenter. Pour ce qui est de la présentation, un système de graphique sur une donnée spécifique et des indices sur la qualité sur la qualité de l’air représente la manière la plus simple (pour l’utilisateur) de visualiser les informations importantes.&lt;br /&gt;
&lt;br /&gt;
=Travail effectué=&lt;br /&gt;
&lt;br /&gt;
==Prise en main du matériel==&lt;br /&gt;
&lt;br /&gt;
===Transmission entre 2 cartes===&lt;br /&gt;
&lt;br /&gt;
Choix de l'IDE : Nous avons testé différentes IDE (Semtec, uVision, Mbed Studio, STM32). &lt;br /&gt;
De par sa simplicité d'utilisation ainsi que de par la possibilité d'utiliser une version online nous avons privilégier l'utilisation de l'IDE Mbed pour effectuer nos tests. &lt;br /&gt;
Cette IDE a d'ailleurs été utilisée dans d'anciens projets Polytech utilisant des émetteurs Lora et des cartes Nucléo.&lt;br /&gt;
&lt;br /&gt;
Afin d'avoir une première manipulation de ces cartes et de l'IDE nous avons utilisé des programmes de démonstration du type &amp;quot;Ping/Pong&amp;quot;.&lt;br /&gt;
L'émission et la réception des données sont fonctionnelles entre 2 cartes Nucléo possédant des Antennes Lora.&lt;br /&gt;
&lt;br /&gt;
Par la suite et sur demande de nos enseignants référents nous avons arrêté d'utiliser l'IDE Mbed pour partir sur l'IDE STM32.&lt;br /&gt;
Cette IDE à l'avantage d'être plus bas niveau dans la configuration des pins mais elle dispose également de fonctions HAL (Hardware Abstraction Layer). &lt;br /&gt;
Ce sont des fonctions qui ont été préalablement programmées par STMicroelectronics et qui nous permettent, par exemple, d'effectuer diverses opérations de lectures et d'écriture dans notre mémoire.&lt;br /&gt;
&lt;br /&gt;
===Test des différents capteurs===&lt;br /&gt;
&lt;br /&gt;
Nous disposons de plusieurs capteurs afin d'affiner nos données sur la qualité de l'air :&lt;br /&gt;
&lt;br /&gt;
 SEN0248 de chez DFROBOT, capteur de température, humidité, pression et gaz. L'envoie et la réception de données s'effectue via un bus I2C, il est donc nécessaire de fournir une clock à ce capteur.&lt;br /&gt;
 https://wiki.dfrobot.com/Gravity__I2C_BME680_Environmental_Sensor__VOC,_Temperature,_Humidity,_Barometer__SKU__SEN0248&lt;br /&gt;
&lt;br /&gt;
 DFR0066 de chez DFROBOT, capteur de température et d'humidité. L'envoie et la réception de données se fait via une pin Data et SCK, nous devons également fournir une clock à ce capteur.&lt;br /&gt;
 Datasheet : https://wiki.dfrobot.com/SHT1x_Humidity_and_Temperature_Sensor__SKU__DFR0066_&lt;br /&gt;
&lt;br /&gt;
 ULPSM-H2S de chez SPEC SENSOR, capteur de sulfure d'hydrogène&lt;br /&gt;
 https://www.spec-sensors.com/wp-content/uploads/2016/10/ULPSM-H2S-968-003.pdf&lt;br /&gt;
&lt;br /&gt;
 T6713 de chez TELAIRE, capteur de C02&lt;br /&gt;
 https://14core.com/wp-content/uploads/2017/11/T6700_Series_CO2_sensor_Module_Datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
 EC4-2000-SO2 de chez SGX SensorTech, capteur de dioxyde de souffre&lt;br /&gt;
 https://www.sgxsensortech.com/content/uploads/2014/07/DS-0243-EC4-2000-SO2-Datasheet-V2.pdf&lt;br /&gt;
&lt;br /&gt;
==Réseau LoRaWan==&lt;br /&gt;
&lt;br /&gt;
===Network Server===&lt;br /&gt;
&lt;br /&gt;
Une machine virtuelle est déployée afin d'héberger le Network Server :&lt;br /&gt;
* Nom : lorawan.plil.info&lt;br /&gt;
* Mdp : *******&lt;br /&gt;
&lt;br /&gt;
Cette machine est connectée à internet via l'interface eth0 et est relié au Vlan 501 (Lorawan) via l'interface eth1. Le Vlan501 comprend donc notre VM, la passerelle Kerlink Outdoor (sur le toit de l'école) et la passerelle Kerlink Indor.&lt;br /&gt;
&lt;br /&gt;
====Serveur DHCP====&lt;br /&gt;
Les passerelles Kerlink doivent être connues sur notre réseau, elles doivent donc posséder leur propre adresse IP. Cette adresse IP leur est fournie par un serveur DHCP présent sur la carte réseau &amp;quot;eth1&amp;quot; de la VM lorawan.&lt;br /&gt;
Pour ce faire nous créons un sous-réseau IPV4 192.168.42.0/24. Nous attribuons l'adresse 192.168.42.10 à la carte &amp;quot;eth1&amp;quot; et nous configurons le serveur DHCP de manière à attribuer dynamiquement des adresses IPV4 aux nouveaux appareils repérés sur le réseau.&lt;br /&gt;
&lt;br /&gt;
 '''''Dans le fichier dhcpd.conf :'''''&lt;br /&gt;
 subnet 192.168.42.0 netmask 255.255.255.0 {&lt;br /&gt;
    range 192.168.42.1 192.168.42.9&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ce sous réseau permet d'attribuer des adresses IPV4 allant de 192.168.42.1 à 192.168.42.9.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons ainsi accéder à l'interface de configuration des passerelles Kerlink en ssh via l'adresse IP attribuée (Sur lorawan.plil.info) : &lt;br /&gt;
* '''Passerelle Outdoor :''' ssh 192.168.42.1, mdp: pdmk-062E7A)&lt;br /&gt;
* '''Passerelle Indoor :'''  ssh 192.168.42.2, mdp: pdmk-030970)&lt;br /&gt;
Cette interface de configuration nous sera très utile lors de la configuration de notre Network Server.&lt;br /&gt;
&lt;br /&gt;
====Installation et configuration du ChirpStack Network Server====&lt;br /&gt;
ChirpStack Network Server est une implémentation open-source de LoRaWAN® Network Server. La responsabilité du composant Network Server est la déduplication des trames LoRaWAN reçues par les passerelles LoRa® et de gérer :&lt;br /&gt;
&lt;br /&gt;
- L'authentification&lt;br /&gt;
&lt;br /&gt;
- La couche mac LoRaWAN (et commandes mac)&lt;br /&gt;
&lt;br /&gt;
- La communication avec le serveur d'applications ChirpStack&lt;br /&gt;
&lt;br /&gt;
- La planification des trames de liaison descendante&lt;br /&gt;
&lt;br /&gt;
* '''Installation :'''&lt;br /&gt;
La mise en place de ce serveur sur la VM lorawan nécessite d'installer trois entités : un '''gateway-bridge''', un '''network-server''' et un '''application-server&lt;br /&gt;
&lt;br /&gt;
Pour se faire nous avons suivi les instructions du site officiel :&lt;br /&gt;
https://www.chirpstack.io/network-server/&lt;br /&gt;
&lt;br /&gt;
* '''Configuration :'''&lt;br /&gt;
Différents fichiers de configuration sont alors disponibles :&lt;br /&gt;
&lt;br /&gt;
- /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge.toml&lt;br /&gt;
&lt;br /&gt;
- /etc/chirpstack-network-server/chirpstack-network-server.toml&lt;br /&gt;
&lt;br /&gt;
- /etc/chirpstack-application-server/chirpstack-application-server.toml&lt;br /&gt;
&lt;br /&gt;
 Paramétrages notables :&lt;br /&gt;
 - Les trois serveurs démarrent automatiquement lors de l'allumage de la VM&lt;br /&gt;
 - NetworkID : 000000&lt;br /&gt;
&lt;br /&gt;
Nous avons alors un accès a une interface graphique de configuration sur le port 8080 pour notre LoRaWan_Network (accès 172.26.189.22:8080 '''(désactiver le proxy pour cette adresse)'''). Nous instancions alors notre network serveur sous le nom de localhost (localhost:8000).&lt;br /&gt;
&lt;br /&gt;
* '''Configuration des passerelles Kerlink :'''&lt;br /&gt;
&lt;br /&gt;
En connection ssh sur les gateways, nous mettons à jour le firmware des deux passerelles (Indoor : Wirnet iFemToCell et Outdoor Wirnet iBTS). Une fois l'environnement correctement installé, nous nous sommes appuyés sur le https://wikikerlink.fr/ pour activer les '''gateways''' ainsi que leurs '''packet_fowarder''' (https://wikikerlink.fr/wirnet-productline/doku.php?id=wiki:lora:keros_4.3.3:cpf_configuration). Nous instancions notamment notre LoraNetworkServer au sein de nos gateways via la ligne ''gwmp.node = &amp;quot;192.168.42.10&amp;quot;'' dans le fichier ''/etc/lorafwd.toml''&lt;br /&gt;
&lt;br /&gt;
* '''Instanciation des passerelles sur le LNS (LoraNetworkServer) :'''&lt;br /&gt;
&lt;br /&gt;
Sur la VM lorawan, les logs nous montre bien l'émission de message en provenance de nos deux passerelles. Sur l'interface graphique de paramétrage, nous créons alors deux nouvelles instances de gateways en fournissant leur ID respective. Les gateways sont alors visible pour notre LNS et nous remarquons une émission de trame LoRaWan de façon régulière.&lt;br /&gt;
&lt;br /&gt;
A ce point, nous avons un LNS installé, configuré, capable de détecter et communiquer en LoRaWan avec les passerelles au sein de son réseau. La dernière étape consiste donc à tester la transmission complète d'une trame, d'un terminal LoRa à l'application_server.&lt;br /&gt;
&lt;br /&gt;
* '''Test du LNS :'''&lt;br /&gt;
&lt;br /&gt;
Une nouvelle application GPS_Test est créée sur l'interface graphique du LNS, des &amp;quot;application&amp;quot; et &amp;quot;network&amp;quot; keys sont alors générées et transmises manuellement à notre terminal LoRa en le connectant à un ordinateur (la configuration de ce module est possible grâce à l’application : ). Une fois les clefs correctement transmises, nous sommes capables de recevoir les trames et données issues du GPS. Ces données ont donc correctement transité au sein de nos passerelles Kerlink pour être finalement reçues par notre network serveur.&lt;br /&gt;
Ceci conclut donc la mise en place du LoraNetworkServer, la prochaine étape consiste donc à connecter nos propres terminaux LoRa.&lt;br /&gt;
&lt;br /&gt;
==Stations==&lt;br /&gt;
&lt;br /&gt;
===Implémentation du firmware===&lt;br /&gt;
&lt;br /&gt;
Suite à plusieurs tests et expérimentations et comme expliqué dans notre partie sur le choix de l'IDE, il a été décidé d'utiliser l'IDE STM32 Cube pour implémenter le firmware. Cette IDE permet en effet l'utilisation de bibliothèques de plus bas niveau que mbed et ainsi d'obtenir un meilleur contrôle de notre carte. Ce meilleur contrôle nous sera par ailleurs utile lors de l'implémentation des bus I2C pour la lecture de certains capteurs mais également lors de la mise en commun de nos différents bibliothèques relatives à nos capteurs.&lt;br /&gt;
&lt;br /&gt;
====Architecture du firmware====&lt;br /&gt;
&lt;br /&gt;
Dans un souci de modularité et de simplicité d'implémentation, notre firmware se découpera en deux parties. La première partie permettra la lecture de chaque capteur connecté à la station tandis que la seconde se chargera de transmettre toute ces données en LoRaWan. Afin de faciliter l'ajout ou le retrait de capteur sur une station établie l'architecture ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Firmware_archi.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
Il convient ainsi de créer, pour chaque capteur sur la station :&lt;br /&gt;
*Une fonction d'initialisation du capteur (startup séquence etc...), appelée au démarrage de la station.&lt;br /&gt;
*Une fonction de lecture spécifique à chaque capteur, appelée dans la boucle principale. Cette fonction de lecture se déroule en deux temps :&lt;br /&gt;
**1 - Lecture du capteur (réception et prétraitement des données si besoin)&lt;br /&gt;
**2 - Remplissage de la trame avec les données récupérées (en accord avec le format ci-contre)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FormatTrame.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois la trame remplie, celle-ci est transmise à la fonction d'envoi, chargée de transmettre ces données par ondes radio.&lt;br /&gt;
&lt;br /&gt;
Il est capital pour notre projet, avant toute lecture de capteur, d'être capable de transmettre des données vers notre LNS. Nous devons donc disposer d'une bibliothèque permettant de communiquer en respectant les normes d'un réseau LoRa. Cette bibliothèque existe et est disponible à l'adresse suivante : https://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32cube-expansion-packages/i-cube-lrwan.html&lt;br /&gt;
&lt;br /&gt;
'''Problèmes rencontrés :'''&lt;br /&gt;
&lt;br /&gt;
La bibliothèque propose des programmes de communications LoRaWan uniquement pour des carte STM32L, non compatible avec notre STM32F411. Après avoir tenté durant plusieurs jours d'adapter le code de la bibliothèque et face à la complexité de la tâche, décision est prise d'utiliser des cartes compatibles avec notre librairie. Nos stations seront donc bâties sur des cartes STM32L152_RE.&lt;br /&gt;
&lt;br /&gt;
'''Communication en LoRa'''&lt;br /&gt;
&lt;br /&gt;
Sur l'interface du LNS :&lt;br /&gt;
*Nous créons donc une application &amp;quot;PFE_TheoLolo_2020&amp;quot;&lt;br /&gt;
*Nous y instancions un nouveau Device&lt;br /&gt;
*L'EUI Device doit correspondre à celui de notre carte, que l'on récupère via les logs de notre serveur.&lt;br /&gt;
*Generation d'une Application_key (MAIS PAS de Gen_Application_key qui doit être laissé vide)&lt;br /&gt;
&lt;br /&gt;
Sur notre firmware :&lt;br /&gt;
*Ouverture du projet EndNode présent dans la librairie&lt;br /&gt;
*Modification du commisionning.h : MAJ de la LORAWAN_APP_KEY et de la LORAWAN_NTW_KEY (Ces deux clefs doivent être IDENTIQUES)&lt;br /&gt;
&lt;br /&gt;
Une fois ces quelques paramètres ajustés, nous sommes capables de visualiser les données issues de notre carte sur notre LNS. La chaîne de communication est maintenant entièrement fonctionnelle. On peut donc pleinement se concentrés sur la lecture des capteurs et la mise en forme des données en amont ainsi que sur la récupération et l'affichage de ces données en aval.&lt;br /&gt;
&lt;br /&gt;
'''Lecture des capteurs'''&lt;br /&gt;
Nous disposons, pour notre projet, de nombreux capteurs différents, avec chacun un protocole de lecture définit (en principe) dans leur datasheet. Dans un souci&lt;br /&gt;
&lt;br /&gt;
==Application==&lt;br /&gt;
&lt;br /&gt;
Les données arrivant sur notre LNS doivent être transmises et traitées afin d'être présentées aux utilisateurs de l'application. La partie applicative de notre projet s'effectuera sur une VM nommée Lorap, afin de bien cloisonner la gestion du réseau LoRaWan (sur la VM lorawan) de la gestion applicative (traitement et affichage des données). &lt;br /&gt;
 &lt;br /&gt;
===Réception et Gestion des données===&lt;br /&gt;
&lt;br /&gt;
Afin de recevoir les données en provenance de notre LNS (Lora Network Serveur), nous utilisons un bus MQTT. &lt;br /&gt;
Mais avant tout qu'est que MQTT ? MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie qui fonctionne sur le principe de souscription/publication qui a été développé à la base pour simplifier la communication entre les machines, pour fonctionner ce protocole de transport nécessite l'utilisation d'un Broker (un serveur) dans notre cas nous avons utilisé le broker Mosquitto. &lt;br /&gt;
&lt;br /&gt;
Ce broker est notamment proposé dans les fichiers de configuration du LNS pour récupérer les données émises par nos stations. La configuration de cette file de message s'effectue dans le fichier '''/etc/chirpstack-application-server/chirpstack-application-server.toml''' de la VM lorawan. Par défaut, le MQTT serveur est disponible sur '''tcp://localhost(VMlorawan):1883.'''.&lt;br /&gt;
Nous installons le broker Mosquitto sur la VM lorap puis nous implémentons un script python chargé de récupérer et stocker les données à chaque nouveau message dans des bases de données.&lt;br /&gt;
&lt;br /&gt;
Explication de mosquitto.py :&lt;br /&gt;
&lt;br /&gt;
*Tout d'abord nous souscrivons à un topic de la file de message MQTT 172.26.189.22:1883 (utilisée par notre LNS en tant que publisher)&lt;br /&gt;
*Une fonction d'écoute attend l'arrivée de message UP (arrivée de données sous format Json)&lt;br /&gt;
*Nous extrayons l'EUI de la station émettrice ainsi que la trame de données des capteurs (en base64)&lt;br /&gt;
*Une fonction de traitement se charge d'extraire les informations utiles de cette trame (température, pression, etc...)&lt;br /&gt;
*Ces données sont par la suite stockées au sein d'une base de données PostgreSQL et ce grâce à l'utilisation d'un second script en python : postgres.py&lt;br /&gt;
&lt;br /&gt;
Pour toucher quelques mots par rapport à ce dernier script, ce dernier se veut très modulaire et propose des opérations génériques de création de table, d'insertion et de mise à jour de données et bien entendu de suppression.&lt;br /&gt;
&lt;br /&gt;
Ces différents scripts sont exécutés dans un containeur Docker afin d'être totalement indépendant et lancés au démarrage de la machine lorap.&lt;br /&gt;
&lt;br /&gt;
Pour lancer ce containeur nous avons tout d'abord installer Docker sur notre machine, puis créé une image Docker. Cette dernière est très simple, elle se charge de vérifier que python est installé et mis à jour et que les paquets utilisés par le script sont installés.&lt;br /&gt;
&lt;br /&gt;
===Serveur HTTP===&lt;br /&gt;
&lt;br /&gt;
Afin de fournir une interface utilisateur web, nous avons installé le serveur HTTP Apache2. Un serveur HTTP permet à un site web de communiquer avec un navigateur en utilisant le protocole HTTP(S) et ses extensions (WebDAV, etc.).&lt;br /&gt;
&lt;br /&gt;
Installation :&lt;br /&gt;
 apt install apache2 &lt;br /&gt;
&lt;br /&gt;
Une configuration précise n’a pas été nécessaire pour qu’apache fonctionne, la seule configuration a été faite au niveau de notre machine tricholome sur le serveur capbreton, l’explication est faite dans une des parties suivantes.&lt;br /&gt;
&lt;br /&gt;
Le but de notre interface Web est de permettre aux utilisateurs de consulter les informations et les données envoyées par nos stations. Pour ce faire, cette dernière devra disposer d’une page de monitoring (ou utilisation d’une API telle que Grafana, voir partie suivante) permettant de connaître en temps réel la qualité de l’air d’une pièce. Une section devra aussi être développée pour configurer nos balises et changer leur mode (active, inactive ou supprimée), comme nos scripts au niveau de la réception de données sont modulaires, il n’est pas nécessaire de renseigner quelles données sont attendues à la réception. Elle devra également lister l’ensemble des stations connues de la base de données ainsi que leur état. Enfin, une section sera également mise à disposition pour l’affichage de notre monitoring de test.&lt;br /&gt;
&lt;br /&gt;
L’ensemble de nos fichiers html et php se situent dans le dossier /var/www/html. Pour pouvoir utiliser du php sur notre serveur web nous devons installer une extension via la commande suivante : &lt;br /&gt;
 apt install libapache2-mod-php&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir utiliser et manipuler notre base de données dans nos pages php (à travers des PDO, PHP Data Object) nous avons également installer le package php-pgssql, via la commande : &lt;br /&gt;
 apt install php-pgsql&lt;br /&gt;
Puis il faut décommenter la ligne extension=php_pdo_pgsql dans le fichier php.ini qui se situe dans /etc/php/7.3/apache2/. Dans ce fichier, il peut d'ailleurs être intéressant de modifier les lignes error_reporting et ajouter l'option E_ALL ainsi que la ligne display_errors et ajouter l'option On. Cette modification permet à php de renvoyer des erreurs lors des chargements de nos pages lorsque celles-ci comportent des erreurs.&lt;br /&gt;
&lt;br /&gt;
De plus, pour mettre en place cette interface Web, nous avons utilisé Bootstrap, qui est un Framework, une collection d’outils, utiles à la création du design (graphisme, animation et interactions avec la page dans le navigateur, etc.) pour des sites et des applications Web (code HTML et CSS pour faire des formulaires, boutons, barre de navigation, de recherche, …).&lt;br /&gt;
&lt;br /&gt;
===Base de données===&lt;br /&gt;
&lt;br /&gt;
Pour stocker nos données nous nous sommes dans un premier temps orientés vers InfluxDB, qui est un système de gestion de base de données orienté séries temporelles hautes performances. Ce choix vient du fait que ce système de gestion de données est très largement utilisé dans les applications IoT notamment grâce à ces hautes exigences en termes de disponibilité et de performances en temps réel. Après avoir discuté avec nos tuteurs nous nous sommes réorientés vers PostgreSQL, système de gestion de données que nous avions déjà utilisé en 3e année. Comme nous venons de l'expliquer, la réelle force d'InfluxDB est son aspect temps réels, qui offre beaucoup de précision au niveau des relevés, dans notre cas une telle précision n’était pas réellement justifiée et il valait mieux se concentrer sur une technologie que nous connaissions afin d’aboutir le plus rapidement possible sur un projet fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Installation : &lt;br /&gt;
 apt install postgresql&lt;br /&gt;
&lt;br /&gt;
Après avoir installé ce serveur, nous avons commencé par créer un nouvel utilisateur (Par défaut seul l’utilisateur postgres peut se connecter aux bases de données, c’est utilisateur créé automatiquement à la suite de l’installation de PostgreSQL) cette opération s’effectue avec la commande suivante : &lt;br /&gt;
 createuser -d -P user_pfe (mot de passe glopglop)&lt;br /&gt;
A la suite de la création de cet utilisateur, nous créons notre base de données : &lt;br /&gt;
 createdb -O user_pfe db_pfe&lt;br /&gt;
Pour se connecter à notre base de données tout juste créée nous utilisons la commande suivante :&lt;br /&gt;
 psql db_pfe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notre base de données contient 3 tables :&lt;br /&gt;
 &lt;br /&gt;
*La première table, list_stations contient l’ID unique d’une station (ce qui constitue la clé primaire de la table), la trame type que cette dernière envoie (cette trame est présente dans le fichier tram.yaml), le mode de fonctionne de la station ainsi que son statut.&lt;br /&gt;
&lt;br /&gt;
*Notre deuxième table, history_stations contient et stocke l’ensemble des valeurs transmises par notre station. Cette table se compose d’un indice unique d’entrée (qui constitue la clé primaire de la table), de l’ID de la station qui a transmis cette entrée (ce qui est notre clé étrangère, liée à l’ID de la table list_stations), d’une colonne temps qui nous permet d’indexer chaque entrée (ce qui nous sera également utile pour tracer nos graphiques par la suite), d’un type de données (température, taux d’humidité, pression, …) et bien évidemment de la valeur en elle-même.&lt;br /&gt;
&lt;br /&gt;
*Notre dernière table, qui se nomme history_stations_test est comme son nom l’indique une table similaire à history_stations mais utilisée pour nos tests. En effet, comme nous avions pris du retard sur notre projet au niveau développement des firmwares nous avons tout de même avancé sur cette partie en nous basant sur des données fictives, générées grâce à un script en python.&lt;br /&gt;
&lt;br /&gt;
Ces 3 tables sont créées grâce aux commandes suivantes : &lt;br /&gt;
 CREATE TABLE IF NOT EXISTS list_stations(DevEUI_station VARCHAR (50) NOT NULL, Trame VARCHAR(200) NOT NULL, Mode INT NOT NULL, Status INT NOT NULL, PRIMARY KEY(DevEUI_station))&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS history_stations(Indice SERIAL, DevEUI_station VARCHAR (100) NOT NULL, Time TIMESTAMP WITH TIME ZONE NOT NULL, Type VARCHAR (50) NOT NULL, Value DOUBLE PRECISION NOT NULL, PRIMARY KEY(Indice), CONSTRAINT fk_list_stations FOREIGN KEY(DevEUI_station) REFERENCES list_stations(DevEUI_station))&lt;br /&gt;
&lt;br /&gt;
Nous avons également, dans un second temps, lors de l’utilisation de containers Docker, modifié le fichier de configuration de PostgreSQL. En effet, avant cette modification, la base de données autorise seulement des connexions en provenance de localhost. Pour pallier à ce problème, dans le fichier pg_hba.conf (qui se situe dans /etc/postgresql/11/main/), nous avons changé l’adresse IPv4 de provenance des connexions par 0.0.0.0/0 (ce qui autorise des connexions de n’importe quel hôte)&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
&lt;br /&gt;
Afin de prodiguer une interface de monitoring à nos utilisateurs, nous nous servons de l'API Grafana. &lt;br /&gt;
Grafana est un logiciel libre sous licence Apache 2.0 qui permet la visualisation de données sous formes de graphique, de tableaux de bord ou simplement d’indicateur depuis plusieurs sources de données tel que PostgreSQL. &lt;br /&gt;
&lt;br /&gt;
La prise en main et l’utilisation de cette API est simple et intuitive. Elle se base sur un système de Dashboard dans lequel il est possible de créer différents panels pour y afficher différentes informations de diverses manières. Dans notre cas nous avons créé 2 Dashboards (un pour notre table history_stations et history_stations_test). Pour créer un graphique qui affiche sur une échelle temporelle les relevés de températures issus de nos stations la requête est la suivante : &lt;br /&gt;
 SELECT time AS &amp;quot;time&amp;quot;, value AS &amp;quot;Température&amp;quot; FROM history_station WHERE type = 'TMP_1 ORDER BY 1&lt;br /&gt;
&lt;br /&gt;
Grafana propose également de partager ces panels, malheureusement de manière statique car ces panels sont transmis sous forme d’image. Une solution est de partager le Dashboard en entier, c’est d’ailleurs la solution qui a été retenue.&lt;br /&gt;
Pour que ces Dashboard soient visibles depuis n’importe quelle source et pour tous les utilisateurs (même ceux non connectés) il faut modifier le fichier grafana.ini qui se situe dans /etc/grafana/. &lt;br /&gt;
&lt;br /&gt;
Plusieurs lignes sont décommentés : &lt;br /&gt;
*Dans la section Anonymous :&lt;br /&gt;
 enabled = true&lt;br /&gt;
&lt;br /&gt;
*Dans la section Embedded :&lt;br /&gt;
 allow_embedding = true&lt;br /&gt;
 org_name = Main Org.&lt;br /&gt;
 org_role = Viewer&lt;br /&gt;
&lt;br /&gt;
===Accessibilité de notre application===&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre application web accessible depuis n’importe quel navigateur et sans être connecté au réseau de l’école nous avons réutiliser notre machine virtuelle de PRA qui dispose d’une adresse IP routée ainsi que d’un serveur DNS (qui est d’ailleurs sécurisé par DNSSEC). Dans cette partie nous ne parlerons pas du DNS car la configuration de ce dernier a été fait en PRA. Cette machine virtuelle dispose, comme dit précédemment, d’une adresse ip public : 193.48.57.185. Nous avons rajouté la ligne suivante à la configuration de notre service DNS Bind9 (fichier db.tricholome.site qui se situe dans /etc/bind/) :&lt;br /&gt;
 pfe	IN	CNAME		www	&lt;br /&gt;
&lt;br /&gt;
Grâce à cette ligne, lorsque nous tapons « pfe.tricholome.site » dans notre barre de recherche, le DNS nous retransmet correctement l’adresse de notre site.&lt;br /&gt;
De plus, il faut maintenant rediriger l’utilisateur vers le bon site lorsque ce dernier saisi pfe.tricholome.site. Pour cela nous mettons en place un reverse proxy (mandataire inversé). Un reverse proxy permet à un utilisateur d’Internet d’accéder à des serveurs internes. De cette manière, lorsqu'un utilisateur demande la page pfe.tricholome.site, ce dernier arrive sur notre machine tricholome de PRA qui redirige la requête sur notre machine lorap. &lt;br /&gt;
&lt;br /&gt;
La configuration à fournir au fichier pfe.conf (à créer au niveau de /etc/apache2/sites-available) est la suivante : &lt;br /&gt;
 &amp;lt;VirtualHost * :80&amp;gt;&lt;br /&gt;
        ServerName pfe.tricholome.site&lt;br /&gt;
 	ServerAdmin Theoic&lt;br /&gt;
 	ProxyPass / http://172.26.189.24:80/&lt;br /&gt;
 	ProxyPassReverse / http://172.26.189.24:80/&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour autant pour que cela soit totalement fonctionnel il faut que notre machine tricholome de PRA et notre machine lorap puissent communiquer entre elles, en effet le routeur de l’école bloque les échanges entre le vlan 50 et le vlan48. Une solution est de fournir à notre machine tricholome une adresse IP dans le vlan 48 et de fournir une route statique afin de contacter la machine lorap :  &lt;br /&gt;
 up ip address add dev eth1 172.26.145.239/24                                                                            &lt;br /&gt;
 up ip route add 172.26.188.0/22 via 172.26.145.254                                                                      &lt;br /&gt;
 down ip address del dev eth1 172.26.145.239/24                                                                         &lt;br /&gt;
 down ip route del 172.26.188.0/22 via 172.26.145.254&lt;br /&gt;
&lt;br /&gt;
===Sécurisation de notre site - HTTPS===&lt;br /&gt;
&lt;br /&gt;
La sécurisation de notre interface web a également été vivement conseillée par nos tuteurs.&lt;br /&gt;
Pour passer un site de HTTP vers HTTPS plusieurs étapes sont nécessaires : la génération des clés publiques et privées, la modification de notre hôte virtuel Apache (qui avait été précédemment modifié pour y inclure notre reverse proxy) mais aussi la signature numérique de notre certificat TLS/SSL par une autorité de certification, ici Let’s encrypt (une autorité de certification qui a pour but de proposer à tous, des certificats SSL gratuitement).&lt;br /&gt;
&lt;br /&gt;
Pour cela nous avons tout d’abord télécharger snapd, qui est un système de déploiement de logiciel pour les systèmes d’exploitation linux. Grâce à snapd nous avons installé Certbot.  Certbot est un logiciel client qui automatise la plupart des étapes énoncés précédemment de plus il est facile et intuitif à prendre en main.&lt;br /&gt;
 &lt;br /&gt;
La première commande après l’installation et la préparation de Certbot permet d’obtenir nos certificats (il est possible de laisser Certbot les installer mais nous avons préféré le faire nous-même) &lt;br /&gt;
 certbot certonly –apache&lt;br /&gt;
&lt;br /&gt;
Pour notre PFE nous n’avons pas décidé de mettre en place un système de renouvellement automatique pour nos certificats mais il est tout à fait possible de mettre en place un système de ce genre pour une application amenée à durer dans le temps.&lt;br /&gt;
A la suite de cette commande 4 certificats sont obtenus (dans le dossier /etc/letsencrypt/live/pfe.tricholome.site.tld) &lt;br /&gt;
*Une clé privée : privkey.pem à impérativement garder confidentielle&lt;br /&gt;
*Un certificat serveur : cert.pem&lt;br /&gt;
*Des certificats intermédiaires : chain.pem&lt;br /&gt;
*L’ensemble des certificats : fullchain.prem &lt;br /&gt;
&lt;br /&gt;
Une fois ces certificats obtenus, il faut intégrer nos certificats à Apache dans notre hôte virtuel : &lt;br /&gt;
Une fois de plus nous modifions le fichier pfe.conf (/etc/apache2/sites-available) de la manière suivante : &lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;                                                                                                              &lt;br /&gt;
      ServerName pfe.tricholome.site                                                                                         &lt;br /&gt;
      ServerAdmin Theioc                                                                                                      &lt;br /&gt;
      Redirect permanent / https://pfe.tricholome.site/                                                              &lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
                                                                                                                                                                                                                             &lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;                                                                                                             &lt;br /&gt;
      ServerName pfe.tricholome.site                                                                                         &lt;br /&gt;
      ServerAlias pfe.tricholome.site                                                                                        &lt;br /&gt;
      ServerAdmin Theioc                                                                                                      &lt;br /&gt;
      ProxyPass / http://172.26.189.24:80/&lt;br /&gt;
      ProxyPassReverse / http://172.26.189.24:80/                                                                           &lt;br /&gt;
      SSLEngine on                                                                                                            &lt;br /&gt;
      SSLCertificateFile /etc/letsencrypt/live/pfe.tricholome.site/cert.pem                                                  &lt;br /&gt;
      SSLCertificateKeyFile /etc/letsencrypt/live/pfe.tricholome.site/privkey.pem                                            &lt;br /&gt;
      SSLCertificateChainFile /etc/letsencrypt/live/pfe.tricholome.site/chain.pem                                            &lt;br /&gt;
      SSLProtocol all -SSLv2 -SSLv3                                                                                          &lt;br /&gt;
      SSLHonorCipherOrder on                                                                                                  &lt;br /&gt;
      SSLCompression off                                                                                                      &lt;br /&gt;
      SSLOptions +StrictRequire                                                                                               &lt;br /&gt;
      SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256                                        &lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalement nous pouvons tester notre nouvelle configuration d’Apache avec la commande : &lt;br /&gt;
 apachectl configtest&lt;br /&gt;
Puis relancer notre serveur Apache pour que les modifications apportées soient prises en compte : &lt;br /&gt;
 service apache2 restart&lt;br /&gt;
&lt;br /&gt;
====Vérification de la sécurité====&lt;br /&gt;
&lt;br /&gt;
Grâce au site :  https://www.ssllabs.com/ssltest/ nous pouvons vérifier la sécurité de notre serveur web&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Securite_tricholome.PNG|center|700px]]&lt;br /&gt;
&lt;br /&gt;
Nous obtenons les mêmes résultats pour notre site graf.tricholome.site, les tests sont concluants, nos sites sont sécurisés.&lt;br /&gt;
&lt;br /&gt;
==Documents rendus==&lt;br /&gt;
&lt;br /&gt;
Rapport (compressé) : [[:File:Rapport_Final_PFE_Thoic.pdf|Rapport_Final_PFE_Thoic.pdf]]&lt;br /&gt;
&lt;br /&gt;
Diapo soutenance : [[:File:Diapo_soutenance_finale_Thoic.pdf|Diapo_soutenance_finale_Thoic.pdf]]&lt;br /&gt;
&lt;br /&gt;
Git du projet : https://archives.plil.fr/tevrard/PFE_Thoic&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA2a4_2022/2023_P1&amp;diff=89269</id>
		<title>IMA2a4 2022/2023 P1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA2a4_2022/2023_P1&amp;diff=89269"/>
				<updated>2022-12-08T08:55:09Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; width: 100%;&amp;quot;&amp;gt;Présentation générale&amp;lt;/div&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
Conception, réalisation et programmation d’une clef USB réaliste.&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
En bureau d’études PeiP systèmes embarqués [[https://peip-ima.plil.fr]] nous faisons réaliser des clefs USB aux élèves depuis 3 ans. Mais ces clefs sont très limitées en capacité, les mémoires utilisées, faciles à adresser, ne dépassant pas les quelques Mo. Le but de ce projet est de concevoir une clef USB de l’ordre de quelques Go avec une gestion de mémoire réaliste pour une durée de vie de la clef&lt;br /&gt;
raisonnable.&lt;br /&gt;
&lt;br /&gt;
Les mémoires flash de grande taille sont :&lt;br /&gt;
# généralement à accès parallèle et non série (comme les mémoires SPI utilisées en BE PeiP) ;&lt;br /&gt;
# sans aucun mécanisme de gestion de l’usure (comme les mémoires utilisées en BE PeiP) ;&lt;br /&gt;
# de type NAND, à savoir que l’on ne peut que transformer des 1 en 0, si l’on souhaite revenir sur des 1, il faut réinitialiser toute une page avec que des 1.&lt;br /&gt;
&lt;br /&gt;
Mais surtout ces mémoires sont imparfaites :&lt;br /&gt;
*des erreurs peuvent se produire dans certains blocs (quelques bits mais pas si rarement que cela) ;&lt;br /&gt;
*des pages complètes peuvent ne plus pouvoir être réinitialisées (selon les mémoires les pages peuvent être réinitialisées 3000 à 10000 fois suivant les modéles).&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
En plus de la programmation USB de type « mémoire de masse » vous devrez implanter les dispositifs suivants :&lt;br /&gt;
* une table pour repérer les pages hors services ;&lt;br /&gt;
* un dispositif de correction d’erreur dans les blocs (vous utiliserez l’algorithme de hamming avec un nombre de bits adapté à la fois au taux d’erreurs de la mémoire et à la fois au nombres d’octets disponibles pour stocker ces bits de correction d’erreur) ;&lt;br /&gt;
* un dispositif de réduction d’usure comptant le nombre de réinitialisation des pages et permettant de déplacer des blocs souvent modifiés vers d’autres adresses.&lt;br /&gt;
&lt;br /&gt;
Il est fortement recommandé de simuler tous ces dispositifs sur un PC pour tester tous les éléments avant implantation dans le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Du coté matériel vous pourrez vous aider des schémas de clefs sur le Wiki des PeiP. Il est cependant conseillé de passer d’un ATMega16u2 à un ATMega32u4 pour disposer de plus d’E/S et de bus. En effet pour implanter les tables nécessaires au fonctionnement des dispositifs décrits ci-dessus, il est conseillé d’ajouter une mémoire SPI plutôt que d’essayer d’implanter les tables sur la mémoire flash principale.&lt;br /&gt;
&lt;br /&gt;
Implantez aussi des points d’accès USB sur votre clef pour pouvoir obtenir des informations sur la gestion des blocs sur la clef :&lt;br /&gt;
* lister les pages hors service ;&lt;br /&gt;
* récupérer le nombre d’écritures pour des blocs donnés ;&lt;br /&gt;
* récupérer le nombre d’erreurs pour des blocs donnés.&lt;br /&gt;
&lt;br /&gt;
Ecrivez aussi le programme PC permettant de récupérer ces informations pour afficher des statistiques sur la clef.&lt;br /&gt;
&lt;br /&gt;
==Cahier des spécifications==&lt;br /&gt;
&lt;br /&gt;
==Diagramme de Gantt prévisionnel==&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; width: 100%;&amp;quot;&amp;gt;Liens externes&amp;lt;/div&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Lien GitLab :&lt;br /&gt;
&lt;br /&gt;
Présentation projet final : &lt;br /&gt;
&lt;br /&gt;
Rapport final :&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA2a4_2022/2023_P1&amp;diff=89268</id>
		<title>IMA2a4 2022/2023 P1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA2a4_2022/2023_P1&amp;diff=89268"/>
				<updated>2022-12-08T08:36:16Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; width: 100%;&amp;quot;&amp;gt;Présentation générale&amp;lt;/div&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
Conception, réalisation et programmation d’une clef USB réaliste.&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
En bureau d’études PeiP systèmes embarqués [[https://peip-ima.plil.fr]] nous faisons réaliser des clefs USB aux élèves depuis 3 ans. Mais ces clefs sont très limitées en capacité, les mémoires utilisées, faciles à adresser, ne dépassant pas les quelques Mo. Le but de ce projet est de concevoir une clef USB de l’ordre de quelques Go avec une gestion de mémoire réaliste pour une durée de vie de la clef&lt;br /&gt;
raisonnable.&lt;br /&gt;
&lt;br /&gt;
Les mémoires flash de grande taille sont :&lt;br /&gt;
# généralement à accès parallèle et non série (comme les mémoires SPI utilisées en BE PeiP) ;&lt;br /&gt;
# sans aucun mécanisme de gestion de l’usure (comme les mémoires utilisées en BE PeiP) ;&lt;br /&gt;
# de type NAND, à savoir que l’on ne peut que transformer des 1 en 0, si l’on souhaite revenir sur des 1, il faut réinitialiser toute une page avec que des 1.&lt;br /&gt;
&lt;br /&gt;
Mais surtout ces mémoires sont imparfaites :&lt;br /&gt;
*des erreurs peuvent se produire dans certains blocs (quelques bits mais pas si rarement que cela) ;&lt;br /&gt;
*des pages complètes peuvent ne plus pouvoir être réinitialisées (selon les mémoires les pages peuvent être réinitialisées 3000 à 10000 fois suivant les modéles).&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
      Donc, en plus de la programmation USB de type « mémoire de masse » vous devrez implanter les dispositifs suivants :&lt;br /&gt;
          • une table pour repérer les pages hors services ;&lt;br /&gt;
          • un dispositif de correction d’erreur dans les blocs (vous utiliserez l’algorithme de hamming avec un nombre de bits adapté à la fois au taux&lt;br /&gt;
      d’erreurs de la mémoire et à la fois au nombres d’octets disponibles pour stocker ces bits de correction d’erreur) ;&lt;br /&gt;
          • Un dispositif de réduction d’usure comptant le nombre de réinitialisation des pages et permettant de déplacer des blocs souvent modifiés vers&lt;br /&gt;
      d’autres adresses.&lt;br /&gt;
      Il est fortement recommandé de simuler tous ces dispositifs sur un PC pour tester tous les éléments avant implantation dans le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
      Du coté matériel vous pourrez vous aider des schémas de clefs sur le Wiki des PeiP. Il est cependant conseillé de passer d’un ATMega16u2 à un ATMega32u4&lt;br /&gt;
      pour disposer de plus d’E/S et de bus. En effet pour implanter les tables nécessaires au fonctionnement des dispositifs décrits ci-dessus, il est&lt;br /&gt;
      conseillé d’ajouter une mémoire SPI plutôt que d’essayer d’implanter les tables sur la mémoire flash principale.&lt;br /&gt;
&lt;br /&gt;
      Si vous avez le temps, évitez d’utiliser la bibliothèque LUFA pour la partie USB et passez sur une bibliothèque plus bas niveau comme V-USB voire en&lt;br /&gt;
      programmant directement les registres.&lt;br /&gt;
&lt;br /&gt;
      Implantez aussi des points d’accès USB sur votre clef pour pouvoir obtenir des informations sur la gestion des blocs sur la clef :&lt;br /&gt;
          • lister les pages hors service ;&lt;br /&gt;
          • récupérer le nombre d’écritures pour des blocs donnés ;&lt;br /&gt;
          • récupérer le nombre d’erreurs pour des blocs donnés.&lt;br /&gt;
      Ecrivez aussi le programme PC permettant de récupérer ces informations pour afficher des statistiques sur la clef.&lt;br /&gt;
&lt;br /&gt;
      Pendant que vous y êtes implantez des points d’accès pour pouvoir écrire des données dans les octets non utilisés de votre clef et pour pouvoir récupérer&lt;br /&gt;
      ces octets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cahier des spécifications==&lt;br /&gt;
&lt;br /&gt;
==Diagramme de Gantt prévisionnel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; width: 100%;&amp;quot;&amp;gt;Liens externes&amp;lt;/div&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Lien GitLab :&lt;br /&gt;
&lt;br /&gt;
Présentation projet final : &lt;br /&gt;
&lt;br /&gt;
Rapport final :&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA2a4_2022/2023_P1&amp;diff=89267</id>
		<title>IMA2a4 2022/2023 P1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA2a4_2022/2023_P1&amp;diff=89267"/>
				<updated>2022-12-08T08:29:57Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « = &amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; w... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; width: 100%;&amp;quot;&amp;gt;Présentation générale&amp;lt;/div&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Historique==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
==Cahier des spécifications==&lt;br /&gt;
&lt;br /&gt;
==Diagramme de Gantt prévisionnel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; width: 100%;&amp;quot;&amp;gt;Liens externes&amp;lt;/div&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Lien GitLab :&lt;br /&gt;
&lt;br /&gt;
Présentation projet final : &lt;br /&gt;
&lt;br /&gt;
Rapport final :&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA5_2022/2023&amp;diff=89266</id>
		<title>Projets IMA5 2022/2023</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA5_2022/2023&amp;diff=89266"/>
				<updated>2022-12-08T08:27:48Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants école !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA2a4 2022/2023 P1|2022/2023 Clef USB avec répartition d'usure]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
| Bastien Germond&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA5 2022/2023 P11|2022/2023 Mallette cybersécurité]]&lt;br /&gt;
| Alexandre Boé, Xavier Redon &amp;amp; Thomas Vantroys&lt;br /&gt;
| Maxence Laurent&lt;br /&gt;
|-&lt;br /&gt;
| P15 [[IMA5 2022/2023 P15|2022/2023 Réalisation d’un système d’écoutes sonores à base de MEMS]]&lt;br /&gt;
| Alexandre Boé, Thomas Vantroys&lt;br /&gt;
| Logan Paquin &amp;amp; Ali Khalaf&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA5 2022/2023 P20|2022/2023 Jeu de billard virtuel augmenté]]&lt;br /&gt;
| Alexandre Boé, Xavier Redon &amp;amp; Thomas Vantroys&lt;br /&gt;
| Florian Derlique, Thibault Meynier&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2&amp;diff=88672</id>
		<title>IMA3/IMA4 2019/2021 P2</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2&amp;diff=88672"/>
				<updated>2022-10-03T09:40:01Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Diagnostics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Le réseau RENATER n'est pas adapté à l'enseignement : trop de restrictions par les différents administrateurs réseau. Il est par exemple très compliqué de faire installer des serveurs (DNS, SMTP, Web, etc) aux élèves.&lt;br /&gt;
&lt;br /&gt;
La plateforme mathématiques et informatique s'est donc dotée de lignes spécifiques à l'enseignement. Ces lignes commencent à dater et utilisent la technologie cuivre / ADSL. La migration vers la fibre est en cours.&lt;br /&gt;
&lt;br /&gt;
En attendant, il faut maintenir les lignes ADSL. Les opérateurs, bien que continuant à présenter des factures, ne sont plus en mesure de remplacer les modems / routeurs initialement fournis. Le sujet de ce projet consiste à basculer sur du matériel réseau de la plateforme pour gérer les liaisons ADSL. Le coût doit rester minimal vu qu'il s'agit d'une solution temporaire.&lt;br /&gt;
&lt;br /&gt;
Les deux lignes ADSL sont des lignes France Télécom conservées lors de la privatisation de l'institution sous le nom commercial &amp;quot;orange&amp;quot;. La première ligne a même été négociée avec Oléane au début des années 2000 pour permettre aux élèves logés dans la résidence crous Eiffel d'avoir un accès Internet. Une dizaine d'année plus tard la direction de l'école a accédé aux sollicitations du crous pour confier l'accès Internet à un opérateur privé. Nostalgie à part la dénomination officielle des deux lignes est :&lt;br /&gt;
* ADSL business internet office (vendue pour un débit 18Mb/s descendant et 80Kb/s montant) ;&lt;br /&gt;
* ADSL internet pro solo (accès classique comme pour les particuliers).&lt;br /&gt;
&lt;br /&gt;
Les deux modems / routeurs de ces lignes ont cessé de fonctionner (en 2018 pour la première ligne et en 2020 pour la seconde ligne).&lt;br /&gt;
&lt;br /&gt;
= Première approche Cisco C1700 =&lt;br /&gt;
&lt;br /&gt;
[[File:Cisco1721.jpeg|thumbs|200px|right|Cisco 1721]]&lt;br /&gt;
&lt;br /&gt;
Un premier test a été effectué avec un routeur Cisco 1721. Avec une mémoire flash de 32Mo et une mémoire vive de 64Mo, il est possible de le faire tourner sous un IOS 12.4.&lt;br /&gt;
&lt;br /&gt;
[[File:Wic1adsl.jpeg|thumbs|200px|left|Carte ADSL]]&lt;br /&gt;
&lt;br /&gt;
Le 1721 peut prendre deux cartes WIC classiques, dont en particulier la carte &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt;. Ces cartes peuvent se trouver d'occasion autour de 4 euros.&lt;br /&gt;
&lt;br /&gt;
La configuration de l'interface ATM de la carte ADSL est simple :&lt;br /&gt;
&lt;br /&gt;
 interface ATM0                                                                  &lt;br /&gt;
  no ip address                                                                  &lt;br /&gt;
  no atm ilmi-keepalive                                                          &lt;br /&gt;
  dsl operating-mode auto                                                        &lt;br /&gt;
  pvc 8/35                                                                       &lt;br /&gt;
   pppoe-client dial-pool-number 1                                               &lt;br /&gt;
  !                                                                              &lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
A noter que les caractéristiques (ici &amp;lt;tt&amp;gt;8/35&amp;lt;/tt&amp;gt;) du circuit vers le fournisseur d'accès dépendent totalement du dit fournisseur. Les identifiants pour l'accès au fournisseur sont déclarés dans une interface virtuelle &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt; qui se charge du protocole PPPoE (Point-to-Point Protocol over Ethernet). Le numéro du &amp;lt;tt&amp;gt;dial pool&amp;lt;/tt&amp;gt; doit être le même dans la référence de l'interface ATM et dans la configuration de l'interface &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt; (ici le numéro est 1).&lt;br /&gt;
&lt;br /&gt;
 interface Dialer1                                                               &lt;br /&gt;
  mtu 1492                                                                       &lt;br /&gt;
  ip address negotiated                                                          &lt;br /&gt;
  ip virtual-reassembly                                                          &lt;br /&gt;
  encapsulation ppp                                                              &lt;br /&gt;
  dialer pool 1                                                                  &lt;br /&gt;
  dialer idle-timeout 0                                                          &lt;br /&gt;
  dialer persistent                                                              &lt;br /&gt;
  ppp chap hostname IDENTIFIANT                                                  &lt;br /&gt;
  ppp chap password 0 MOTDEPASSE                                                  &lt;br /&gt;
 !    &lt;br /&gt;
&lt;br /&gt;
Bien entendu il faut remplacer les mot &amp;lt;tt&amp;gt;IDENTIFIANT&amp;lt;/TT&amp;gt; et &amp;lt;tt&amp;gt;MOTDEPASSE&amp;lt;/tt&amp;gt; avec l'identification fournie par votre fournisseur d'accès. A noter que la récupération de ces identifiants n'est pas toujours évidente. Pour l'ADSL Pro d'orange une demande a été suivie par un courriel contenant l'identifiant le lendemain mais pour l'accès ADSL BIO il a été nécessaire de fournir un document d'autorisation de divulgation par un responsable de l'établissement.&lt;br /&gt;
&lt;br /&gt;
La configuration &amp;lt;tt&amp;gt;mtu 1492&amp;lt;/tt&amp;gt; n'est pas optionnelle sans elle le passage par l'interface ATM casse la découverte du MTU maximal d'une façon ou d'une autre. Pour les liaisons peu stables, comme les notres, la directive &amp;lt;tt&amp;gt;dialer persistent&amp;lt;/tt&amp;gt; est très utile pour relancer l'identification sur la connexion.&lt;br /&gt;
&lt;br /&gt;
Enfin une liaison ADSL sans mascarade n'est pas très utile vu que l'opérateur ne donne qu'une adresse IPv4 routée. Pour mettre en place la mascarade il faut ajouter la directive &amp;lt;tt&amp;gt;ip nat outside&amp;lt;/tt&amp;gt; dans l'interface de sortie vers Internet (ici &amp;lt;tt&amp;gt;Dialer1&amp;lt;/tt&amp;gt;) et il faut ajouter &amp;lt;tt&amp;gt;ip nat inside&amp;lt;/tt&amp;gt; dans l'interface du réseau local (généralement une interface Ethernet). Enfin il faut définir la mascarade par elle-même :&lt;br /&gt;
&lt;br /&gt;
 access-list 1 permit 192.168.0.0 0.0.0.255  &lt;br /&gt;
 ip nat inside source list 1 interface Dialer1 overload&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu'à ajouter la route par défaut : &amp;lt;tt&amp;gt;ip route 0.0.0.0 0.0.0.0 Dialer1&amp;lt;/tt&amp;gt;.&lt;br /&gt;
                          &lt;br /&gt;
Dans cette configuration il est supposé que le réseau IPv4 local est &amp;lt;tt&amp;gt;192.168.0.0/24&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La solution à base de 1721 est fonctionnelle mais avec les limitations ou défauts suivant :&lt;br /&gt;
* la carte &amp;lt;tt&amp;gt;WICADSL1=&amp;lt;/tt&amp;gt; n'implante que ADSL version 1, dans le cas de notre liaison avec 40db d'atténuation on se retrouve avec des débit de quelques Mb/s même sur la ligne certifiée à 18Mb/s ;&lt;br /&gt;
* il n'est pas possible de configurer deux WIC ADSL dans un 1721, ce bogue est répertorié sous le numéro CSCsa90021 ;&lt;br /&gt;
* le 2721 est un routeur de bureau non facilement intégrable dans une baie (non fixable sur les rails, alimentation massive séparée), d'autant plus s'il en faut deux, un par liaison ADSL.&lt;br /&gt;
&lt;br /&gt;
= Seconde approche Cisco C2600 =&lt;br /&gt;
&lt;br /&gt;
[[File:2621.jpg|thumbs|500px|left|2621 en baie]]&lt;br /&gt;
&lt;br /&gt;
Il est possible de récupérer les cartes ADSL &amp;lt;tt&amp;gt;WIC-1ADSL&amp;lt;/tt&amp;gt; de ces routeurs pour les installer sur un Cisco 2621 un peu plus puissant. De plus ce routeur n'est pas affecté par le bogue CSCsa90021, les 2 cartes ADSL peuvent être configurées simultanément. Le 2621 dont nous disposions possédait lui aussi une mémoire flash de 32Mo et une mémoire vive de 64Mo. Du coup le 2621 peut tourner sous un IOS sensiblement identique à celui du 1721 soit un IOS 12.4.&lt;br /&gt;
&lt;br /&gt;
Pas de modification notable dans la configuration des interfaces ATM, hors numérotation des interfaces et nouvelles options ATM par défaut :&lt;br /&gt;
 interface ATM0/0&lt;br /&gt;
  no ip address&lt;br /&gt;
  atm restart timer 300     ! nouvelle option par défaut&lt;br /&gt;
  no atm ilmi-keepalive&lt;br /&gt;
  dsl operating-mode auto &lt;br /&gt;
  dsl enable-training-log   ! nouvelle option par défaut&lt;br /&gt;
  pvc 8/35 &lt;br /&gt;
   pppoe-client dial-pool-number 1&lt;br /&gt;
  !&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
La configuration de l'interface &amp;lt;tt&amp;gt;ATM0/1&amp;lt;/tt&amp;gt; est identique mis à part le numéro du &amp;lt;tt&amp;gt;dial-pool-number&amp;lt;/tt&amp;gt;. Les interfaces virtuelles &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt; se configurent de façon strictement semblable sur le 2921 par rapport au 1721.&lt;br /&gt;
&lt;br /&gt;
Par contre cette fois nous avons deux interfaces de sortie par les deux lignes ADSL. Le routage et la mascarade deviennent plus compliqué à configurer.&lt;br /&gt;
&lt;br /&gt;
 track 1 ip route IPV4_ISP_ADSL1 255.255.255.255 reachability&lt;br /&gt;
 track 2 ip route IPV4_ISP_ADSL2 255.255.255.255 reachability&lt;br /&gt;
 ip route 0.0.0.0 0.0.0.0 Dialer1 track 1&lt;br /&gt;
 ip route 0.0.0.0 0.0.0.0 Dialer2 track 2&lt;br /&gt;
&lt;br /&gt;
Ce bloc ajoute les routes par défaut via les lignes disponibles à un moment donné. La disponibilité se fait par test ICMP sur les adresses IPv4 coté fournisseur d'adresse. Si deux routes par défaut sont ajoutées, l'algorithme de routage doit équilibrer le trafic sur les différentes lignes ADSL. Dans notre cas le trafic se fait principalement via un mandataire Web. L'algorithme Cisco classique &amp;lt;tt&amp;gt;original&amp;lt;/tt&amp;gt; peut suffire. Cet algorithme route toutes les communications d'une adresse IPv4 donnée vers une autre adresse IPv4 donnée vers la même sortie. Si les sites web visités sont peu variés il vaut mieux passer sur l'algorithme &amp;lt;tt&amp;gt;universal&amp;lt;/tt&amp;gt; qui ajoute les ports sources et destination dans les éléments de choix de la route de sortie. Cela peut se faire avec la commande&lt;br /&gt;
&lt;br /&gt;
 (config)# ip cef load-sharing algorithm universal&lt;br /&gt;
&lt;br /&gt;
Pour la mascarade la configuration est de la forme :&lt;br /&gt;
&lt;br /&gt;
 access-list 1 permit 192.168.0.0 0.0.0.255  &lt;br /&gt;
 route-map ADSL1 permit 10&lt;br /&gt;
  match ip address 1&lt;br /&gt;
  match interface Dialer1&lt;br /&gt;
 !&lt;br /&gt;
 route-map ADSL2 permit 10&lt;br /&gt;
  match ip address 1&lt;br /&gt;
  match interface Dialer2&lt;br /&gt;
 !&lt;br /&gt;
 ip nat inside source route-map ADSL1 interface Dialer1 overload&lt;br /&gt;
 ip nat inside source route-map ADSL2 interface Dialer2 overload&lt;br /&gt;
&lt;br /&gt;
Vous constatez que l'astuce consiste à passer par des &amp;lt;tt&amp;gt;route-map&amp;lt;/tt&amp;gt; pour que la mascarade puisse se faire en bonne intelligence avec l'équilibrage de charge. Ne pas oublier d'ajouter les &amp;lt;tt&amp;gt;ip nat inside&amp;lt;/tt&amp;gt; sur l'interface du réseau local et les &amp;lt;tt&amp;gt;ip nat outside&amp;lt;/tt&amp;gt; dans les deux interfaces &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A noter : l'équilibrage n'a pas été testé avec cette configuration, les deux lignes ADSL n'ayant pas pu être opérationnelles simultanément avant l'acquisition de nouvelles cartes ADSL et le passage à un Cisco 2901.&lt;br /&gt;
&lt;br /&gt;
Cette solution à base de 2621 est fonctionnelle mais toujours avec le défaut que les &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt; ne sont pas suffisantes pour obtenir un débit satisfaisant avec les limitations ou défauts suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Troisième approche Cisco C2900 =&lt;br /&gt;
&lt;br /&gt;
[[File:2901.jpg|thumbs|500px|left|2901 en baie]]&lt;br /&gt;
&lt;br /&gt;
A l'origine l'idée était d'installer les cartes &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt; dans 2 des 4 slots WIC d'un Cisco 2901. Mais les slots WIC du 2901 sont des EHWIC (Enhanced High-Speed WAN Interface Cards). Et étrangement les cartes WIC classiques (du moins les &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt;) ne fonctionnent pas dans ces slots ou ne sont pas prises en compte par l'IOS. &lt;br /&gt;
&lt;br /&gt;
Un mal pour un bien, il faut utiliser des cartes ADSL plus récentes comme les &amp;lt;tt&amp;gt;HWIC-1ADSL-M&amp;lt;/tt&amp;gt;. Ces cartes peuvent être achetées d'occassion autour de 14 euros. C'est plus cher que les &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt; mais cela reste tout à fait acceptable. De plus ces cartes sont compatible ADSL version 2 voire même version 2+ ce qui va nettement améliorer le débit des connexions.&lt;br /&gt;
&lt;br /&gt;
Du coté de l'IOS pas de changement par rapport aux 1721 et 2621, nous sommes toujours sur un IOS classique version 12.4 (pour être précis l'image utilisée est &amp;lt;tt&amp;gt;c2900-universalk9-mz.SPA.154-1.T1.bin&amp;lt;/tt&amp;gt;). Par contre la complexité de la configuration augmente du au fait que le routeur est déjà utilisé à d'autres fins. Il n'est donc pas possible de modifier la table de routage principale. Il va donc falloir utiliser le dispositif PBR (Policy-Based Routing) de Cisco. Hélas ce dispositif est bien moins abouti que la politique de routage de Linux qui permet d'utiliser de vraies tables de routages annexes et pas seulement de modifier un peu la table principale. Nous allons aussi utiliser le dispositif SLA (Service Level Agreements) dont le principe est de de suivre l'état de services Internet et qui va au delà du simple suivi d'interfaces (tracking) dont nous nous sommes servis jusque là.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ADSL ==&lt;br /&gt;
&lt;br /&gt;
La configuration ADSL est strictement semblable à celle déjà utilisée avec les routeurs précédents.&lt;br /&gt;
&lt;br /&gt;
 interface ATM0/0/0&lt;br /&gt;
  no ip address&lt;br /&gt;
  no atm ilmi-keepalive&lt;br /&gt;
  dsl enable-training-log &lt;br /&gt;
  pvc 8/35 &lt;br /&gt;
   pppoe-client dial-pool-number 1&lt;br /&gt;
  !&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
 interface Dialer1&lt;br /&gt;
  mtu 1492&lt;br /&gt;
  ip address negotiated&lt;br /&gt;
  ip nat outside&lt;br /&gt;
  ip virtual-reassembly in&lt;br /&gt;
  encapsulation ppp&lt;br /&gt;
  dialer pool 1&lt;br /&gt;
  dialer idle-timeout 0&lt;br /&gt;
  dialer persistent&lt;br /&gt;
  ppp chap hostname IDENTIFIANT                                                  &lt;br /&gt;
  ppp chap password 0 MOTDEPASSE                                                  &lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Une tentative de récupérer une adresse IPv6 au niveau des interfaces &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt; n'a pas réussi. Il faut dire que je ne suis pas convaincu que le fournisseur en propose une.&lt;br /&gt;
&lt;br /&gt;
== Configuration SLA ==&lt;br /&gt;
&lt;br /&gt;
La configuration de vérification de l'état des connexions :&lt;br /&gt;
&lt;br /&gt;
 ip sla 20&lt;br /&gt;
  icmp-echo IPV4_ISP_ADSL1&lt;br /&gt;
 ip sla schedule 20 life forever start-time now&lt;br /&gt;
 ip sla 21&lt;br /&gt;
  icmp-echo IPV4_ISP_ADSL2&lt;br /&gt;
 ip sla schedule 21 life forever start-time now&lt;br /&gt;
 track 20 ip sla 20 reachability&lt;br /&gt;
 track 21 ip sla 21 reachability&lt;br /&gt;
&lt;br /&gt;
Dans notre configuration le dispositif SLA est clairement sous-exploité.&lt;br /&gt;
&lt;br /&gt;
== Configuration PBR == &lt;br /&gt;
&lt;br /&gt;
Sur l'interface du réseau local il est fait référence à la &amp;lt;tt&amp;gt;route-map&amp;lt;/tt&amp;gt; qui implante notre politique de routage (PBR) :&lt;br /&gt;
&lt;br /&gt;
 interface INTERFACE&lt;br /&gt;
  ...&lt;br /&gt;
  ip nat inside&lt;br /&gt;
  ip virtual-reassembly in max-reassemblies 128&lt;br /&gt;
  ip tcp adjust-mss 1452&lt;br /&gt;
  ip policy route-map to_adsl&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
La &amp;lt;tt&amp;gt;route-map&amp;lt;/tt&amp;gt; en question :&lt;br /&gt;
&lt;br /&gt;
 route-map to_adsl permit 10&lt;br /&gt;
  match ip address 20&lt;br /&gt;
  set ip next-hop verify-availability IPV4_ISP_ADSL1 1 track 20&lt;br /&gt;
  set ip next-hop verify-availability IPV4_ISP_ADSL1 2 track 21&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Et vous constatez le problème : l'obligation d'un numéro de séquence pour le &amp;lt;tt&amp;gt;next-hop&amp;lt;/tt&amp;gt; (juste après l'adresse IPv4 du saut). Du coup les deux routeurs ne sont pas au même niveau (il est interdit d'utiliser deux numéros identique) et donc pas d'équilibrage de charge juste un lien de secours.&lt;br /&gt;
&lt;br /&gt;
== La mascarade ==&lt;br /&gt;
&lt;br /&gt;
Aucun changement dans la définition de la mascarade :&lt;br /&gt;
&lt;br /&gt;
 access-list 20 permit 192.168.0.0 0.0.0.255  &lt;br /&gt;
 route-map ADSL2 permit 10&lt;br /&gt;
  match ip address 20&lt;br /&gt;
  match interface Dialer2&lt;br /&gt;
 !&lt;br /&gt;
 route-map ADSL1 permit 10&lt;br /&gt;
  match ip address 20&lt;br /&gt;
  match interface Dialer1&lt;br /&gt;
 !&lt;br /&gt;
 ip nat inside source route-map ADSL1 interface Dialer1 overload&lt;br /&gt;
 ip nat inside source route-map ADSL2 interface Dialer2 overload&lt;br /&gt;
&lt;br /&gt;
== Diagnostics == &lt;br /&gt;
&lt;br /&gt;
Cette sous-section présente quelques commandes permettant un rapide diagnostic des liaisons ADSL.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut vérifier si le circuit ATM de la connexion ADSL a pu être établi. Ici ce n'est pas le cas :&lt;br /&gt;
 #show interface ATM0/0/0 | include VCs&lt;br /&gt;
   23 maximum active VCs, 256 VCs per VP, 0 current VCCs&lt;br /&gt;
alors que là tout va bien :&lt;br /&gt;
 #show interface ATM0/0/0 | include VCs &lt;br /&gt;
   23 maximum active VCs, 256 VCs per VP, 1 current VCCs&lt;br /&gt;
Si vous avez un problème à ce niveau c'est que la connexion physique vers votre ISP est hors-service. Voyez avec eux.&lt;br /&gt;
&lt;br /&gt;
Il est ensuite possible d'apprécier la qualité de la ligne :&lt;br /&gt;
 #show dsl interface atm 0/0/0 | include Attenuation:&lt;br /&gt;
 Attenuation:	 38.5 dB			 22.0 dB&lt;br /&gt;
L'atténuation est de 40db sur l'autre ligne. Ces valeurs sont cohérentes avec celles mesurées par les techniciens de l'opérateur. Ils expliquent aussi les débits obtenus dans la sous-section suivante.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez regarder si l'identification PPPoE se passe bien :&lt;br /&gt;
 #show pppoe session&lt;br /&gt;
 Uniq ID  PPPoE  RemMAC          Port                    VT  VA         State&lt;br /&gt;
            SID  LocMAC                                      VA-st      Type&lt;br /&gt;
     N/A  18215  xxxx.yyyy.zzzz  ATM0/0/0                Di1 Vi1        UP      &lt;br /&gt;
                 xxxx.yyyy.zzzz  VC:  8/35                   UP              &lt;br /&gt;
     N/A   2968  xxxx.yyyy.zzzz  ATM0/1/0                Di2 Vi2        UP      &lt;br /&gt;
                 xxxx.yyyy.zzzz  VC:  8/35                   UP&lt;br /&gt;
Ici un miracle : les deux lignes sont actives.&lt;br /&gt;
&lt;br /&gt;
Pour aller plus loin le suivi des accès est-il correct ?&lt;br /&gt;
 #sh ip sla summary &lt;br /&gt;
 IPSLAs Latest Operation Summary&lt;br /&gt;
 Codes: * active, ^ inactive, ~ pending&lt;br /&gt;
 ID           Type        Destination       Stats       Return      Last&lt;br /&gt;
                                            (ms)        Code        Run &lt;br /&gt;
 -----------------------------------------------------------------------&lt;br /&gt;
 *20          icmp-echo   IPV4_ISP_ADSL1     TT=16      OK          0 seconds ago&lt;br /&gt;
 *21          icmp-echo   IPV4_ISP_ADSL2     TT=20      OK          55 seconds ago&lt;br /&gt;
Là encore tout se passe bien les deux lignes ADSL sont opérationnelles, du moins les adresses IPv4 des ISP répondent bien au ping.&lt;br /&gt;
&lt;br /&gt;
Enfin vous pouvez vérifier si la mascarade est opérationnelle :&lt;br /&gt;
 #sh ip nat statistics &lt;br /&gt;
 Total active translations: 420 (1 static, 419 dynamic; 411 extended)&lt;br /&gt;
 Peak translations: 11285, occurred 4w5d ago&lt;br /&gt;
 ...&lt;br /&gt;
 Dynamic mappings:&lt;br /&gt;
 -- Inside Source&lt;br /&gt;
 [Id: 2] route-map ADSL1 interface Dialer1 refcount 1&lt;br /&gt;
 [Id: 3] route-map ADSL2 interface Dialer2 refcount 0&lt;br /&gt;
Le &amp;lt;tt&amp;gt;refcount 1&amp;lt;/tt&amp;gt; indique que la première ligne ADSL est utilisée même si elle n'est pas surchargée. Par contre le &amp;lt;tt&amp;gt;refcount 0&amp;lt;/tt&amp;gt; montre le défaut d'équilibrage de charge.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Les cartes ADSL2+ permettent d'obtenir de meilleurs débits. Avec quelques rapides mesures en utilisant &amp;lt;tt&amp;gt;ssh&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; les résultats suivants sont obtenus :&lt;br /&gt;
* ADSL &amp;quot;pro&amp;quot; : 1,1Mo/s descendant et 100Ko/s montant&lt;br /&gt;
* ADSL B.I.O. : 1,3Mo/s descendant et 130Ko/s montant&lt;br /&gt;
&lt;br /&gt;
A noter que les débits &amp;quot;certifiés&amp;quot; pour la liaison B.I.O. ne sont absolument pas tenus. La société orange dirait probablement que les routeurs Cisco ne sont pas assez performants. &lt;br /&gt;
&lt;br /&gt;
Le point négatif est tout de même l'impossibilité, à notre connaissance, d'arriver à effectuer de l'équilibrage de charge avec le dispositif PBR.&lt;br /&gt;
&lt;br /&gt;
= Améliorations =&lt;br /&gt;
&lt;br /&gt;
Plusieurs améliorations de notre configuration sont possibles :&lt;br /&gt;
* Mettre en place un routeur dédié : l'utilisation de PBR avec la limitation rencontrée sur l'équilibrage de charge peut être contourner en dédiant un routeur aux seules lignes ADSL. Dans ce cas PBR n'est plus nécessaire et le routage peut se faire comme pour le 2621 avec deux routes par défaut dans la table de routage principale. &lt;br /&gt;
* Passer sur une routeur plus récent : nous avons acheté un routeur Cisco 9300 avec un IOS plus récent permettant SLA, PBR et mascarade (cette dernière étant impossible sur un C9200), la limitation sur l'équlibrage de charge PBR de l'IOS 12.4 est peut-être levée ? Au pire le C9300 va remplacer le 2901 qui sera dédié aux lignes ADSL.&lt;br /&gt;
* Passer à une technologie de connexion plus récente : un travail de fourmies a été mené par la plateforme maths/info pour recenser les lignes de communication utilisées par Polytech'Lille, une bonne partie étant obsolètes il a été possible de négocier une mutation des lignes ADSL, Numéris, dédiées et SDSL pour se concentrer sur un accès fibre 200Mb/s symétrique.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=88542</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=88542"/>
				<updated>2022-09-01T21:29:00Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
*** Projets_troisième_quatrième_années|Projets IMA3/IMA4&lt;br /&gt;
**** Projets_IMA3_IMA4_2020/2022 |- IMA3/4 2020/22&lt;br /&gt;
**** Projets_IMA3_IMA4_2019/2021 |- IMA3/4 2019/21&lt;br /&gt;
**** Projets_IMA3_IMA4_2018/2020 |- IMA3/4 2018/20&lt;br /&gt;
*** Projets_de_cinquième_année|Projets IMA5&lt;br /&gt;
**** Projets_IMA5_SC_2011/2012|- IMA5SC 2011/12&lt;br /&gt;
**** Projets_IMA5_2012/2013|- IMA5 2012/13&lt;br /&gt;
**** Projets_IMA5_2013/2014|- IMA5 2013/14&lt;br /&gt;
**** Projets_IMA5_2014/2015|- IMA5 2014/15&lt;br /&gt;
**** Projets_IMA5_2015/2016|- IMA5 2015/16&lt;br /&gt;
**** Projets_IMA5_2016/2017|- IMA5 2016/17&lt;br /&gt;
**** Projets_IMA5_2017/2018|- IMA5 2017/18&lt;br /&gt;
**** Projets_IMA5_2018/2019|- IMA5 2018/19&lt;br /&gt;
**** Projets_IMA5_2019/2020|- IMA5 2019/20&lt;br /&gt;
**** Projets_IMA5_2020/2021|- IMA5 2020/21&lt;br /&gt;
**** Projets_IMA5_2021/2022|- IMA5 2021/22&lt;br /&gt;
**** Projets_IMA5_2022/2023|- IMA5 2022/23&lt;br /&gt;
*** Projets_de_troisième_année|Archives IMA3 SC&lt;br /&gt;
*** Projets_de_quatrième_année|Archives IMA4&lt;br /&gt;
**** Projets_IMA4_SC_2010/2011|- IMA4SC 2010/11&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2011/2012|- IMA4 2011/12&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2012/2013|- IMA4 2012/13&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2013/2014|- IMA4 2013/14&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2014/2015|- IMA4 2014/15&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2015/2016|- IMA4 2015/16&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2016/2017|- IMA4 2016/17&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2017/2018|- IMA4 2017/18&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2018/2019|- IMA4 2018/19&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2019/2020|- IMA4 2019/20&lt;br /&gt;
** currentevents-url|currentevents&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86887</id>
		<title>Projets IMA3 IMA4 2020/2022</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86887"/>
				<updated>2021-10-11T09:27:13Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes 2021/2022 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole !! Eleves&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA3/IMA4 2020/2022 P1|Titre]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
| Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes 2020/2021 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole !! Eleves&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2020/2022 P3|Conception et commande d'un Drone]]&lt;br /&gt;
| Midzodzi Pekpe / Othman Lakhal&lt;br /&gt;
| Louise Maës / Léo Poumaer / Niels Godbert / Rémi Brachot / Lucas Postollec / Chaimae Yasmine &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86886</id>
		<title>Projets IMA3 IMA4 2020/2022</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86886"/>
				<updated>2021-10-11T09:24:49Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes 2021/2022 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole !! Eleves&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2020/2022 P3|Conception et commande d'un Drone]]&lt;br /&gt;
| K. Midzodzi PEKPE / Othman Lakhal&lt;br /&gt;
| Louise MAËS / Léo POUMAER / Niels GODBERT / Rémi BRACHOT / Lucas POSTOLLEC / Chaimae YASMINE &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes 2020/2021 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole !! Eleves&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2020/2022 P3|Conception et commande d'un Drone]]&lt;br /&gt;
| K. Midzodzi PEKPE / Othman Lakhal&lt;br /&gt;
| Louise MAËS / Léo POUMAER / Niels GODBERT / Rémi BRACHOT / Lucas POSTOLLEC / Chaimae YASMINE &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86885</id>
		<title>Projets IMA3 IMA4 2020/2022</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86885"/>
				<updated>2021-10-11T09:24:06Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes 2020/2022 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole !! Eleves&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2020/2022 P3|Conception et commande d'un Drone]]&lt;br /&gt;
| K. Midzodzi PEKPE / Othman Lakhal&lt;br /&gt;
| Louise MAËS / Léo POUMAER / Niels GODBERT / Rémi BRACHOT / Lucas POSTOLLEC / Chaimae YASMINE &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86884</id>
		<title>Projets IMA3 IMA4 2020/2022</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86884"/>
				<updated>2021-10-11T09:19:48Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes 2020/2022 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole !! Eleves&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2020/2022 P3|Conception et commande d'un Drone]]&lt;br /&gt;
| K. Midzodzi PEKPE / Othman Lakhal&lt;br /&gt;
| Louise MAËS / Léo POUMAER / Niels GODBERT / Rémi BRACHOT / Lucas POSTOLLEC / Chaimae YASMINE &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86883</id>
		<title>Projets IMA3 IMA4 2020/2022</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=86883"/>
				<updated>2021-10-11T09:19:18Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes 2020/2022 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole !! Eleves&lt;br /&gt;
| P3 [[IMA3/IMA4 2020/2022 P3|Conception et commande d'un Drone]]&lt;br /&gt;
| K. Midzodzi PEKPE / Othman Lakhal&lt;br /&gt;
| Louise MAËS / Léo POUMAER / Niels GODBERT / Rémi BRACHOT / Lucas POSTOLLEC / Chaimae YASMINE &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=86882</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=86882"/>
				<updated>2021-10-11T09:16:53Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
*** Projets_troisième_quatrième_années|Projets IMA3/IMA4&lt;br /&gt;
**** Projets_IMA3_IMA4_2020/2022 |- IMA3/4 2020/22&lt;br /&gt;
**** Projets_IMA3_IMA4_2019/2021 |- IMA3/4 2019/21&lt;br /&gt;
**** Projets_IMA3_IMA4_2018/2020 |- IMA3/4 2018/20&lt;br /&gt;
*** Projets_de_cinquième_année|Projets IMA5&lt;br /&gt;
**** Projets_IMA5_SC_2011/2012|- IMA5SC 2011/12&lt;br /&gt;
**** Projets_IMA5_2012/2013|- IMA5 2012/13&lt;br /&gt;
**** Projets_IMA5_2013/2014|- IMA5 2013/14&lt;br /&gt;
**** Projets_IMA5_2014/2015|- IMA5 2014/15&lt;br /&gt;
**** Projets_IMA5_2015/2016|- IMA5 2015/16&lt;br /&gt;
**** Projets_IMA5_2016/2017|- IMA5 2016/17&lt;br /&gt;
**** Projets_IMA5_2017/2018|- IMA5 2017/18&lt;br /&gt;
**** Projets_IMA5_2018/2019|- IMA5 2018/19&lt;br /&gt;
**** Projets_IMA5_2019/2020|- IMA5 2019/20&lt;br /&gt;
**** Projets_IMA5_2020/2021|- IMA5 2020/21&lt;br /&gt;
**** Projets_IMA5_2021/2022|- IMA5 2021/22&lt;br /&gt;
*** Projets_de_troisième_année|Archives IMA3 SC&lt;br /&gt;
*** Projets_de_quatrième_année|Archives IMA4&lt;br /&gt;
**** Projets_IMA4_SC_2010/2011|- IMA4SC 2010/11&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2011/2012|- IMA4 2011/12&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2012/2013|- IMA4 2012/13&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2013/2014|- IMA4 2013/14&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2014/2015|- IMA4 2014/15&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2015/2016|- IMA4 2015/16&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2016/2017|- IMA4 2016/17&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2017/2018|- IMA4 2017/18&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2018/2019|- IMA4 2018/19&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2019/2020|- IMA4 2019/20&lt;br /&gt;
** currentevents-url|currentevents&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA5_2021/2022&amp;diff=86537</id>
		<title>Projets IMA5 2021/2022</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA5_2021/2022&amp;diff=86537"/>
				<updated>2021-09-06T07:33:34Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « == Répartition des binômes ==  {| class=&amp;quot;wikitable&amp;quot; ! Projet !! Encadrants école !! Elèves |- | P20 IMA5 2021/2022 P20|2021/2022 Système de messagerie global mais i... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants école !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| P20 [[IMA5 2021/2022 P20|2021/2022 Système de messagerie global mais individualisé]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
| Souleymane Sow &lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA5 2021/2022 P22|2021/2022 Infobénisterie II : coucou]]&lt;br /&gt;
| Alexandre Boé, Xavier Redon &amp;amp; Thomas Vantroys&lt;br /&gt;
| Enoch Hodonou&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA5 2021/2022 P7|2021/2022 Robot Rampant]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
| Jean Baumann&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=86536</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=86536"/>
				<updated>2021-09-06T07:26:38Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
*** Projets_troisième_quatrième_années|Projets IMA3/IMA4&lt;br /&gt;
**** Projets_IMA3_IMA4_2019/2021 |- IMA3/4 2019/21&lt;br /&gt;
**** Projets_IMA3_IMA4_2018/2020 |- IMA3/4 2018/20&lt;br /&gt;
*** Projets_de_cinquième_année|Projets IMA5&lt;br /&gt;
**** Projets_IMA5_SC_2011/2012|- IMA5SC 2011/12&lt;br /&gt;
**** Projets_IMA5_2012/2013|- IMA5 2012/13&lt;br /&gt;
**** Projets_IMA5_2013/2014|- IMA5 2013/14&lt;br /&gt;
**** Projets_IMA5_2014/2015|- IMA5 2014/15&lt;br /&gt;
**** Projets_IMA5_2015/2016|- IMA5 2015/16&lt;br /&gt;
**** Projets_IMA5_2016/2017|- IMA5 2016/17&lt;br /&gt;
**** Projets_IMA5_2017/2018|- IMA5 2017/18&lt;br /&gt;
**** Projets_IMA5_2018/2019|- IMA5 2018/19&lt;br /&gt;
**** Projets_IMA5_2019/2020|- IMA5 2019/20&lt;br /&gt;
**** Projets_IMA5_2020/2021|- IMA5 2020/21&lt;br /&gt;
**** Projets_IMA5_2021/2022|- IMA5 2021/22&lt;br /&gt;
*** Projets_de_troisième_année|Archives IMA3 SC&lt;br /&gt;
*** Projets_de_quatrième_année|Archives IMA4&lt;br /&gt;
**** Projets_IMA4_SC_2010/2011|- IMA4SC 2010/11&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2011/2012|- IMA4 2011/12&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2012/2013|- IMA4 2012/13&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2013/2014|- IMA4 2013/14&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2014/2015|- IMA4 2014/15&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2015/2016|- IMA4 2015/16&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2016/2017|- IMA4 2016/17&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2017/2018|- IMA4 2017/18&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2018/2019|- IMA4 2018/19&lt;br /&gt;
**** Projets_IMA4_SC_&amp;amp;_SA_2019/2020|- IMA4 2019/20&lt;br /&gt;
** currentevents-url|currentevents&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P19%2B&amp;diff=86245</id>
		<title>IMA3/IMA4 2019/2021 P19+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P19%2B&amp;diff=86245"/>
				<updated>2021-06-18T13:29:36Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
La puissance de calcul disponible à bas coût permet d'envisager de réaliser des appareils de mesures complexes en mode DIY (Do It Yourself). Dans ce projet, nous proposons la conception et la réalisation d'un oscilloscope pour des signaux analogiques et numériques (analyseur logique). L'oscilloscope sera constitué d'un microcontrôleur et/ou d'un FPGA, d'une partie d'acquisition de données, de stockage de données (RAM) et éventuellement d'une interface de visualisation.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Concevoir et réaliser un oscilloscope &amp;quot;maison&amp;quot; open source.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
* Matériel : &lt;br /&gt;
** Microcontrôleur STM32.&lt;br /&gt;
** Ecran LCD&lt;br /&gt;
** Générateur basses fréquences&lt;br /&gt;
&lt;br /&gt;
* Logiciel/Language: &lt;br /&gt;
**Langage C&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
* Analyser et définir des différents composants nécessaires &lt;br /&gt;
&lt;br /&gt;
* Programmer le CAN pour récupérer et stocker la valeur de l'amplitude à un temps donné&lt;br /&gt;
&lt;br /&gt;
* Programmer l'écran LCD pour visualiser un signal&lt;br /&gt;
&lt;br /&gt;
* Mettre en place une interface pour modifier l'échelle du signal.&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
Pour commencer le projet, nous allons voir les différentes manières de réaliser un oscilloscope. Il existe plusieurs façons de le réaliser comme par exemple à l'aide d'un FPGA ou d'un microcontrôleur STM32. En amont de la partie intelligente de l'oscilloscope, nous avons au moins un convertisseur Analogique/numérique afin d'envoyer la tension mesurée sur le FPGA ou microcontrôleur. Nous avons ensuite un écran LCD qui va permettre d'afficher le signal. &lt;br /&gt;
[[Fichier:Schema_ard.png|350px|right|thumb|Schéma de fonctionnement avec Arduino]]&lt;br /&gt;
&lt;br /&gt;
Notre choix de microcontrôleur et de carte de développement s'arrête sur un des deux choix, la NUCLEO F401RE et la NUCLEO F412ZG. Ceux-ci seront tous les deux ouverts à la programmation, disposent déjà d'un ADC et peuvent être équipé d'un écran LCD. Le problème du F401RE est qu'il ne peut gérer qu'une seule channel de l'oscilloscope. Cela veut dire que notre microcontrôleur STM32F401 ne peut réaliser qu'une seule conversion analogique/numérique à la fois.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
Avant de commencer la réalisation de l'oscilloscope, nous allons nous intéresser aux projets déjà existants et nous documenter pour voir quelle solution serait la plus viable.&lt;br /&gt;
En effet, des projets de ce genre existent déjà sur internet comme par exemple sur le site instructables.com où un utilisateur a réaliser un mini oscilloscope à base de microcontrôleur STM32F030F4 et d'un écran LCD avec une résolution de 160x128px. Le microcontrôleur possède un convertisseur Analogique/Numérique avec un temps de conversion minimal de 1 us.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Liens Utiles=&lt;br /&gt;
&lt;br /&gt;
*http://www.jiee.eu/wp-content/uploads/papers/vol2i2/v2i2_Murcko_Molnar.pdf&lt;br /&gt;
*[https://pdf.sciencedirectassets.com/277811/1-s2.0-S1877042815X00127/1-s2.0-S187704281500717X/main.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEKz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJGMEQCIGhjMDzhipfAfaWURi%2BFzP94OSJ%2FdhMmSvRgOJLuZzwvAiBb7NkDxSSZW%2FhFfFPyQ1dGept5nuq3LI0PQ9z7gRxk0Cq0AwhFEAMaDDA1OTAwMzU0Njg2NSIMH5qv%2BIbDn3qGH1eRKpEDfvvFSJnBDYA7vNKTmhWIfy7zX1HO%2Bv4XVYYnjbG388vOsGnvF5qo9NbYxWG2ZvBLl4UptM0mmCuPHnz5ZRL%2BMgGr0cZA8v3ZAc6zHuosolMvrIzisDuSb6CEkAWQ0lHgt5AEB97cqM185GZRJu50Osn0wPQy5GpPEkSz0MM5DFoeUGfExYEmsFXm%2B3244IJ0ejXgVIvo6gyjT65z2HvAfcBN1HayQkDdIWtbm1Z4mnoPF0pG26%2BCGDvO1uCJekFO4XsGWybocWxwOTKi6yqmIJlTsPewoo9o6O7bWvxQq9XJLlwcMwwlwyDqSFpQwSZIpWLwEiqtFd27Ow5TbLWJhRWIjDhaPIRnw9lNojgZhKHmqK2u%2FsOffF6lPJ2mXv6RZZpnZzJ%2FEbaeSrRw002Sc6AXtBFGt9ZHJ6%2BYFWXBfcPDZsWXVzemzIaM9EDC4sCW3ZQwcQNzwTlU%2Fe7zWrkctSGZeyuKYQ4F6F%2BOFX7g%2BhHzB9dqdSgA5RTk7l%2B7Y9jllTw9uyOd9i4SXZ7JPTmFbzIwuK%2BJhQY67AHoIboyG2h%2BAhc0bbi%2FjfJDq4facC8YEFg7md%2BhftjE2nfpKNIC2zDrILy2%2F9AgZKfyTW8TmFpiTL16l%2FwY%2Bj4%2BkwED5sGRTmMSntlXwgBEoW5HKaKN4NAqF5msMjJa%2FOQijh0A%2BDrKNOTd4EupLPZM8ZzR6n57%2FKS6lArvqhvL6zH8%2BGH%2Bwe5qNZGXtGTCztdHfkcI3PTqv2c2vVNFRH97MXqF2lWYRJcyUaZVZtpPOfFwzzoPJ31VyQMqnIEsp5hAW%2F0H9arhtHkttve2Vs1EbsCfxNADs5ozZaIDd4sSzwMo2Yu0JaNwDBII7g%3D%3D&amp;amp;X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Date=20210517T123008Z&amp;amp;X-Amz-SignedHeaders=host&amp;amp;X-Amz-Expires=300&amp;amp;X-Amz-Credential=ASIAQ3PHCVTYR3FRAZNN%2F20210517%2Fus-east-1%2Fs3%2Faws4_request&amp;amp;X-Amz-Signature=a8a561185aeef42d25319c18fcb061ead66607e2707a83f3b4df299a4856a19c&amp;amp;hash=b41061f66104ece83eeff5ef3e7091f869e85c8455ad06944cdad582c62baf54&amp;amp;host=68042c943591013ac2b2430a89b270f6af2c76d8dfd086a07176afe7c76c2c61&amp;amp;pii=S187704281500717X&amp;amp;tid=spdf-66f8cd23-0e48-402b-8af4-34f2abee30a7&amp;amp;sid=4ca04885778dd74d321a6505f35e7d4ec82egxrqb&amp;amp;type=client/ Avec FPGA]&lt;br /&gt;
&lt;br /&gt;
*[https://www.electronique-mixte.fr/projet-electronique-oscilloscope-numerique-a-base-du-microcontroleur-pic18f4680-a-liaison-serie-rs232/ Oscillo sur liaison série]&lt;br /&gt;
&lt;br /&gt;
*[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwj9-fXC5tXwAhXJ8eAKHbRwD4YQFjAAegQIBhAD&amp;amp;url=https%3A%2F%2Fwww.st.com%2Fresource%2Fen%2Freference_manual%2Fdm00180369-stm32f412-advanced-armbased-32bit-mcus-stmicroelectronics.pdf&amp;amp;usg=AOvVaw1jBYKXOIhft-b6t_Gni65g Lien Ref manual du STM32F412]&lt;br /&gt;
*[https://www.st.com/resource/en/reference_manual/dm00096844-stm32f401xbc-and-stm32f401xde-advanced-armbased-32bit-mcus-stmicroelectronics.pdf Lien ref Manual du STM32F401]&lt;br /&gt;
&lt;br /&gt;
*Projets déjà réalisés : &lt;br /&gt;
**https://github.com/cskarai/csabiscope&lt;br /&gt;
**https://github.com/pingumacpenguin/STM32-O-Scope&lt;br /&gt;
**https://www.instructables.com/Mini-Oscilloscope/&lt;br /&gt;
&lt;br /&gt;
*https://programmer.group/simple-oscilloscope-library-function-based-on-stm32.html&lt;br /&gt;
*https://www.gameinstance.com/post/79/STM32-Oscilloscope&lt;br /&gt;
*https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2018/2019_P5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Programmation du STM32 :&lt;br /&gt;
**http://jmfriedt.free.fr/tp3stm32_2014.pdf&lt;br /&gt;
**https://review.coreboot.org/plugins/gitiles/chrome-ec/+/b7308fdff1300bb4bf0362e71ed022b2dbf92c25/board/nucleo-f412zg/&lt;br /&gt;
**https://www.youtube.com/watch?v=xsYIh1sunso&lt;br /&gt;
**https://github.com/davisjp1822/stm32_nucleo_linux&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P11%2B&amp;diff=86244</id>
		<title>IMA3/IMA4 2019/2021 P11+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P11%2B&amp;diff=86244"/>
				<updated>2021-06-18T13:13:04Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
Concevoir et réaliser une interface de visualisation pour des appareils de mesure &lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet global (découpé en trois sous-projets) est de réaliser une plateforme complète permettant de faire des travaux pratiques d'électronique à distance.&lt;br /&gt;
&lt;br /&gt;
Ce sous projet consiste en la réalisation d'une interface de commande d'un appareil de mesure (oscilloscope, multimètre, ...) ou d'un générateur à distance au travers d'une interface LXI ([https://en.wikipedia.org/wiki/LAN_eXtensions_for_Instrumentation LAN eXtensions for Instrumentation]).&lt;br /&gt;
&lt;br /&gt;
L'interface sera constituée de deux modules :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; une interface paramétrable de commande à distance des appareils (panneau de commande) ; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; une interface d'affichage des données. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Si possible, les développements se feront en HMTL5 au travers d'un framework à choisir.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
* Utilisation de l'HTML5 et du PHP pour le développement de l'interface ;&lt;br /&gt;
&lt;br /&gt;
* Framework : Bootstrap ;&lt;br /&gt;
&lt;br /&gt;
* Pas de matériel particulier à commander, j'utiliserai les appareils de mesure déjà disponibles à Polytech.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&lt;br /&gt;
* Prendre en main l'interface LXI avec des appareils de mesure électronique (oscilloscope, multimètre, ...) ;&lt;br /&gt;
&lt;br /&gt;
* Réaliser une interface web permettant de contrôler les appareils et afficher les résultats.&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Prise d'information sur l'interface LXI : en entrant l'IP de l'appareil dans la barre de recherche d'un navigateur, il semblerait que l'on puisse accéder à l'interface et commander l'appareil.&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un oscilloscope SDS 1102CML+ pour tester l'interface LXI : &lt;br /&gt;
&lt;br /&gt;
* on le branche sur une carte réseau du PC puis on lui assigne une adresse ip dans le réseau local (dans le menu Utility de l'oscilloscope) et on ping cette adresse pour s'assurer de la connexion : cela fonctionne ;&lt;br /&gt;
&lt;br /&gt;
* j'essaie d'entrer l'adresse IP sur un navigateur pour vérifier s'il existe une interface LXI mais la connexion ne fonctionne pas ;&lt;br /&gt;
&lt;br /&gt;
* installation du programme [https://lxi-tools.github.io/ lxi-tools] (et même installation plus simple avec la commande : apt-get install lxi-tools) qui permet d'utiliser LXI en ligne de commande et l'oscilloscope est bien retrouvé avec la bonne adresse IP.&lt;br /&gt;
&lt;br /&gt;
Avec ce programme on peut obtenir des screenshots de l'oscilloscope, cela pourra être utile pour l'affichage.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:premier_screen.jpg|200px|thumb|right|Premier screenshot de l'oscilloscope]]&lt;br /&gt;
&lt;br /&gt;
Liens qui peuvent être utiles pour la suite :&lt;br /&gt;
&lt;br /&gt;
[https://teledynelecroy.com/doc/introducing-the-lxi-interface]&lt;br /&gt;
&lt;br /&gt;
[https://lxistandard.org/About/LXI-Core-Features.aspx]&lt;br /&gt;
&lt;br /&gt;
[https://www.lxistandard.org/About/LXI-Discovery-Tools.aspx]&lt;br /&gt;
&lt;br /&gt;
[https://siglentna.com/application-note/lxi-tools/]&lt;br /&gt;
&lt;br /&gt;
[https://www.siglenteu.com/application-note/quick-remote-computer-control-using-lxi-tools/ Résumé de l'utilisation de la commande lxi].&lt;br /&gt;
&lt;br /&gt;
Voici une [https://siglentna.com/wp-content/uploads/dlm_uploads/2017/10/ProgrammingGuide_forSDS-1-1.pdf liste des commandes SCPI] pour contrôler l'oscilloscope. Peut-être faudra-t-il trouver d'autres commandes pour d'autres appareils de mesures.&lt;br /&gt;
&lt;br /&gt;
En testant quelques commandes en mode SCPI, on s'aperçoit qu'elles ont le comportement souhaité sur l'oscilloscope.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser l'interface web, j'utilise un serveur Apache2 et le langage PHP (sous Linux utilisation des commandes : &amp;quot;apt-get install apache2&amp;quot; et &amp;quot;apt-get install libapache2-mod-php&amp;quot;). Pour le moment, on peut lancer la recherche des appareils connectés au réseau (réalisé avec la commande 'lxi discover'); puis choisir l'appareil que l'on souhaite utiliser. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appareils_decouverts.png]]&lt;br /&gt;
&lt;br /&gt;
J'ai à ma disposition un seul oscilloscope donc pour le moment cela ne lance que la page de contrôle et de visualisation de l'oscilloscope. A l'avenir, il faudra ajouter une base de donnée pour pouvoir sélectionner la bonne page à lancer selon l'appareil selectionné. Sur la page de contrôle et de visualisation, on affiche une capture d'écran de l'oscilloscope et quelques boutons pour tester la communication entre le serveur et l'oscilloscope. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Visu_et_cmd_oscillo.png|thumb|600px|center]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin d'afficher cette capture d'écran, il faut modifier le groupe des fichiers du serveur apache2 (sachant que les fichiers se trouvent dans le dossier /var/www/testdomain.info, on utilise la commande 'chgrp -R www-data /var/www/testdomain.info'), et on donne la permission au groupe d'écrire dans ce dossier pour y sauvegarder la photo (avec la commande 'chmod -R g+w /var/www/testdomain.info/').&lt;br /&gt;
&lt;br /&gt;
J'utiliserai ensuite le framework Bootstrap pour l'interface web.&lt;br /&gt;
&lt;br /&gt;
L'affichage du screenshot devrait être raffraichit le plus souvent possible pour obtenir une visualisation réactive. Pour ce faire, il faut regarder du côté du JavaScript.&lt;br /&gt;
&lt;br /&gt;
Pour débuger le code HTML/PHP, on utilise la commande : tail -f /var/log/apache2/error.log .&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
Afin d'utiliser Bootstrap pour l'interface Web, j'utilise les lignes de code que l'on peut retrouver [https://getbootstrap.com/docs/5.0/getting-started/download/#cdn-via-jsdelivr ici]. Ceci correspond à utiliser un CDN (Content Delivery Network) qui permet de faire le lien entre le framework sans avoir à télécharger les fichiers sources sur le serveur Apache2. Il faudra alors utiliser ces deux lignes dans les entêtes de chaque fichier html et php. On peut trouver un petit comparatif entre la version locale de Bootstrap et la version CDN : [https://www.studiogalaxie.fr/librairies-cdn-ou-local-que-choisir/]. Etant donné que l'ordinateur sur lequel j'implémente le serveur est connecté à Internet, l'utilisation du CDN ne devrait pas poser du soucis. Dans le pire des cas, il devrait être possible de passer de cette version à la version locale facilement. &lt;br /&gt;
&lt;br /&gt;
Avec ce framework, je peux maintenant commencer à réaliser des affichages plus esthétiques en utilisant la [https://getbootstrap.com/docs/5.0/components/ documentation de Bootstrap].&lt;br /&gt;
&lt;br /&gt;
Je me penche maintenant vers la redirection sur la bonne page lors du choix de l'appareil. En effet, étant donné le type de l'appareil, la page de visualisation et commande doit être différente, et donc selon l'appareil choisi, il faut pouvoir visualiser la bonne page. J'utilise pour l'instant un fichier .JSON qui me permet d'associer un type d'appareil avec un nom. De ce fait pour la redirection, selon le nom que l'on trouve dans ce fichier, on peut savoir sur quelle page il faut rediriger selon le type trouvé (si c'est un oscilloscope, un multimètre...). Par la suite, peut-être qu'une base de donnée SQL correspondra mieux au travail à réaliser.&lt;br /&gt;
&lt;br /&gt;
Maintenant que cette redirection est effective, il faut pouvoir transmettre les données (nom et adresse ip de l'appareil) vers la page web. Etant donné que ces données transitent par 2 pages différentes, j'utilise la méthode GET (qui écrit les données dans l'URL de la page). Cela peut poser un problème de confidentialité des données mais ici cela ne devrait pas être un problème, la seule information importante est l'adresse IP de l'appareil. &lt;br /&gt;
&lt;br /&gt;
Il semblerait qu'un léger problème se pose avec une interférence entre les données. L'affichage de la  capture d'écran en fonction de la commande envoyée depuis le site est correct, mais par exemple en réalité l'oscilloscope affiche un menu alors qu'on lui envoie une commande pour fermer le menu. Cette réaction semble donc sans conséquence sur l'utilisation depuis l'interface web, mais cela reste à surveiller pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
Pour le moment, j'ai ajouté quelques fonctionnalités à l'interface de l'oscilloscope :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Interface_web_ajout_boutons.png]]&lt;br /&gt;
&lt;br /&gt;
L'utilisation du framework Bootstrap reste à parfaire pour une interface claire et esthétique, mais on peut voir un début de prise en main.&lt;br /&gt;
&lt;br /&gt;
Je précisais auparavant que j'utilisais la méthode GET pour faire transiter les données. Je suis finalement revenu sur cette partie du code parce qu'on pouvait y trouver de la duplication de code. J'utilise maintenant des variables de session pour l'adresse IP et le nom de l'appareil. Cela fourni un code un peu plus propre qu'avec la méthode GET.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
&lt;br /&gt;
Lors de cette semaine, je commence par réaliser le raffraichissement de l'image de l'oscilloscope sur l'interface Web.&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir obtenir une capture d'écran de l'oscilloscope toutes les secondes, je crée un nouveau fichier (screenshot.php) qui sera appelé toutes les secondes par un script sur la page de l'oscilloscope. Le fichier de screenshot réalise juste la commande de capture d'écran avec la commande 'lxi screenshot' et l'adresse IP de l'appareil. En plus d'appeler ce fichier, le script recharge l'image sur la page.&lt;br /&gt;
&lt;br /&gt;
Ensuite, je mets en place d'autres boutons permettant d'utiliser l'oscilloscope. De plus, en utilisant bootstrap je regroupe les boutons dans des onglets pour rendre l'interface web plus facilement compréhensible, avec moins d'information sur la même page.&lt;br /&gt;
&lt;br /&gt;
Voici trois captures d'écrans permettant de résumer les paramètres utilisables sur l'oscilloscope à partir de l'interface :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:interface_global.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:interface_ch1.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:interface_curseurs.png]]&lt;br /&gt;
&lt;br /&gt;
Les onglets 'CH1' et 'CH2' réalisent chacuns les mêmes actions respectivement sur le signal de la voie 1 et de la voie 2.&lt;br /&gt;
&lt;br /&gt;
De plus, j'organise l'interface pour faire en sorte que tous les paramètres soient accordés avec les paramètres sur l'oscilloscope. Cela permet de voir directement si le changement que l'on souhaite faire sur l'oscilloscope a été effectué, parce que l'on ne peut pas choisir le menu que l'on peut voir sur l'oscilloscope. Par exemple, si on modifie l'unité de la voie 1, l'interface se met à jour avec l'unité choisie sur l'onglet de la voie 1 (si l'on choisit des ampères, 1V/Division devient 1A/Division et ce jusqu'au prochain changement d'unité).&lt;br /&gt;
&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
&lt;br /&gt;
Pour rendre l'interface plus agréable à utiliser, je retire les boutons pour soumettre les changements. Les changements sont maintenant réalisés directement une fois l'option sélectionnée. Ceci est réalisé en ajoutant simplement la commande 'onchange=&amp;quot;this.form.submit();&amp;quot;' au bon endroit dans le code.&lt;br /&gt;
&lt;br /&gt;
Par exemple, pour l'onglet CH1, on a maintenant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Nouveau_ch1.png]]&lt;br /&gt;
&lt;br /&gt;
A faire maintenant : Rendre modulaire le fichier de l'interface de l'oscilloscope pour rendre les potentielles modificationsi sur ce fichier plus simple :&lt;br /&gt;
&lt;br /&gt;
* Un dossier par type d'appareil :&lt;br /&gt;
** Dans ce dossier, on trouve 1 dossier par commande &lt;br /&gt;
*** Dans ces dossiers : un fichier pour l'affichage et un fichier pour la réalisation de la commande.&lt;br /&gt;
&lt;br /&gt;
Pour cela, la fonction PHP 'scandir' sera à utiliser.&lt;br /&gt;
&lt;br /&gt;
Avant d'attaquer cette partie, j'ajoute deux dernières commandes sur l'interface de l'oscilloscope : la modification du Trigger Level ainsi que la modification des limites de fréquences des filtres.&lt;br /&gt;
&lt;br /&gt;
Maintenant, le fichier principal reprend les fichiers d'affichage et de réalisation des commandes pour l'oscilloscope comme c'était prévu. Je pense que dans le futur j'essaierai d'avoir une page principale et selon le type de l'appareil que l'on choisit d'utiliser, cette page va chercher dans le dossier du type tout ce dont elle a besoin pour le bon fonctionnement de l'interface.&lt;br /&gt;
&lt;br /&gt;
Avant de commencer à commander un nouvel appareil (qui sera le générateur de signaux SDG1032X dont la documentation pour les commandes avec LXI se trouve [https://siglentna.com/USA_website_2014/Documents/Program_Material/SDG_ProgrammingGuide_PG_E03B.pdf ici]), on essaie l'interface en regardant l'oscillation d'un Quartz sur [https://projets-ima.plil.fr/mediawiki/index.php/IMA3/IMA4_2019/2021_P1%2B le projet d'Andrei Florea]. On obtient le résultat suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Utilisation_oscilloscope.png]]&lt;br /&gt;
&lt;br /&gt;
L'interface est alors bien utilisable.&lt;br /&gt;
&lt;br /&gt;
Au final je m'attaque tout de suite à réaliser une page unique peu importe l'appareil selectionné, mais qui affiche de façon différente selon le type de l'appareil sélectionné.&lt;br /&gt;
&lt;br /&gt;
Cette page fonctionne de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Il y a un grand dossier par type d'appareil (Oscilloscope, Generateur...). A l'interieur de ce dossier, on retrouve des dossiers avec le nom des menus que l'on affiche (pour l'Oscilloscope par exemple : CH1,CH2,Curseurs et Global). A l'intérieur de ces dossiers, se trouvent des dossiers selon les commandes que l'on peut réaliser sur l'appareil. Dans ces derniers dossiers, on retrouve un fichier avec le code l'affichage de la commande sur la page et un autre fichier avec la réalisation de la commande si celle-ci a été choisie par l'utilisateur. Ainsi, on peut parcourir l'arborescence pour afficher de manière procédurale l'ensemble des menus, boutons...&lt;br /&gt;
&lt;br /&gt;
Afin que ceci soit efficace, il faut reprendre cette arborescence pour les différents types d'appareils que l'on utilise.&lt;br /&gt;
&lt;br /&gt;
Cette fois-ci je m'attaque pour de bon à la réalisation de l'interface du générateur de signaux SDG1032X. Pour commencer, j'assigne une adresse IP valide à l'appareil, puis je m'assure tout d'abord qu'il est possible de réaliser une capture d'écran avec la commande 'lxi screenshot'. Cette commande fonctionne, donc on pourra l'utiliser pour l'affichage sur l'interface Web. En parcourant les commandes LXI disponibles dans la documentation, je m'aperçois qu'il existe une commande permettant de simuler l'appuie d'une touche sur le générateur. Cette commande permet de faciliter grandement la tâche par rapport à l'oscilloscope. L'interface ne sera donc composée que de boutons comme pour le générateur physique. Avec la commande SCPI 'VKEY VALUE,&amp;lt;valeur&amp;gt;,STATE,1', on peut réaliser la pression de la touche 'valeur'. Les valeurs des touches sont indiquées sur la documentation.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau_valeurs_touches.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Association_touches_valeurs.png]]&lt;br /&gt;
&lt;br /&gt;
Pour la réalisation sur l'interface, je crée le dossier 'Generateur' correspondant au type de l'appareil. A l'intérieur de ce dossier, je crée trois dossiers différents pour réaliser trois menus sur l'interface (Fonction,Global et Menus). A l'interieur de ces dossiers je ne place pour l'instant qu'un seul sous dossier qui contient le code d'affichage et de réalisation des différents boutons. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Apercu_interface_generateur.png]]&lt;br /&gt;
&lt;br /&gt;
L'affichage est alors très basique mais l'utilisation est n'est pas intuitif du tout. Pour ajouter une note positive, tous les boutons fonctionnent correctement. L'un des prochains objectifs est d'améliorer l'affichage pour rendre l'utilisation plus simple.&lt;br /&gt;
&lt;br /&gt;
De plus, lors de l'affichage des appareils disponibles, il est maintenant indiqué le type des appareils.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Choix_app_avec_type.png]]&lt;br /&gt;
&lt;br /&gt;
Pour conclure cette semaine, j'ai essayé de brancher l'oscilloscope et le générateur en même temps. La page de recherche affiche bien les deux appareils avec leurs bons types respectifs, et la sélection fonctionne correctement. L'affichage des interfaces et les réalisations des commandes se comportent convenablement.&lt;br /&gt;
&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P11%2B&amp;diff=86243</id>
		<title>IMA3/IMA4 2019/2021 P11+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P11%2B&amp;diff=86243"/>
				<updated>2021-06-18T13:12:28Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
Concevoir et réaliser une interface de visualisation pour des appareils de mesure &lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet global (découpé en trois sous-projets) est de réaliser une plateforme complète permettant de faire des travaux pratiques d'électronique à distance.&lt;br /&gt;
&lt;br /&gt;
Ce sous projet consiste en la réalisation d'une interface de commande d'un appareil de mesure (oscilloscope, multimètre, ...) ou d'un générateur à distance au travers d'une interface LXI ([https://en.wikipedia.org/wiki/LAN_eXtensions_for_Instrumentation LAN eXtensions for Instrumentation]).&lt;br /&gt;
&lt;br /&gt;
L'interface sera constituée de deux modules :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; une interface paramétrable de commande à distance des appareils (panneau de commande) ; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; une interface d'affichage des données. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Si possible, les développements se feront en HMTL5 au travers d'un framework à choisir.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
* Utilisation de l'HTML5 et du PHP pour le développement de l'interface ;&lt;br /&gt;
&lt;br /&gt;
* Framework : Bootstrap ;&lt;br /&gt;
&lt;br /&gt;
* Pas de matériel particulier à commander, j'utiliserai les appareils de mesure déjà disponibles à Polytech.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&lt;br /&gt;
* Prendre en main l'interface LXI avec des appareils de mesure électronique (oscilloscope, multimètre, ...) ;&lt;br /&gt;
&lt;br /&gt;
* Réaliser une interface web permettant de contrôler les appareils et afficher les résultats.&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Prise d'information sur l'interface LXI : en entrant l'IP de l'appareil dans la barre de recherche d'un navigateur, il semblerait que l'on puisse accéder à l'interface et commander l'appareil.&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un oscilloscope SDS 1102CML+ pour tester l'interface LXI : &lt;br /&gt;
&lt;br /&gt;
* on le branche sur une carte réseau du PC puis on lui assigne une adresse ip dans le réseau local (dans le menu Utility de l'oscilloscope) et on ping cette adresse pour s'assurer de la connexion : cela fonctionne ;&lt;br /&gt;
&lt;br /&gt;
* j'essaie d'entrer l'adresse IP sur un navigateur pour vérifier s'il existe une interface LXI mais la connexion ne fonctionne pas ;&lt;br /&gt;
&lt;br /&gt;
* installation du programme [https://lxi-tools.github.io/ lxi-tools] (et même installation plus simple avec la commande : apt-get install lxi-tools) qui permet d'utiliser LXI en ligne de commande et l'oscilloscope est bien retrouvé avec la bonne adresse IP.&lt;br /&gt;
&lt;br /&gt;
Avec ce programme on peut obtenir des screenshots de l'oscilloscope, cela pourra être utile pour l'affichage.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:premier_screen.jpg|200px|thumb|right|Premier screenshot de l'oscilloscope]]&lt;br /&gt;
&lt;br /&gt;
Liens qui peuvent être utiles pour la suite :&lt;br /&gt;
&lt;br /&gt;
[https://teledynelecroy.com/doc/introducing-the-lxi-interface]&lt;br /&gt;
&lt;br /&gt;
[https://lxistandard.org/About/LXI-Core-Features.aspx]&lt;br /&gt;
&lt;br /&gt;
[https://www.lxistandard.org/About/LXI-Discovery-Tools.aspx]&lt;br /&gt;
&lt;br /&gt;
[https://siglentna.com/application-note/lxi-tools/]&lt;br /&gt;
&lt;br /&gt;
[https://www.siglenteu.com/application-note/quick-remote-computer-control-using-lxi-tools/ Résumé de l'utilisation de la commande lxi].&lt;br /&gt;
&lt;br /&gt;
Voici une [https://siglentna.com/wp-content/uploads/dlm_uploads/2017/10/ProgrammingGuide_forSDS-1-1.pdf liste des commandes SCPI] pour contrôler l'oscilloscope. Peut-être faudra-t-il trouver d'autres commandes pour d'autres appareils de mesures.&lt;br /&gt;
&lt;br /&gt;
En testant quelques commandes en mode SCPI, on s'aperçoit qu'elles ont le comportement souhaité sur l'oscilloscope.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser l'interface web, j'utilise un serveur Apache2 et le langage PHP (sous Linux utilisation des commandes : &amp;quot;apt-get install apache2&amp;quot; et &amp;quot;apt-get install libapache2-mod-php&amp;quot;). Pour le moment, on peut lancer la recherche des appareils connectés au réseau (réalisé avec la commande 'lxi discover'); puis choisir l'appareil que l'on souhaite utiliser. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appareils_decouverts.png]]&lt;br /&gt;
&lt;br /&gt;
J'ai à ma disposition un seul oscilloscope donc pour le moment cela ne lance que la page de contrôle et de visualisation de l'oscilloscope. A l'avenir, il faudra ajouter une base de donnée pour pouvoir sélectionner la bonne page à lancer selon l'appareil selectionné. Sur la page de contrôle et de visualisation, on affiche une capture d'écran de l'oscilloscope et quelques boutons pour tester la communication entre le serveur et l'oscilloscope. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Visu_et_cmd_oscillo.png|thumb|400px|center]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin d'afficher cette capture d'écran, il faut modifier le groupe des fichiers du serveur apache2 (sachant que les fichiers se trouvent dans le dossier /var/www/testdomain.info, on utilise la commande 'chgrp -R www-data /var/www/testdomain.info'), et on donne la permission au groupe d'écrire dans ce dossier pour y sauvegarder la photo (avec la commande 'chmod -R g+w /var/www/testdomain.info/').&lt;br /&gt;
&lt;br /&gt;
J'utiliserai ensuite le framework Bootstrap pour l'interface web.&lt;br /&gt;
&lt;br /&gt;
L'affichage du screenshot devrait être raffraichit le plus souvent possible pour obtenir une visualisation réactive. Pour ce faire, il faut regarder du côté du JavaScript.&lt;br /&gt;
&lt;br /&gt;
Pour débuger le code HTML/PHP, on utilise la commande : tail -f /var/log/apache2/error.log .&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
Afin d'utiliser Bootstrap pour l'interface Web, j'utilise les lignes de code que l'on peut retrouver [https://getbootstrap.com/docs/5.0/getting-started/download/#cdn-via-jsdelivr ici]. Ceci correspond à utiliser un CDN (Content Delivery Network) qui permet de faire le lien entre le framework sans avoir à télécharger les fichiers sources sur le serveur Apache2. Il faudra alors utiliser ces deux lignes dans les entêtes de chaque fichier html et php. On peut trouver un petit comparatif entre la version locale de Bootstrap et la version CDN : [https://www.studiogalaxie.fr/librairies-cdn-ou-local-que-choisir/]. Etant donné que l'ordinateur sur lequel j'implémente le serveur est connecté à Internet, l'utilisation du CDN ne devrait pas poser du soucis. Dans le pire des cas, il devrait être possible de passer de cette version à la version locale facilement. &lt;br /&gt;
&lt;br /&gt;
Avec ce framework, je peux maintenant commencer à réaliser des affichages plus esthétiques en utilisant la [https://getbootstrap.com/docs/5.0/components/ documentation de Bootstrap].&lt;br /&gt;
&lt;br /&gt;
Je me penche maintenant vers la redirection sur la bonne page lors du choix de l'appareil. En effet, étant donné le type de l'appareil, la page de visualisation et commande doit être différente, et donc selon l'appareil choisi, il faut pouvoir visualiser la bonne page. J'utilise pour l'instant un fichier .JSON qui me permet d'associer un type d'appareil avec un nom. De ce fait pour la redirection, selon le nom que l'on trouve dans ce fichier, on peut savoir sur quelle page il faut rediriger selon le type trouvé (si c'est un oscilloscope, un multimètre...). Par la suite, peut-être qu'une base de donnée SQL correspondra mieux au travail à réaliser.&lt;br /&gt;
&lt;br /&gt;
Maintenant que cette redirection est effective, il faut pouvoir transmettre les données (nom et adresse ip de l'appareil) vers la page web. Etant donné que ces données transitent par 2 pages différentes, j'utilise la méthode GET (qui écrit les données dans l'URL de la page). Cela peut poser un problème de confidentialité des données mais ici cela ne devrait pas être un problème, la seule information importante est l'adresse IP de l'appareil. &lt;br /&gt;
&lt;br /&gt;
Il semblerait qu'un léger problème se pose avec une interférence entre les données. L'affichage de la  capture d'écran en fonction de la commande envoyée depuis le site est correct, mais par exemple en réalité l'oscilloscope affiche un menu alors qu'on lui envoie une commande pour fermer le menu. Cette réaction semble donc sans conséquence sur l'utilisation depuis l'interface web, mais cela reste à surveiller pour la suite du projet.&lt;br /&gt;
&lt;br /&gt;
Pour le moment, j'ai ajouté quelques fonctionnalités à l'interface de l'oscilloscope :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Interface_web_ajout_boutons.png]]&lt;br /&gt;
&lt;br /&gt;
L'utilisation du framework Bootstrap reste à parfaire pour une interface claire et esthétique, mais on peut voir un début de prise en main.&lt;br /&gt;
&lt;br /&gt;
Je précisais auparavant que j'utilisais la méthode GET pour faire transiter les données. Je suis finalement revenu sur cette partie du code parce qu'on pouvait y trouver de la duplication de code. J'utilise maintenant des variables de session pour l'adresse IP et le nom de l'appareil. Cela fourni un code un peu plus propre qu'avec la méthode GET.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
&lt;br /&gt;
Lors de cette semaine, je commence par réaliser le raffraichissement de l'image de l'oscilloscope sur l'interface Web.&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir obtenir une capture d'écran de l'oscilloscope toutes les secondes, je crée un nouveau fichier (screenshot.php) qui sera appelé toutes les secondes par un script sur la page de l'oscilloscope. Le fichier de screenshot réalise juste la commande de capture d'écran avec la commande 'lxi screenshot' et l'adresse IP de l'appareil. En plus d'appeler ce fichier, le script recharge l'image sur la page.&lt;br /&gt;
&lt;br /&gt;
Ensuite, je mets en place d'autres boutons permettant d'utiliser l'oscilloscope. De plus, en utilisant bootstrap je regroupe les boutons dans des onglets pour rendre l'interface web plus facilement compréhensible, avec moins d'information sur la même page.&lt;br /&gt;
&lt;br /&gt;
Voici trois captures d'écrans permettant de résumer les paramètres utilisables sur l'oscilloscope à partir de l'interface :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:interface_global.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:interface_ch1.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:interface_curseurs.png]]&lt;br /&gt;
&lt;br /&gt;
Les onglets 'CH1' et 'CH2' réalisent chacuns les mêmes actions respectivement sur le signal de la voie 1 et de la voie 2.&lt;br /&gt;
&lt;br /&gt;
De plus, j'organise l'interface pour faire en sorte que tous les paramètres soient accordés avec les paramètres sur l'oscilloscope. Cela permet de voir directement si le changement que l'on souhaite faire sur l'oscilloscope a été effectué, parce que l'on ne peut pas choisir le menu que l'on peut voir sur l'oscilloscope. Par exemple, si on modifie l'unité de la voie 1, l'interface se met à jour avec l'unité choisie sur l'onglet de la voie 1 (si l'on choisit des ampères, 1V/Division devient 1A/Division et ce jusqu'au prochain changement d'unité).&lt;br /&gt;
&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
&lt;br /&gt;
Pour rendre l'interface plus agréable à utiliser, je retire les boutons pour soumettre les changements. Les changements sont maintenant réalisés directement une fois l'option sélectionnée. Ceci est réalisé en ajoutant simplement la commande 'onchange=&amp;quot;this.form.submit();&amp;quot;' au bon endroit dans le code.&lt;br /&gt;
&lt;br /&gt;
Par exemple, pour l'onglet CH1, on a maintenant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Nouveau_ch1.png]]&lt;br /&gt;
&lt;br /&gt;
A faire maintenant : Rendre modulaire le fichier de l'interface de l'oscilloscope pour rendre les potentielles modificationsi sur ce fichier plus simple :&lt;br /&gt;
&lt;br /&gt;
* Un dossier par type d'appareil :&lt;br /&gt;
** Dans ce dossier, on trouve 1 dossier par commande &lt;br /&gt;
*** Dans ces dossiers : un fichier pour l'affichage et un fichier pour la réalisation de la commande.&lt;br /&gt;
&lt;br /&gt;
Pour cela, la fonction PHP 'scandir' sera à utiliser.&lt;br /&gt;
&lt;br /&gt;
Avant d'attaquer cette partie, j'ajoute deux dernières commandes sur l'interface de l'oscilloscope : la modification du Trigger Level ainsi que la modification des limites de fréquences des filtres.&lt;br /&gt;
&lt;br /&gt;
Maintenant, le fichier principal reprend les fichiers d'affichage et de réalisation des commandes pour l'oscilloscope comme c'était prévu. Je pense que dans le futur j'essaierai d'avoir une page principale et selon le type de l'appareil que l'on choisit d'utiliser, cette page va chercher dans le dossier du type tout ce dont elle a besoin pour le bon fonctionnement de l'interface.&lt;br /&gt;
&lt;br /&gt;
Avant de commencer à commander un nouvel appareil (qui sera le générateur de signaux SDG1032X dont la documentation pour les commandes avec LXI se trouve [https://siglentna.com/USA_website_2014/Documents/Program_Material/SDG_ProgrammingGuide_PG_E03B.pdf ici]), on essaie l'interface en regardant l'oscillation d'un Quartz sur [https://projets-ima.plil.fr/mediawiki/index.php/IMA3/IMA4_2019/2021_P1%2B le projet d'Andrei Florea]. On obtient le résultat suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Utilisation_oscilloscope.png]]&lt;br /&gt;
&lt;br /&gt;
L'interface est alors bien utilisable.&lt;br /&gt;
&lt;br /&gt;
Au final je m'attaque tout de suite à réaliser une page unique peu importe l'appareil selectionné, mais qui affiche de façon différente selon le type de l'appareil sélectionné.&lt;br /&gt;
&lt;br /&gt;
Cette page fonctionne de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Il y a un grand dossier par type d'appareil (Oscilloscope, Generateur...). A l'interieur de ce dossier, on retrouve des dossiers avec le nom des menus que l'on affiche (pour l'Oscilloscope par exemple : CH1,CH2,Curseurs et Global). A l'intérieur de ces dossiers, se trouvent des dossiers selon les commandes que l'on peut réaliser sur l'appareil. Dans ces derniers dossiers, on retrouve un fichier avec le code l'affichage de la commande sur la page et un autre fichier avec la réalisation de la commande si celle-ci a été choisie par l'utilisateur. Ainsi, on peut parcourir l'arborescence pour afficher de manière procédurale l'ensemble des menus, boutons...&lt;br /&gt;
&lt;br /&gt;
Afin que ceci soit efficace, il faut reprendre cette arborescence pour les différents types d'appareils que l'on utilise.&lt;br /&gt;
&lt;br /&gt;
Cette fois-ci je m'attaque pour de bon à la réalisation de l'interface du générateur de signaux SDG1032X. Pour commencer, j'assigne une adresse IP valide à l'appareil, puis je m'assure tout d'abord qu'il est possible de réaliser une capture d'écran avec la commande 'lxi screenshot'. Cette commande fonctionne, donc on pourra l'utiliser pour l'affichage sur l'interface Web. En parcourant les commandes LXI disponibles dans la documentation, je m'aperçois qu'il existe une commande permettant de simuler l'appuie d'une touche sur le générateur. Cette commande permet de faciliter grandement la tâche par rapport à l'oscilloscope. L'interface ne sera donc composée que de boutons comme pour le générateur physique. Avec la commande SCPI 'VKEY VALUE,&amp;lt;valeur&amp;gt;,STATE,1', on peut réaliser la pression de la touche 'valeur'. Les valeurs des touches sont indiquées sur la documentation.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau_valeurs_touches.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Association_touches_valeurs.png]]&lt;br /&gt;
&lt;br /&gt;
Pour la réalisation sur l'interface, je crée le dossier 'Generateur' correspondant au type de l'appareil. A l'intérieur de ce dossier, je crée trois dossiers différents pour réaliser trois menus sur l'interface (Fonction,Global et Menus). A l'interieur de ces dossiers je ne place pour l'instant qu'un seul sous dossier qui contient le code d'affichage et de réalisation des différents boutons. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Apercu_interface_generateur.png]]&lt;br /&gt;
&lt;br /&gt;
L'affichage est alors très basique mais l'utilisation est n'est pas intuitif du tout. Pour ajouter une note positive, tous les boutons fonctionnent correctement. L'un des prochains objectifs est d'améliorer l'affichage pour rendre l'utilisation plus simple.&lt;br /&gt;
&lt;br /&gt;
De plus, lors de l'affichage des appareils disponibles, il est maintenant indiqué le type des appareils.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Choix_app_avec_type.png]]&lt;br /&gt;
&lt;br /&gt;
Pour conclure cette semaine, j'ai essayé de brancher l'oscilloscope et le générateur en même temps. La page de recherche affiche bien les deux appareils avec leurs bons types respectifs, et la sélection fonctionne correctement. L'affichage des interfaces et les réalisations des commandes se comportent convenablement.&lt;br /&gt;
&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Urobot10_Pcb.zip&amp;diff=86234</id>
		<title>Fichier:Urobot10 Pcb.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Urobot10_Pcb.zip&amp;diff=86234"/>
				<updated>2021-06-17T21:24:51Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Rex a téléversé une nouvelle version de Fichier:Urobot10 Pcb.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Urobot10Pcb.zip&amp;diff=86233</id>
		<title>Fichier:Urobot10Pcb.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Urobot10Pcb.zip&amp;diff=86233"/>
				<updated>2021-06-17T17:33:50Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Rex a téléversé une nouvelle version de Fichier:Urobot10Pcb.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Arduino_pcb_mar.zip&amp;diff=86105</id>
		<title>Fichier:Arduino pcb mar.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Arduino_pcb_mar.zip&amp;diff=86105"/>
				<updated>2021-06-10T22:48:32Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Rex a téléversé une nouvelle version de Fichier:Arduino pcb mar.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Arduino_pcb_mar.zip&amp;diff=86089</id>
		<title>Fichier:Arduino pcb mar.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Arduino_pcb_mar.zip&amp;diff=86089"/>
				<updated>2021-06-10T09:27:04Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Rex a téléversé une nouvelle version de Fichier:Arduino pcb mar.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Arduino_pcb_mar.zip&amp;diff=86080</id>
		<title>Fichier:Arduino pcb mar.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Arduino_pcb_mar.zip&amp;diff=86080"/>
				<updated>2021-06-08T21:59:50Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Rex a téléversé une nouvelle version de Fichier:Arduino pcb mar.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:2020_P1_HostUSB.zip&amp;diff=85991</id>
		<title>Fichier:2020 P1 HostUSB.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:2020_P1_HostUSB.zip&amp;diff=85991"/>
				<updated>2021-05-28T17:13:07Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1%2B&amp;diff=85990</id>
		<title>IMA3/IMA4 2019/2021 P1+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1%2B&amp;diff=85990"/>
				<updated>2021-05-28T17:09:08Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Documents Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
* '''Nom du projet :''' Micro-ordinateur pour la pédagogie&lt;br /&gt;
* '''Stagiaire :''' Andrei FLOREA&lt;br /&gt;
* '''Encadrant :''' Xavier REDON&lt;br /&gt;
* '''Durée :''' 6 semaines (17 Mai - 25 Juin 2021)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
Concevoir et réaliser un ordinateur du même type que les ordinateurs familiaux des années 1980. L'ordinateur sera à base de micro-contrôleur mais avec clavier, écran et périphérique de sauvegarde. &lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
Le but de ce projet est de réaliser un ordinateur peu puissant mais en le concevant de A à Z. Concernant le matériel :&lt;br /&gt;
&lt;br /&gt;
# Le coeur doit être un micro-contrôleur, un processeur étant trop complexe à maîtriser, même si un AVR est envisageable, il serait préférable de partir vers un Cortex-M pour bénéficier d'une mémoire plus importante ;&lt;br /&gt;
# Pour les périphériques d'entrée, il faut utiliser un clavier USB et éventuellement une souris USB, ce qui implique de choisir un micro-contrôleur avec gestion USB ;&lt;br /&gt;
# Plusieurs choix sont possibles pour l'écran, un choix est de partir sur la génération de signaux VGA, il semble même envisageable d'utiliser une puce HDMI et enfin il existe le choix de l'écran LCD avec contrôleur intégré, choix fait par les concepteurs de la calculatrice NumWorks ;&lt;br /&gt;
# Pour le stockage, une carte micro-SD semble adaptée ;&lt;br /&gt;
# Une interface réseau est probablement indispensable qu'elle soit Ethernet ou WiFi.&lt;br /&gt;
&lt;br /&gt;
Le système d'exploitation de l'ordinateur peut être basé sur micro-python avec ajout d'options spécifiques&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
Une première tentative de porter micro-python sur une carte ATXMEGAC3-XPLD [https://wiki-ima.plil.fr/mediawiki//index.php/Micro-ordinateur_pour_la_p%C3%A9dagogie a déjà été faite par Xuelu YAN en 2020]. Je base donc mes efforts sur les siens.&lt;br /&gt;
&lt;br /&gt;
De plus, il existe un [https://github.com/slavaza/micropython-avr8 port de micropython sur AVR].&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
[[File:ATXMEGAC3-XPLD.jpg|thumb|alt=La carte ATXMEGAC3-XPLD|La carte ATXMEGAC3-XPLD]]&lt;br /&gt;
&lt;br /&gt;
* Matériel :&lt;br /&gt;
** Carte ATXMEGAC3-XPLD pour le prototypage&lt;br /&gt;
* Logiciel :&lt;br /&gt;
** [http://www.micropython.org/ Micro-python] ([https://github.com/micropython/micropython source sur github])&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
&lt;br /&gt;
* Première partie : Prototypage&lt;br /&gt;
** Prise en main de la carte ATXMEGAC3-XPLD&lt;br /&gt;
** Porter micro-python sur la carte ATXMEGAC3-XPLD&lt;br /&gt;
** OU créer un OS &amp;quot;maison&amp;quot;&lt;br /&gt;
*** Gestion entrée/sortie&lt;br /&gt;
*** Gestion capteurs&lt;br /&gt;
*** Gestion périphérique de sauvegarde&lt;br /&gt;
* Créer un module USB (pour brancher un clavier)&lt;br /&gt;
** Choisir les composants&lt;br /&gt;
** Concevoir le circuit&lt;br /&gt;
** L'imprimer et y souder les composants&lt;br /&gt;
** Porter la bibliothèque LUFA de commande USB&lt;br /&gt;
** Coder l'interaction avec l'ATXMEGAC3&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1 : Aventures avec micropython==&lt;br /&gt;
&lt;br /&gt;
===Exploration du code source de micropython===&lt;br /&gt;
&lt;br /&gt;
J'ai d'abord commencé par explorer le code de micropython; je me suis dans un premier temps penché sur le port &amp;quot;avr8-dummy&amp;quot;, qui est un exemple très basique (et générique) d'une implémentation de micro-python sur AVR.&lt;br /&gt;
&lt;br /&gt;
On y voit un ''main.c'', avec une fonction main qui ressemble à ça :&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     ...&lt;br /&gt;
     pyexec_event_repl_init();&lt;br /&gt;
     for(;;) {&lt;br /&gt;
         usb_vcp_handling(); // = LUFA_USB_Handling()&lt;br /&gt;
         int c = mp_hal_stdin_rx_chr();&lt;br /&gt;
         if (pyexec_event_repl_process_char(c)) {&lt;br /&gt;
             break;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     pyexec_friendly_reply();&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Il semble que &amp;lt;code&amp;gt;mp_hal_stdin_rx_chr&amp;lt;/code&amp;gt; serve à lire un caractère sur l'entrée standard,, et &amp;lt;code&amp;gt;mp_hal_stdout_tx_strn&amp;lt;/code&amp;gt;. Une question se pose alors : qu'est-ce que l'entrée/sortie standard sur une Arduino ?&lt;br /&gt;
&lt;br /&gt;
En cherchant un peu, j'ai trouvé le fichier ''mphalports.h'', qui définit ces deux fonctions, ainsi que la fonction &amp;lt;code&amp;gt;usb_vcp_handling&amp;lt;/code&amp;gt;. Il me faut maintenant modifier la définition pour utiliser le port série. C'est ici que rentre en jeu la [http://www.fourwalledcubicle.com/LUFA.php bibliothèque LUFA].&lt;br /&gt;
&lt;br /&gt;
===Exploration du code source de LUFA===&lt;br /&gt;
&lt;br /&gt;
LUFA est une librairie USB pour les microcontrolleurs AVR. Elle permet notamment de créer une connexion série entre un ordi et la carte.&lt;br /&gt;
&lt;br /&gt;
Pour faciliter la tâche, on peut utiliser l'exemple VirtualSerial.&lt;br /&gt;
&lt;br /&gt;
En modifiant légèrement le code du port micropython, on peut modifier les fonctions de façon à ce que les ''read'' et les ''print'' se fassent sur le port série.&lt;br /&gt;
&lt;br /&gt;
En regardant un peu la documentation, on voit que la fonction &amp;lt;code&amp;gt;LUFA_USB_Handling&amp;lt;/code&amp;gt; doit être appelée au minimum toutes les 30ms afin (entre autres) de relancer périodiquement la connexion USB à l'hôte. Or, avec la boucle que nous avons dans le main, nous risquons de rater cette échéance. Dans certaines boards Arduino, la connexion USB est réalisée via un deuxième microcontrolleur. Ainsi, il y a de grandes chances qu'il faille, à un moment ou un autre, réaliser un bouclier pour notre Arduino permettant de gérer cettte connexion USB.&lt;br /&gt;
&lt;br /&gt;
===Fusion de micropython et de LUFA===&lt;br /&gt;
&lt;br /&gt;
En ajoutant la bibliothèque LUFA dans le projet micropython, on peut maintenant interagir avec l’Arduino via le port série avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;. On peut interagir avec l'invite de commandes, mais..&lt;br /&gt;
&lt;br /&gt;
[[File:Ordinateur_minicom_erreurs_mp.png|400px]]&lt;br /&gt;
&lt;br /&gt;
On peut voir que micropython n'a pas l'air de très bien savoir ce qu'on veut de lui. Par conséquent, c'est le moment de plonger plus loin dans le code de micropython.&lt;br /&gt;
&lt;br /&gt;
===Replonger dans micropython===&lt;br /&gt;
&lt;br /&gt;
La fonction la plus intéressante dans &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; est &amp;lt;code&amp;gt;pyexec_event_repl_process_char&amp;lt;/code&amp;gt;. Cette fonction appelle les fonctions suivantes (seules les fonctions les plus intéressantes (selon moi) sont renseignées) :&lt;br /&gt;
&lt;br /&gt;
           FONCTIONS                                DEFINITIONS&lt;br /&gt;
 pyexec_event_repl_process_char               (lib/utils/pyexec.c:345)&lt;br /&gt;
   └ pyexec_friendly_repl_process_char        (lib/utils/pyexec.c:232)&lt;br /&gt;
       └ parse_compile_execute                 (lib/utils/pyexec.c:62)&lt;br /&gt;
           ├ mp_lexer_new_from_str_len                (py/lexer.c:706)&lt;br /&gt;
           │   └ mp_lexer_new                         (py/lexer.c:670) &lt;br /&gt;
           ├ mp_parse                                 (py/parse.c:832)&lt;br /&gt;
           ├ mp_compile                            (py/compile.c:3527)&lt;br /&gt;
           │   ├ mp_compile_to_raw_code            (py/compile.c:3364)&lt;br /&gt;
           │   └ mp_make_function_from_raw_code    (py/emitglue.c:122)&lt;br /&gt;
           └ mp_call_function_0                     (py/runtime.c:601)&lt;br /&gt;
               └ mp_call_function_n_kw              (py/runtime.c:617)&lt;br /&gt;
                   └ mp_obj_get_type                     (py/obj.c:40)&lt;br /&gt;
                       └ type-&amp;gt;call                     (py/obj.h:481)&lt;br /&gt;
On apprend déjà que micropython ''compile'' les instructions qu'on lui donne ; ce qui est assez surprenant car Python est un language typiquement interprété.&lt;br /&gt;
&lt;br /&gt;
En résumé, l'erreur peut venir de l'une des 4 étapes suivantes :&lt;br /&gt;
* lexing&lt;br /&gt;
* parsing&lt;br /&gt;
* compilation&lt;br /&gt;
* exécution&lt;br /&gt;
&lt;br /&gt;
Pour l'instant, je n'ai pas envie de toucher aux parties lexing-parsing-compilation ; je vois d'abord la partie exécution. Je m’intéresse donc à la fonction &amp;lt;code&amp;gt;mp_call_function_n_kw&amp;lt;/code&amp;gt;. La première fonction appelée par cette dernière est &amp;lt;code&amp;gt;DEBUG_OP_printf&amp;lt;/code&amp;gt;, qui imprime des informations sur la fonction exécutée ; il suffit de definir MICROPY_DEBUG_VERBOSE = 1 pour activer l'affichage des printf de déverminage. J'ai également rajouté l'affichage de la mémoire utilisée, afin de déverminer de ce côté aussi. Malheureusement, je n'ai rien trouvé.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2 : Un OS maison==&lt;br /&gt;
&lt;br /&gt;
Après l'échec avec micropython, je passe alors à l'option &amp;quot;créer mon propre OS&amp;quot;. Puisque j'aime bien les fleurs, je décide de le nommer &amp;quot;fleurOS&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===fleurOS===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, je crée une invite de commandes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FleurOS_shell_1.png]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;br /&gt;
&lt;br /&gt;
[https://archives.plil.fr/aflorea/micro-ordinateur-pour-la-pedagogie source] (archives.plil.fr)&lt;br /&gt;
&lt;br /&gt;
Fichier Fritzing PCB : [[file:2020_P1_HostUSB.zip]].&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Manette_mar2.zip&amp;diff=85943</id>
		<title>Fichier:Manette mar2.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Manette_mar2.zip&amp;diff=85943"/>
				<updated>2021-05-26T11:54:05Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Rex a téléversé une nouvelle version de Fichier:Manette mar2.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:2021ManetteCentaure.zip&amp;diff=85859</id>
		<title>Fichier:2021ManetteCentaure.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:2021ManetteCentaure.zip&amp;diff=85859"/>
				<updated>2021-05-21T22:59:48Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2%2B&amp;diff=85858</id>
		<title>IMA3/IMA4 2019/2021 P2+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2%2B&amp;diff=85858"/>
				<updated>2021-05-21T22:59:14Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Présentation Générale=&lt;br /&gt;
*'''Projet''' : ROBOT AUTONOME CENTAURE&lt;br /&gt;
** '''Encadrant''' : Xavier Redon&lt;br /&gt;
*'''Lieu de la formation''' : [[École polytechnique universitaire de Lille|Polytech Lille]], [[Lille]] , [[France]]&lt;br /&gt;
*'''Réalisé par''' : Marlène Kameni&lt;br /&gt;
*'''Calendrier'''&lt;br /&gt;
**'''Debut du projet''' : 17 Mai 2021 &lt;br /&gt;
**'''Fin du projet''' : xx Juin 2021&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
ce projet s'intègre dans le cadre de la formation des élèves ingénieurs de&amp;lt;br&amp;gt; &lt;br /&gt;
Polytech Lille, étudiante dans la filiaire Systèmes Embarqués.Il consiste à&amp;lt;br&amp;gt; &lt;br /&gt;
à terminer l'avancement et la mise sur pieds du robot.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Rendre opérationnel le robot Centaure au niveau de l'étage commande.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
*''terminer l'agencement interne du robot, e.g. terminer les supports des différents composants et réaliser un câblage organisé et maintenable ''&lt;br /&gt;
*''inaliser les modules permettant de diriger le robot en filaire (manette) et sans fil (télécommande infrarouge)''&lt;br /&gt;
*''finaliser l'implantation des capteurs à courte distance (optique et de contact)''&lt;br /&gt;
*''finaliser la programmation de l'étage micro-contrôleur pour permettre la conduite du robot avec les moyens cités plus haut et en intégrant un arrêt d'urgence en cas de détection d'obstacle''&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
; Terminer l'agencement matériel&lt;br /&gt;
: faire le design sur onshape dela vitre de couverture supérieure&lt;br /&gt;
: intaller et s'assurer de démontage facile du deuxième boutton d'arrêt d'urgence sur cette vitre&lt;br /&gt;
: moyen de recharge des batteries.&lt;br /&gt;
&lt;br /&gt;
; Fonctionnement des battéries&lt;br /&gt;
: faire fonctionner les battéries &lt;br /&gt;
: reprogrammer l'arduino et lancer chaque roue 1s&lt;br /&gt;
&lt;br /&gt;
; Module de direction du robot&lt;br /&gt;
: realiser une carte avec connecteur RJ11 pour une manette&lt;br /&gt;
: realisation de la manette avec le joystick pour commander le robot&lt;br /&gt;
: programme de l'arduino pour que les roues soient commandées par la manette&lt;br /&gt;
&lt;br /&gt;
; Montage des capteurs &lt;br /&gt;
: Terminer l'installation de tous les capteurs&lt;br /&gt;
: connecter tous les capteurs à l'arduino de façon esthétique avec les cables adaptés&lt;br /&gt;
: refaire la carte de l'arduino pour inserer les trous des 4 cables rajoutés&lt;br /&gt;
: Reecrire le code de l'arduino pour arreter le robot en cas d'obstacle&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
1.'''Prise en main du travail fait '''&amp;lt;br&amp;gt;&lt;br /&gt;
En parcourant de long en large les rapports des groupes qui ont précedement travaillé sur le robot Centaure , on constate qu'une large partie du travail avait déja été entamé , notamment concernant la construction mécanique.les connecteurs Molex permettant de contrôler les variateurs ont bien été branchés.Le chargeur/testeur de battérie a lui aussi été déjà reçu.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.'''Installation et realisation du capot de dessus'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:capot.png|right|thumb|&amp;quot;Capot supérieur Robot&amp;quot;]]&lt;br /&gt;
Grâce au logiciel Onshape, on realise une représentation 3D de cette partie et Grace à l'imprimante laser du Fabricarum de [[Polytech Lille]], on la conçoit.&amp;lt;br&amp;gt;&lt;br /&gt;
L'installation du bouton d'arrêt d'urgence est réalisé avec succès mais une seule des vis prévues pour ce bouton sur le capot entre, ceci est due à la conception d'un rayon plus grand que pévu.&amp;lt;br&amp;gt;&lt;br /&gt;
Mais on peut constater que ce petit écart de dimensionnement permet d'avoir un désassemblage facile par la suite.Néanmoins si on constate une erreur du à cela on pourra toujours refaire une découpe avec un diamètre du trou plus petit. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.'''Alimentation des moteurs'''&amp;lt;br&amp;gt;&lt;br /&gt;
On dispose de moteurs SRG0131 24V / 15.5 A / 0.35 kW / 10 km/h.Ces moteurs ont un courant de pic d’approximativement 30-35A. En régime normal, leur consommation est d’environ 8A.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Attention: il est impératif de desserrer les freins en injectant du 24V sur les deux petits fils (jaune et violet) allant vers les moteurs'''&amp;lt;br&amp;gt;&lt;br /&gt;
Afin de recharger les batteries , on dispose d'un :&amp;lt;br&amp;gt;&lt;br /&gt;
**chargeur/testeur de battérie&lt;br /&gt;
[[Fichier:Batterie-en-recharge.jpg|500px|center|thumb|&amp;quot;chargeur&amp;quot;]] [[Fichier:Voltmetre.jpg|100px|right|thumb|&amp;quot;voltmètre&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concernant le test de batterie , grâce à un voltmètre on arrivera à voir si notre batterie est déchargée ou pleinement chargée.&lt;br /&gt;
sachant qu'avec ce chargeur ,la pleine charge peut indiquer une valeur supérieure à 12,79 V. Cela peu aller à un poil au dessus de 13V. Sachant qu’après l’avoir débrancher elle redescend à 12,8 12,9V.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le travail sur la conception de la carte PCB relié à l'arduino n'a pas été bien explicité sur le wiki. du fait de ce manque d'informations j'ai pris contact avec les élèves qui travaillaient dessus avant moi. J'attends donc leur réponse. En parallèle j'ai retravaillé sur le bouton d’arrêt d'urgence qui était pas bien fixé et sur l'écriture du code arduino.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aujourd'hui le code Arduino écrit pour faire avancer les deux moteurs a fonctionné parfaitement comme sur la vidéo ci-dessous.&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/16iUzUwIlVSCd7hW3ifejBdymHrCmGnTZ/view?usp=sharing|titre= les roues tournent&lt;br /&gt;
&lt;br /&gt;
4.'''Creation de la manette'''&amp;lt;br&amp;gt;&lt;br /&gt;
le premier essai de conception de la manette du robot cette fois ci avec deux joysticks.le soucis étant une intersection de certains liens entre eux qui créons un court_circuit plutard à l'utilisation.&lt;br /&gt;
[[Fichier:Essai_pcb_manette.png|500px|center|thumb|&amp;quot;PCB MANETTE&amp;quot;]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://drive.google.com/file/d/1YFVXnUZzZk38-oYSxc2sWJVdBAq8i-jY/view?usp=sharing|titre= lien vers le fichier .fzz&lt;br /&gt;
&lt;br /&gt;
Fichier Fritzing corrigé : [[File:2021ManetteCentaure.zip]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2%2B&amp;diff=85857</id>
		<title>IMA3/IMA4 2019/2021 P2+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2%2B&amp;diff=85857"/>
				<updated>2021-05-21T22:58:16Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Présentation Générale=&lt;br /&gt;
*'''Projet''' : ROBOT AUTONOME CENTAURE&lt;br /&gt;
** '''Encadrant''' : Xavier Redon&lt;br /&gt;
*'''Lieu de la formation''' : [[École polytechnique universitaire de Lille|Polytech Lille]], [[Lille]] , [[France]]&lt;br /&gt;
*'''Réalisé par''' : Marlène Kameni&lt;br /&gt;
*'''Calendrier'''&lt;br /&gt;
**'''Debut du projet''' : 17 Mai 2021 &lt;br /&gt;
**'''Fin du projet''' : xx Juin 2021&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
ce projet s'intègre dans le cadre de la formation des élèves ingénieurs de&amp;lt;br&amp;gt; &lt;br /&gt;
Polytech Lille, étudiante dans la filiaire Systèmes Embarqués.Il consiste à&amp;lt;br&amp;gt; &lt;br /&gt;
à terminer l'avancement et la mise sur pieds du robot.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Rendre opérationnel le robot Centaure au niveau de l'étage commande.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
*''terminer l'agencement interne du robot, e.g. terminer les supports des différents composants et réaliser un câblage organisé et maintenable ''&lt;br /&gt;
*''inaliser les modules permettant de diriger le robot en filaire (manette) et sans fil (télécommande infrarouge)''&lt;br /&gt;
*''finaliser l'implantation des capteurs à courte distance (optique et de contact)''&lt;br /&gt;
*''finaliser la programmation de l'étage micro-contrôleur pour permettre la conduite du robot avec les moyens cités plus haut et en intégrant un arrêt d'urgence en cas de détection d'obstacle''&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
; Terminer l'agencement matériel&lt;br /&gt;
: faire le design sur onshape dela vitre de couverture supérieure&lt;br /&gt;
: intaller et s'assurer de démontage facile du deuxième boutton d'arrêt d'urgence sur cette vitre&lt;br /&gt;
: moyen de recharge des batteries.&lt;br /&gt;
&lt;br /&gt;
; Fonctionnement des battéries&lt;br /&gt;
: faire fonctionner les battéries &lt;br /&gt;
: reprogrammer l'arduino et lancer chaque roue 1s&lt;br /&gt;
&lt;br /&gt;
; Module de direction du robot&lt;br /&gt;
: realiser une carte avec connecteur RJ11 pour une manette&lt;br /&gt;
: realisation de la manette avec le joystick pour commander le robot&lt;br /&gt;
: programme de l'arduino pour que les roues soient commandées par la manette&lt;br /&gt;
&lt;br /&gt;
; Montage des capteurs &lt;br /&gt;
: Terminer l'installation de tous les capteurs&lt;br /&gt;
: connecter tous les capteurs à l'arduino de façon esthétique avec les cables adaptés&lt;br /&gt;
: refaire la carte de l'arduino pour inserer les trous des 4 cables rajoutés&lt;br /&gt;
: Reecrire le code de l'arduino pour arreter le robot en cas d'obstacle&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
1.'''Prise en main du travail fait '''&amp;lt;br&amp;gt;&lt;br /&gt;
En parcourant de long en large les rapports des groupes qui ont précedement travaillé sur le robot Centaure , on constate qu'une large partie du travail avait déja été entamé , notamment concernant la construction mécanique.les connecteurs Molex permettant de contrôler les variateurs ont bien été branchés.Le chargeur/testeur de battérie a lui aussi été déjà reçu.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.'''Installation et realisation du capot de dessus'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:capot.png|right|thumb|&amp;quot;Capot supérieur Robot&amp;quot;]]&lt;br /&gt;
Grâce au logiciel Onshape, on realise une représentation 3D de cette partie et Grace à l'imprimante laser du Fabricarum de [[Polytech Lille]], on la conçoit.&amp;lt;br&amp;gt;&lt;br /&gt;
L'installation du bouton d'arrêt d'urgence est réalisé avec succès mais une seule des vis prévues pour ce bouton sur le capot entre, ceci est due à la conception d'un rayon plus grand que pévu.&amp;lt;br&amp;gt;&lt;br /&gt;
Mais on peut constater que ce petit écart de dimensionnement permet d'avoir un désassemblage facile par la suite.Néanmoins si on constate une erreur du à cela on pourra toujours refaire une découpe avec un diamètre du trou plus petit. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.'''Alimentation des moteurs'''&amp;lt;br&amp;gt;&lt;br /&gt;
On dispose de moteurs SRG0131 24V / 15.5 A / 0.35 kW / 10 km/h.Ces moteurs ont un courant de pic d’approximativement 30-35A. En régime normal, leur consommation est d’environ 8A.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Attention: il est impératif de desserrer les freins en injectant du 24V sur les deux petits fils (jaune et violet) allant vers les moteurs'''&amp;lt;br&amp;gt;&lt;br /&gt;
Afin de recharger les batteries , on dispose d'un :&amp;lt;br&amp;gt;&lt;br /&gt;
**chargeur/testeur de battérie&lt;br /&gt;
[[Fichier:Batterie-en-recharge.jpg|500px|center|thumb|&amp;quot;chargeur&amp;quot;]] [[Fichier:Voltmetre.jpg|100px|right|thumb|&amp;quot;voltmètre&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concernant le test de batterie , grâce à un voltmètre on arrivera à voir si notre batterie est déchargée ou pleinement chargée.&lt;br /&gt;
sachant qu'avec ce chargeur ,la pleine charge peut indiquer une valeur supérieure à 12,79 V. Cela peu aller à un poil au dessus de 13V. Sachant qu’après l’avoir débrancher elle redescend à 12,8 12,9V.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le travail sur la conception de la carte PCB relié à l'arduino n'a pas été bien explicité sur le wiki. du fait de ce manque d'informations j'ai pris contact avec les élèves qui travaillaient dessus avant moi. J'attends donc leur réponse. En parallèle j'ai retravaillé sur le bouton d’arrêt d'urgence qui était pas bien fixé et sur l'écriture du code arduino.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aujourd'hui le code Arduino écrit pour faire avancer les deux moteurs a fonctionné parfaitement comme sur la vidéo ci-dessous.&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/16iUzUwIlVSCd7hW3ifejBdymHrCmGnTZ/view?usp=sharing|titre= les roues tournent&lt;br /&gt;
&lt;br /&gt;
4.'''Creation de la manette'''&amp;lt;br&amp;gt;&lt;br /&gt;
le premier essai de conception de la manette du robot cette fois ci avec deux joysticks.le soucis étant une intersection de certains liens entre eux qui créons un court_circuit plutard à l'utilisation.&lt;br /&gt;
[[Fichier:Essai_pcb_manette.png|500px|center|thumb|&amp;quot;PCB MANETTE&amp;quot;]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://drive.google.com/file/d/1YFVXnUZzZk38-oYSxc2sWJVdBAq8i-jY/view?usp=sharing|titre= lien vers le fichier .fzz&lt;br /&gt;
&lt;br /&gt;
Fichier Fritzing corrigé : [[File:2021ManetteCentaure.fzz]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2019/2021&amp;diff=85613</id>
		<title>Projets IMA3 IMA4 2019/2021</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2019/2021&amp;diff=85613"/>
				<updated>2021-05-14T14:29:34Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Projets réalisés en 2019/21 sous forme de stages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le fait qu'il n'existe plus de projets IMA3/IMA4 publics n'empêche pas que des projets soient encore réalisés. Voici quelques exemples.&lt;br /&gt;
&lt;br /&gt;
== Projets réalisés en 2019/21 par les enseignants ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole &lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA3/IMA4 2019/2021 P1|Outil de configuration d'un serveur NTP embarqué]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA3/IMA4 2019/2021 P2|Accès à Internet &amp;quot;Vintage&amp;quot;]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2019/2021 P3|Banc de piratage WiFi à l'aide de grappes de Raspberry PI]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Projets réalisés en 2019/21 sous forme de stages ==&lt;br /&gt;
&lt;br /&gt;
Vu la difficulté de trouver des stages de seconde année du cycle ingénieur (covid), l'école a proposé des stages académiques.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! Encadrants ecole &lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA3/IMA4 2019/2021 P1+|Micro-ordinateur pour la pédagogie]]&lt;br /&gt;
| Andrei Florea&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA3/IMA4 2019/2021 P2+|Robot autonome Centaure]]&lt;br /&gt;
| Marlene Kameni&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2019/2021 P3+|Installation d'un orchestrateur de machines virtuelles]]&lt;br /&gt;
| Souleymane Sow &lt;br /&gt;
| Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA3/IMA4 2019/2021 P5+|Robot rampant]]&lt;br /&gt;
| Agossou-alexandre Edoh&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA3/IMA4 2019/2021 P6+|Visualisation et positionnement de fibre optique]]&lt;br /&gt;
| Enzo Derisbourg&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA3/IMA4 2019/2021 P11+|TP à distance - Interface de visualisation]]&lt;br /&gt;
| Louis Wadbled&lt;br /&gt;
| Alexandre Boé / Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA3/IMA4 2019/2021 P17+|Capteur de mesure de pollution]]&lt;br /&gt;
| Enoch Hodonou&lt;br /&gt;
| Alexandre Boé / Thomas Vantroys&lt;br /&gt;
|-&lt;br /&gt;
| P24 [[IMA3/IMA4 2019/2021 P24+|Interface graphique pour surveillance des communications d'un système embarqué]]&lt;br /&gt;
| Julien Delabre / Theo Van-Rompaey&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P24%2B&amp;diff=85612</id>
		<title>IMA3/IMA4 2019/2021 P24+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P24%2B&amp;diff=85612"/>
				<updated>2021-05-14T14:24:10Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « __TOC__ &amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;  =Présentation générale=  ==Description== ==Objectifs==  =Préparation du projet=  ==Cahier des charges== ==Choix techniques : matér... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P17%2B&amp;diff=85611</id>
		<title>IMA3/IMA4 2019/2021 P17+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P17%2B&amp;diff=85611"/>
				<updated>2021-05-14T14:24:06Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « __TOC__ &amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;  =Présentation générale=  ==Description== ==Objectifs==  =Préparation du projet=  ==Cahier des charges== ==Choix techniques : matér... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P11%2B&amp;diff=85610</id>
		<title>IMA3/IMA4 2019/2021 P11+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P11%2B&amp;diff=85610"/>
				<updated>2021-05-14T14:24:03Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « __TOC__ &amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;  =Présentation générale=  ==Description== ==Objectifs==  =Préparation du projet=  ==Cahier des charges== ==Choix techniques : matér... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P6%2B&amp;diff=85609</id>
		<title>IMA3/IMA4 2019/2021 P6+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P6%2B&amp;diff=85609"/>
				<updated>2021-05-14T14:24:01Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « __TOC__ &amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;  =Présentation générale=  ==Description== ==Objectifs==  =Préparation du projet=  ==Cahier des charges== ==Choix techniques : matér... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P5%2B&amp;diff=85608</id>
		<title>IMA3/IMA4 2019/2021 P5+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P5%2B&amp;diff=85608"/>
				<updated>2021-05-14T14:23:58Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « __TOC__ &amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;  =Présentation générale=  ==Description== ==Objectifs==  =Préparation du projet=  ==Cahier des charges== ==Choix techniques : matér... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3%2B&amp;diff=85607</id>
		<title>IMA3/IMA4 2019/2021 P3+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3%2B&amp;diff=85607"/>
				<updated>2021-05-14T14:23:54Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « __TOC__ &amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;  =Présentation générale=  ==Description== ==Objectifs==  =Préparation du projet=  ==Cahier des charges== ==Choix techniques : matér... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2%2B&amp;diff=85606</id>
		<title>IMA3/IMA4 2019/2021 P2+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2%2B&amp;diff=85606"/>
				<updated>2021-05-14T14:23:51Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « __TOC__ &amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;  =Présentation générale=  ==Description== ==Objectifs==  =Préparation du projet=  ==Cahier des charges== ==Choix techniques : matér... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1%2B&amp;diff=85605</id>
		<title>IMA3/IMA4 2019/2021 P1+</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1%2B&amp;diff=85605"/>
				<updated>2021-05-14T14:23:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : Page créée avec « __TOC__ &amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;  =Présentation générale=  ==Description== ==Objectifs==  =Préparation du projet=  ==Cahier des charges== ==Choix techniques : matér... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2019/2021&amp;diff=85604</id>
		<title>Projets IMA3 IMA4 2019/2021</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2019/2021&amp;diff=85604"/>
				<updated>2021-05-14T14:21:48Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le fait qu'il n'existe plus de projets IMA3/IMA4 publics n'empêche pas que des projets soient encore réalisés. Voici quelques exemples.&lt;br /&gt;
&lt;br /&gt;
== Projets réalisés en 2019/21 par les enseignants ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole &lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA3/IMA4 2019/2021 P1|Outil de configuration d'un serveur NTP embarqué]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA3/IMA4 2019/2021 P2|Accès à Internet &amp;quot;Vintage&amp;quot;]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2019/2021 P3|Banc de piratage WiFi à l'aide de grappes de Raspberry PI]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Projets réalisés en 2019/21 sous forme de stages ==&lt;br /&gt;
&lt;br /&gt;
Vu la difficulté de trouver des stages de seconde année du cycle ingénieur (covid), l'école a proposé des stages académiques.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants ecole &lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA3/IMA4 2019/2021 P1+|Micro-ordinateur pour la pédagogie]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA3/IMA4 2019/2021 P2+|Robot autonome Centaure]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2019/2021 P3+|Installation d'un orchestrateur de machines virtuelles]]&lt;br /&gt;
| Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA3/IMA4 2019/2021 P5+|Robot rampant]]&lt;br /&gt;
| Xavier Redon / Alexandre Boé&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA3/IMA4 2019/2021 P6+|Visualisation et positionnement de fibre optique]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA3/IMA4 2019/2021 P11+|TP à distance - Interface de visualisation]]&lt;br /&gt;
| Alexandre Boé / Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
| P17 [[IMA3/IMA4 2019/2021 P17+|Capteur de mesure de pollution]]&lt;br /&gt;
| Alexandre Boé / Thomas Vantroys&lt;br /&gt;
|-&lt;br /&gt;
| P24 [[IMA3/IMA4 2019/2021 P24+|Interface graphique pour surveillance des communications d'un système embarqué]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85504</id>
		<title>IMA3/IMA4 2019/2021 P3</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85504"/>
				<updated>2021-01-08T10:58:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Le banc complet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de travaux pratiques d'administration système et réseau, un atelier de cassage de clefs WiFi WEP et WPA est organisé. Le but est de donner la possibilité d'avoir un SSID par binôme. De plus cet atelier ne devant pas prendre plusieurs heures à se dérouler, une aide au cassage doit être apporté sous la forme de la génération d'un trafic significatif sur les réseaux WiFi concernés.&lt;br /&gt;
&lt;br /&gt;
Autant créer plusieurs SSID est facile avec des points d'accès WiFi Cisco, autant connecter un client sur chaque SSID est assez compliqué. Il est difficile d'avoir une machine avec plusieurs interfaces WiFi et il est délicat d'utiliser un PC par SSID.&lt;br /&gt;
&lt;br /&gt;
Cette page décrit l'utilisation de grappes de Raspberry Pi pour réaliser les clients WiFi.&lt;br /&gt;
&lt;br /&gt;
= Autres solutions =&lt;br /&gt;
&lt;br /&gt;
Une solution sans matériel institutionnel consiste à demander aux élèves de créer un SSID sur leur téléphone. Plusieurs défauts à cette solution :&lt;br /&gt;
* pas de possibilité d'utiliser une clef WEP, même si WEP est maintenant largement obsolète, l'étude de cas est intéressante pour initier les élèves au chiffrement ;&lt;br /&gt;
* pas de contrôle sur les SSID créés, donc pas de possibilité de vérification du résultat possible, non utilisable pour un examen ;&lt;br /&gt;
* dans le cadre d'utilisation d'un point d'accès WiFi configuré avec 12 SSID, deux solutions avaient déjà été utilisée pour générer le trafic :&lt;br /&gt;
** utiliser 12 PC avec une clef USB WiFi, de nombreux soucis se sont présentés : certains PC étaient trop éloignés, les clefs disparaisaient, les scripts de connexion et de génération de trafic étaient arrêtés ;&lt;br /&gt;
** utiliser une machine dédiée avec 12 clefs USB WiFi, en pratique cela ne fonctionne pas, même Linux se rélève incapable de gérer autant d'interface WiFi de façon stable.&lt;br /&gt;
&lt;br /&gt;
= Matériel =&lt;br /&gt;
&lt;br /&gt;
La solution consiste donc à remplacer les 12 PC par autant de Raspberry Pi. La tentative d'utiliser des Raspberry Pi indépendantes dans leurs propres boitiers s'est révélée très pénible à gérer (en particulier pour l'alimentation avec 12 adaptateurs séparés).&lt;br /&gt;
&lt;br /&gt;
L'idée est donc d'empiler les Raspberry Pi et des les alimenter de façon centralisée. Nous utilisons deux grappes de 7 Raspberry chacune.&lt;br /&gt;
&lt;br /&gt;
La liste du matériel utilisé est :&lt;br /&gt;
* 14 Raspberry Pi 2 utilisées dans d'anciens travaux pratiques réseau et remplacées depuis par des modèles plus récents, les cartes ont été retirées de leurs boitiers ;&lt;br /&gt;
* l'alimentation se fait via un hub USB de marque Anker offrant 10 ports USB et une puissance totale utilisable de 60 Watt, soit 6 Watt par port soit encore un courant de plus d'un Ampère par port, c'est suffisant pour notre application ;&lt;br /&gt;
* pour ajouter à la facilité d'utilisation et pour stabiliser physiquement les grappes, un commutateur 8 ports gigabit de marque D-Link est ajouté, la référence de ce commutateur est DGS-108 ;&lt;br /&gt;
* quelques petits accessoires sont aussi nécessaires : 14 câbles Ethernet de 25cm, 14 câbles USB de 30cm, quelques ventilateurs, des entretoises, des vis.&lt;br /&gt;
&lt;br /&gt;
A environ 40 euros pièce, ce sont clairement les Raspberry les composants les plus onéreux. Il faut équiper ces dernières de 14 clefs WiPi à 8 euros pièce. Les hubs USB se trouvent à 30 euros, les commutateurs un peu en dessous de 35 euros, les câbles réseau autour de 20 euros, les câbles USB autour de 30 euros, rajoutons 30 euros pour la visserie. Nous arrivons donc à un total, non négligeable, qui approche des 900 euros TTC.&lt;br /&gt;
&lt;br /&gt;
= Réalisation Physique =&lt;br /&gt;
&lt;br /&gt;
== Les grappes ==&lt;br /&gt;
&lt;br /&gt;
[[File:WiFi-Grappe-vue1.jpg|thumbs|200px|left]]&lt;br /&gt;
[[File:WiFi-Grappe-vue2.jpg|thumbs|200px|right]]&lt;br /&gt;
&lt;br /&gt;
Sur internet, vous pouvez trouver des boitiers ou des kits pour grappes de Raspberry Pi. Ces dispositifs ne sont pas souvent prévus pour autant de cartes que nous souhaitons utiliser. Ils sont aussi assez onéreux. En fait nous avons constaté que simplement relier les Raspberry Pi par des entretoises était acceptable. Il faut juste trouver des entretoises de la bonne hauteur et avec un filetage mâle d'un coté et femelle de l'autre. Avouons avoir du un peu élargir les trous de fixation des Raspberry Pi pour que les filetage mâles M3 puissent passer.&lt;br /&gt;
&lt;br /&gt;
Les boitiers des commutateurs ont été dévissés pour pouvoir percer 4 trous dans la face supérieure et ainsi pouvoir visser les entretoises du bas de la pile sur le boitier du commutateur. Des vis nylon ont été utilisées.&lt;br /&gt;
&lt;br /&gt;
L'ensemble ainsi obtenu est plutôt robuste. Cela dit les câbles réseau étant un peu courts et assez rigide leur utilisation a fait vriller la pile de Raspberry. L'utilisation d'un kit d&amp;quot;empilement de Raspberry aurait certainement évité cela. Il est aussi envisageable de trouver des câbles de 30cm ou plus flexible pour éviter la torsion.&lt;br /&gt;
&lt;br /&gt;
Le hub USB est fixé sur une équerre métallique visée sur le boitier du commutateur en détournant une vis de terre de sa fonction première. La fixation du hub sur l'équerre se fait avec un simple lien plastique. Il suffit ensuite d'alimenter les Raspberry par des câbles USB de type A vers des micro-USB. &lt;br /&gt;
&lt;br /&gt;
Il est prévu de rajouter un ventilateur sur le coté des piles mais plus pour le coté esthétique (ventilateurs avec LED RGB) que pour un réel besoin de refroidissement, les Raspberry n'étant pas trop surchauffée par l'envoi de quelques paquets réseau. Pour la fixation du ventilateur, un système doit être conçu aucune solution directe n'ayant été trouvée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le banc complet ==&lt;br /&gt;
&lt;br /&gt;
Le banc complet comprend les deux grappes de Raspberry mais aussi :&lt;br /&gt;
* deux points d'accès WiFi Cisco (un avec 12 SSID WEP et un avec 12 SSID WPA) ;&lt;br /&gt;
* un commutateur pour relier les deux grappes, les deux points d'accès et le réseau de la salle ;&lt;br /&gt;
* un PC comme cible aux paquets de trafic sur 24 VLANS mais aussi pour l'accès série sur les points d'accès.&lt;br /&gt;
&lt;br /&gt;
A noter que le commutateur alimente les deux points d'accès par PoE.&lt;br /&gt;
&lt;br /&gt;
Concernant le coût : des Aironet 1600 se trouvent d'occasion autour de 30 euros et les autres matériels ne sont pas forcément utiles comme indiqué ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Des optimisations sont possibles :&lt;br /&gt;
* n'avoir que des commutateurs 8 ports complique la configuration en n'autorisant pas la connexion entre les grappes ET avec la salle, aucun commutateur de la même catégorie de prix ne semble être disponible avec plus de ports, utiliser un commutateur professionnel pour faire le lien est un peu exagéré, quelques autres pistes :&lt;br /&gt;
** ajouter un troisième commutateur DGS-108 et alimenter les points d'accès de façon plus traditionnelle ;&lt;br /&gt;
** ajouter un adaptateur USB Ethernet sur une Raspberry comme point d'interconnexion avec la salle.&lt;br /&gt;
* Le PC n'est pas strictement obligatoire, une Rasperry Pi peut être utilisée via son interface Ethernet comme puit pour les paquets du trafic, les points d'accès peuvent être configurée par Ethernet.&lt;br /&gt;
&lt;br /&gt;
= Configuration logicielle =&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85503</id>
		<title>IMA3/IMA4 2019/2021 P3</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85503"/>
				<updated>2021-01-08T10:43:35Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Réalisation Physique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de travaux pratiques d'administration système et réseau, un atelier de cassage de clefs WiFi WEP et WPA est organisé. Le but est de donner la possibilité d'avoir un SSID par binôme. De plus cet atelier ne devant pas prendre plusieurs heures à se dérouler, une aide au cassage doit être apporté sous la forme de la génération d'un trafic significatif sur les réseaux WiFi concernés.&lt;br /&gt;
&lt;br /&gt;
Autant créer plusieurs SSID est facile avec des points d'accès WiFi Cisco, autant connecter un client sur chaque SSID est assez compliqué. Il est difficile d'avoir une machine avec plusieurs interfaces WiFi et il est délicat d'utiliser un PC par SSID.&lt;br /&gt;
&lt;br /&gt;
Cette page décrit l'utilisation de grappes de Raspberry Pi pour réaliser les clients WiFi.&lt;br /&gt;
&lt;br /&gt;
= Autres solutions =&lt;br /&gt;
&lt;br /&gt;
Une solution sans matériel institutionnel consiste à demander aux élèves de créer un SSID sur leur téléphone. Plusieurs défauts à cette solution :&lt;br /&gt;
* pas de possibilité d'utiliser une clef WEP, même si WEP est maintenant largement obsolète, l'étude de cas est intéressante pour initier les élèves au chiffrement ;&lt;br /&gt;
* pas de contrôle sur les SSID créés, donc pas de possibilité de vérification du résultat possible, non utilisable pour un examen ;&lt;br /&gt;
* dans le cadre d'utilisation d'un point d'accès WiFi configuré avec 12 SSID, deux solutions avaient déjà été utilisée pour générer le trafic :&lt;br /&gt;
** utiliser 12 PC avec une clef USB WiFi, de nombreux soucis se sont présentés : certains PC étaient trop éloignés, les clefs disparaisaient, les scripts de connexion et de génération de trafic étaient arrêtés ;&lt;br /&gt;
** utiliser une machine dédiée avec 12 clefs USB WiFi, en pratique cela ne fonctionne pas, même Linux se rélève incapable de gérer autant d'interface WiFi de façon stable.&lt;br /&gt;
&lt;br /&gt;
= Matériel =&lt;br /&gt;
&lt;br /&gt;
La solution consiste donc à remplacer les 12 PC par autant de Raspberry Pi. La tentative d'utiliser des Raspberry Pi indépendantes dans leurs propres boitiers s'est révélée très pénible à gérer (en particulier pour l'alimentation avec 12 adaptateurs séparés).&lt;br /&gt;
&lt;br /&gt;
L'idée est donc d'empiler les Raspberry Pi et des les alimenter de façon centralisée. Nous utilisons deux grappes de 7 Raspberry chacune.&lt;br /&gt;
&lt;br /&gt;
La liste du matériel utilisé est :&lt;br /&gt;
* 14 Raspberry Pi 2 utilisées dans d'anciens travaux pratiques réseau et remplacées depuis par des modèles plus récents, les cartes ont été retirées de leurs boitiers ;&lt;br /&gt;
* l'alimentation se fait via un hub USB de marque Anker offrant 10 ports USB et une puissance totale utilisable de 60 Watt, soit 6 Watt par port soit encore un courant de plus d'un Ampère par port, c'est suffisant pour notre application ;&lt;br /&gt;
* pour ajouter à la facilité d'utilisation et pour stabiliser physiquement les grappes, un commutateur 8 ports gigabit de marque D-Link est ajouté, la référence de ce commutateur est DGS-108 ;&lt;br /&gt;
* quelques petits accessoires sont aussi nécessaires : 14 câbles Ethernet de 25cm, 14 câbles USB de 30cm, quelques ventilateurs, des entretoises, des vis.&lt;br /&gt;
&lt;br /&gt;
A environ 40 euros pièce, ce sont clairement les Raspberry les composants les plus onéreux. Il faut équiper ces dernières de 14 clefs WiPi à 8 euros pièce. Les hubs USB se trouvent à 30 euros, les commutateurs un peu en dessous de 35 euros, les câbles réseau autour de 20 euros, les câbles USB autour de 30 euros, rajoutons 30 euros pour la visserie. Nous arrivons donc à un total, non négligeable, qui approche des 900 euros TTC.&lt;br /&gt;
&lt;br /&gt;
= Réalisation Physique =&lt;br /&gt;
&lt;br /&gt;
== Les grappes ==&lt;br /&gt;
&lt;br /&gt;
[[File:WiFi-Grappe-vue1.jpg|thumbs|200px|left]]&lt;br /&gt;
[[File:WiFi-Grappe-vue2.jpg|thumbs|200px|right]]&lt;br /&gt;
&lt;br /&gt;
Sur internet, vous pouvez trouver des boitiers ou des kits pour grappes de Raspberry Pi. Ces dispositifs ne sont pas souvent prévus pour autant de cartes que nous souhaitons utiliser. Ils sont aussi assez onéreux. En fait nous avons constaté que simplement relier les Raspberry Pi par des entretoises était acceptable. Il faut juste trouver des entretoises de la bonne hauteur et avec un filetage mâle d'un coté et femelle de l'autre. Avouons avoir du un peu élargir les trous de fixation des Raspberry Pi pour que les filetage mâles M3 puissent passer.&lt;br /&gt;
&lt;br /&gt;
Les boitiers des commutateurs ont été dévissés pour pouvoir percer 4 trous dans la face supérieure et ainsi pouvoir visser les entretoises du bas de la pile sur le boitier du commutateur. Des vis nylon ont été utilisées.&lt;br /&gt;
&lt;br /&gt;
L'ensemble ainsi obtenu est plutôt robuste. Cela dit les câbles réseau étant un peu courts et assez rigide leur utilisation a fait vriller la pile de Raspberry. L'utilisation d'un kit d&amp;quot;empilement de Raspberry aurait certainement évité cela. Il est aussi envisageable de trouver des câbles de 30cm ou plus flexible pour éviter la torsion.&lt;br /&gt;
&lt;br /&gt;
Le hub USB est fixé sur une équerre métallique visée sur le boitier du commutateur en détournant une vis de terre de sa fonction première. La fixation du hub sur l'équerre se fait avec un simple lien plastique. Il suffit ensuite d'alimenter les Raspberry par des câbles USB de type A vers des micro-USB. &lt;br /&gt;
&lt;br /&gt;
Il est prévu de rajouter un ventilateur sur le coté des piles mais plus pour le coté esthétique (ventilateurs avec LED RGB) que pour un réel besoin de refroidissement, les Raspberry n'étant pas trop surchauffée par l'envoi de quelques paquets réseau. Pour la fixation du ventilateur, un système doit être conçu aucune solution directe n'ayant été trouvée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le banc complet ==&lt;br /&gt;
&lt;br /&gt;
Le banc complet comprend les deux grappes de Raspberry mais aussi :&lt;br /&gt;
* deux points d'accès WiFi Cisco (un avec 12 SSID WEP et un avec 12 SSID WPA) ;&lt;br /&gt;
* un commutateur pour relier les deux grappes, les deux points d'accès et le réseau de la salle ;&lt;br /&gt;
* un PC pour l'accès série sur les points d'accès.&lt;br /&gt;
&lt;br /&gt;
= Configuration logicielle =&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85502</id>
		<title>IMA3/IMA4 2019/2021 P3</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85502"/>
				<updated>2021-01-08T10:41:36Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Réalisation Physique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de travaux pratiques d'administration système et réseau, un atelier de cassage de clefs WiFi WEP et WPA est organisé. Le but est de donner la possibilité d'avoir un SSID par binôme. De plus cet atelier ne devant pas prendre plusieurs heures à se dérouler, une aide au cassage doit être apporté sous la forme de la génération d'un trafic significatif sur les réseaux WiFi concernés.&lt;br /&gt;
&lt;br /&gt;
Autant créer plusieurs SSID est facile avec des points d'accès WiFi Cisco, autant connecter un client sur chaque SSID est assez compliqué. Il est difficile d'avoir une machine avec plusieurs interfaces WiFi et il est délicat d'utiliser un PC par SSID.&lt;br /&gt;
&lt;br /&gt;
Cette page décrit l'utilisation de grappes de Raspberry Pi pour réaliser les clients WiFi.&lt;br /&gt;
&lt;br /&gt;
= Autres solutions =&lt;br /&gt;
&lt;br /&gt;
Une solution sans matériel institutionnel consiste à demander aux élèves de créer un SSID sur leur téléphone. Plusieurs défauts à cette solution :&lt;br /&gt;
* pas de possibilité d'utiliser une clef WEP, même si WEP est maintenant largement obsolète, l'étude de cas est intéressante pour initier les élèves au chiffrement ;&lt;br /&gt;
* pas de contrôle sur les SSID créés, donc pas de possibilité de vérification du résultat possible, non utilisable pour un examen ;&lt;br /&gt;
* dans le cadre d'utilisation d'un point d'accès WiFi configuré avec 12 SSID, deux solutions avaient déjà été utilisée pour générer le trafic :&lt;br /&gt;
** utiliser 12 PC avec une clef USB WiFi, de nombreux soucis se sont présentés : certains PC étaient trop éloignés, les clefs disparaisaient, les scripts de connexion et de génération de trafic étaient arrêtés ;&lt;br /&gt;
** utiliser une machine dédiée avec 12 clefs USB WiFi, en pratique cela ne fonctionne pas, même Linux se rélève incapable de gérer autant d'interface WiFi de façon stable.&lt;br /&gt;
&lt;br /&gt;
= Matériel =&lt;br /&gt;
&lt;br /&gt;
La solution consiste donc à remplacer les 12 PC par autant de Raspberry Pi. La tentative d'utiliser des Raspberry Pi indépendantes dans leurs propres boitiers s'est révélée très pénible à gérer (en particulier pour l'alimentation avec 12 adaptateurs séparés).&lt;br /&gt;
&lt;br /&gt;
L'idée est donc d'empiler les Raspberry Pi et des les alimenter de façon centralisée. Nous utilisons deux grappes de 7 Raspberry chacune.&lt;br /&gt;
&lt;br /&gt;
La liste du matériel utilisé est :&lt;br /&gt;
* 14 Raspberry Pi 2 utilisées dans d'anciens travaux pratiques réseau et remplacées depuis par des modèles plus récents, les cartes ont été retirées de leurs boitiers ;&lt;br /&gt;
* l'alimentation se fait via un hub USB de marque Anker offrant 10 ports USB et une puissance totale utilisable de 60 Watt, soit 6 Watt par port soit encore un courant de plus d'un Ampère par port, c'est suffisant pour notre application ;&lt;br /&gt;
* pour ajouter à la facilité d'utilisation et pour stabiliser physiquement les grappes, un commutateur 8 ports gigabit de marque D-Link est ajouté, la référence de ce commutateur est DGS-108 ;&lt;br /&gt;
* quelques petits accessoires sont aussi nécessaires : 14 câbles Ethernet de 25cm, 14 câbles USB de 30cm, quelques ventilateurs, des entretoises, des vis.&lt;br /&gt;
&lt;br /&gt;
A environ 40 euros pièce, ce sont clairement les Raspberry les composants les plus onéreux. Il faut équiper ces dernières de 14 clefs WiPi à 8 euros pièce. Les hubs USB se trouvent à 30 euros, les commutateurs un peu en dessous de 35 euros, les câbles réseau autour de 20 euros, les câbles USB autour de 30 euros, rajoutons 30 euros pour la visserie. Nous arrivons donc à un total, non négligeable, qui approche des 900 euros TTC.&lt;br /&gt;
&lt;br /&gt;
= Réalisation Physique =&lt;br /&gt;
&lt;br /&gt;
== Les grappes ==&lt;br /&gt;
&lt;br /&gt;
[[File:WiFi-Grappe-vue1.jpg|thumbs|200px|left]]&lt;br /&gt;
[[File:WiFi-Grappe-vue2.jpg|thumbs|200px|right]]&lt;br /&gt;
&lt;br /&gt;
Sur internet, vous pouvez trouver des boitiers ou des kits pour grappes de Raspberry Pi. Ces dispositifs ne sont pas souvent prévus pour autant de cartes que nous souhaitons utiliser. Ils sont aussi assez onéreux. En fait nous avons constaté que simplement relier les Raspberry Pi par des entretoises était acceptable. Il faut juste trouver des entretoises de la bonne hauteur et avec un filetage mâle d'un coté et femelle de l'autre. Avouons avoir du un peu élargir les trous de fixation des Raspberry Pi pour que les filetage mâles M3 puissent passer.&lt;br /&gt;
&lt;br /&gt;
Les boitiers des commutateurs ont été dévissés pour pouvoir percer 4 trous dans la face supérieure et ainsi pouvoir visser les entretoises du bas de la pile sur le boitier du commutateur. Des vis nylon ont été utilisées.&lt;br /&gt;
&lt;br /&gt;
L'ensemble ainsi obtenu est plutôt robuste. Cela dit les câbles réseau étant un peu courts et assez rigide leur utilisation a fait vriller la pile de Raspberry. L'utilisation d'un kit d&amp;quot;empilement de Raspberry aurait certainement évité cela. Il est aussi envisageable de trouver des câbles de 30cm ou plus flexible pour éviter la torsion.&lt;br /&gt;
&lt;br /&gt;
Le hub USB est fixé sur une équerre métallique visée sur le boitier du commutateur en détournant une vis de terre de sa fonction première. La fixation du hub sur l'équerre se fait avec un simple lien plastique. Il suffit ensuite d'alimenter les Raspberry par des câbles USB de type A vers des micro-USB. &lt;br /&gt;
&lt;br /&gt;
Il est prévu de rajouter un ventilateur sur le coté des piles mais plus pour le coté esthétique (ventilateurs avec LED RGB) que pour un réel besoin de refroidissement, les Raspberry n'étant pas trop surchauffée par l'envoi de quelques paquets réseau. Pour la fixation du ventilateur, un système doit être conçu aucune solution directe n'ayant été trouvée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le banc complet ==&lt;br /&gt;
&lt;br /&gt;
= Configuration logicielle =&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85501</id>
		<title>IMA3/IMA4 2019/2021 P3</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85501"/>
				<updated>2021-01-08T10:38:06Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Réalisation Physique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de travaux pratiques d'administration système et réseau, un atelier de cassage de clefs WiFi WEP et WPA est organisé. Le but est de donner la possibilité d'avoir un SSID par binôme. De plus cet atelier ne devant pas prendre plusieurs heures à se dérouler, une aide au cassage doit être apporté sous la forme de la génération d'un trafic significatif sur les réseaux WiFi concernés.&lt;br /&gt;
&lt;br /&gt;
Autant créer plusieurs SSID est facile avec des points d'accès WiFi Cisco, autant connecter un client sur chaque SSID est assez compliqué. Il est difficile d'avoir une machine avec plusieurs interfaces WiFi et il est délicat d'utiliser un PC par SSID.&lt;br /&gt;
&lt;br /&gt;
Cette page décrit l'utilisation de grappes de Raspberry Pi pour réaliser les clients WiFi.&lt;br /&gt;
&lt;br /&gt;
= Autres solutions =&lt;br /&gt;
&lt;br /&gt;
Une solution sans matériel institutionnel consiste à demander aux élèves de créer un SSID sur leur téléphone. Plusieurs défauts à cette solution :&lt;br /&gt;
* pas de possibilité d'utiliser une clef WEP, même si WEP est maintenant largement obsolète, l'étude de cas est intéressante pour initier les élèves au chiffrement ;&lt;br /&gt;
* pas de contrôle sur les SSID créés, donc pas de possibilité de vérification du résultat possible, non utilisable pour un examen ;&lt;br /&gt;
* dans le cadre d'utilisation d'un point d'accès WiFi configuré avec 12 SSID, deux solutions avaient déjà été utilisée pour générer le trafic :&lt;br /&gt;
** utiliser 12 PC avec une clef USB WiFi, de nombreux soucis se sont présentés : certains PC étaient trop éloignés, les clefs disparaisaient, les scripts de connexion et de génération de trafic étaient arrêtés ;&lt;br /&gt;
** utiliser une machine dédiée avec 12 clefs USB WiFi, en pratique cela ne fonctionne pas, même Linux se rélève incapable de gérer autant d'interface WiFi de façon stable.&lt;br /&gt;
&lt;br /&gt;
= Matériel =&lt;br /&gt;
&lt;br /&gt;
La solution consiste donc à remplacer les 12 PC par autant de Raspberry Pi. La tentative d'utiliser des Raspberry Pi indépendantes dans leurs propres boitiers s'est révélée très pénible à gérer (en particulier pour l'alimentation avec 12 adaptateurs séparés).&lt;br /&gt;
&lt;br /&gt;
L'idée est donc d'empiler les Raspberry Pi et des les alimenter de façon centralisée. Nous utilisons deux grappes de 7 Raspberry chacune.&lt;br /&gt;
&lt;br /&gt;
La liste du matériel utilisé est :&lt;br /&gt;
* 14 Raspberry Pi 2 utilisées dans d'anciens travaux pratiques réseau et remplacées depuis par des modèles plus récents, les cartes ont été retirées de leurs boitiers ;&lt;br /&gt;
* l'alimentation se fait via un hub USB de marque Anker offrant 10 ports USB et une puissance totale utilisable de 60 Watt, soit 6 Watt par port soit encore un courant de plus d'un Ampère par port, c'est suffisant pour notre application ;&lt;br /&gt;
* pour ajouter à la facilité d'utilisation et pour stabiliser physiquement les grappes, un commutateur 8 ports gigabit de marque D-Link est ajouté, la référence de ce commutateur est DGS-108 ;&lt;br /&gt;
* quelques petits accessoires sont aussi nécessaires : 14 câbles Ethernet de 25cm, 14 câbles USB de 30cm, quelques ventilateurs, des entretoises, des vis.&lt;br /&gt;
&lt;br /&gt;
A environ 40 euros pièce, ce sont clairement les Raspberry les composants les plus onéreux. Il faut équiper ces dernières de 14 clefs WiPi à 8 euros pièce. Les hubs USB se trouvent à 30 euros, les commutateurs un peu en dessous de 35 euros, les câbles réseau autour de 20 euros, les câbles USB autour de 30 euros, rajoutons 30 euros pour la visserie. Nous arrivons donc à un total, non négligeable, qui approche des 900 euros TTC.&lt;br /&gt;
&lt;br /&gt;
= Réalisation Physique =&lt;br /&gt;
&lt;br /&gt;
== Les grappes ==&lt;br /&gt;
&lt;br /&gt;
[[File:WiFi-Grappe-vue1.jpg|thumbs|200px|left]]&lt;br /&gt;
[[File:WiFi-Grappe-vue2.jpg|thumbs|200px|right]]&lt;br /&gt;
&lt;br /&gt;
Sur internet, vous pouvez trouver des boitiers ou des kits pour grappes de Raspberry Pi. Ces dispositifs ne sont pas souvent prévus pour autant de cartes que nous souhaitons utiliser. Ils sont aussi assez onéreux. En fait nous avons constaté que simplement relier les Raspberry Pi par des entretoises était acceptable. Il faut juste trouver des entretoises de la bonne hauteur et avec un filetage mâle d'un coté et femelle de l'autre. Avouons avoir du un peu élargir les trous de fixation des Raspberry Pi pour que les filetage mâles M3 puissent passer.&lt;br /&gt;
&lt;br /&gt;
Les boitiers des commutateurs ont été dévissés pour pouvoir percer 4 trous dans la face supérieure et ainsi pouvoir visser les entretoises du bas de la pile sur le boitier du commutateur. Des vis nylon ont été utilisées.&lt;br /&gt;
&lt;br /&gt;
L'ensemble ainsi obtenu est plutôt robuste. Cela dit les câbles réseau étant un peu courts et assez rigide leur utilisation a fait vriller la pile de Raspberry. L'utilisation d'un kit d&amp;quot;empilement de Raspberry aurait certainement évité cela. Il est aussi envisageable de trouver des câbles de 30cm ou plus flexible pour éviter la torsion.&lt;br /&gt;
&lt;br /&gt;
Le hub USB est fixé sur une équerre métallique visée sur le boitier du commutateur en détournant une vis de terre de sa fonction première. La fixation du hub sur l'équerre se fait avec un simple lien plastique. Il suffit ensuite d'alimenter les Raspberry par des câbles USB de type A vers des micro-USB. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le banc complet ==&lt;br /&gt;
&lt;br /&gt;
= Configuration logicielle =&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85500</id>
		<title>IMA3/IMA4 2019/2021 P3</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P3&amp;diff=85500"/>
				<updated>2021-01-08T10:24:59Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de travaux pratiques d'administration système et réseau, un atelier de cassage de clefs WiFi WEP et WPA est organisé. Le but est de donner la possibilité d'avoir un SSID par binôme. De plus cet atelier ne devant pas prendre plusieurs heures à se dérouler, une aide au cassage doit être apporté sous la forme de la génération d'un trafic significatif sur les réseaux WiFi concernés.&lt;br /&gt;
&lt;br /&gt;
Autant créer plusieurs SSID est facile avec des points d'accès WiFi Cisco, autant connecter un client sur chaque SSID est assez compliqué. Il est difficile d'avoir une machine avec plusieurs interfaces WiFi et il est délicat d'utiliser un PC par SSID.&lt;br /&gt;
&lt;br /&gt;
Cette page décrit l'utilisation de grappes de Raspberry Pi pour réaliser les clients WiFi.&lt;br /&gt;
&lt;br /&gt;
= Autres solutions =&lt;br /&gt;
&lt;br /&gt;
Une solution sans matériel institutionnel consiste à demander aux élèves de créer un SSID sur leur téléphone. Plusieurs défauts à cette solution :&lt;br /&gt;
* pas de possibilité d'utiliser une clef WEP, même si WEP est maintenant largement obsolète, l'étude de cas est intéressante pour initier les élèves au chiffrement ;&lt;br /&gt;
* pas de contrôle sur les SSID créés, donc pas de possibilité de vérification du résultat possible, non utilisable pour un examen ;&lt;br /&gt;
* dans le cadre d'utilisation d'un point d'accès WiFi configuré avec 12 SSID, deux solutions avaient déjà été utilisée pour générer le trafic :&lt;br /&gt;
** utiliser 12 PC avec une clef USB WiFi, de nombreux soucis se sont présentés : certains PC étaient trop éloignés, les clefs disparaisaient, les scripts de connexion et de génération de trafic étaient arrêtés ;&lt;br /&gt;
** utiliser une machine dédiée avec 12 clefs USB WiFi, en pratique cela ne fonctionne pas, même Linux se rélève incapable de gérer autant d'interface WiFi de façon stable.&lt;br /&gt;
&lt;br /&gt;
= Matériel =&lt;br /&gt;
&lt;br /&gt;
La solution consiste donc à remplacer les 12 PC par autant de Raspberry Pi. La tentative d'utiliser des Raspberry Pi indépendantes dans leurs propres boitiers s'est révélée très pénible à gérer (en particulier pour l'alimentation avec 12 adaptateurs séparés).&lt;br /&gt;
&lt;br /&gt;
L'idée est donc d'empiler les Raspberry Pi et des les alimenter de façon centralisée. Nous utilisons deux grappes de 7 Raspberry chacune.&lt;br /&gt;
&lt;br /&gt;
La liste du matériel utilisé est :&lt;br /&gt;
* 14 Raspberry Pi 2 utilisées dans d'anciens travaux pratiques réseau et remplacées depuis par des modèles plus récents, les cartes ont été retirées de leurs boitiers ;&lt;br /&gt;
* l'alimentation se fait via un hub USB de marque Anker offrant 10 ports USB et une puissance totale utilisable de 60 Watt, soit 6 Watt par port soit encore un courant de plus d'un Ampère par port, c'est suffisant pour notre application ;&lt;br /&gt;
* pour ajouter à la facilité d'utilisation et pour stabiliser physiquement les grappes, un commutateur 8 ports gigabit de marque D-Link est ajouté, la référence de ce commutateur est DGS-108 ;&lt;br /&gt;
* quelques petits accessoires sont aussi nécessaires : 14 câbles Ethernet de 25cm, 14 câbles USB de 30cm, quelques ventilateurs, des entretoises, des vis.&lt;br /&gt;
&lt;br /&gt;
A environ 40 euros pièce, ce sont clairement les Raspberry les composants les plus onéreux. Il faut équiper ces dernières de 14 clefs WiPi à 8 euros pièce. Les hubs USB se trouvent à 30 euros, les commutateurs un peu en dessous de 35 euros, les câbles réseau autour de 20 euros, les câbles USB autour de 30 euros, rajoutons 30 euros pour la visserie. Nous arrivons donc à un total, non négligeable, qui approche des 900 euros TTC.&lt;br /&gt;
&lt;br /&gt;
= Réalisation Physique =&lt;br /&gt;
&lt;br /&gt;
== Les grappes ==&lt;br /&gt;
&lt;br /&gt;
[[File:WiFi-Grappe-vue1.jpg|thumbs|200px|left]]&lt;br /&gt;
[[File:WiFi-Grappe-vue2.jpg|thumbs|200px|right]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le banc complet ==&lt;br /&gt;
&lt;br /&gt;
= Configuration logicielle =&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2&amp;diff=85499</id>
		<title>IMA3/IMA4 2019/2021 P2</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P2&amp;diff=85499"/>
				<updated>2021-01-08T09:26:02Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Améliorations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Le réseau RENATER n'est pas adapté à l'enseignement : trop de restrictions par les différents administrateurs réseau. Il est par exemple très compliqué de faire installer des serveurs (DNS, SMTP, Web, etc) aux élèves.&lt;br /&gt;
&lt;br /&gt;
La plateforme mathématiques et informatique s'est donc dotée de lignes spécifiques à l'enseignement. Ces lignes commencent à dater et utilisent la technologie cuivre / ADSL. La migration vers la fibre est en cours.&lt;br /&gt;
&lt;br /&gt;
En attendant, il faut maintenir les lignes ADSL. Les opérateurs, bien que continuant à présenter des factures, ne sont plus en mesure de remplacer les modems / routeurs initialement fournis. Le sujet de ce projet consiste à basculer sur du matériel réseau de la plateforme pour gérer les liaisons ADSL. Le coût doit rester minimal vu qu'il s'agit d'une solution temporaire.&lt;br /&gt;
&lt;br /&gt;
Les deux lignes ADSL sont des lignes France Télécom conservées lors de la privatisation de l'institution sous le nom commercial &amp;quot;orange&amp;quot;. La première ligne a même été négociée avec Oléane au début des années 2000 pour permettre aux élèves logés dans la résidence crous Eiffel d'avoir un accès Internet. Une dizaine d'année plus tard la direction de l'école a accédé aux sollicitations du crous pour confier l'accès Internet à un opérateur privé. Nostalgie à part la dénomination officielle des deux lignes est :&lt;br /&gt;
* ADSL business internet office (vendue pour un débit 18Mb/s descendant et 80Kb/s montant) ;&lt;br /&gt;
* ADSL internet pro solo (accès classique comme pour les particuliers).&lt;br /&gt;
&lt;br /&gt;
Les deux modems / routeurs de ces lignes ont cessé de fonctionner (en 2018 pour la première ligne et en 2020 pour la seconde ligne).&lt;br /&gt;
&lt;br /&gt;
= Première approche Cisco C1700 =&lt;br /&gt;
&lt;br /&gt;
[[File:Cisco1721.jpeg|thumbs|200px|right|Cisco 1721]]&lt;br /&gt;
&lt;br /&gt;
Un premier test a été effectué avec un routeur Cisco 1721. Avec une mémoire flash de 32Mo et une mémoire vive de 64Mo, il est possible de le faire tourner sous un IOS 12.4.&lt;br /&gt;
&lt;br /&gt;
[[File:Wic1adsl.jpeg|thumbs|200px|left|Carte ADSL]]&lt;br /&gt;
&lt;br /&gt;
Le 1721 peut prendre deux cartes WIC classiques, dont en particulier la carte &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt;. Ces cartes peuvent se trouver d'occasion autour de 4 euros.&lt;br /&gt;
&lt;br /&gt;
La configuration de l'interface ATM de la carte ADSL est simple :&lt;br /&gt;
&lt;br /&gt;
 interface ATM0                                                                  &lt;br /&gt;
  no ip address                                                                  &lt;br /&gt;
  no atm ilmi-keepalive                                                          &lt;br /&gt;
  dsl operating-mode auto                                                        &lt;br /&gt;
  pvc 8/35                                                                       &lt;br /&gt;
   pppoe-client dial-pool-number 1                                               &lt;br /&gt;
  !                                                                              &lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
A noter que les caractéristiques (ici &amp;lt;tt&amp;gt;8/35&amp;lt;/tt&amp;gt;) du circuit vers le fournisseur d'accès dépendent totalement du dit fournisseur. Les identifiants pour l'accès au fournisseur sont déclarés dans une interface virtuelle &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt; qui se charge du protocole PPPoE (Point-to-Point Protocol over Ethernet). Le numéro du &amp;lt;tt&amp;gt;dial pool&amp;lt;/tt&amp;gt; doit être le même dans la référence de l'interface ATM et dans la configuration de l'interface &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt; (ici le numéro est 1).&lt;br /&gt;
&lt;br /&gt;
 interface Dialer1                                                               &lt;br /&gt;
  mtu 1492                                                                       &lt;br /&gt;
  ip address negotiated                                                          &lt;br /&gt;
  ip virtual-reassembly                                                          &lt;br /&gt;
  encapsulation ppp                                                              &lt;br /&gt;
  dialer pool 1                                                                  &lt;br /&gt;
  dialer idle-timeout 0                                                          &lt;br /&gt;
  dialer persistent                                                              &lt;br /&gt;
  ppp chap hostname IDENTIFIANT                                                  &lt;br /&gt;
  ppp chap password 0 MOTDEPASSE                                                  &lt;br /&gt;
 !    &lt;br /&gt;
&lt;br /&gt;
Bien entendu il faut remplacer les mot &amp;lt;tt&amp;gt;IDENTIFIANT&amp;lt;/TT&amp;gt; et &amp;lt;tt&amp;gt;MOTDEPASSE&amp;lt;/tt&amp;gt; avec l'identification fournie par votre fournisseur d'accès. A noter que la récupération de ces identifiants n'est pas toujours évidente. Pour l'ADSL Pro d'orange une demande a été suivie par un courriel contenant l'identifiant le lendemain mais pour l'accès ADSL BIO il a été nécessaire de fournir un document d'autorisation de divulgation par un responsable de l'établissement.&lt;br /&gt;
&lt;br /&gt;
La configuration &amp;lt;tt&amp;gt;mtu 1492&amp;lt;/tt&amp;gt; n'est pas optionnelle sans elle le passage par l'interface ATM casse la découverte du MTU maximal d'une façon ou d'une autre. Pour les liaisons peu stables, comme les notres, la directive &amp;lt;tt&amp;gt;dialer persistent&amp;lt;/tt&amp;gt; est très utile pour relancer l'identification sur la connexion.&lt;br /&gt;
&lt;br /&gt;
Enfin une liaison ADSL sans mascarade n'est pas très utile vu que l'opérateur ne donne qu'une adresse IPv4 routée. Pour mettre en place la mascarade il faut ajouter la directive &amp;lt;tt&amp;gt;ip nat outside&amp;lt;/tt&amp;gt; dans l'interface de sortie vers Internet (ici &amp;lt;tt&amp;gt;Dialer1&amp;lt;/tt&amp;gt;) et il faut ajouter &amp;lt;tt&amp;gt;ip nat inside&amp;lt;/tt&amp;gt; dans l'interface du réseau local (généralement une interface Ethernet). Enfin il faut définir la mascarade par elle-même :&lt;br /&gt;
&lt;br /&gt;
 access-list 1 permit 192.168.0.0 0.0.0.255  &lt;br /&gt;
 ip nat inside source list 1 interface Dialer1 overload&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu'à ajouter la route par défaut : &amp;lt;tt&amp;gt;ip route 0.0.0.0 0.0.0.0 Dialer1&amp;lt;/tt&amp;gt;.&lt;br /&gt;
                          &lt;br /&gt;
Dans cette configuration il est supposé que le réseau IPv4 local est &amp;lt;tt&amp;gt;192.168.0.0/24&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La solution à base de 1721 est fonctionnelle mais avec les limitations ou défauts suivant :&lt;br /&gt;
* la carte &amp;lt;tt&amp;gt;WICADSL1=&amp;lt;/tt&amp;gt; n'implante que ADSL version 1, dans le cas de notre liaison avec 40db d'atténuation on se retrouve avec des débit de quelques Mb/s même sur la ligne certifiée à 18Mb/s ;&lt;br /&gt;
* il n'est pas possible de configurer deux WIC ADSL dans un 1721, ce bogue est répertorié sous le numéro CSCsa90021 ;&lt;br /&gt;
* le 2721 est un routeur de bureau non facilement intégrable dans une baie (non fixable sur les rails, alimentation massive séparée), d'autant plus s'il en faut deux, un par liaison ADSL.&lt;br /&gt;
&lt;br /&gt;
= Seconde approche Cisco C2600 =&lt;br /&gt;
&lt;br /&gt;
[[File:2621.jpg|thumbs|500px|left|2621 en baie]]&lt;br /&gt;
&lt;br /&gt;
Il est possible de récupérer les cartes ADSL &amp;lt;tt&amp;gt;WIC-1ADSL&amp;lt;/tt&amp;gt; de ces routeurs pour les installer sur un Cisco 2621 un peu plus puissant. De plus ce routeur n'est pas affecté par le bogue CSCsa90021, les 2 cartes ADSL peuvent être configurées simultanément. Le 2621 dont nous disposions possédait lui aussi une mémoire flash de 32Mo et une mémoire vive de 64Mo. Du coup le 2621 peut tourner sous un IOS sensiblement identique à celui du 1721 soit un IOS 12.4.&lt;br /&gt;
&lt;br /&gt;
Pas de modification notable dans la configuration des interfaces ATM, hors numérotation des interfaces et nouvelles options ATM par défaut :&lt;br /&gt;
 interface ATM0/0&lt;br /&gt;
  no ip address&lt;br /&gt;
  atm restart timer 300     ! nouvelle option par défaut&lt;br /&gt;
  no atm ilmi-keepalive&lt;br /&gt;
  dsl operating-mode auto &lt;br /&gt;
  dsl enable-training-log   ! nouvelle option par défaut&lt;br /&gt;
  pvc 8/35 &lt;br /&gt;
   pppoe-client dial-pool-number 1&lt;br /&gt;
  !&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
La configuration de l'interface &amp;lt;tt&amp;gt;ATM0/1&amp;lt;/tt&amp;gt; est identique mis à part le numéro du &amp;lt;tt&amp;gt;dial-pool-number&amp;lt;/tt&amp;gt;. Les interfaces virtuelles &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt; se configurent de façon strictement semblable sur le 2921 par rapport au 1721.&lt;br /&gt;
&lt;br /&gt;
Par contre cette fois nous avons deux interfaces de sortie par les deux lignes ADSL. Le routage et la mascarade deviennent plus compliqué à configurer.&lt;br /&gt;
&lt;br /&gt;
 track 1 ip route IPV4_ISP_ADSL1 255.255.255.255 reachability&lt;br /&gt;
 track 2 ip route IPV4_ISP_ADSL2 255.255.255.255 reachability&lt;br /&gt;
 ip route 0.0.0.0 0.0.0.0 Dialer1 track 1&lt;br /&gt;
 ip route 0.0.0.0 0.0.0.0 Dialer2 track 2&lt;br /&gt;
&lt;br /&gt;
Ce bloc ajoute les routes par défaut via les lignes disponibles à un moment donné. La disponibilité se fait par test ICMP sur les adresses IPv4 coté fournisseur d'adresse. Si deux routes par défaut sont ajoutées, l'algorithme de routage doit équilibrer le trafic sur les différentes lignes ADSL. Dans notre cas le trafic se fait principalement via un mandataire Web. L'algorithme Cisco classique &amp;lt;tt&amp;gt;original&amp;lt;/tt&amp;gt; peut suffire. Cet algorithme route toutes les communications d'une adresse IPv4 donnée vers une autre adresse IPv4 donnée vers la même sortie. Si les sites web visités sont peu variés il vaut mieux passer sur l'algorithme &amp;lt;tt&amp;gt;universal&amp;lt;/tt&amp;gt; qui ajoute les ports sources et destination dans les éléments de choix de la route de sortie. Cela peut se faire avec la commande&lt;br /&gt;
&lt;br /&gt;
 (config)# ip cef load-sharing algorithm universal&lt;br /&gt;
&lt;br /&gt;
Pour la mascarade la configuration est de la forme :&lt;br /&gt;
&lt;br /&gt;
 access-list 1 permit 192.168.0.0 0.0.0.255  &lt;br /&gt;
 route-map ADSL1 permit 10&lt;br /&gt;
  match ip address 1&lt;br /&gt;
  match interface Dialer1&lt;br /&gt;
 !&lt;br /&gt;
 route-map ADSL2 permit 10&lt;br /&gt;
  match ip address 1&lt;br /&gt;
  match interface Dialer2&lt;br /&gt;
 !&lt;br /&gt;
 ip nat inside source route-map ADSL1 interface Dialer1 overload&lt;br /&gt;
 ip nat inside source route-map ADSL2 interface Dialer2 overload&lt;br /&gt;
&lt;br /&gt;
Vous constatez que l'astuce consiste à passer par des &amp;lt;tt&amp;gt;route-map&amp;lt;/tt&amp;gt; pour que la mascarade puisse se faire en bonne intelligence avec l'équilibrage de charge. Ne pas oublier d'ajouter les &amp;lt;tt&amp;gt;ip nat inside&amp;lt;/tt&amp;gt; sur l'interface du réseau local et les &amp;lt;tt&amp;gt;ip nat outside&amp;lt;/tt&amp;gt; dans les deux interfaces &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A noter : l'équilibrage n'a pas été testé avec cette configuration, les deux lignes ADSL n'ayant pas pu être opérationnelles simultanément avant l'acquisition de nouvelles cartes ADSL et le passage à un Cisco 2901.&lt;br /&gt;
&lt;br /&gt;
Cette solution à base de 2621 est fonctionnelle mais toujours avec le défaut que les &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt; ne sont pas suffisantes pour obtenir un débit satisfaisant avec les limitations ou défauts suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Troisième approche Cisco C2900 =&lt;br /&gt;
&lt;br /&gt;
[[File:2901.jpg|thumbs|500px|left|2901 en baie]]&lt;br /&gt;
&lt;br /&gt;
A l'origine l'idée était d'installer les cartes &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt; dans 2 des 4 slots WIC d'un Cisco 2901. Mais les slots WIC du 2901 sont des EHWIC (Enhanced High-Speed WAN Interface Cards). Et étrangement les cartes WIC classiques (du moins les &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt;) ne fonctionnent pas dans ces slots ou ne sont pas prises en compte par l'IOS. &lt;br /&gt;
&lt;br /&gt;
Un mal pour un bien, il faut utiliser des cartes ADSL plus récentes comme les &amp;lt;tt&amp;gt;HWIC-1ADSL-M&amp;lt;/tt&amp;gt;. Ces cartes peuvent être achetées d'occassion autour de 14 euros. C'est plus cher que les &amp;lt;tt&amp;gt;WIC-1ADSL=&amp;lt;/tt&amp;gt; mais cela reste tout à fait acceptable. De plus ces cartes sont compatible ADSL version 2 voire même version 2+ ce qui va nettement améliorer le débit des connexions.&lt;br /&gt;
&lt;br /&gt;
Du coté de l'IOS pas de changement par rapport aux 1721 et 2621, nous sommes toujours sur un IOS classique version 12.4 (pour être précis l'image utilisée est &amp;lt;tt&amp;gt;c2900-universalk9-mz.SPA.154-1.T1.bin&amp;lt;/tt&amp;gt;). Par contre la complexité de la configuration augmente du au fait que le routeur est déjà utilisé à d'autres fins. Il n'est donc pas possible de modifier la table de routage principale. Il va donc falloir utiliser le dispositif PBR (Policy-Based Routing) de Cisco. Hélas ce dispositif est bien moins abouti que la politique de routage de Linux qui permet d'utiliser de vraies tables de routages annexes et pas seulement de modifier un peu la table principale. Nous allons aussi utiliser le dispositif SLA (Service Level Agreements) dont le principe est de de suivre l'état de services Internet et qui va au delà du simple suivi d'interfaces (tracking) dont nous nous sommes servis jusque là.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ADSL ==&lt;br /&gt;
&lt;br /&gt;
La configuration ADSL est strictement semblable à celle déjà utilisée avec les routeurs précédents.&lt;br /&gt;
&lt;br /&gt;
 interface ATM0/0/0&lt;br /&gt;
  no ip address&lt;br /&gt;
  no atm ilmi-keepalive&lt;br /&gt;
  dsl enable-training-log &lt;br /&gt;
  pvc 8/35 &lt;br /&gt;
   pppoe-client dial-pool-number 1&lt;br /&gt;
  !&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
 interface Dialer1&lt;br /&gt;
  mtu 1492&lt;br /&gt;
  ip address negotiated&lt;br /&gt;
  ip nat outside&lt;br /&gt;
  ip virtual-reassembly in&lt;br /&gt;
  encapsulation ppp&lt;br /&gt;
  dialer pool 1&lt;br /&gt;
  dialer idle-timeout 0&lt;br /&gt;
  dialer persistent&lt;br /&gt;
  ppp chap hostname IDENTIFIANT                                                  &lt;br /&gt;
  ppp chap password 0 MOTDEPASSE                                                  &lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Une tentative de récupérer une adresse IPv6 au niveau des interfaces &amp;lt;tt&amp;gt;Dialer&amp;lt;/tt&amp;gt; n'a pas réussi. Il faut dire que je ne suis pas convaincu que le fournisseur en propose une.&lt;br /&gt;
&lt;br /&gt;
== Configuration SLA ==&lt;br /&gt;
&lt;br /&gt;
La configuration de vérification de l'état des connexions :&lt;br /&gt;
&lt;br /&gt;
 ip sla 20&lt;br /&gt;
  icmp-echo IPV4_ISP_ADSL1&lt;br /&gt;
 ip sla schedule 20 life forever start-time now&lt;br /&gt;
 ip sla 21&lt;br /&gt;
  icmp-echo IPV4_ISP_ADSL2&lt;br /&gt;
 ip sla schedule 21 life forever start-time now&lt;br /&gt;
 track 20 ip sla 20 reachability&lt;br /&gt;
 track 21 ip sla 21 reachability&lt;br /&gt;
&lt;br /&gt;
Dans notre configuration le dispositif SLA est clairement sous-exploité.&lt;br /&gt;
&lt;br /&gt;
== Configuration PBR == &lt;br /&gt;
&lt;br /&gt;
Sur l'interface du réseau local il est fait référence à la &amp;lt;tt&amp;gt;route-map&amp;lt;/tt&amp;gt; qui implante notre politique de routage (PBR) :&lt;br /&gt;
&lt;br /&gt;
 interface INTERFACE&lt;br /&gt;
  ...&lt;br /&gt;
  ip nat inside&lt;br /&gt;
  ip virtual-reassembly in max-reassemblies 128&lt;br /&gt;
  ip tcp adjust-mss 1452&lt;br /&gt;
  ip policy route-map to_adsl&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
La &amp;lt;tt&amp;gt;route-map&amp;lt;/tt&amp;gt; en question :&lt;br /&gt;
&lt;br /&gt;
 route-map to_adsl permit 10&lt;br /&gt;
  match ip address 20&lt;br /&gt;
  set ip next-hop verify-availability IPV4_ISP_ADSL1 1 track 20&lt;br /&gt;
  set ip next-hop verify-availability IPV4_ISP_ADSL1 2 track 21&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Et vous constatez le problème : l'obligation d'un numéro de séquence pour le &amp;lt;tt&amp;gt;next-hop&amp;lt;/tt&amp;gt; (juste après l'adresse IPv4 du saut). Du coup les deux routeurs ne sont pas au même niveau (il est interdit d'utiliser deux numéros identique) et donc pas d'équilibrage de charge juste un lien de secours.&lt;br /&gt;
&lt;br /&gt;
== La mascarade ==&lt;br /&gt;
&lt;br /&gt;
Aucun changement dans la définition de la mascarade :&lt;br /&gt;
&lt;br /&gt;
 access-list 20 permit 192.168.0.0 0.0.0.255  &lt;br /&gt;
 route-map ADSL2 permit 10&lt;br /&gt;
  match ip address 20&lt;br /&gt;
  match interface Dialer2&lt;br /&gt;
 !&lt;br /&gt;
 route-map ADSL1 permit 10&lt;br /&gt;
  match ip address 20&lt;br /&gt;
  match interface Dialer1&lt;br /&gt;
 !&lt;br /&gt;
 ip nat inside source route-map ADSL1 interface Dialer1 overload&lt;br /&gt;
 ip nat inside source route-map ADSL2 interface Dialer2 overload&lt;br /&gt;
&lt;br /&gt;
== Diagnostics == &lt;br /&gt;
&lt;br /&gt;
Cette sous-section présente quelques commandes permettant un rapide diagnostic des liaisons ADSL.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut vérifier si le circuit ATM de la connexion ADSL a pu être établi. Ici ce n'est pas le cas :&lt;br /&gt;
 #show interface ATM0/0 | include VCs&lt;br /&gt;
   23 maximum active VCs, 256 VCs per VP, 0 current VCCs&lt;br /&gt;
alors que là tout va bien :&lt;br /&gt;
 #show interface ATM0/0/0 | include VCs &lt;br /&gt;
   23 maximum active VCs, 256 VCs per VP, 1 current VCCs&lt;br /&gt;
Si vous avez un problème à ce niveau c'est que la connexion physique vers votre ISP est hors-service. Voyez avec eux.&lt;br /&gt;
&lt;br /&gt;
Il est ensuite possible d'apprécier la qualité de la ligne :&lt;br /&gt;
 #show dsl interface atm 0/0/0 | include Attenuation:&lt;br /&gt;
 Attenuation:	 38.5 dB			 22.0 dB&lt;br /&gt;
L'atténuation est de 40db sur l'autre ligne. Ces valeurs sont cohérentes avec celles mesurées par les techniciens de l'opérateur. Ils expliquent aussi les débits obtenus dans la sous-section suivante.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez regarder si l'identification PPPoE se passe bien :&lt;br /&gt;
 #show pppoe session&lt;br /&gt;
 Uniq ID  PPPoE  RemMAC          Port                    VT  VA         State&lt;br /&gt;
            SID  LocMAC                                      VA-st      Type&lt;br /&gt;
     N/A  18215  xxxx.yyyy.zzzz  ATM0/0/0                Di1 Vi1        UP      &lt;br /&gt;
                 xxxx.yyyy.zzzz  VC:  8/35                   UP              &lt;br /&gt;
     N/A   2968  xxxx.yyyy.zzzz  ATM0/1/0                Di2 Vi2        UP      &lt;br /&gt;
                 xxxx.yyyy.zzzz  VC:  8/35                   UP&lt;br /&gt;
Ici un miracle : les deux lignes sont actives.&lt;br /&gt;
&lt;br /&gt;
Pour aller plus loin le suivi des accès est-il correct ?&lt;br /&gt;
 #sh ip sla summary &lt;br /&gt;
 IPSLAs Latest Operation Summary&lt;br /&gt;
 Codes: * active, ^ inactive, ~ pending&lt;br /&gt;
 ID           Type        Destination       Stats       Return      Last&lt;br /&gt;
                                            (ms)        Code        Run &lt;br /&gt;
 -----------------------------------------------------------------------&lt;br /&gt;
 *20          icmp-echo   IPV4_ISP_ADSL1     TT=16      OK          0 seconds ago&lt;br /&gt;
 *21          icmp-echo   IPV4_ISP_ADSL2     TT=20      OK          55 seconds ago&lt;br /&gt;
Là encore tout se passe bien les deux lignes ADSL sont opérationnelles, du moins les adresses IPv4 des ISP répondent bien au ping.&lt;br /&gt;
&lt;br /&gt;
Enfin vous pouvez vérifier si la mascarade est opérationnelle :&lt;br /&gt;
 #sh ip nat statistics &lt;br /&gt;
 Total active translations: 420 (1 static, 419 dynamic; 411 extended)&lt;br /&gt;
 Peak translations: 11285, occurred 4w5d ago&lt;br /&gt;
 ...&lt;br /&gt;
 Dynamic mappings:&lt;br /&gt;
 -- Inside Source&lt;br /&gt;
 [Id: 2] route-map ADSL1 interface Dialer1 refcount 1&lt;br /&gt;
 [Id: 3] route-map ADSL2 interface Dialer2 refcount 0&lt;br /&gt;
Le &amp;lt;tt&amp;gt;refcount 1&amp;lt;/tt&amp;gt; indique que la première ligne ADSL est utilisée même si elle n'est pas surchargée. Par contre le &amp;lt;tt&amp;gt;refcount 0&amp;lt;/tt&amp;gt; montre le défaut d'équilibrage de charge.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Les cartes ADSL2+ permettent d'obtenir de meilleurs débits. Avec quelques rapides mesures en utilisant &amp;lt;tt&amp;gt;ssh&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; les résultats suivants sont obtenus :&lt;br /&gt;
* ADSL &amp;quot;pro&amp;quot; : 1,1Mo/s descendant et 100Ko/s montant&lt;br /&gt;
* ADSL B.I.O. : 1,3Mo/s descendant et 130Ko/s montant&lt;br /&gt;
&lt;br /&gt;
A noter que les débits &amp;quot;certifiés&amp;quot; pour la liaison B.I.O. ne sont absolument pas tenus. La société orange dirait probablement que les routeurs Cisco ne sont pas assez performants. &lt;br /&gt;
&lt;br /&gt;
Le point négatif est tout de même l'impossibilité, à notre connaissance, d'arriver à effectuer de l'équilibrage de charge avec le dispositif PBR.&lt;br /&gt;
&lt;br /&gt;
= Améliorations =&lt;br /&gt;
&lt;br /&gt;
Plusieurs améliorations de notre configuration sont possibles :&lt;br /&gt;
* Mettre en place un routeur dédié : l'utilisation de PBR avec la limitation rencontrée sur l'équilibrage de charge peut être contourner en dédiant un routeur aux seules lignes ADSL. Dans ce cas PBR n'est plus nécessaire et le routage peut se faire comme pour le 2621 avec deux routes par défaut dans la table de routage principale. &lt;br /&gt;
* Passer sur une routeur plus récent : nous avons acheté un routeur Cisco 9300 avec un IOS plus récent permettant SLA, PBR et mascarade (cette dernière étant impossible sur un C9200), la limitation sur l'équlibrage de charge PBR de l'IOS 12.4 est peut-être levée ? Au pire le C9300 va remplacer le 2901 qui sera dédié aux lignes ADSL.&lt;br /&gt;
* Passer à une technologie de connexion plus récente : un travail de fourmies a été mené par la plateforme maths/info pour recenser les lignes de communication utilisées par Polytech'Lille, une bonne partie étant obsolètes il a été possible de négocier une mutation des lignes ADSL, Numéris, dédiées et SDSL pour se concentrer sur un accès fibre 200Mb/s symétrique.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1&amp;diff=85498</id>
		<title>IMA3/IMA4 2019/2021 P1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1&amp;diff=85498"/>
				<updated>2021-01-08T00:31:02Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Fichiers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
L'idée était d'avoir un serveur de temps pour synchroniser l'heure sur les stations de travail sans avoir à se reposer sur un serveur NTP d'Internet.&lt;br /&gt;
&lt;br /&gt;
Actuellement des systèmes embarqués sont vendus sur divers sites à bas prix. Ce matériel est désigné sous une appellation à rallonge : &amp;quot;Network Time Server NTP Time Server for GPS Beidou GLONASS Galileo QZSS Desktop Version&amp;quot;. Son manuel le désigne sous la référence [[Media:FC-NTP-100.pdf|FC-NTP-100]].&lt;br /&gt;
&lt;br /&gt;
A priori ce matériel arrive prêt à l'emploi mais sa configuration IP nécessite l'utilisation d'un logiciel windows donc graphique. C'est assez peu pratique quand vous le connectez sur un VLAN de serveurs sur lequel vous n'avez aucune station de travail et aucun serveur sous windows. La configuration du système embarqué s'est donc transformé en un exercice d'ingénierie inverse et de codage réseau.&lt;br /&gt;
&lt;br /&gt;
= Matériel =&lt;br /&gt;
&lt;br /&gt;
Le système embarqué est livré avec un adapteur secteur non française, de plus il est assez compliqué d'accumuler les adaptateurs dans une baie. Un boitier d'alimentation 12V a été acquis pour l'alimentation. Ce type de boitier est plutôt destiné à alimenter des caméras mais convient très bien pour le système embarqué NTP. Le boitier d'alimentation se compose d'un transformateur utilisable au travers de fusibles et de borniers. Pour le modèle acheté 4 borniers sont disponibles et se partagent les 5A de l'alimentation.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
[[File:PLIL-FC-NTP-100.jpg|thumbs|200px|left]]&lt;br /&gt;
&lt;br /&gt;
L'installation physique est assez triviale. Pour éviter de poser des éléments sur des tablettes dans la baie, l'alimentation et le système embarqué sont vissés sur le mur. Le cordon de l'alimentation a été récupéré et connecté aux borniers. Le système embarqué est relié à un commutateur via une jarretière RJ45. La LED du port du commutateur s'allume prouvant la présence d'une porteuse Ethernet. Par contre la commande ci-dessous montre qu'aucun paquet Ethernet n'est envoyé par le périphérique.&lt;br /&gt;
 #show mac address-table interface gigabitEthernet 0/44&lt;br /&gt;
           Mac Address Table&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Vlan    Mac Address       Type        Ports&lt;br /&gt;
 ----    -----------       --------    -----&lt;br /&gt;
L'antenne est positionnée près d'une fenêtre. La longueur du câble est largement suffisante pour ce faire.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fc-ntp-100-p1.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
C'est au niveau de la configuration que cela se corse.&lt;br /&gt;
&lt;br /&gt;
Le système embarqué sort d'usine avec comme adresse IPv4 &amp;lt;tt&amp;gt;192.168.0.100&amp;lt;/tt&amp;gt;. Pour changer cette adresse, une [[:File:NTPConfig_EN.zip|application]] windows est fournie.&lt;br /&gt;
&lt;br /&gt;
Pas de port série sur la version bon marché du système embarqué NTP (FC-NTP-100). Une documentation fait état d'une autre version du système embarqué avec une connexion série bizarrement accessible sur une broche DB15.&lt;br /&gt;
&lt;br /&gt;
Comme décrit dans l'introduction le but est d'écrire une application Linux texte avec les mêmes fonctionnalités que l'application graphique. Pour cela le principal est d'arriver à trouver le protocole utilisé par le périphérique.&lt;br /&gt;
&lt;br /&gt;
= Ingénierie inverse =&lt;br /&gt;
&lt;br /&gt;
C'est aussi simple que de lancer l'application windows sous &amp;lt;tt&amp;gt;wine&amp;lt;/tt&amp;gt;, de lancer un &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; dans une console et de cliquer sur tous les boutons de l'application graphique. &lt;br /&gt;
&lt;br /&gt;
Il est possible de compliquer un peu et de tenter une partie de l'ingénierie inverse sans le système embarqué en ligne. Dans ce cas ajouter une entrée dans la table ARP :&lt;br /&gt;
 # arp -s 192.168.0.100 00:11:22:33:44:55&lt;br /&gt;
Après ça si vous appuyez sur le bouton &amp;lt;tt&amp;gt;NET Connect&amp;lt;/tt&amp;gt; puis sur le bouton &amp;lt;tt&amp;gt;Query&amp;lt;/tt&amp;gt;, la console vous indiquera :&lt;br /&gt;
 # tcpdump -vvv -n -Xe host 192.168.0.100&lt;br /&gt;
 19:46:37.410925 24:77:03:24:8e:30 &amp;gt; 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 49: (tos 0x0, ttl 64, id 26566, offset 0, flags [none], proto UDP (17), length 35)&lt;br /&gt;
     192.168.0.101.58025 &amp;gt; 192.168.0.100.23: [udp sum ok] UDP, length 7 &lt;br /&gt;
        0x0000:  4500 0023 67c6 0000 4011 90ea c0a8 0065  E..#g...@......e&lt;br /&gt;
        0x0010:  c0a8 0064 e2a9 0017 000f 12a7 2410 2a31  ...d........$.*1&lt;br /&gt;
        0x0020:  300d 0a&lt;br /&gt;
&lt;br /&gt;
Nous savons donc que la communication avec le périphérique se fait en UDP sur le port 23. Vérifions en changeant le filtre de &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; et en appuyant sur le bouton &amp;lt;tt&amp;gt;Search&amp;lt;/tt&amp;gt; :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 20:55:37.788646 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 49: (tos 0x0, ttl 64, id 26376, offset 0, flags [none], proto UDP (17), length 35)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 7&lt;br /&gt;
        0x0000:  4500 0023 6708 0000 4011 52b5 c0a8 0065  E..#g...@.R....e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 000f 19fd 241b 2a31  .....U......$.*1&lt;br /&gt;
        0x0020:  420d 0a&lt;br /&gt;
Bien vu, la recherche du périphérique, si jamais son adresse IPv4 est inconnue, se fait avec une simple diffusion UDP encore sur le port 23.&lt;br /&gt;
&lt;br /&gt;
Quelques essais supplémentaires en renseignant divers champs dans l'application graphique puis en appuyant sur les boutons &amp;lt;tt&amp;gt;Set&amp;lt;/tt&amp;gt; correspondants (pour le type d'adresse IP, pour l'adresse IP et pour le masque réseau) :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 21:44:26.529704 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 50: (tos 0x0, ttl 64, id 6680, offset 0, flags [none], proto UDP (17), length 36)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 8&lt;br /&gt;
        0x0000:  4500 0024 1a18 0000 4011 9fa4 c0a8 0065  E..$....@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0010 52f0 2400 002a  .....U....R.$..*&lt;br /&gt;
        0x0020:  3030 0d0a                                00..&lt;br /&gt;
 21:44:40.843945 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 53: (tos 0x0, ttl 64, id 7396, offset 0, flags [none], proto UDP (17), length 39)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 11&lt;br /&gt;
        0x0000:  4500 0027 1ce4 0000 4011 9cd5 c0a8 0065  E..'....@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0013 5703 2401 c0a8  .....U....W.$...&lt;br /&gt;
        0x0020:  0064 2a30 440d 0a                        .d*0D..&lt;br /&gt;
 21:44:49.432484 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 53: (tos 0x0, ttl 64, id 8621, offset 0, flags [none], proto UDP (17), length 39)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 11&lt;br /&gt;
        0x0000:  4500 0027 21ad 0000 4011 980c c0a8 0065  E..'!...@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0013 181e 2402 ffff  .....U......$...&lt;br /&gt;
        0x0020:  fff0 2a30 440d 0a&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir cerner le protocole il faut obtenir une réponse du périphérique. Là pas d'autre solution que de connecter le système embarqué NTP sur le même réseau que la station de travail.&lt;br /&gt;
Essayons de modifier le type de l'adresse IP, voila ce qui arrive sur la sortie standard de &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 22:21:39.072053 00:16:3e:aa:10:56 &amp;gt; d8:b0:4c:ff:01:76, ethertype IPv4 (0x0800), length 50: (tos 0x0, ttl 64, id 20379, offset 0, flags [DF], proto UDP (17), length 36)&lt;br /&gt;
     172.26.189.7.42350 &amp;gt; 172.26.191.100.23: [bad udp cksum 0xd4c2 -&amp;gt; 0x2443!] UDP, length 8&lt;br /&gt;
        0x0000:  4500 0024 4f9b 4000 4011 168d ac1a bd07  E..$O.@.@.......&lt;br /&gt;
        0x0010:  ac1a bf64 a56e 0017 0010 d4c2 2400 002a  ...d.n......$..*&lt;br /&gt;
        0x0020:  3030 0d0a                                00..&lt;br /&gt;
 22:21:39.097510 d8:b0:4c:ff:01:76 &amp;gt; 00:16:3e:aa:10:56, ethertype IPv4 (0x0800), length 47: (tos 0x0, ttl 255, id 42738, offset 0, flags [none], proto UDP (17), length 33)&lt;br /&gt;
     172.26.191.100.23 &amp;gt; 172.26.189.7.42350: [udp sum ok] UDP, length 5&lt;br /&gt;
        0x0000:  4500 0021 a6f2 0000 ff11 4038 ac1a bf64  E..!......@8...d&lt;br /&gt;
        0x0010:  ac1a bd07 0017 a56e 000d 57a0 2400 000d  .......n..W.$...&lt;br /&gt;
        0x0020:  0a&lt;br /&gt;
&lt;br /&gt;
= Le protocole applicatif =&lt;br /&gt;
&lt;br /&gt;
Regardons d'un peu plus près les données UDP envoyées par l'application. Déjà toutes ces données commencent par la valeur 0x25 soit le caractère &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;. L'octet suivant semble correspondre au type de données envoyées (0x00 pour le type d'adresse, 0x01 pour l'adresse IPv4, 0x02 pour le masque réseau, etc). Suivent les octets de données (1 octet pour le type, 4 octets pour l'adresse IPv4 et le masque réseau, etc). Suit un octet de séparation 0x2a soit le caractère &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;. Les deux derniers octets semble bien être un saut de ligne à la mode windows soit 0x0d et 0x0a (CR et LF). Restent les deux octets entre le caractère de séparation &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;. Sur les différents exemples ces deux octets semblent devoir être lus en ASCII et semblent être la représentation en hexadécimal d'un octet.&lt;br /&gt;
&lt;br /&gt;
Après quelques essais et erreurs cet octet se révèle être une somme de contrôle basique sur les octets entre les caractères &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; non inclus. La somme est calculée par le simple opérateur ou exclusif bit à bit. Les différents essais ont été réalisés sur l'envoi de l'adresse IPv4 en commençant par mettre tous les bits à zéro (résultat &amp;lt;tt&amp;gt;00&amp;lt;/tt&amp;gt;) puis en modifiant bit à bit le &amp;lt;tt&amp;gt;0.0.0.0&amp;lt;/tt&amp;gt; initial.&lt;br /&gt;
&lt;br /&gt;
Pour les demandes d'information le format semble être le même (voir le premier paquet des tests) mais sans octets de données et avec un code correspondant au type de l'information auquel on applique un ou bit à bit avec 0x10.&lt;br /&gt;
&lt;br /&gt;
Donc pour les requêtes au périphérique le format est synthétisé dans les tableaux ci-dessous :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;10&amp;quot;|Modification de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | n octet(s)&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| Données&lt;br /&gt;
| '*'&lt;br /&gt;
| Somme de contrôle&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| D1 ... Dn&lt;br /&gt;
| 0x2a&lt;br /&gt;
| T ^ D1 ^ ... ^ Dn&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Lecture de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| '*'&lt;br /&gt;
| Somme de contrôle&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T &amp;amp;#124; 0x10&lt;br /&gt;
| 0x2a&lt;br /&gt;
| T &amp;amp;#124; 0x10&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notons que ce protocole est loin d'être optimal :&lt;br /&gt;
* les caractères de séparation &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; sont loin d'être indispensables ;&lt;br /&gt;
* le saut de ligne final à la microsoft est totalement inutile ;&lt;br /&gt;
* l'envoi de la somme de contrôle en ASCII est une aberration ;&lt;br /&gt;
* la somme de contrôle pour la récupération d'information ne porte que sur un octet ...&lt;br /&gt;
&lt;br /&gt;
Regardons les réponses du périphérique aux requêtes de l'application. En réponse à une modification le type de la configuration à modifier est retournée puis un octet à zéro. Il est possible que si un nombre non correct d'octets de données est envoyé le zéro se transforme en autre chose mais nous ne comptons pas faire d'erreur. En réponse à une lecture le type est retourné suivi des données mais cette fois pas de somme de contrôle. Probablement parce que s'il est indispensable de vérifier la configuration à appliquer, afficher une configuration erronée n'est pas trop grave.&lt;br /&gt;
&lt;br /&gt;
La synthèse :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Réponse à une modification&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| Code réponse&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| R&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;8&amp;quot;|Réponse à une lecture&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | n octet(s)&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| Données&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| D1 ... Dn&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les types de configuration identifiées sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code !! Type de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Type d'IPv4 (statique ou dynamique)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Adresse IPv4&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Masque réseau&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Passerelle&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adresse Ethernet&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Mode NTP (serveur ou diffusion)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a || Délai entre diffusion NTP&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b || Recherche de périphérique&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le dernier code ne correspond pas à une configuration mais sert pour la recherche de périphérique. Il est inclus dans le tableau pour avoir une liste complète des codes.&lt;br /&gt;
&lt;br /&gt;
A noter que certains codes non listés permettent d'obtenir une réponse du périphérique mais cette réponse contient des données à 0xff que nous n'avons pas réussi à identifier :&lt;br /&gt;
* le code 0x05 retourne 330 octets à la valeur 0xff ;&lt;br /&gt;
* le code 0x06 retourne 1 octet à la valeur 0xff ;&lt;br /&gt;
* les codes 0x08 et 0x09 retournent 4 octets à la valeur 0xff ;&lt;br /&gt;
* les codes 0x0c, 0x0d, 0x0e et 0x0f ne provoquent aucune réaction et ne doivent pas être implantés.&lt;br /&gt;
&lt;br /&gt;
= Programmation =&lt;br /&gt;
&lt;br /&gt;
Une fois le protocole applicatif trouvé, l'écriture du programme est une simple formalité. Le code est donné en fin de page.&lt;br /&gt;
&lt;br /&gt;
Quatre fonctions implantent très classiquement l'aspect programmation réseau UDP :&lt;br /&gt;
* &amp;lt;tt&amp;gt;initialisationSocketUDP&amp;lt;/tt&amp;gt; initialise la socket UDP ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;libereSocketUDP&amp;lt;/tt&amp;gt; libère la réservation mémoire effectuée par la fonction précédente ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;boucleServeurUDP&amp;lt;/tt&amp;gt; gère les paquets UDP envoyé par le périphérique ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;messageUDP&amp;lt;/tt&amp;gt; permet d'envoyer des paquets UDP.&lt;br /&gt;
&lt;br /&gt;
Les deux fonctions suivantes permettent la manipulation des données UDP suivant le protocole découvert dans la section précédente :&lt;br /&gt;
* &amp;lt;tt&amp;gt;fabricationMessage&amp;lt;/tt&amp;gt; assemble un message UDP ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;lectureMessage&amp;lt;/tt&amp;gt; scanne un message UDP.&lt;br /&gt;
&lt;br /&gt;
Le programme principal tente de rendre le programme le plus ergonomique possible :&lt;br /&gt;
* l'utilisation d'une option inconnue permet d'afficher une rapide explication des options possibles ;&lt;br /&gt;
* si l'adresse IPv4 du périphérique n'est pas donnée en premier argument une recherche des périphériques est effectué par diffusion UDP, si une réponse est reçue l'adresse IPv4 inclue est utilisée comme adresse du périphérique ;&lt;br /&gt;
* si aucune option n'est spécifiée pour modifier une configuration, toutes les configurations connues sont demandées au périphérique et affichées.&lt;br /&gt;
&lt;br /&gt;
Ainsi si le programme est lancé sans aucun paramètre, une découverte de périphérique est lancée et ses configurations sont affichées.&lt;br /&gt;
&lt;br /&gt;
= Bonus =&lt;br /&gt;
&lt;br /&gt;
[[File:plil-gps.png|thumbs|300px|right|xgps]]&lt;br /&gt;
&lt;br /&gt;
Pour tester le bon fonctionnement du serveur NTP, il est possible d'installer le paquetage &amp;lt;tt&amp;gt;gpsd&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut faire pointer vers votre serveur NTP dans le fichier &amp;lt;tt&amp;gt;/etc/default/gpsd&amp;lt;/tt&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 # grep DEVICES /etc/default/gpsd &lt;br /&gt;
 ...&lt;br /&gt;
 DEVICES=&amp;quot;tcp://192.168.0.1000:4001&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Une fois le service relancé, utiliser le programme &amp;lt;tt&amp;gt;xgps&amp;lt;/tt&amp;gt; du paquetage &amp;lt;tt&amp;gt;gpsd-clients&amp;lt;/tt&amp;gt; pour afficher la constellation satellite.&lt;br /&gt;
&lt;br /&gt;
A la droite de cette page vous voyez le résultat dans notre cas. Du coup vous avez la position précise de Polytech'Lille mais bon c'est moyennent secret.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ressources =&lt;br /&gt;
* Page consacrée au FC-NTP-100 : [https://fc-ntp-100.toimii.fi/]&lt;br /&gt;
* Programme : [[Media:fcntp100.zip]]&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1&amp;diff=85497</id>
		<title>IMA3/IMA4 2019/2021 P1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1&amp;diff=85497"/>
				<updated>2021-01-08T00:28:25Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
L'idée était d'avoir un serveur de temps pour synchroniser l'heure sur les stations de travail sans avoir à se reposer sur un serveur NTP d'Internet.&lt;br /&gt;
&lt;br /&gt;
Actuellement des systèmes embarqués sont vendus sur divers sites à bas prix. Ce matériel est désigné sous une appellation à rallonge : &amp;quot;Network Time Server NTP Time Server for GPS Beidou GLONASS Galileo QZSS Desktop Version&amp;quot;. Son manuel le désigne sous la référence [[Media:FC-NTP-100.pdf|FC-NTP-100]].&lt;br /&gt;
&lt;br /&gt;
A priori ce matériel arrive prêt à l'emploi mais sa configuration IP nécessite l'utilisation d'un logiciel windows donc graphique. C'est assez peu pratique quand vous le connectez sur un VLAN de serveurs sur lequel vous n'avez aucune station de travail et aucun serveur sous windows. La configuration du système embarqué s'est donc transformé en un exercice d'ingénierie inverse et de codage réseau.&lt;br /&gt;
&lt;br /&gt;
= Matériel =&lt;br /&gt;
&lt;br /&gt;
Le système embarqué est livré avec un adapteur secteur non française, de plus il est assez compliqué d'accumuler les adaptateurs dans une baie. Un boitier d'alimentation 12V a été acquis pour l'alimentation. Ce type de boitier est plutôt destiné à alimenter des caméras mais convient très bien pour le système embarqué NTP. Le boitier d'alimentation se compose d'un transformateur utilisable au travers de fusibles et de borniers. Pour le modèle acheté 4 borniers sont disponibles et se partagent les 5A de l'alimentation.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
[[File:PLIL-FC-NTP-100.jpg|thumbs|200px|left]]&lt;br /&gt;
&lt;br /&gt;
L'installation physique est assez triviale. Pour éviter de poser des éléments sur des tablettes dans la baie, l'alimentation et le système embarqué sont vissés sur le mur. Le cordon de l'alimentation a été récupéré et connecté aux borniers. Le système embarqué est relié à un commutateur via une jarretière RJ45. La LED du port du commutateur s'allume prouvant la présence d'une porteuse Ethernet. Par contre la commande ci-dessous montre qu'aucun paquet Ethernet n'est envoyé par le périphérique.&lt;br /&gt;
 #show mac address-table interface gigabitEthernet 0/44&lt;br /&gt;
           Mac Address Table&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Vlan    Mac Address       Type        Ports&lt;br /&gt;
 ----    -----------       --------    -----&lt;br /&gt;
L'antenne est positionnée près d'une fenêtre. La longueur du câble est largement suffisante pour ce faire.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fc-ntp-100-p1.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
C'est au niveau de la configuration que cela se corse.&lt;br /&gt;
&lt;br /&gt;
Le système embarqué sort d'usine avec comme adresse IPv4 &amp;lt;tt&amp;gt;192.168.0.100&amp;lt;/tt&amp;gt;. Pour changer cette adresse, une [[:File:NTPConfig_EN.zip|application]] windows est fournie.&lt;br /&gt;
&lt;br /&gt;
Pas de port série sur la version bon marché du système embarqué NTP (FC-NTP-100). Une documentation fait état d'une autre version du système embarqué avec une connexion série bizarrement accessible sur une broche DB15.&lt;br /&gt;
&lt;br /&gt;
Comme décrit dans l'introduction le but est d'écrire une application Linux texte avec les mêmes fonctionnalités que l'application graphique. Pour cela le principal est d'arriver à trouver le protocole utilisé par le périphérique.&lt;br /&gt;
&lt;br /&gt;
= Ingénierie inverse =&lt;br /&gt;
&lt;br /&gt;
C'est aussi simple que de lancer l'application windows sous &amp;lt;tt&amp;gt;wine&amp;lt;/tt&amp;gt;, de lancer un &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; dans une console et de cliquer sur tous les boutons de l'application graphique. &lt;br /&gt;
&lt;br /&gt;
Il est possible de compliquer un peu et de tenter une partie de l'ingénierie inverse sans le système embarqué en ligne. Dans ce cas ajouter une entrée dans la table ARP :&lt;br /&gt;
 # arp -s 192.168.0.100 00:11:22:33:44:55&lt;br /&gt;
Après ça si vous appuyez sur le bouton &amp;lt;tt&amp;gt;NET Connect&amp;lt;/tt&amp;gt; puis sur le bouton &amp;lt;tt&amp;gt;Query&amp;lt;/tt&amp;gt;, la console vous indiquera :&lt;br /&gt;
 # tcpdump -vvv -n -Xe host 192.168.0.100&lt;br /&gt;
 19:46:37.410925 24:77:03:24:8e:30 &amp;gt; 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 49: (tos 0x0, ttl 64, id 26566, offset 0, flags [none], proto UDP (17), length 35)&lt;br /&gt;
     192.168.0.101.58025 &amp;gt; 192.168.0.100.23: [udp sum ok] UDP, length 7 &lt;br /&gt;
        0x0000:  4500 0023 67c6 0000 4011 90ea c0a8 0065  E..#g...@......e&lt;br /&gt;
        0x0010:  c0a8 0064 e2a9 0017 000f 12a7 2410 2a31  ...d........$.*1&lt;br /&gt;
        0x0020:  300d 0a&lt;br /&gt;
&lt;br /&gt;
Nous savons donc que la communication avec le périphérique se fait en UDP sur le port 23. Vérifions en changeant le filtre de &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; et en appuyant sur le bouton &amp;lt;tt&amp;gt;Search&amp;lt;/tt&amp;gt; :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 20:55:37.788646 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 49: (tos 0x0, ttl 64, id 26376, offset 0, flags [none], proto UDP (17), length 35)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 7&lt;br /&gt;
        0x0000:  4500 0023 6708 0000 4011 52b5 c0a8 0065  E..#g...@.R....e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 000f 19fd 241b 2a31  .....U......$.*1&lt;br /&gt;
        0x0020:  420d 0a&lt;br /&gt;
Bien vu, la recherche du périphérique, si jamais son adresse IPv4 est inconnue, se fait avec une simple diffusion UDP encore sur le port 23.&lt;br /&gt;
&lt;br /&gt;
Quelques essais supplémentaires en renseignant divers champs dans l'application graphique puis en appuyant sur les boutons &amp;lt;tt&amp;gt;Set&amp;lt;/tt&amp;gt; correspondants (pour le type d'adresse IP, pour l'adresse IP et pour le masque réseau) :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 21:44:26.529704 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 50: (tos 0x0, ttl 64, id 6680, offset 0, flags [none], proto UDP (17), length 36)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 8&lt;br /&gt;
        0x0000:  4500 0024 1a18 0000 4011 9fa4 c0a8 0065  E..$....@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0010 52f0 2400 002a  .....U....R.$..*&lt;br /&gt;
        0x0020:  3030 0d0a                                00..&lt;br /&gt;
 21:44:40.843945 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 53: (tos 0x0, ttl 64, id 7396, offset 0, flags [none], proto UDP (17), length 39)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 11&lt;br /&gt;
        0x0000:  4500 0027 1ce4 0000 4011 9cd5 c0a8 0065  E..'....@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0013 5703 2401 c0a8  .....U....W.$...&lt;br /&gt;
        0x0020:  0064 2a30 440d 0a                        .d*0D..&lt;br /&gt;
 21:44:49.432484 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 53: (tos 0x0, ttl 64, id 8621, offset 0, flags [none], proto UDP (17), length 39)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 11&lt;br /&gt;
        0x0000:  4500 0027 21ad 0000 4011 980c c0a8 0065  E..'!...@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0013 181e 2402 ffff  .....U......$...&lt;br /&gt;
        0x0020:  fff0 2a30 440d 0a&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir cerner le protocole il faut obtenir une réponse du périphérique. Là pas d'autre solution que de connecter le système embarqué NTP sur le même réseau que la station de travail.&lt;br /&gt;
Essayons de modifier le type de l'adresse IP, voila ce qui arrive sur la sortie standard de &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 22:21:39.072053 00:16:3e:aa:10:56 &amp;gt; d8:b0:4c:ff:01:76, ethertype IPv4 (0x0800), length 50: (tos 0x0, ttl 64, id 20379, offset 0, flags [DF], proto UDP (17), length 36)&lt;br /&gt;
     172.26.189.7.42350 &amp;gt; 172.26.191.100.23: [bad udp cksum 0xd4c2 -&amp;gt; 0x2443!] UDP, length 8&lt;br /&gt;
        0x0000:  4500 0024 4f9b 4000 4011 168d ac1a bd07  E..$O.@.@.......&lt;br /&gt;
        0x0010:  ac1a bf64 a56e 0017 0010 d4c2 2400 002a  ...d.n......$..*&lt;br /&gt;
        0x0020:  3030 0d0a                                00..&lt;br /&gt;
 22:21:39.097510 d8:b0:4c:ff:01:76 &amp;gt; 00:16:3e:aa:10:56, ethertype IPv4 (0x0800), length 47: (tos 0x0, ttl 255, id 42738, offset 0, flags [none], proto UDP (17), length 33)&lt;br /&gt;
     172.26.191.100.23 &amp;gt; 172.26.189.7.42350: [udp sum ok] UDP, length 5&lt;br /&gt;
        0x0000:  4500 0021 a6f2 0000 ff11 4038 ac1a bf64  E..!......@8...d&lt;br /&gt;
        0x0010:  ac1a bd07 0017 a56e 000d 57a0 2400 000d  .......n..W.$...&lt;br /&gt;
        0x0020:  0a&lt;br /&gt;
&lt;br /&gt;
= Le protocole applicatif =&lt;br /&gt;
&lt;br /&gt;
Regardons d'un peu plus près les données UDP envoyées par l'application. Déjà toutes ces données commencent par la valeur 0x25 soit le caractère &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;. L'octet suivant semble correspondre au type de données envoyées (0x00 pour le type d'adresse, 0x01 pour l'adresse IPv4, 0x02 pour le masque réseau, etc). Suivent les octets de données (1 octet pour le type, 4 octets pour l'adresse IPv4 et le masque réseau, etc). Suit un octet de séparation 0x2a soit le caractère &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;. Les deux derniers octets semble bien être un saut de ligne à la mode windows soit 0x0d et 0x0a (CR et LF). Restent les deux octets entre le caractère de séparation &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;. Sur les différents exemples ces deux octets semblent devoir être lus en ASCII et semblent être la représentation en hexadécimal d'un octet.&lt;br /&gt;
&lt;br /&gt;
Après quelques essais et erreurs cet octet se révèle être une somme de contrôle basique sur les octets entre les caractères &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; non inclus. La somme est calculée par le simple opérateur ou exclusif bit à bit. Les différents essais ont été réalisés sur l'envoi de l'adresse IPv4 en commençant par mettre tous les bits à zéro (résultat &amp;lt;tt&amp;gt;00&amp;lt;/tt&amp;gt;) puis en modifiant bit à bit le &amp;lt;tt&amp;gt;0.0.0.0&amp;lt;/tt&amp;gt; initial.&lt;br /&gt;
&lt;br /&gt;
Pour les demandes d'information le format semble être le même (voir le premier paquet des tests) mais sans octets de données et avec un code correspondant au type de l'information auquel on applique un ou bit à bit avec 0x10.&lt;br /&gt;
&lt;br /&gt;
Donc pour les requêtes au périphérique le format est synthétisé dans les tableaux ci-dessous :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;10&amp;quot;|Modification de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | n octet(s)&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| Données&lt;br /&gt;
| '*'&lt;br /&gt;
| Somme de contrôle&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| D1 ... Dn&lt;br /&gt;
| 0x2a&lt;br /&gt;
| T ^ D1 ^ ... ^ Dn&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Lecture de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| '*'&lt;br /&gt;
| Somme de contrôle&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T &amp;amp;#124; 0x10&lt;br /&gt;
| 0x2a&lt;br /&gt;
| T &amp;amp;#124; 0x10&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notons que ce protocole est loin d'être optimal :&lt;br /&gt;
* les caractères de séparation &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; sont loin d'être indispensables ;&lt;br /&gt;
* le saut de ligne final à la microsoft est totalement inutile ;&lt;br /&gt;
* l'envoi de la somme de contrôle en ASCII est une aberration ;&lt;br /&gt;
* la somme de contrôle pour la récupération d'information ne porte que sur un octet ...&lt;br /&gt;
&lt;br /&gt;
Regardons les réponses du périphérique aux requêtes de l'application. En réponse à une modification le type de la configuration à modifier est retournée puis un octet à zéro. Il est possible que si un nombre non correct d'octets de données est envoyé le zéro se transforme en autre chose mais nous ne comptons pas faire d'erreur. En réponse à une lecture le type est retourné suivi des données mais cette fois pas de somme de contrôle. Probablement parce que s'il est indispensable de vérifier la configuration à appliquer, afficher une configuration erronée n'est pas trop grave.&lt;br /&gt;
&lt;br /&gt;
La synthèse :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Réponse à une modification&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| Code réponse&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| R&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;8&amp;quot;|Réponse à une lecture&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | n octet(s)&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| Données&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| D1 ... Dn&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les types de configuration identifiées sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code !! Type de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Type d'IPv4 (statique ou dynamique)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Adresse IPv4&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Masque réseau&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Passerelle&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adresse Ethernet&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Mode NTP (serveur ou diffusion)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a || Délai entre diffusion NTP&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b || Recherche de périphérique&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le dernier code ne correspond pas à une configuration mais sert pour la recherche de périphérique. Il est inclus dans le tableau pour avoir une liste complète des codes.&lt;br /&gt;
&lt;br /&gt;
A noter que certains codes non listés permettent d'obtenir une réponse du périphérique mais cette réponse contient des données à 0xff que nous n'avons pas réussi à identifier :&lt;br /&gt;
* le code 0x05 retourne 330 octets à la valeur 0xff ;&lt;br /&gt;
* le code 0x06 retourne 1 octet à la valeur 0xff ;&lt;br /&gt;
* les codes 0x08 et 0x09 retournent 4 octets à la valeur 0xff ;&lt;br /&gt;
* les codes 0x0c, 0x0d, 0x0e et 0x0f ne provoquent aucune réaction et ne doivent pas être implantés.&lt;br /&gt;
&lt;br /&gt;
= Programmation =&lt;br /&gt;
&lt;br /&gt;
Une fois le protocole applicatif trouvé, l'écriture du programme est une simple formalité. Le code est donné en fin de page.&lt;br /&gt;
&lt;br /&gt;
Quatre fonctions implantent très classiquement l'aspect programmation réseau UDP :&lt;br /&gt;
* &amp;lt;tt&amp;gt;initialisationSocketUDP&amp;lt;/tt&amp;gt; initialise la socket UDP ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;libereSocketUDP&amp;lt;/tt&amp;gt; libère la réservation mémoire effectuée par la fonction précédente ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;boucleServeurUDP&amp;lt;/tt&amp;gt; gère les paquets UDP envoyé par le périphérique ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;messageUDP&amp;lt;/tt&amp;gt; permet d'envoyer des paquets UDP.&lt;br /&gt;
&lt;br /&gt;
Les deux fonctions suivantes permettent la manipulation des données UDP suivant le protocole découvert dans la section précédente :&lt;br /&gt;
* &amp;lt;tt&amp;gt;fabricationMessage&amp;lt;/tt&amp;gt; assemble un message UDP ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;lectureMessage&amp;lt;/tt&amp;gt; scanne un message UDP.&lt;br /&gt;
&lt;br /&gt;
Le programme principal tente de rendre le programme le plus ergonomique possible :&lt;br /&gt;
* l'utilisation d'une option inconnue permet d'afficher une rapide explication des options possibles ;&lt;br /&gt;
* si l'adresse IPv4 du périphérique n'est pas donnée en premier argument une recherche des périphériques est effectué par diffusion UDP, si une réponse est reçue l'adresse IPv4 inclue est utilisée comme adresse du périphérique ;&lt;br /&gt;
* si aucune option n'est spécifiée pour modifier une configuration, toutes les configurations connues sont demandées au périphérique et affichées.&lt;br /&gt;
&lt;br /&gt;
Ainsi si le programme est lancé sans aucun paramètre, une découverte de périphérique est lancée et ses configurations sont affichées.&lt;br /&gt;
&lt;br /&gt;
= Bonus =&lt;br /&gt;
&lt;br /&gt;
[[File:plil-gps.png|thumbs|300px|right|xgps]]&lt;br /&gt;
&lt;br /&gt;
Pour tester le bon fonctionnement du serveur NTP, il est possible d'installer le paquetage &amp;lt;tt&amp;gt;gpsd&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut faire pointer vers votre serveur NTP dans le fichier &amp;lt;tt&amp;gt;/etc/default/gpsd&amp;lt;/tt&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 # grep DEVICES /etc/default/gpsd &lt;br /&gt;
 ...&lt;br /&gt;
 DEVICES=&amp;quot;tcp://192.168.0.1000:4001&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Une fois le service relancé, utiliser le programme &amp;lt;tt&amp;gt;xgps&amp;lt;/tt&amp;gt; du paquetage &amp;lt;tt&amp;gt;gpsd-clients&amp;lt;/tt&amp;gt; pour afficher la constellation satellite.&lt;br /&gt;
&lt;br /&gt;
A la droite de cette page vous voyez le résultat dans notre cas. Du coup vous avez la position précise de Polytech'Lille mais bon c'est moyennent secret.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Fichiers =&lt;br /&gt;
&lt;br /&gt;
[[Media:fcntp100.zip]]&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1&amp;diff=85496</id>
		<title>IMA3/IMA4 2019/2021 P1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2019/2021_P1&amp;diff=85496"/>
				<updated>2021-01-08T00:27:42Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : /* Bonus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
L'idée était d'avoir un serveur de temps pour synchroniser l'heure sur les stations de travail sans avoir à se reposer sur un serveur NTP d'Internet.&lt;br /&gt;
&lt;br /&gt;
Actuellement des systèmes embarqués sont vendus sur divers sites à bas prix. Ce matériel est désigné sous une appellation à rallonge : &amp;quot;Network Time Server NTP Time Server for GPS Beidou GLONASS Galileo QZSS Desktop Version&amp;quot;. Son manuel le désigne sous la référence [[Media:FC-NTP-100.pdf|FC-NTP-100]].&lt;br /&gt;
&lt;br /&gt;
A priori ce matériel arrive prêt à l'emploi mais sa configuration IP nécessite l'utilisation d'un logiciel windows donc graphique. C'est assez peu pratique quand vous le connectez sur un VLAN de serveurs sur lequel vous n'avez aucune station de travail et aucun serveur sous windows. La configuration du système embarqué s'est donc transformé en un exercice d'ingénierie inverse et de codage réseau.&lt;br /&gt;
&lt;br /&gt;
= Matériel =&lt;br /&gt;
&lt;br /&gt;
Le système embarqué est livré avec un adapteur secteur non française, de plus il est assez compliqué d'accumuler les adaptateurs dans une baie. Un boitier d'alimentation 12V a été acquis pour l'alimentation. Ce type de boitier est plutôt destiné à alimenter des caméras mais convient très bien pour le système embarqué NTP. Le boitier d'alimentation se compose d'un transformateur utilisable au travers de fusibles et de borniers. Pour le modèle acheté 4 borniers sont disponibles et se partagent les 5A de l'alimentation.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
[[File:PLIL-FC-NTP-100.jpg|thumbs|200px|left]]&lt;br /&gt;
&lt;br /&gt;
L'installation physique est assez triviale. Pour éviter de poser des éléments sur des tablettes dans la baie, l'alimentation et le système embarqué sont vissés sur le mur. Le cordon de l'alimentation a été récupéré et connecté aux borniers. Le système embarqué est relié à un commutateur via une jarretière RJ45. La LED du port du commutateur s'allume prouvant la présence d'une porteuse Ethernet. Par contre la commande ci-dessous montre qu'aucun paquet Ethernet n'est envoyé par le périphérique.&lt;br /&gt;
 #show mac address-table interface gigabitEthernet 0/44&lt;br /&gt;
           Mac Address Table&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Vlan    Mac Address       Type        Ports&lt;br /&gt;
 ----    -----------       --------    -----&lt;br /&gt;
L'antenne est positionnée près d'une fenêtre. La longueur du câble est largement suffisante pour ce faire.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fc-ntp-100-p1.png|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
C'est au niveau de la configuration que cela se corse.&lt;br /&gt;
&lt;br /&gt;
Le système embarqué sort d'usine avec comme adresse IPv4 &amp;lt;tt&amp;gt;192.168.0.100&amp;lt;/tt&amp;gt;. Pour changer cette adresse, une [[:File:NTPConfig_EN.zip|application]] windows est fournie.&lt;br /&gt;
&lt;br /&gt;
Pas de port série sur la version bon marché du système embarqué NTP (FC-NTP-100). Une documentation fait état d'une autre version du système embarqué avec une connexion série bizarrement accessible sur une broche DB15.&lt;br /&gt;
&lt;br /&gt;
Comme décrit dans l'introduction le but est d'écrire une application Linux texte avec les mêmes fonctionnalités que l'application graphique. Pour cela le principal est d'arriver à trouver le protocole utilisé par le périphérique.&lt;br /&gt;
&lt;br /&gt;
= Ingénierie inverse =&lt;br /&gt;
&lt;br /&gt;
C'est aussi simple que de lancer l'application windows sous &amp;lt;tt&amp;gt;wine&amp;lt;/tt&amp;gt;, de lancer un &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; dans une console et de cliquer sur tous les boutons de l'application graphique. &lt;br /&gt;
&lt;br /&gt;
Il est possible de compliquer un peu et de tenter une partie de l'ingénierie inverse sans le système embarqué en ligne. Dans ce cas ajouter une entrée dans la table ARP :&lt;br /&gt;
 # arp -s 192.168.0.100 00:11:22:33:44:55&lt;br /&gt;
Après ça si vous appuyez sur le bouton &amp;lt;tt&amp;gt;NET Connect&amp;lt;/tt&amp;gt; puis sur le bouton &amp;lt;tt&amp;gt;Query&amp;lt;/tt&amp;gt;, la console vous indiquera :&lt;br /&gt;
 # tcpdump -vvv -n -Xe host 192.168.0.100&lt;br /&gt;
 19:46:37.410925 24:77:03:24:8e:30 &amp;gt; 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 49: (tos 0x0, ttl 64, id 26566, offset 0, flags [none], proto UDP (17), length 35)&lt;br /&gt;
     192.168.0.101.58025 &amp;gt; 192.168.0.100.23: [udp sum ok] UDP, length 7 &lt;br /&gt;
        0x0000:  4500 0023 67c6 0000 4011 90ea c0a8 0065  E..#g...@......e&lt;br /&gt;
        0x0010:  c0a8 0064 e2a9 0017 000f 12a7 2410 2a31  ...d........$.*1&lt;br /&gt;
        0x0020:  300d 0a&lt;br /&gt;
&lt;br /&gt;
Nous savons donc que la communication avec le périphérique se fait en UDP sur le port 23. Vérifions en changeant le filtre de &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; et en appuyant sur le bouton &amp;lt;tt&amp;gt;Search&amp;lt;/tt&amp;gt; :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 20:55:37.788646 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 49: (tos 0x0, ttl 64, id 26376, offset 0, flags [none], proto UDP (17), length 35)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 7&lt;br /&gt;
        0x0000:  4500 0023 6708 0000 4011 52b5 c0a8 0065  E..#g...@.R....e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 000f 19fd 241b 2a31  .....U......$.*1&lt;br /&gt;
        0x0020:  420d 0a&lt;br /&gt;
Bien vu, la recherche du périphérique, si jamais son adresse IPv4 est inconnue, se fait avec une simple diffusion UDP encore sur le port 23.&lt;br /&gt;
&lt;br /&gt;
Quelques essais supplémentaires en renseignant divers champs dans l'application graphique puis en appuyant sur les boutons &amp;lt;tt&amp;gt;Set&amp;lt;/tt&amp;gt; correspondants (pour le type d'adresse IP, pour l'adresse IP et pour le masque réseau) :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 21:44:26.529704 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 50: (tos 0x0, ttl 64, id 6680, offset 0, flags [none], proto UDP (17), length 36)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 8&lt;br /&gt;
        0x0000:  4500 0024 1a18 0000 4011 9fa4 c0a8 0065  E..$....@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0010 52f0 2400 002a  .....U....R.$..*&lt;br /&gt;
        0x0020:  3030 0d0a                                00..&lt;br /&gt;
 21:44:40.843945 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 53: (tos 0x0, ttl 64, id 7396, offset 0, flags [none], proto UDP (17), length 39)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 11&lt;br /&gt;
        0x0000:  4500 0027 1ce4 0000 4011 9cd5 c0a8 0065  E..'....@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0013 5703 2401 c0a8  .....U....W.$...&lt;br /&gt;
        0x0020:  0064 2a30 440d 0a                        .d*0D..&lt;br /&gt;
 21:44:49.432484 24:77:03:24:8e:30 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 53: (tos 0x0, ttl 64, id 8621, offset 0, flags [none], proto UDP (17), length 39)&lt;br /&gt;
     192.168.0.101.35413 &amp;gt; 255.255.255.255.23: [udp sum ok] UDP, length 11&lt;br /&gt;
        0x0000:  4500 0027 21ad 0000 4011 980c c0a8 0065  E..'!...@......e&lt;br /&gt;
        0x0010:  ffff ffff 8a55 0017 0013 181e 2402 ffff  .....U......$...&lt;br /&gt;
        0x0020:  fff0 2a30 440d 0a&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir cerner le protocole il faut obtenir une réponse du périphérique. Là pas d'autre solution que de connecter le système embarqué NTP sur le même réseau que la station de travail.&lt;br /&gt;
Essayons de modifier le type de l'adresse IP, voila ce qui arrive sur la sortie standard de &amp;lt;tt&amp;gt;tcpdump&amp;lt;/tt&amp;gt; :&lt;br /&gt;
 # tcpdump -vvv -n -Xe port 23&lt;br /&gt;
 22:21:39.072053 00:16:3e:aa:10:56 &amp;gt; d8:b0:4c:ff:01:76, ethertype IPv4 (0x0800), length 50: (tos 0x0, ttl 64, id 20379, offset 0, flags [DF], proto UDP (17), length 36)&lt;br /&gt;
     172.26.189.7.42350 &amp;gt; 172.26.191.100.23: [bad udp cksum 0xd4c2 -&amp;gt; 0x2443!] UDP, length 8&lt;br /&gt;
        0x0000:  4500 0024 4f9b 4000 4011 168d ac1a bd07  E..$O.@.@.......&lt;br /&gt;
        0x0010:  ac1a bf64 a56e 0017 0010 d4c2 2400 002a  ...d.n......$..*&lt;br /&gt;
        0x0020:  3030 0d0a                                00..&lt;br /&gt;
 22:21:39.097510 d8:b0:4c:ff:01:76 &amp;gt; 00:16:3e:aa:10:56, ethertype IPv4 (0x0800), length 47: (tos 0x0, ttl 255, id 42738, offset 0, flags [none], proto UDP (17), length 33)&lt;br /&gt;
     172.26.191.100.23 &amp;gt; 172.26.189.7.42350: [udp sum ok] UDP, length 5&lt;br /&gt;
        0x0000:  4500 0021 a6f2 0000 ff11 4038 ac1a bf64  E..!......@8...d&lt;br /&gt;
        0x0010:  ac1a bd07 0017 a56e 000d 57a0 2400 000d  .......n..W.$...&lt;br /&gt;
        0x0020:  0a&lt;br /&gt;
&lt;br /&gt;
= Le protocole applicatif =&lt;br /&gt;
&lt;br /&gt;
Regardons d'un peu plus près les données UDP envoyées par l'application. Déjà toutes ces données commencent par la valeur 0x25 soit le caractère &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;. L'octet suivant semble correspondre au type de données envoyées (0x00 pour le type d'adresse, 0x01 pour l'adresse IPv4, 0x02 pour le masque réseau, etc). Suivent les octets de données (1 octet pour le type, 4 octets pour l'adresse IPv4 et le masque réseau, etc). Suit un octet de séparation 0x2a soit le caractère &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;. Les deux derniers octets semble bien être un saut de ligne à la mode windows soit 0x0d et 0x0a (CR et LF). Restent les deux octets entre le caractère de séparation &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;. Sur les différents exemples ces deux octets semblent devoir être lus en ASCII et semblent être la représentation en hexadécimal d'un octet.&lt;br /&gt;
&lt;br /&gt;
Après quelques essais et erreurs cet octet se révèle être une somme de contrôle basique sur les octets entre les caractères &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; non inclus. La somme est calculée par le simple opérateur ou exclusif bit à bit. Les différents essais ont été réalisés sur l'envoi de l'adresse IPv4 en commençant par mettre tous les bits à zéro (résultat &amp;lt;tt&amp;gt;00&amp;lt;/tt&amp;gt;) puis en modifiant bit à bit le &amp;lt;tt&amp;gt;0.0.0.0&amp;lt;/tt&amp;gt; initial.&lt;br /&gt;
&lt;br /&gt;
Pour les demandes d'information le format semble être le même (voir le premier paquet des tests) mais sans octets de données et avec un code correspondant au type de l'information auquel on applique un ou bit à bit avec 0x10.&lt;br /&gt;
&lt;br /&gt;
Donc pour les requêtes au périphérique le format est synthétisé dans les tableaux ci-dessous :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;10&amp;quot;|Modification de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | n octet(s)&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| Données&lt;br /&gt;
| '*'&lt;br /&gt;
| Somme de contrôle&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| D1 ... Dn&lt;br /&gt;
| 0x2a&lt;br /&gt;
| T ^ D1 ^ ... ^ Dn&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Lecture de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| '*'&lt;br /&gt;
| Somme de contrôle&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T &amp;amp;#124; 0x10&lt;br /&gt;
| 0x2a&lt;br /&gt;
| T &amp;amp;#124; 0x10&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notons que ce protocole est loin d'être optimal :&lt;br /&gt;
* les caractères de séparation &amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; sont loin d'être indispensables ;&lt;br /&gt;
* le saut de ligne final à la microsoft est totalement inutile ;&lt;br /&gt;
* l'envoi de la somme de contrôle en ASCII est une aberration ;&lt;br /&gt;
* la somme de contrôle pour la récupération d'information ne porte que sur un octet ...&lt;br /&gt;
&lt;br /&gt;
Regardons les réponses du périphérique aux requêtes de l'application. En réponse à une modification le type de la configuration à modifier est retournée puis un octet à zéro. Il est possible que si un nombre non correct d'octets de données est envoyé le zéro se transforme en autre chose mais nous ne comptons pas faire d'erreur. En réponse à une lecture le type est retourné suivi des données mais cette fois pas de somme de contrôle. Probablement parce que s'il est indispensable de vérifier la configuration à appliquer, afficher une configuration erronée n'est pas trop grave.&lt;br /&gt;
&lt;br /&gt;
La synthèse :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Réponse à une modification&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| Code réponse&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| R&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;8&amp;quot;|Réponse à une lecture&lt;br /&gt;
|-&lt;br /&gt;
| 1 octet&lt;br /&gt;
| 1 octet&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | n octet(s)&lt;br /&gt;
| 2 octets&lt;br /&gt;
|-&lt;br /&gt;
| '$'&lt;br /&gt;
| Type de configuration&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| Données&lt;br /&gt;
| Saut de ligne&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| T&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;| D1 ... Dn&lt;br /&gt;
| 0x0d 0x0a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les types de configuration identifiées sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code !! Type de configuration&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Type d'IPv4 (statique ou dynamique)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Adresse IPv4&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Masque réseau&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Passerelle&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Adresse Ethernet&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Mode NTP (serveur ou diffusion)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a || Délai entre diffusion NTP&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b || Recherche de périphérique&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le dernier code ne correspond pas à une configuration mais sert pour la recherche de périphérique. Il est inclus dans le tableau pour avoir une liste complète des codes.&lt;br /&gt;
&lt;br /&gt;
A noter que certains codes non listés permettent d'obtenir une réponse du périphérique mais cette réponse contient des données à 0xff que nous n'avons pas réussi à identifier :&lt;br /&gt;
* le code 0x05 retourne 330 octets à la valeur 0xff ;&lt;br /&gt;
* le code 0x06 retourne 1 octet à la valeur 0xff ;&lt;br /&gt;
* les codes 0x08 et 0x09 retournent 4 octets à la valeur 0xff ;&lt;br /&gt;
* les codes 0x0c, 0x0d, 0x0e et 0x0f ne provoquent aucune réaction et ne doivent pas être implantés.&lt;br /&gt;
&lt;br /&gt;
= Programmation =&lt;br /&gt;
&lt;br /&gt;
Une fois le protocole applicatif trouvé, l'écriture du programme est une simple formalité. Le code est donné en fin de page.&lt;br /&gt;
&lt;br /&gt;
Quatre fonctions implantent très classiquement l'aspect programmation réseau UDP :&lt;br /&gt;
* &amp;lt;tt&amp;gt;initialisationSocketUDP&amp;lt;/tt&amp;gt; initialise la socket UDP ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;libereSocketUDP&amp;lt;/tt&amp;gt; libère la réservation mémoire effectuée par la fonction précédente ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;boucleServeurUDP&amp;lt;/tt&amp;gt; gère les paquets UDP envoyé par le périphérique ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;messageUDP&amp;lt;/tt&amp;gt; permet d'envoyer des paquets UDP.&lt;br /&gt;
&lt;br /&gt;
Les deux fonctions suivantes permettent la manipulation des données UDP suivant le protocole découvert dans la section précédente :&lt;br /&gt;
* &amp;lt;tt&amp;gt;fabricationMessage&amp;lt;/tt&amp;gt; assemble un message UDP ;&lt;br /&gt;
* &amp;lt;tt&amp;gt;lectureMessage&amp;lt;/tt&amp;gt; scanne un message UDP.&lt;br /&gt;
&lt;br /&gt;
Le programme principal tente de rendre le programme le plus ergonomique possible :&lt;br /&gt;
* l'utilisation d'une option inconnue permet d'afficher une rapide explication des options possibles ;&lt;br /&gt;
* si l'adresse IPv4 du périphérique n'est pas donnée en premier argument une recherche des périphériques est effectué par diffusion UDP, si une réponse est reçue l'adresse IPv4 inclue est utilisée comme adresse du périphérique ;&lt;br /&gt;
* si aucune option n'est spécifiée pour modifier une configuration, toutes les configurations connues sont demandées au périphérique et affichées.&lt;br /&gt;
&lt;br /&gt;
Ainsi si le programme est lancé sans aucun paramètre, une découverte de périphérique est lancée et ses configurations sont affichées.&lt;br /&gt;
&lt;br /&gt;
= Bonus =&lt;br /&gt;
&lt;br /&gt;
[[File:plil-gps.png|thumbs|300px|right|xgps]]&lt;br /&gt;
&lt;br /&gt;
Pour tester le bon fonctionnement du serveur NTP, il est possible d'installer le paquetage &amp;lt;tt&amp;gt;gpsd&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut faire pointer vers votre serveur NTP dans le fichier &amp;lt;tt&amp;gt;/etc/default/gpsd&amp;lt;/tt&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 # grep DEVICES /etc/default/gpsd &lt;br /&gt;
 ...&lt;br /&gt;
 DEVICES=&amp;quot;tcp://192.168.0.1000:4001&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Une fois le service relancé, utiliser le programme &amp;lt;tt&amp;gt;xgps&amp;lt;/tt&amp;gt; du paquetage &amp;lt;tt&amp;gt;gpsd-clients&amp;lt;/tt&amp;gt; pour afficher la constellation satellite.&lt;br /&gt;
&lt;br /&gt;
A la droite de cette page vous voyez le résultat dans notre cas. Du coup vous avez la position précise de Polytech'Lille mais bon c'est moyennent secret.&lt;br /&gt;
&lt;br /&gt;
= Fichiers =&lt;br /&gt;
&lt;br /&gt;
[[Media:fcntp100.zip]]&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Plil-gps.png&amp;diff=85495</id>
		<title>Fichier:Plil-gps.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Plil-gps.png&amp;diff=85495"/>
				<updated>2021-01-08T00:27:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rex</name></author>	</entry>

	</feed>