<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Egodard</id>
	<title>wiki-se.plil.fr - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Egodard"/>
	<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Egodard"/>
	<updated>2026-05-14T10:38:58Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4811</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4811"/>
		<updated>2024-01-28T16:05:23Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Apprentissage avec des données en temps réel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données que nous avons décidé de traiter seront les différentes lettres de l'alphabet en langue des signes. L'utilisateur devra réaliser la lettre souhaitée au dessus du capteur, notre intelligence embarquée devra alors déterminer quelle lettre est réalisée et envoyer cette donnée sur un serveur pour afficher sur une page web le résultat.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Alphabet-dactylologique-nos-mains-vous-parlent.jpg|centré|sans_cadre|339x339px]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Configuration de la Machine Virtuelle==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir configurer la Raspberry Pi avec une image que nous avons récupéré sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous allons devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
[[Fichier:Learn_raspberry_pi_piconsole_bb.png|centré|sans_cadre|442x442px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite pouvoir configurer le wifi. Pour cela, nous allons dans un terminal de la Raspberry Pi, il faut alors taper la commande suivante afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ''ip a'' pour vérifier si le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objets Connectés==&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par STMicroelectronics. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes affichées par paquets de 16 valeurs. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
	int8_t j, k, l;&lt;br /&gt;
	    uint8_t zones_per_line;&lt;br /&gt;
	    zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
	           (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
	    for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
	    {&lt;br /&gt;
	      for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
	      {&lt;br /&gt;
	        /* Print distance and status */&lt;br /&gt;
	        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
	        {&lt;br /&gt;
	   	   if((l!=0) || (k!=(zones_per_line - 1)) || (j!=0)){&lt;br /&gt;
	   	       	  printf(&amp;quot;;&amp;quot;);&lt;br /&gt;
	   	 }&lt;br /&gt;
	          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
	            printf(&amp;quot;%ld&amp;quot;,(long)Result-&amp;gt;ZoneResult[j+k].Distance[l]);&lt;br /&gt;
	          else&lt;br /&gt;
	            printf(&amp;quot;0&amp;quot;);&lt;br /&gt;
	        }&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
 printf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''. Vous pouvez ainsi voir sur la photo ci-dessus l'affichage du fichier ''store_data.csv'' se trouvant sur la Raspberry Pi et contenant les données du capteur.&lt;br /&gt;
&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante sur le port 8080 configuré dans le fichier de configuration du serveur Python http : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur. Ainsi, vous pouvez retrouver dans le script du server Python http, certaines parties correspondant à l'enregistrement des données reçues dans un fichier lui aussi nommé ''store_data.csv'' se retrouvant bien évidemment sur notre serveur Xen. Le code est le même que précédemment : &amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    	address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voici le contenu du fichier .csv sur notre serveur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fichier csv serveur.png|sans_cadre|1065x1065px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les données sont donc correctement transférées du capteur vers la Raspberry Pi en liaison série. Puis par des requêtes http, les données seront envoyées par la Raspberry Pi jusqu'au serveur qui stockera ces données dans un fichier .csv pour par la suite les analyser.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===Signaux===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultats===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
* &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
* &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
* &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AccuracyDelGod.png.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
===Apprentissage avec des données en temps réel===&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie &amp;lt;code&amp;gt;Serial&amp;lt;/code&amp;gt; de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, cette fonction redonne à la fin la prédiction du signal.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PredictionDelGod.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Nous pouvons voir ici que le programme donne des prédictions que lorsque les données sont conformes et nous pouvons aussi remarquer que les prédictions restent les mêmes donc que l'IA est plutôt stable.&lt;br /&gt;
&lt;br /&gt;
Dans ce cas-ci, la prédiction était &amp;quot;0&amp;quot; ce qui signifie, comme vous l'avez vu plus haut, à Empty.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4807</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4807"/>
		<updated>2024-01-28T16:01:22Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Entraînement avec un script Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données que nous avons décidé de traiter seront les différentes lettres de l'alphabet en langue des signes. L'utilisateur devra réaliser la lettre souhaitée au dessus du capteur, notre intelligence embarquée devra alors déterminer quelle lettre est réalisée et envoyer cette donnée sur un serveur pour afficher sur une page web le résultat.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Alphabet-dactylologique-nos-mains-vous-parlent.jpg|centré|sans_cadre|339x339px]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Configuration de la Machine Virtuelle==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir configurer la Raspberry Pi avec une image que nous avons récupéré sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous allons devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
[[Fichier:Learn_raspberry_pi_piconsole_bb.png|centré|sans_cadre|442x442px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite pouvoir configurer le wifi. Pour cela, nous allons dans un terminal de la Raspberry Pi, il faut alors taper la commande suivante afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ''ip a'' pour vérifier si le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objets Connectés==&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par STMicroelectronics. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes affichées par paquets de 16 valeurs. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
	int8_t j, k, l;&lt;br /&gt;
	    uint8_t zones_per_line;&lt;br /&gt;
	    zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
	           (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
	    for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
	    {&lt;br /&gt;
	      for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
	      {&lt;br /&gt;
	        /* Print distance and status */&lt;br /&gt;
	        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
	        {&lt;br /&gt;
	   	   if((l!=0) || (k!=(zones_per_line - 1)) || (j!=0)){&lt;br /&gt;
	   	       	  printf(&amp;quot;;&amp;quot;);&lt;br /&gt;
	   	 }&lt;br /&gt;
	          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
	            printf(&amp;quot;%ld&amp;quot;,(long)Result-&amp;gt;ZoneResult[j+k].Distance[l]);&lt;br /&gt;
	          else&lt;br /&gt;
	            printf(&amp;quot;0&amp;quot;);&lt;br /&gt;
	        }&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
 printf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''. Vous pouvez ainsi voir sur la photo ci-dessus l'affichage du fichier ''store_data.csv'' se trouvant sur la Raspberry Pi et contenant les données du capteur.&lt;br /&gt;
&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante sur le port 8080 configuré dans le fichier de configuration du serveur Python http : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur. Ainsi, vous pouvez retrouver dans le script du server Python http, certaines parties correspondant à l'enregistrement des données reçues dans un fichier lui aussi nommé ''store_data.csv'' se retrouvant bien évidemment sur notre serveur Xen. Le code est le même que précédemment : &amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    	address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voici le contenu du fichier .csv sur notre serveur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fichier csv serveur.png|sans_cadre|1065x1065px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les données sont donc correctement transférées du capteur vers la Raspberry Pi en liaison série. Puis par des requêtes http, les données seront envoyées par la Raspberry Pi jusqu'au serveur qui stockera ces données dans un fichier .csv pour par la suite les analyser.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===Signaux===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultats===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
* &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
* &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
* &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AccuracyDelGod.png.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
===Apprentissage avec des données en temps réel===&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie &amp;lt;code&amp;gt;Serial&amp;lt;/code&amp;gt; de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, cette fonction redonne à la fin la prédiction du signal.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PredictionDelGod.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Nous pouvons voir ici que le programme donne des prédictions que lorsque les données sont conformes et nous pouvons aussi remarquer que les prédictions restent les mêmes donc que l'IA est plutôt stable&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4804</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4804"/>
		<updated>2024-01-28T15:54:26Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Apprentissage avec des données sélectionnées */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données que nous avons décidé de traiter seront les différentes lettres de l'alphabet en langue des signes. L'utilisateur devra réaliser la lettre souhaitée au dessus du capteur, notre intelligence embarquée devra alors déterminer quelle lettre est réalisée et envoyer cette donnée sur un serveur pour afficher sur une page web le résultat.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Alphabet-dactylologique-nos-mains-vous-parlent.jpg|centré|sans_cadre|339x339px]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Configuration de la Machine Virtuelle==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir configurer la Raspberry Pi avec une image que nous avons récupéré sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous allons devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
[[Fichier:Learn_raspberry_pi_piconsole_bb.png|centré|sans_cadre|442x442px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite pouvoir configurer le wifi. Pour cela, nous allons dans un terminal de la Raspberry Pi, il faut alors taper la commande suivante afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ''ip a'' pour vérifier si le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objets Connectés==&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par STMicroelectronics. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes affichées par paquets de 16 valeurs. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
	int8_t j, k, l;&lt;br /&gt;
	    uint8_t zones_per_line;&lt;br /&gt;
	    zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
	           (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
	    for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
	    {&lt;br /&gt;
	      for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
	      {&lt;br /&gt;
	        /* Print distance and status */&lt;br /&gt;
	        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
	        {&lt;br /&gt;
	   	   if((l!=0) || (k!=(zones_per_line - 1)) || (j!=0)){&lt;br /&gt;
	   	       	  printf(&amp;quot;;&amp;quot;);&lt;br /&gt;
	   	 }&lt;br /&gt;
	          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
	            printf(&amp;quot;%ld&amp;quot;,(long)Result-&amp;gt;ZoneResult[j+k].Distance[l]);&lt;br /&gt;
	          else&lt;br /&gt;
	            printf(&amp;quot;0&amp;quot;);&lt;br /&gt;
	        }&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
 printf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''. Vous pouvez ainsi voir sur la photo ci-dessus l'affichage du fichier ''store_data.csv'' se trouvant sur la Raspberry Pi et contenant les données du capteur.&lt;br /&gt;
&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante sur le port 8080 configuré dans le fichier de configuration du serveur Python http : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur. Ainsi, vous pouvez retrouver dans le script du server Python http, certaines parties correspondant à l'enregistrement des données reçues dans un fichier lui aussi nommé ''store_data.csv'' se retrouvant bien évidemment sur notre serveur Xen. Le code est le même que précédemment : &amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    	address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voici le contenu du fichier .csv sur notre serveur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fichier csv serveur.png|sans_cadre|1065x1065px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les données sont donc correctement transférées du capteur vers la Raspberry Pi en liaison série. Puis par des requêtes http, les données seront envoyées par la Raspberry Pi jusqu'au serveur qui stockera ces données dans un fichier .csv pour par la suite les analyser.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===Signaux===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultats===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
* &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
* &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
* &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AccuracyDelGod.png.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie &amp;lt;code&amp;gt;Serial&amp;lt;/code&amp;gt; de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, cette fonction redonne à la fin la prédiction du signal.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PredictionDelGod.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Nous pouvons voir ici que le programme donne des prédictions que lorsque les données sont conformes et nous pouvons aussi remarquer que les prédictions restent les mêmes donc que l'IA est plutôt stable&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4803</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4803"/>
		<updated>2024-01-28T15:54:10Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Apprentissage avec des données sélectionnées */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données que nous avons décidé de traiter seront les différentes lettres de l'alphabet en langue des signes. L'utilisateur devra réaliser la lettre souhaitée au dessus du capteur, notre intelligence embarquée devra alors déterminer quelle lettre est réalisée et envoyer cette donnée sur un serveur pour afficher sur une page web le résultat.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Alphabet-dactylologique-nos-mains-vous-parlent.jpg|centré|sans_cadre|339x339px]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Configuration de la Machine Virtuelle==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir configurer la Raspberry Pi avec une image que nous avons récupéré sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous allons devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
[[Fichier:Learn_raspberry_pi_piconsole_bb.png|centré|sans_cadre|442x442px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite pouvoir configurer le wifi. Pour cela, nous allons dans un terminal de la Raspberry Pi, il faut alors taper la commande suivante afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ''ip a'' pour vérifier si le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objets Connectés==&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par STMicroelectronics. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes affichées par paquets de 16 valeurs. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
	int8_t j, k, l;&lt;br /&gt;
	    uint8_t zones_per_line;&lt;br /&gt;
	    zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
	           (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
	    for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
	    {&lt;br /&gt;
	      for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
	      {&lt;br /&gt;
	        /* Print distance and status */&lt;br /&gt;
	        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
	        {&lt;br /&gt;
	   	   if((l!=0) || (k!=(zones_per_line - 1)) || (j!=0)){&lt;br /&gt;
	   	       	  printf(&amp;quot;;&amp;quot;);&lt;br /&gt;
	   	 }&lt;br /&gt;
	          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
	            printf(&amp;quot;%ld&amp;quot;,(long)Result-&amp;gt;ZoneResult[j+k].Distance[l]);&lt;br /&gt;
	          else&lt;br /&gt;
	            printf(&amp;quot;0&amp;quot;);&lt;br /&gt;
	        }&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
 printf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''. Vous pouvez ainsi voir sur la photo ci-dessus l'affichage du fichier ''store_data.csv'' se trouvant sur la Raspberry Pi et contenant les données du capteur.&lt;br /&gt;
&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante sur le port 8080 configuré dans le fichier de configuration du serveur Python http : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur. Ainsi, vous pouvez retrouver dans le script du server Python http, certaines parties correspondant à l'enregistrement des données reçues dans un fichier lui aussi nommé ''store_data.csv'' se retrouvant bien évidemment sur notre serveur Xen. Le code est le même que précédemment : &amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    	address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voici le contenu du fichier .csv sur notre serveur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fichier csv serveur.png|sans_cadre|1065x1065px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les données sont donc correctement transférées du capteur vers la Raspberry Pi en liaison série. Puis par des requêtes http, les données seront envoyées par la Raspberry Pi jusqu'au serveur qui stockera ces données dans un fichier .csv pour par la suite les analyser.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===Signaux===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultats===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
* &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
* &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
* &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AccuracyDelGod.png.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie &amp;lt;code&amp;gt;Serial&amp;lt;/code&amp;gt; de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, cette fonction redonne à la fin la prédiction du signal.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PredictionDelGod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Nous pouvons voir ici que le programme donne des prédictions que lorsque les données sont conformes et nous pouvons aussi remarquer que les prédictions restent les mêmes donc que l'IA est plutôt stable&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:PredictionDelGod.png&amp;diff=4801</id>
		<title>Fichier:PredictionDelGod.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:PredictionDelGod.png&amp;diff=4801"/>
		<updated>2024-01-28T15:52:02Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;predicition&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4793</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4793"/>
		<updated>2024-01-28T15:39:22Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Résultat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données que nous avons décidé de traiter seront les différentes lettres de l'alphabet en langue des signes. L'utilisateur devra réaliser la lettre souhaitée au dessus du capteur, notre intelligence embarquée devra alors déterminer quelle lettre est réalisée et envoyer cette donnée sur un serveur pour afficher sur une page web le résultat.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Alphabet-dactylologique-nos-mains-vous-parlent.jpg|centré|sans_cadre|339x339px]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Configuration de la Machine Virtuelle==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir configurer la Raspberry Pi avec une image que nous avons récupéré sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous allons devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
[[Fichier:Learn_raspberry_pi_piconsole_bb.png|centré|sans_cadre|442x442px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite pouvoir configurer le wifi. Pour cela, nous allons dans un terminal de la Raspberry Pi, il faut alors taper la commande suivante afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ''ip a'' pour vérifier si le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objets Connectés==&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par STMicroelectronics. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes affichées par paquets de 16 valeurs. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
	int8_t j, k, l;&lt;br /&gt;
	    uint8_t zones_per_line;&lt;br /&gt;
	    zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
	           (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
	    for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
	    {&lt;br /&gt;
	      for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
	      {&lt;br /&gt;
	        /* Print distance and status */&lt;br /&gt;
	        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
	        {&lt;br /&gt;
	   	   if((l!=0) || (k!=(zones_per_line - 1)) || (j!=0)){&lt;br /&gt;
	   	       	  printf(&amp;quot;;&amp;quot;);&lt;br /&gt;
	   	 }&lt;br /&gt;
	          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
	            printf(&amp;quot;%ld&amp;quot;,(long)Result-&amp;gt;ZoneResult[j+k].Distance[l]);&lt;br /&gt;
	          else&lt;br /&gt;
	            printf(&amp;quot;0&amp;quot;);&lt;br /&gt;
	        }&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
 printf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''. Vous pouvez ainsi voir sur la photo ci-dessus l'affichage du fichier ''store_data.csv'' se trouvant sur la Raspberry Pi et contenant les données du capteur.&lt;br /&gt;
&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante sur le port 8080 configuré dans le fichier de configuration du serveur Python http : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur. Ainsi, vous pouvez retrouver dans le script du server Python http, certaines parties correspondant à l'enregistrement des données reçues dans un fichier lui aussi nommé ''store_data.csv'' se retrouvant bien évidemment sur notre serveur Xen. Le code est le même que précédemment : &amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    	address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voici le contenu du fichier .csv sur notre serveur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fichier csv serveur.png|sans_cadre|1065x1065px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les données sont donc correctement transférées du capteur vers la Raspberry Pi en liaison série. Puis par des requêtes http, les données seront envoyées par la Raspberry Pi jusqu'au serveur qui stockera ces données dans un fichier .csv pour par la suite les analyser.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===Signaux===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultats===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
* &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
* &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
* &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AccuracyDelGod.png.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie serial de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4792</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4792"/>
		<updated>2024-01-28T15:39:00Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* &amp;quot;Signals&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données que nous avons décidé de traiter seront les différentes lettres de l'alphabet en langue des signes. L'utilisateur devra réaliser la lettre souhaitée au dessus du capteur, notre intelligence embarquée devra alors déterminer quelle lettre est réalisée et envoyer cette donnée sur un serveur pour afficher sur une page web le résultat.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Alphabet-dactylologique-nos-mains-vous-parlent.jpg|centré|sans_cadre|339x339px]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Configuration de la Machine Virtuelle==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir configurer la Raspberry Pi avec une image que nous avons récupéré sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous allons devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
[[Fichier:Learn_raspberry_pi_piconsole_bb.png|centré|sans_cadre|442x442px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite pouvoir configurer le wifi. Pour cela, nous allons dans un terminal de la Raspberry Pi, il faut alors taper la commande suivante afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ''ip a'' pour vérifier si le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objets Connectés==&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par STMicroelectronics. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes affichées par paquets de 16 valeurs. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
	int8_t j, k, l;&lt;br /&gt;
	    uint8_t zones_per_line;&lt;br /&gt;
	    zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
	           (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
	    for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
	    {&lt;br /&gt;
	      for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
	      {&lt;br /&gt;
	        /* Print distance and status */&lt;br /&gt;
	        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
	        {&lt;br /&gt;
	   	   if((l!=0) || (k!=(zones_per_line - 1)) || (j!=0)){&lt;br /&gt;
	   	       	  printf(&amp;quot;;&amp;quot;);&lt;br /&gt;
	   	 }&lt;br /&gt;
	          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
	            printf(&amp;quot;%ld&amp;quot;,(long)Result-&amp;gt;ZoneResult[j+k].Distance[l]);&lt;br /&gt;
	          else&lt;br /&gt;
	            printf(&amp;quot;0&amp;quot;);&lt;br /&gt;
	        }&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
 printf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''. Vous pouvez ainsi voir sur la photo ci-dessus l'affichage du fichier ''store_data.csv'' se trouvant sur la Raspberry Pi et contenant les données du capteur.&lt;br /&gt;
&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante sur le port 8080 configuré dans le fichier de configuration du serveur Python http : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur. Ainsi, vous pouvez retrouver dans le script du server Python http, certaines parties correspondant à l'enregistrement des données reçues dans un fichier lui aussi nommé ''store_data.csv'' se retrouvant bien évidemment sur notre serveur Xen. Le code est le même que précédemment : &amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    	address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voici le contenu du fichier .csv sur notre serveur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fichier csv serveur.png|sans_cadre|1065x1065px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les données sont donc correctement transférées du capteur vers la Raspberry Pi en liaison série. Puis par des requêtes http, les données seront envoyées par la Raspberry Pi jusqu'au serveur qui stockera ces données dans un fichier .csv pour par la suite les analyser.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===Signaux===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
* &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
* &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
* &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AccuracyDelGod.png.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie serial de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4791</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4791"/>
		<updated>2024-01-28T15:37:08Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Raspberry Pi et serveur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données que nous avons décidé de traiter seront les différentes lettres de l'alphabet en langue des signes. L'utilisateur devra réaliser la lettre souhaitée au dessus du capteur, notre intelligence embarquée devra alors déterminer quelle lettre est réalisée et envoyer cette donnée sur un serveur pour afficher sur une page web le résultat.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Alphabet-dactylologique-nos-mains-vous-parlent.jpg|centré|sans_cadre|339x339px]]&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Configuration de la Machine Virtuelle==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir configurer la Raspberry Pi avec une image que nous avons récupéré sur internet.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous allons devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
[[Fichier:Learn_raspberry_pi_piconsole_bb.png|centré|sans_cadre|442x442px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite pouvoir configurer le wifi. Pour cela, nous allons dans un terminal de la Raspberry Pi, il faut alors taper la commande suivante afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ''ip a'' pour vérifier si le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objets Connectés==&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par STMicroelectronics. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes affichées par paquets de 16 valeurs. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
static void print_result(RANGING_SENSOR_Result_t *Result)&lt;br /&gt;
{&lt;br /&gt;
	int8_t j, k, l;&lt;br /&gt;
	    uint8_t zones_per_line;&lt;br /&gt;
	    zones_per_line = ((Profile.RangingProfile == RS_PROFILE_8x8_AUTONOMOUS) ||&lt;br /&gt;
	           (Profile.RangingProfile == RS_PROFILE_8x8_CONTINUOUS)) ? 8 : 4;&lt;br /&gt;
	    for (j = 0; j &amp;lt; Result-&amp;gt;NumberOfZones; j += zones_per_line)&lt;br /&gt;
	    {&lt;br /&gt;
	      for (l = 0; l &amp;lt; RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)&lt;br /&gt;
	      {&lt;br /&gt;
	        /* Print distance and status */&lt;br /&gt;
	        for (k = (zones_per_line - 1); k &amp;gt;= 0; k--)&lt;br /&gt;
	        {&lt;br /&gt;
	   	   if((l!=0) || (k!=(zones_per_line - 1)) || (j!=0)){&lt;br /&gt;
	   	       	  printf(&amp;quot;;&amp;quot;);&lt;br /&gt;
	   	 }&lt;br /&gt;
	          if (Result-&amp;gt;ZoneResult[j+k].NumberOfTargets &amp;gt; 0)&lt;br /&gt;
	            printf(&amp;quot;%ld&amp;quot;,(long)Result-&amp;gt;ZoneResult[j+k].Distance[l]);&lt;br /&gt;
	          else&lt;br /&gt;
	            printf(&amp;quot;0&amp;quot;);&lt;br /&gt;
	        }&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
 printf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''. Vous pouvez ainsi voir sur la photo ci-dessus l'affichage du fichier ''store_data.csv'' se trouvant sur la Raspberry Pi et contenant les données du capteur.&lt;br /&gt;
&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante sur le port 8080 configuré dans le fichier de configuration du serveur Python http : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur. Ainsi, vous pouvez retrouver dans le script du server Python http, certaines parties correspondant à l'enregistrement des données reçues dans un fichier lui aussi nommé ''store_data.csv'' se retrouvant bien évidemment sur notre serveur Xen. Le code est le même que précédemment : &amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    	address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voici le contenu du fichier .csv sur notre serveur :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fichier csv serveur.png|sans_cadre|1065x1065px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les données sont donc correctement transférées du capteur vers la Raspberry Pi en liaison série. Puis par des requêtes http, les données seront envoyées par la Raspberry Pi jusqu'au serveur qui stockera ces données dans un fichier .csv pour par la suite les analyser.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
* &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
* &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
* &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AccuracyDelGod.png.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie serial de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4731</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4731"/>
		<updated>2024-01-27T17:16:19Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Entraînement avec un script Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
- &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
- &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
- &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:AccuracyDelGod.png.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie serial de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:AccuracyDelGod.png.png&amp;diff=4730</id>
		<title>Fichier:AccuracyDelGod.png.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:AccuracyDelGod.png.png&amp;diff=4730"/>
		<updated>2024-01-27T17:16:06Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;accuracy&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4729</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4729"/>
		<updated>2024-01-27T17:14:57Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Entraînement avec un script Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
===Apprentissage avec des données sélectionnées===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, nous avons créé une intelligence artificielle qui apprend grâce à des fichiers CSV que nous avons fait.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi d'utiliser la librairie SciKit Learn et Random Forest pour développer notre IA.&lt;br /&gt;
&lt;br /&gt;
La première étape dans notre script Python est de lire tous les CSV que nous lui fournissons (c'est-à-dire les CSV correspondant aux lettres A à K de la Langue des Signes Française). Ensuite, nous concaténons tous les CSV pour en faire une sorte de &amp;quot;mini&amp;quot; base de données. Cette base de données va être scindée en deux : 80 % des données sont faites pour l'apprentissage, et les 20 % restants sont pour le test.&lt;br /&gt;
&lt;br /&gt;
Il faut savoir aussi que nous avons relié une lettre à un chiffre pour plus de facilité, nous avons donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Empty = 0, A = 1, B = 2, etc.....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour compliquer la tâche, nous avons décidé de mélanger toutes les données pour l'entraînement et le test, c'est-à-dire que le tableau de réponse ne sera pas sous la forme &amp;lt;code&amp;gt;[0 0 0 ... 1 1 1 .... 2 ....]&amp;lt;/code&amp;gt; mais plutôt sous la forme : &amp;lt;code&amp;gt;[7 11  6  6  0 10  5  ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Concernant la phase d'apprentissage, nous avons au total 4 variables :&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;code&amp;gt;X_train&amp;lt;/code&amp;gt; : données que la carte a envoyées qui sont destinées à l'entrainement&lt;br /&gt;
- &amp;lt;code&amp;gt;y_train&amp;lt;/code&amp;gt; : tableau de réponse (ce qu'on attend comme résultat)&lt;br /&gt;
- &amp;lt;code&amp;gt;X_test&amp;lt;/code&amp;gt; : données que la cartée a envoyées qui sont destinées au test&lt;br /&gt;
- &amp;lt;code&amp;gt;y_test&amp;lt;/code&amp;gt; : tableau de réponse que l'IA a déterminé&lt;br /&gt;
&lt;br /&gt;
Enfin, nous avons mis le paramètre &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; qui permet de déterminer le &amp;quot;score&amp;quot; de l'IA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_forest_predict(X_train,y_train,X_test,y_test):&lt;br /&gt;
model = RandomForestClassifier()&lt;br /&gt;
model.fit(X_train, y_train)&lt;br /&gt;
y_pred = model.predict(X_test)&lt;br /&gt;
accuracy = accuracy_score(y_test,y_pred)&lt;br /&gt;
print(y_pred)&lt;br /&gt;
print(f&amp;quot;Précision du modèle : {accuracy}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:resultatAIDelGod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après le lancement du test, nous trouvons une accuracy de 1. Cette accuracy parfaite est sûrement due au fait que pour chaque lettre, nous étions dans les mêmes conditions (position, luminosité etc..)&lt;br /&gt;
&lt;br /&gt;
Après avoir entraîné notre IA, nous allons la tester avec les données qui proviennent directement de la carte avec le capteur Time of Flight. Pour cela, nous avons utilisé la librairie serial de python pour obtenir les données en temps réel. Comme les données sont sous forme d’une longue chaîne de caractère, nous avons dû séparer la chaîne en une liste, transformer les chaînes de caractères en entiers et enfin transformer la liste en un tableau.&lt;br /&gt;
&lt;br /&gt;
Après avoir transformé les données dans le bon type, nous avons réutilisé la fonction &amp;lt;code&amp;gt;predict&amp;lt;/code&amp;gt; pour que l’Intelligence Artificielle détecte quelle lettre nous avons fait.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
def random_predict_serial(X_train, y_train,model):&lt;br /&gt;
    ser = serial.Serial()&lt;br /&gt;
    ser.port = PORT&lt;br /&gt;
    ser.baudrate = BAUDRATE&lt;br /&gt;
    ser.timeout = 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ser.open()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&lt;br /&gt;
    print(ser)&lt;br /&gt;
&lt;br /&gt;
    lines = ser.readlines()&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        # print(line)&lt;br /&gt;
        decoded_line = str(line, ENCODING)[:-2]&lt;br /&gt;
        print(decoded_line, &amp;quot; - &amp;quot;, len(decoded_line.split(&amp;quot;,&amp;quot;)))&lt;br /&gt;
        &lt;br /&gt;
        if(len(decoded_line.split(&amp;quot;,&amp;quot;))==64):&lt;br /&gt;
            test_line = decoded_line.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            test_line_int = [int(x) for x in test_line]&lt;br /&gt;
            test_array = np.array(test_line_int)&lt;br /&gt;
            test_array = test_array.reshape(1,-1)&lt;br /&gt;
            print(&amp;quot;TYPE TEST :&amp;quot;,type(test_array))&lt;br /&gt;
            prediction = model.predict(test_array)&lt;br /&gt;
            print(&amp;quot;La prediction :&amp;quot; ,prediction)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    ser.close()&lt;br /&gt;
    print(&amp;quot;Is serial open : &amp;quot;, ser.is_open)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4101</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4101"/>
		<updated>2024-01-22T19:10:01Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Résultat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir, certaines lettres sont mieux perçues que d'autres, cela est dû au fait que NanoEdge AI Studio est très sensible à la luminosité, mais aussi à la position de notre main par rapport au capteur.&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4100</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4100"/>
		<updated>2024-01-22T19:08:15Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Emulator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4099</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4099"/>
		<updated>2024-01-22T19:08:03Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Entraînement sur NanoEdge AI Studio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4098</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4098"/>
		<updated>2024-01-22T19:07:50Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Emulator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:EmulatorDelgod.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:EmulatorDelgod.png&amp;diff=4097</id>
		<title>Fichier:EmulatorDelgod.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:EmulatorDelgod.png&amp;diff=4097"/>
		<updated>2024-01-22T19:07:44Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;emulator&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4096</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4096"/>
		<updated>2024-01-22T19:06:19Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Validation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Validation.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4095</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4095"/>
		<updated>2024-01-22T19:05:38Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Validation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ValidationDelgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Validation.png&amp;diff=4094</id>
		<title>Fichier:Validation.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Validation.png&amp;diff=4094"/>
		<updated>2024-01-22T19:05:20Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Validation&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4093</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4093"/>
		<updated>2024-01-22T19:04:09Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Entraînement sur NanoEdge AI Studio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|500px]]&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4092</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4092"/>
		<updated>2024-01-22T19:03:17Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Benchmark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
[[Fichier:Benchmark Delgod.png|vignette|324x324px]]&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Benchmark_Delgod.png&amp;diff=4091</id>
		<title>Fichier:Benchmark Delgod.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Benchmark_Delgod.png&amp;diff=4091"/>
		<updated>2024-01-22T19:02:52Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Benchmark&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4090</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4090"/>
		<updated>2024-01-22T19:02:20Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* &amp;quot;Signals&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:I.mp4&amp;diff=4089</id>
		<title>Fichier:I.mp4</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:I.mp4&amp;diff=4089"/>
		<updated>2024-01-22T18:59:20Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:C.mp4&amp;diff=4088</id>
		<title>Fichier:C.mp4</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:C.mp4&amp;diff=4088"/>
		<updated>2024-01-22T18:58:58Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:SignauxNEAIS.png&amp;diff=4087</id>
		<title>Fichier:SignauxNEAIS.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:SignauxNEAIS.png&amp;diff=4087"/>
		<updated>2024-01-22T18:58:33Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4086</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4086"/>
		<updated>2024-01-22T18:56:18Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Entraînement sur NanoEdge AI Studio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
===Description===&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Signals&amp;quot;===&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Benchmark===&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie que l'IA cherche la meilleure librairie possible d'après les signaux envoyés dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
===Validation===&lt;br /&gt;
Une fois que cette partie est terminée, nous pouvons passer à la partie Validation où nous pouvons importer un signal différent de ceux d'avant afin de choisir la meilleure librairie parmi celles trouvées dans la partie Benchmark.&lt;br /&gt;
&lt;br /&gt;
===Emulator===&lt;br /&gt;
Enfin, nous pouvons tester en temps réel dans la partie Emulator si notre librairie a bien appris les signaux envoyés en entraînement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Résultat===&lt;br /&gt;
Nous avons filmé deux cas où l'IA reconnait les symboles C et I de la Langue des Signes Française (LSF) : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:C.mp4]] [[Fichier:I.mp4]]&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4085</id>
		<title>SE5 ECEAI/eceai 2023/2024/GodardDelcourt</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/GodardDelcourt&amp;diff=4085"/>
		<updated>2024-01-22T18:13:54Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /*  Entraînement du modèle d’apprentissage  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Objectifs du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet vise à distribuer le calcul à différents endroits du réseau pour optimiser les performances et la sobriété énergétique. Un réseau d'objets connectés, de passerelles, et d'un serveur sera mis en place pour collecter, traiter, et évaluer les données environnementales. &lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en œuvre du réseau &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Description générale==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la Machine Virtuelle===&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir créer une machine virtuelle sur Chassiron avec un accès internet IPv6. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette machine virtuelle sera déployée grâce à Xen et sera nommée &amp;quot;delgodVM&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
La commande lancée pour créer la machine est la suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname delgodVM --force --dist bookworm --size 10G --memory 10G --dir /usr/local/xen --password glopglop --dhcp --bridge bridgeStudents&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons par la suite devoir configurer son réseau, sa résolution DNS, et ses sources de paquets Debian.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour configurer le réseau de notre serveur, nous allons devoir modifier le fichier ''/etc/network/interfaces'' qui est un fichier de configuration réseau dans lequel les paramètres de l'interface sont spécifiés.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto enX0&lt;br /&gt;
iface enX0 inet6 auto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour configurer la résolution DNS de notre serveur, nous allons modifier le fichier ''/etc/resolv.conf''. Ce fichier permet de spécifier la configuration des serveurs de nom (DNS) pour résoudre les noms de domaine en adresses IP. Nous allons donc réaliser la configuration DNS suivante fournie dans le sujet : &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain plil.info&lt;br /&gt;
search plil.info&lt;br /&gt;
nameserver 2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour modifier les sources des paquets Debian, nous allons modifier le fichier ''/etc/apt/sources.list'' en rajoutant les paquets suivants :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb     http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
deb-src http://deb.debian.org/debian     bookworm main contrib non-free non-free-firmware&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous allons aussi supprimer le fichier ''/etc/apt/apt.conf.d/01proxy''.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
Image de la Raspberry Pi pour connexion avec le serveur via WiFi.&lt;br /&gt;
&lt;br /&gt;
Nous allons tout d'abord devoir connecter la Raspberry Pi au WiFi nommé WIFI_IE_1. Pour configurer la Raspberry Pi, nous allons tout d'abord devoir la connecter en série à un ordinateur. Pour savoir quels pins il est nécessaire de connecter, il faut se fier à l'image ci-dessous. La partie alimentation n'est pas à connecter car trop faible pour alimenter la Raspberry Pi, nous allons donc devoir brancher sur secteur la carte grâce à une alimentation USB.&lt;br /&gt;
&lt;br /&gt;
IMAGE RASP&lt;br /&gt;
&lt;br /&gt;
Après avoir connecté la Raspberry Pi sur l'ordinateur, nous pouvons vérifier sur quelle interface la carte est connectée avec la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; ls /dev &amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
Par exemple, ici la carte était sur ''ttyUSB0''.&lt;br /&gt;
Nous pouvons ensuite lancer une liaison série avec minicom grâce à la commande &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;minicom -s&amp;lt;/syntaxhighlight&amp;gt; et les paramètres suivants ttyUSB0 et 115200 8N.&lt;br /&gt;
&lt;br /&gt;
Puis, pouvons configurer le wifi, nous allons dans un terminal de la Raspberry Pi, taper les commandes suivantes afin d'accéder à la configuration du système : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
raspi-config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous sommes allées dans &amp;quot;&amp;quot;System Options&amp;quot;&amp;quot; afin de pouvoir configurer les différentes informations qui vont nous permettre d'avoir le WiFi sur la carte.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour vérifier si nos modifications ont bien fonctionné, nous avons réalisé la commande ip a pour vérifier sir le wlan0 était bien Up, et nous avons aussi ping google.com pour vérifier si le WiFi fonctionnait. Tout cela était correct.&lt;br /&gt;
&lt;br /&gt;
'''Informations concernant la Raspberry Pi :'''&amp;lt;br&amp;gt;&lt;br /&gt;
Adresse ip : 172.26.145.129&amp;lt;br&amp;gt;&lt;br /&gt;
User pour le SSH : pifou&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Objets Connectés===&lt;br /&gt;
&lt;br /&gt;
Utilisation d'un STM32F401RE avec un capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Protocole de communication et acquisition des données. &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Acquisition des données==&lt;br /&gt;
&lt;br /&gt;
Nous allons devoir développer un firmware embarqué afin collecter des données, nous allons pour cela utiliser un code STM32 Cube IDE qui va nous aider à collecter les données du capteur.&lt;br /&gt;
&lt;br /&gt;
La première étape consiste alors a installer STM32 Cube IDE pour l'objet connecté (STM32F401RE) avec capteur de distance (Nucleo-53L5A1).&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons eu de nombreux problème pour installer ce logiciel sur les zabeths de l'école. Nous avons donc du utiliser un ordinateur personnel sous windows afin d'installer STM32CubeIDE. Afin de téléverser le programme sur notre objet connecté muni du capteur, nous allons devoir connecter celui-ci en série avec notre ordinnateur. Le code sera par la suite placé sur l'objet grâce à l'application.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les données, nous allons utiliser un programme d'exemple fourni par --. Ce code est disponible en annexes. Pour vérifier le fonctionnement de ce code, nous avons lancé une liaison série sur l'objet connecté (grâce à Putty par exemple) et nous avons bien pu récupérer des données. &lt;br /&gt;
&lt;br /&gt;
Cependant, ce code ne nous convenait pas, nous avons donc du le modifier afin d'obtenir des données brutes séparées par une virgule (ce qui n'était pas le cas sur le programme originel).&lt;br /&gt;
&lt;br /&gt;
//CODE&lt;br /&gt;
&lt;br /&gt;
==Protocole de communication==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi &amp;amp; capteur===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous allons devoir mettre en oeuvre un protocole de communication permettant l'envoi de données entre la carte (Raspberry Pi) et le capteur.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de créer un script en Python qui permet au capteur de communiquer ses données à la Raspberry Pi, grâce à la liaison série entre les deux appareils. Comme nous avons vu précédemment, le code installé sur le capteur permet l'envoi de données brutes sur la liaison série, de la forme suivante :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Données capteur csv.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le code Python que nous avons implémenté sur la Raspberry Pi va permettre de récupérer ces données. Le script se trouve à l'endroit suivant sur la carte ''~/Documents/lecture/reader.py''. Lors de son lancement, celui ci va obtenir les données envoyées par le capteur, puis il va ranger ces données dans un fichier nommé ''store_data.csv''.&lt;br /&gt;
Le script que nous avons écrit est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les données&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check pour la parité, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Nombre de commandes séries à accepter avant expiration du délai&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Ouverture du fichier &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Mise en pause du programme pendant 1 seconde pour éviter de surcharger le port série&lt;br /&gt;
while 1:&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
    file.write(output)&lt;br /&gt;
    print (x)&lt;br /&gt;
&lt;br /&gt;
file.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi et serveur===&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite mettre en oeuvre un protocole de communication entre la Raspberry Pi et le serveur que nous avons créé. D'après les consignes du sujet, nous devons faire en sorte que ce protocole soit facilement étendu à un grand nombre de Raspberry Pi. C'est pourquoi après quelques recherches, nous avons décide de réaliser un protocole de communication HTTP initié avec un script Python. &lt;br /&gt;
&lt;br /&gt;
Tout d'abord, un script Python sera réalisé sur notre serveur nommé delgodVM pour le spécialiser en un serveur web qui va nous permettre de gérer les requêtes HTTP. Ainsi, sur le serveur delgodVM, nous allons pouvoir lancer notre serveur Python HTTP avec le script créé et avoir le retour suivant : &lt;br /&gt;
[[Fichier:Lancement serveur http.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import socket&lt;br /&gt;
from http.server import HTTPServer, SimpleHTTPRequestHandler&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
PORT = 8080&lt;br /&gt;
class MyHandler(SimpleHTTPRequestHandler):&lt;br /&gt;
  def do_GET(self):&lt;br /&gt;
	if self.path == '/ip':&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	self.send_header('Content-type', 'text/html')&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
  	self.wfile.write(f'Your IP address is {self.client_address[0]}'.encode())&lt;br /&gt;
  	return&lt;br /&gt;
	else:&lt;br /&gt;
  	return SimpleHTTPRequestHandler.do_GET(self)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  def do_POST(self):&lt;br /&gt;
	if self.path== '/data':&lt;br /&gt;
  	content_length = int(self.headers['Content-Length'])&lt;br /&gt;
  	data = self.rfile.read(content_length).decode('utf-8')&lt;br /&gt;
  	data_dict = json.loads(data)&lt;br /&gt;
&lt;br /&gt;
  	print(&amp;quot;Donnees recues:&amp;quot;, data_dict)&lt;br /&gt;
&lt;br /&gt;
  	self.send_response(200)&lt;br /&gt;
  	#Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  	file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;a&amp;quot;)&lt;br /&gt;
 	 &lt;br /&gt;
  	#Donnes ecrites dans le fichier .csv&lt;br /&gt;
  	file.write(data_dict)&lt;br /&gt;
 	 &lt;br /&gt;
	else :&lt;br /&gt;
  	self.send_response(404)&lt;br /&gt;
  	self.end_headers()&lt;br /&gt;
&lt;br /&gt;
class HTTPServerV6(HTTPServer):&lt;br /&gt;
    address_family = socket.AF_INET6&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  #Ouverture du fichier pour stocker les donnees&lt;br /&gt;
  #file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
  server = HTTPServerV6(('::',PORT),MyHandler)&lt;br /&gt;
  print(&amp;quot;Serveur actif sur le port :&amp;quot;, PORT)&lt;br /&gt;
  server.serve_forever()  &lt;br /&gt;
  #Fermeture du fichier&lt;br /&gt;
  file.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pout vérifier (de plus) si notre serveur est bien lancé, nous allons essayer d'y accéder grâce à une page web sur une zabeth de l'école à l'adresse suivante : http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080&lt;br /&gt;
[[Fichier:Accès serveur web.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
De la Raspberry Pi, on vérifie qu’on peut bien accéder au serveur Python HTTP : &lt;br /&gt;
[[Fichier:Test accès serveur avec curl.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des données de la Raspberry PI au serveur HTTP, nous avons créé un script Python qui va permettre d'envoyer ces données par des requêtes HTTP. Ce script sera bien évidemment lancé de la Raspberry PI. Pour que l'envoi de données fonctionne, nous devons alors lancer le script permettant le fonctionnement du serveur web sur le serveur delgodVM (commande python3 ./server.py). Et nous devons lancer simultanément le script reader.py sur la Raspberry PI. Le script est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial (&lt;br /&gt;
    # Port série pour lire les data&lt;br /&gt;
    port='/dev/ttyACM0',&lt;br /&gt;
    # Débit de la communication série&lt;br /&gt;
    baudrate=460800,&lt;br /&gt;
    # Check ds parités, ici on ne le fait pas&lt;br /&gt;
    parity=serial.PARITY_NONE,&lt;br /&gt;
    # Number of serial commands to accept before timing out&lt;br /&gt;
    timeout=1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Open function to open the file &amp;quot;store_data.csv&amp;quot;&lt;br /&gt;
#file = open(r&amp;quot;store_data.csv&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
    url = &amp;quot;http://[2001:660:4401:6050:216:3eff:fe1a:f9c3]:8080/data&amp;quot;&lt;br /&gt;
    x=ser.readline()&lt;br /&gt;
    output=str(x, 'UTF-8')&lt;br /&gt;
#   file.write(output)&lt;br /&gt;
    data = output&lt;br /&gt;
    response = requests.post(url,json=data)&lt;br /&gt;
    print (x)&lt;br /&gt;
    if reponse.status_code == 200:&lt;br /&gt;
      print(&amp;quot;Donnees envoyees avec succes&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      print(f&amp;quot;Échec de l'envoi. Code de statut : {response.status_code}&amp;quot;)&lt;br /&gt;
      print(response.text)&lt;br /&gt;
&lt;br /&gt;
#file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au final ,nous arrivons bien à recevoir les données sur le serveur Xen, par un paquet unique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Reception des données.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
Le fichier reader2.py permet d’envoyer les paquets de données au serveur, qui les reçoit.&lt;br /&gt;
&lt;br /&gt;
==Stockage des Données==&lt;br /&gt;
&lt;br /&gt;
Notre serveur Xen reçoit maintenant les données de la carte grâce aux requêtes HTTP. &lt;br /&gt;
Nous avons alors décidé de code un script python recevant les données et qui les stockes dans un fichier .csv sur le serveur afin de pouvoir par la suite utiliser les données du capteur.&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Entraînement du modèle d’apprentissage &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
==Entraînement sur NanoEdge AI Studio==&lt;br /&gt;
&lt;br /&gt;
Pour commencer la partie Entraînement, nous avons décidé de commencer par NanoEdge AI Studio. Ce logiciel développé par STMicroelectronics &lt;br /&gt;
&lt;br /&gt;
permet de &amp;quot;créer&amp;quot; une Intelligence Artificielle (IA), de manière simple et guidée.&lt;br /&gt;
&lt;br /&gt;
Pour créer cette IA, nous avons tout d'abord dû connecter la carte STMicroelectronics au PC et lancer NanoEdge AI Studio.&lt;br /&gt;
&lt;br /&gt;
Après avoir créé un projet &amp;quot;n-Class&amp;quot;, nous avons dû rentrer les signaux que nous voulions faire apprendre. Dans notre cas, ce sont les lettres de A à J qui vont être apprises.&lt;br /&gt;
&lt;br /&gt;
[[Fichier: SignauxNEAIS.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir fait tous les signaux que nous avons besoins, nous devons lancer le Benchmark.&lt;br /&gt;
&lt;br /&gt;
Le Benchmark est une sorte d'étalon, c'est dans cette partie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entraînement avec un script Python==&lt;br /&gt;
&lt;br /&gt;
=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 30px; padding: 10px; font-family: Helvetica ; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 90%; background: #FFC0CB; vertical-align: top; height:70%; width: 98%;&amp;quot;&amp;gt; Mise en place du modèle embarqué et des modèles hybrides &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Séance du 04/12/2023=&lt;br /&gt;
&lt;br /&gt;
AU cours de cette première séance, nous avons pu prendre en main les outils nécessaires à la réalisation de notre projet.&lt;br /&gt;
L’objectif était de construire un serveur Xen et de configurer la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
*Machine virtuelle sur Chassiron avec un accès internet IPv6.&lt;br /&gt;
*Image de la Raspberry Pi pour connexion avec le serveur via WiFi : nous avons installé une image ** sur la rapsberry pi&lt;br /&gt;
&lt;br /&gt;
=Séance du 18/12/2023=&lt;br /&gt;
Au cours de cette séance, nous allons tout d'abord &lt;br /&gt;
&lt;br /&gt;
* Développer un firmware embarqué pour collecter les données, avec STM32 Cube IDE et donc un programme permettant d'acquérir les données du capteur.&lt;br /&gt;
* Mettre en œuvre un protocole de communication entre les quatre objets et la Raspberry Pi en garantissant que toutes les données sont bien reçues. Utilisation de la liaison série entre la carte et le capteur. Sur le port ttyACM0, avec un script python lancé de la rapsberry. Les données du capteur sont ensuite stockées dans un fichier .csv.&lt;br /&gt;
&lt;br /&gt;
=Séance du 19/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Mise en place d'un serveur web http sur le serveur delgodVM pour permettre la communication grâce à des requêtes http entre la raspberry pi et le serveur. Tout ceci est réalisé grâce des scripts python.&lt;br /&gt;
&lt;br /&gt;
=Séance du 20/12/2023=&lt;br /&gt;
&lt;br /&gt;
*Transmission des datas récupérées par le capteur de la raspberry pi vers le serveur http.&lt;br /&gt;
*Vérfication de la réception de ces données brutes&lt;br /&gt;
*Début de l'apprentissage de notre AI, reconnaissance de la langue des signes&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3938</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3938"/>
		<updated>2024-01-16T17:50:57Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configuration des LV ===&lt;br /&gt;
&lt;br /&gt;
Tout d’abord monter les disques “manuellement” pour y placer nos répertoires. Tout d’abord il faut créer deux répertoires :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda3 &lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda4 &lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite devoir formater et créer les systèmes de fichiers, que nous allons par la suite associer aux répertoires créés au dessus :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda3&lt;br /&gt;
&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer les points de montage des partitions (la commande ici monte le système de fichier /dev/xvda3 sur le répertoire /mtn/xvda3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mount /dev/xvda3 /mnt/xvda3&lt;br /&gt;
root@exegol:~# mount /dev/xvda4 /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme le répertoire home est déjà vide, nous pouvons uniquement déplacer le répertoire /var sur le disque xvda4, mais par précaution nous le faisons aussi pour /home dans xvda3 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mv /var/* /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous faisons ensuite un lsblk pour lister les LVM sur notre serveur: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /mnt/xvda3&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier /etc/fstab pour monter correctement nos disques :&lt;br /&gt;
&lt;br /&gt;
Nous allons rajouter les lignes concernant `/dev/xvda3` et `/dev/xvda4`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# mettre repertoire /home de la VM jiruus dans la partition LVM jiruus-home&lt;br /&gt;
/dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
# mettre  repertoire /var de la VM jiruus dans la partition LVM jiruus-var&lt;br /&gt;
/dev/xvda4 /var ext4 defaults 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons démonter les 2 volumes/répertoires que nous avons créés :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# umount /mnt/xvda3&lt;br /&gt;
root@exegol:~# umount /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si nous faisons un lsblk, nous voyons bien que c’est démonté &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:/mnt# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk &lt;br /&gt;
xvda4 202:4    0   10G  0 disk&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons enfin, avec la commande suivante, monter tous les systèmes de fichiers qui sont spécifiés dans `/etc/fstab`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# mount -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier notre action, encore un lsblk :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /home&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /var&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et la on voit bien que notre xvda3 est monté sur /home et xvda4 sur /var&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services Internet =&lt;br /&gt;
&lt;br /&gt;
== Filtrage des services ==&lt;br /&gt;
Sur la machine mandataire, nous allons vérifier dans le fichier de log /var/log/auth.log si il y a des tentatives d’authentification par ssh. Vérification simplifiée par la commande suivante qui va nous donner le nombre d’authentifications qui ont fail sur environ une journée (contenu du fihcier de log): &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:/var/log# cat auth.log | grep Failed | wc -l&lt;br /&gt;
763&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple nous avons :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Jan 15 09:34:35 cruella sshd[15112]: Failed password for invalid user git from 64.227.185.241 port 33352 ssh2&lt;br /&gt;
Jan 15 09:41:21 cruella sshd[15122]: Failed password for invalid user guest from 64.227.185.241 port 52478 ssh2&lt;br /&gt;
Jan 15 09:48:07 cruella sshd[15127]: Failed password for invalid user www from 64.227.185.241 port 37134 ssh2&lt;br /&gt;
Jan 15 09:53:06 cruella sshd[15134]: Failed password for root from 193.105.134.95 port 54196 ssh2&lt;br /&gt;
Jan 15 09:55:01 cruella sshd[15136]: Failed password for invalid user mysql from 64.227.185.241 port 42730 ssh2&lt;br /&gt;
Jan 15 10:01:46 cruella sshd[15141]: Failed password for invalid user debian from 64.227.185.241 port 42378 ssh2&lt;br /&gt;
Jan 15 10:02:18 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:21 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:25 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:28 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:33 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:08:31 cruella sshd[15152]: Failed password for invalid user testuser from 64.227.185.241 port 52646 ssh2&lt;br /&gt;
Jan 15 10:15:20 cruella sshd[15157]: Failed password for invalid user pi from 64.227.185.241 port 56514 ssh2&lt;br /&gt;
Jan 15 10:22:05 cruella sshd[15170]: Failed password for invalid user hadoop from 64.227.185.241 port 49388 ssh2&lt;br /&gt;
Jan 15 10:28:51 cruella sshd[15372]: Failed password for invalid user steam from 64.227.185.241 port 39384 ssh2&lt;br /&gt;
Jan 15 10:35:40 cruella sshd[15502]: Failed password for invalid user test1 from 64.227.185.241 port 36486 ssh2&lt;br /&gt;
Jan 15 10:42:26 cruella sshd[15551]: Failed password for invalid user es from 64.227.185.241 port 39242 ssh2&lt;br /&gt;
Jan 15 10:49:16 cruella sshd[15559]: Failed password for invalid user deploy from 64.227.185.241 port 36742 ssh2&lt;br /&gt;
Jan 15 10:56:07 cruella sshd[15568]: Failed password for invalid user minecraft from 64.227.185.241 port 49322 ssh2&lt;br /&gt;
Jan 15 11:02:53 cruella sshd[15573]: Failed password for invalid user ftp from 64.227.185.241 port 49876 ssh2&lt;br /&gt;
Jan 15 11:09:39 cruella sshd[15580]: Failed password for invalid user test2 from 64.227.185.241 port 38594 ssh2&lt;br /&gt;
Jan 15 11:10:55 cruella sshd[15587]: Failed password for root from 185.246.128.133 port 9349 ssh2&lt;br /&gt;
Jan 15 11:16:23 cruella sshd[15605]: Failed password for invalid user student from 64.227.185.241 port 36814 ssh2&lt;br /&gt;
Jan 15 14:25:12 cruella sshd[16423]: Failed password for invalid user admin from 103.145.4.190 port 56230 ssh2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On remarque bien qu’on a des attaques, donc on installe fail2ban sur cruella (notre serveur mandataire). &amp;lt;br&amp;gt;&lt;br /&gt;
Nous allons modifier le fichier `/etc/fail2ban/jail.d/defaults-debian.conf` comme ce qui suit :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[sshd]&lt;br /&gt;
enabled = true&lt;br /&gt;
port     = ssh&lt;br /&gt;
filter   = sshd&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
actionban = ufw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier si les prisons sont bien actives :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:/etc/fail2ban# fail2ban-client status&lt;br /&gt;
Status&lt;br /&gt;
|- Number of jail:	1&lt;br /&gt;
`- Jail list:	sshd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons alors fait un test avec un camarade qui à essayé de se connecter plus de 3 fois (la conf avait été changée) : &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:~# cat /var/log/auth.log | grep Failed | tail&lt;br /&gt;
Jan 15 14:25:12 cruella sshd[16423]: Failed password for invalid user admin from 103.145.4.190 port 56230 ssh2&lt;br /&gt;
Jan 15 14:51:33 cruella sshd[17089]: Failed password for root from 184.72.82.0 port 56274 ssh2&lt;br /&gt;
Jan 15 14:51:37 cruella sshd[17091]: Failed password for root from 184.72.82.0 port 56278 ssh2&lt;br /&gt;
Jan 15 14:51:40 cruella sshd[17094]: Failed password for root from 184.72.82.0 port 55786 ssh2&lt;br /&gt;
Jan 15 14:51:44 cruella sshd[17097]: Failed password for root from 184.72.82.0 port 55788 ssh2&lt;br /&gt;
Jan 15 14:51:50 cruella sshd[17099]: Failed password for root from 184.72.82.0 port 55804 ssh2&lt;br /&gt;
Jan 15 15:50:48 cruella sshd[17565]: Failed password for root from 185.246.128.133 port 53811 ssh2&lt;br /&gt;
Jan 15 15:59:51 cruella sshd[17641]: Failed password for root from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45868 ssh2&lt;br /&gt;
Jan 15 16:00:12 cruella sshd[17652]: Failed password for invalid user gaby from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45870 ssh2&lt;br /&gt;
Jan 15 16:00:38 cruella sshd[17652]: Failed password for invalid user gaby from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45870 ssh2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:~# fail2ban-client status sshd&lt;br /&gt;
Status for the jail: sshd&lt;br /&gt;
|- Filter&lt;br /&gt;
|  |- Currently failed:	0&lt;br /&gt;
|  |- Total failed:	0&lt;br /&gt;
|  `- File list:	/var/log/auth.log&lt;br /&gt;
`- Actions&lt;br /&gt;
   |- Currently banned:	1&lt;br /&gt;
   |- Total banned:	1&lt;br /&gt;
   `- Banned IP list:	2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
On remarque bien qu’un adresse IP à été bannie, celle qui à tentée de se connecter plusieurs fois sans succès.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3937</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3937"/>
		<updated>2024-01-16T17:45:07Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Commandes faites par Mr.Redon à distance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
===Commandes faites par Mr.Redon à distance===&lt;br /&gt;
&lt;br /&gt;
==== Création des partitions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-home storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-home&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-var storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-var&amp;quot; created.&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier `/etc/exegol.cfg` pour y rajouter les partitions que nous voulons associer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-home,xvda3,w'&lt;br /&gt;
&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-var,xvda4,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer le commutateur virtuel. Pour cela nous allons mettre dans  `/etc/network/interfaces.d/cruella.cfg`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto cruella&lt;br /&gt;
&lt;br /&gt;
iface cruella inet manual&lt;br /&gt;
        bridge_ports none&lt;br /&gt;
&lt;br /&gt;
        post-up ip link set $IFACE up&lt;br /&gt;
&lt;br /&gt;
        post-down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, il faudrait réaliser la commande “ifup cruella”&lt;br /&gt;
&lt;br /&gt;
Avec ces commandes, l’interface est lancée.&lt;br /&gt;
&lt;br /&gt;
Dans les fichiers de configuration d’exegol (`/etc/xen/exegol.cfg`)rajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vif = [ 'bridge=SE5, mac=00:16:3E:5E:XX:XX' , 'bridge=cruella, mac=00:16:3E:5E:XX:XX+1' ]&lt;br /&gt;
&lt;br /&gt;
===Configuration des LV ===&lt;br /&gt;
&lt;br /&gt;
Tout d’abord monter les disques “manuellement” pour y placer nos répertoires. Tout d’abord il faut créer deux répertoires :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda3 &lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda4 &lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous vérifions si les répertoires ont bien été créées :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# cd /mnt&lt;br /&gt;
root@exegol:/mnt# ls&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite devoir formater et créer les systèmes de fichiers, que nous allons par la suite associer aux répertoires créés au dessus :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda3&lt;br /&gt;
*mke2fs 1.46.2 (28-Feb-2021)&lt;br /&gt;
Creating filesystem with 2621440 4k blocks and 655360 inodes&lt;br /&gt;
Filesystem UUID: 1651310e-2410-40c5-857b-482a2a99737b&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Writing superblocks and filesystem accounting information: done*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda4&lt;br /&gt;
*mke2fs 1.46.2 (28-Feb-2021)&lt;br /&gt;
Creating filesystem with 2621440 4k blocks and 655360 inodes&lt;br /&gt;
Filesystem UUID: 614d5d6c-9a0d-4bba-a3c3-237574601376&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Writing superblocks and filesystem accounting information: done*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer les points de montage des partitions (la commande ici monte le système de fichier /dev/xvda3 sur le répertoire /mtn/xvda3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mount /dev/xvda3 /mnt/xvda3&lt;br /&gt;
root@exegol:~# mount /dev/xvda4 /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme le répertoire home est déjà vide, nous pouvons uniquement déplacer le répertoire /var sur le disque xvda4, mais par précaution nous le faisons aussi pour /home dans xvda3 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mv /var/* /mnt/xvda4&lt;br /&gt;
root@exegol:~# mv /home/* /mnt/xvda3&lt;br /&gt;
mv: cannot stat '/home/*': No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*root@jiruus:~# cd /home/&lt;br /&gt;
root@jiruus:/home# ls -la&lt;br /&gt;
total 8&lt;br /&gt;
drwxr-xr-x  2 root root 4096 Oct 11  2021 .&lt;br /&gt;
drwxr-xr-x 22 root root 4096 Jan 22  2017 ..*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons ensuite un lsblk pour lister les LVM sur notre serveur: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /mnt/xvda3&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier /etc/fstab pour monter correctement nos disques :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# nano /etc/fstab&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons rajouter les lignes concernant `/dev/xvda3` et `/dev/xvda4`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/fstab: static file system information.&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;  &amp;lt;options&amp;gt;       &amp;lt;dump&amp;gt;  &amp;lt;pass&amp;gt;&lt;br /&gt;
proc            /proc           proc    defaults        0       0&lt;br /&gt;
devpts          /dev/pts        devpts  rw,noexec,nosuid,gid=5,mode=620 0  0&lt;br /&gt;
/dev/xvda1 none swap sw 0 0&lt;br /&gt;
/dev/xvda2 / ext4 noatime,nodiratime,errors=remount-ro 0 1&lt;br /&gt;
# mettre repertoire /home de la VM jiruus dans la partition LVM jiruus-home&lt;br /&gt;
/dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
# mettre  repertoire /var de la VM jiruus dans la partition LVM jiruus-var&lt;br /&gt;
/dev/xvda4 /var ext4 defaults 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons démonter les 2 volumes/répertoires que nous avons créé :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# umount /mnt/xvda3&lt;br /&gt;
root@exegol:~# umount /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si nous faisons un lsblk, nous voyons bien que c’est démonté (car on ne voit plus /mnt/xvdx dans la partie MOUNTPOINT)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:/mnt# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk &lt;br /&gt;
xvda4 202:4    0   10G  0 disk&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons enfin, avec la commande suivante, monter tous les systèmes de fichiers qui sont spécifiés dans `/etc/fstab`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# mount -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier notre action, encore un lsblk :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /home&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /var&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et la on voit bien que notre xvda3 est monté sur /home et xvda4 sur /var&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services Internet =&lt;br /&gt;
&lt;br /&gt;
== Filtrage des services ==&lt;br /&gt;
Sur la machine mandataire, nous allons vérifier dans le fichier de log /var/log/auth.log si il y a des tentatives d’authentification par ssh. Vérification simplifiée par la commande suivante qui va nous donner le nombre d’authentifications qui ont fail sur environ une journée (contenu du fihcier de log): &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:/var/log# cat auth.log | grep Failed | wc -l&lt;br /&gt;
763&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple nous avons :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Jan 15 09:34:35 cruella sshd[15112]: Failed password for invalid user git from 64.227.185.241 port 33352 ssh2&lt;br /&gt;
Jan 15 09:41:21 cruella sshd[15122]: Failed password for invalid user guest from 64.227.185.241 port 52478 ssh2&lt;br /&gt;
Jan 15 09:48:07 cruella sshd[15127]: Failed password for invalid user www from 64.227.185.241 port 37134 ssh2&lt;br /&gt;
Jan 15 09:53:06 cruella sshd[15134]: Failed password for root from 193.105.134.95 port 54196 ssh2&lt;br /&gt;
Jan 15 09:55:01 cruella sshd[15136]: Failed password for invalid user mysql from 64.227.185.241 port 42730 ssh2&lt;br /&gt;
Jan 15 10:01:46 cruella sshd[15141]: Failed password for invalid user debian from 64.227.185.241 port 42378 ssh2&lt;br /&gt;
Jan 15 10:02:18 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:21 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:25 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:28 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:33 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:08:31 cruella sshd[15152]: Failed password for invalid user testuser from 64.227.185.241 port 52646 ssh2&lt;br /&gt;
Jan 15 10:15:20 cruella sshd[15157]: Failed password for invalid user pi from 64.227.185.241 port 56514 ssh2&lt;br /&gt;
Jan 15 10:22:05 cruella sshd[15170]: Failed password for invalid user hadoop from 64.227.185.241 port 49388 ssh2&lt;br /&gt;
Jan 15 10:28:51 cruella sshd[15372]: Failed password for invalid user steam from 64.227.185.241 port 39384 ssh2&lt;br /&gt;
Jan 15 10:35:40 cruella sshd[15502]: Failed password for invalid user test1 from 64.227.185.241 port 36486 ssh2&lt;br /&gt;
Jan 15 10:42:26 cruella sshd[15551]: Failed password for invalid user es from 64.227.185.241 port 39242 ssh2&lt;br /&gt;
Jan 15 10:49:16 cruella sshd[15559]: Failed password for invalid user deploy from 64.227.185.241 port 36742 ssh2&lt;br /&gt;
Jan 15 10:56:07 cruella sshd[15568]: Failed password for invalid user minecraft from 64.227.185.241 port 49322 ssh2&lt;br /&gt;
Jan 15 11:02:53 cruella sshd[15573]: Failed password for invalid user ftp from 64.227.185.241 port 49876 ssh2&lt;br /&gt;
Jan 15 11:09:39 cruella sshd[15580]: Failed password for invalid user test2 from 64.227.185.241 port 38594 ssh2&lt;br /&gt;
Jan 15 11:10:55 cruella sshd[15587]: Failed password for root from 185.246.128.133 port 9349 ssh2&lt;br /&gt;
Jan 15 11:16:23 cruella sshd[15605]: Failed password for invalid user student from 64.227.185.241 port 36814 ssh2&lt;br /&gt;
Jan 15 14:25:12 cruella sshd[16423]: Failed password for invalid user admin from 103.145.4.190 port 56230 ssh2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On remarque bien qu’on a des attaques, donc on installe fail2ban sur cruella (notre serveur mandataire). &amp;lt;br&amp;gt;&lt;br /&gt;
Nous allons modifier le fichier `/etc/fail2ban/jail.d/defaults-debian.conf` comme ce qui suit :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[sshd]&lt;br /&gt;
enabled = true&lt;br /&gt;
port     = ssh&lt;br /&gt;
filter   = sshd&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
actionban = ufw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier si les prisons sont bien actives :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:/etc/fail2ban# fail2ban-client status&lt;br /&gt;
Status&lt;br /&gt;
|- Number of jail:	1&lt;br /&gt;
`- Jail list:	sshd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons alors fait un test avec un camarade qui à essayé de se connecter plus de 3 fois (la conf avait été changée) : &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:~# cat /var/log/auth.log | grep Failed | tail&lt;br /&gt;
Jan 15 14:25:12 cruella sshd[16423]: Failed password for invalid user admin from 103.145.4.190 port 56230 ssh2&lt;br /&gt;
Jan 15 14:51:33 cruella sshd[17089]: Failed password for root from 184.72.82.0 port 56274 ssh2&lt;br /&gt;
Jan 15 14:51:37 cruella sshd[17091]: Failed password for root from 184.72.82.0 port 56278 ssh2&lt;br /&gt;
Jan 15 14:51:40 cruella sshd[17094]: Failed password for root from 184.72.82.0 port 55786 ssh2&lt;br /&gt;
Jan 15 14:51:44 cruella sshd[17097]: Failed password for root from 184.72.82.0 port 55788 ssh2&lt;br /&gt;
Jan 15 14:51:50 cruella sshd[17099]: Failed password for root from 184.72.82.0 port 55804 ssh2&lt;br /&gt;
Jan 15 15:50:48 cruella sshd[17565]: Failed password for root from 185.246.128.133 port 53811 ssh2&lt;br /&gt;
Jan 15 15:59:51 cruella sshd[17641]: Failed password for root from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45868 ssh2&lt;br /&gt;
Jan 15 16:00:12 cruella sshd[17652]: Failed password for invalid user gaby from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45870 ssh2&lt;br /&gt;
Jan 15 16:00:38 cruella sshd[17652]: Failed password for invalid user gaby from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45870 ssh2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:~# fail2ban-client status sshd&lt;br /&gt;
Status for the jail: sshd&lt;br /&gt;
|- Filter&lt;br /&gt;
|  |- Currently failed:	0&lt;br /&gt;
|  |- Total failed:	0&lt;br /&gt;
|  `- File list:	/var/log/auth.log&lt;br /&gt;
`- Actions&lt;br /&gt;
   |- Currently banned:	1&lt;br /&gt;
   |- Total banned:	1&lt;br /&gt;
   `- Banned IP list:	2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
On remarque bien qu’un adresse IP à été bannie, celle qui à tentée de se connecter plusieurs fois sans succès.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3936</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3936"/>
		<updated>2024-01-16T17:43:32Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* commandes faites par Mr.Redon à distance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
===Commandes faites par Mr.Redon à distance===&lt;br /&gt;
&lt;br /&gt;
==== Création des partitions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-home storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-home&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-var storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-var&amp;quot; created.&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier `/etc/exegol.cfg` pour y rajouter les partitions que nous voulons associer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-home,xvda3,w'&lt;br /&gt;
&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-var,xvda4,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer le commutateur virtuel. Pour cela nous allons mettre dans  `/etc/network/interfaces.d/cruella.cfg`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto cruella&lt;br /&gt;
&lt;br /&gt;
iface cruella inet manual&lt;br /&gt;
        bridge_ports none&lt;br /&gt;
&lt;br /&gt;
        post-up ip link set $IFACE up&lt;br /&gt;
&lt;br /&gt;
        post-down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, il faudrait réaliser la commande “ifup cruella”&lt;br /&gt;
&lt;br /&gt;
Avec ces commandes, l’interface est lancée.&lt;br /&gt;
&lt;br /&gt;
Dans les fichiers de configuration d’exegol (`/etc/xen/exegol.cfg`)rajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vif = [ 'bridge=SE5, mac=00:16:3E:5E:XX:XX' , 'bridge=cruella, mac=00:16:3E:5E:XX:XX+1' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configuration des LV ===&lt;br /&gt;
&lt;br /&gt;
Tout d’abord monter les disques “manuellement” pour y placer nos répertoires. Tout d’abord il faut créer deux répertoires :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda3 &lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda4 &lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous vérifions si les répertoires ont bien été créées :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# cd /mnt&lt;br /&gt;
root@exegol:/mnt# ls&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite devoir formater et créer les systèmes de fichiers, que nous allons par la suite associer aux répertoires créés au dessus :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda3&lt;br /&gt;
*mke2fs 1.46.2 (28-Feb-2021)&lt;br /&gt;
Creating filesystem with 2621440 4k blocks and 655360 inodes&lt;br /&gt;
Filesystem UUID: 1651310e-2410-40c5-857b-482a2a99737b&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Writing superblocks and filesystem accounting information: done*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda4&lt;br /&gt;
*mke2fs 1.46.2 (28-Feb-2021)&lt;br /&gt;
Creating filesystem with 2621440 4k blocks and 655360 inodes&lt;br /&gt;
Filesystem UUID: 614d5d6c-9a0d-4bba-a3c3-237574601376&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Writing superblocks and filesystem accounting information: done*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer les points de montage des partitions (la commande ici monte le système de fichier /dev/xvda3 sur le répertoire /mtn/xvda3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mount /dev/xvda3 /mnt/xvda3&lt;br /&gt;
root@exegol:~# mount /dev/xvda4 /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme le répertoire home est déjà vide, nous pouvons uniquement déplacer le répertoire /var sur le disque xvda4, mais par précaution nous le faisons aussi pour /home dans xvda3 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mv /var/* /mnt/xvda4&lt;br /&gt;
root@exegol:~# mv /home/* /mnt/xvda3&lt;br /&gt;
mv: cannot stat '/home/*': No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*root@jiruus:~# cd /home/&lt;br /&gt;
root@jiruus:/home# ls -la&lt;br /&gt;
total 8&lt;br /&gt;
drwxr-xr-x  2 root root 4096 Oct 11  2021 .&lt;br /&gt;
drwxr-xr-x 22 root root 4096 Jan 22  2017 ..*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons ensuite un lsblk pour lister les LVM sur notre serveur: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /mnt/xvda3&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier /etc/fstab pour monter correctement nos disques :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# nano /etc/fstab&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons rajouter les lignes concernant `/dev/xvda3` et `/dev/xvda4`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/fstab: static file system information.&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;  &amp;lt;options&amp;gt;       &amp;lt;dump&amp;gt;  &amp;lt;pass&amp;gt;&lt;br /&gt;
proc            /proc           proc    defaults        0       0&lt;br /&gt;
devpts          /dev/pts        devpts  rw,noexec,nosuid,gid=5,mode=620 0  0&lt;br /&gt;
/dev/xvda1 none swap sw 0 0&lt;br /&gt;
/dev/xvda2 / ext4 noatime,nodiratime,errors=remount-ro 0 1&lt;br /&gt;
# mettre repertoire /home de la VM jiruus dans la partition LVM jiruus-home&lt;br /&gt;
/dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
# mettre  repertoire /var de la VM jiruus dans la partition LVM jiruus-var&lt;br /&gt;
/dev/xvda4 /var ext4 defaults 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons démonter les 2 volumes/répertoires que nous avons créé :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# umount /mnt/xvda3&lt;br /&gt;
root@exegol:~# umount /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si nous faisons un lsblk, nous voyons bien que c’est démonté (car on ne voit plus /mnt/xvdx dans la partie MOUNTPOINT)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:/mnt# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk &lt;br /&gt;
xvda4 202:4    0   10G  0 disk&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons enfin, avec la commande suivante, monter tous les systèmes de fichiers qui sont spécifiés dans `/etc/fstab`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# mount -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier notre action, encore un lsblk :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /home&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /var&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et la on voit bien que notre xvda3 est monté sur /home et xvda4 sur /var&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services Internet =&lt;br /&gt;
&lt;br /&gt;
== Filtrage des services ==&lt;br /&gt;
Sur la machine mandataire, nous allons vérifier dans le fichier de log /var/log/auth.log si il y a des tentatives d’authentification par ssh. Vérification simplifiée par la commande suivante qui va nous donner le nombre d’authentifications qui ont fail sur environ une journée (contenu du fihcier de log): &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:/var/log# cat auth.log | grep Failed | wc -l&lt;br /&gt;
763&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple nous avons :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Jan 15 09:34:35 cruella sshd[15112]: Failed password for invalid user git from 64.227.185.241 port 33352 ssh2&lt;br /&gt;
Jan 15 09:41:21 cruella sshd[15122]: Failed password for invalid user guest from 64.227.185.241 port 52478 ssh2&lt;br /&gt;
Jan 15 09:48:07 cruella sshd[15127]: Failed password for invalid user www from 64.227.185.241 port 37134 ssh2&lt;br /&gt;
Jan 15 09:53:06 cruella sshd[15134]: Failed password for root from 193.105.134.95 port 54196 ssh2&lt;br /&gt;
Jan 15 09:55:01 cruella sshd[15136]: Failed password for invalid user mysql from 64.227.185.241 port 42730 ssh2&lt;br /&gt;
Jan 15 10:01:46 cruella sshd[15141]: Failed password for invalid user debian from 64.227.185.241 port 42378 ssh2&lt;br /&gt;
Jan 15 10:02:18 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:21 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:25 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:28 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:33 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:08:31 cruella sshd[15152]: Failed password for invalid user testuser from 64.227.185.241 port 52646 ssh2&lt;br /&gt;
Jan 15 10:15:20 cruella sshd[15157]: Failed password for invalid user pi from 64.227.185.241 port 56514 ssh2&lt;br /&gt;
Jan 15 10:22:05 cruella sshd[15170]: Failed password for invalid user hadoop from 64.227.185.241 port 49388 ssh2&lt;br /&gt;
Jan 15 10:28:51 cruella sshd[15372]: Failed password for invalid user steam from 64.227.185.241 port 39384 ssh2&lt;br /&gt;
Jan 15 10:35:40 cruella sshd[15502]: Failed password for invalid user test1 from 64.227.185.241 port 36486 ssh2&lt;br /&gt;
Jan 15 10:42:26 cruella sshd[15551]: Failed password for invalid user es from 64.227.185.241 port 39242 ssh2&lt;br /&gt;
Jan 15 10:49:16 cruella sshd[15559]: Failed password for invalid user deploy from 64.227.185.241 port 36742 ssh2&lt;br /&gt;
Jan 15 10:56:07 cruella sshd[15568]: Failed password for invalid user minecraft from 64.227.185.241 port 49322 ssh2&lt;br /&gt;
Jan 15 11:02:53 cruella sshd[15573]: Failed password for invalid user ftp from 64.227.185.241 port 49876 ssh2&lt;br /&gt;
Jan 15 11:09:39 cruella sshd[15580]: Failed password for invalid user test2 from 64.227.185.241 port 38594 ssh2&lt;br /&gt;
Jan 15 11:10:55 cruella sshd[15587]: Failed password for root from 185.246.128.133 port 9349 ssh2&lt;br /&gt;
Jan 15 11:16:23 cruella sshd[15605]: Failed password for invalid user student from 64.227.185.241 port 36814 ssh2&lt;br /&gt;
Jan 15 14:25:12 cruella sshd[16423]: Failed password for invalid user admin from 103.145.4.190 port 56230 ssh2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On remarque bien qu’on a des attaques, donc on installe fail2ban sur cruella (notre serveur mandataire). &amp;lt;br&amp;gt;&lt;br /&gt;
Nous allons modifier le fichier `/etc/fail2ban/jail.d/defaults-debian.conf` comme ce qui suit :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[sshd]&lt;br /&gt;
enabled = true&lt;br /&gt;
port     = ssh&lt;br /&gt;
filter   = sshd&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
actionban = ufw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier si les prisons sont bien actives :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:/etc/fail2ban# fail2ban-client status&lt;br /&gt;
Status&lt;br /&gt;
|- Number of jail:	1&lt;br /&gt;
`- Jail list:	sshd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons alors fait un test avec un camarade qui à essayé de se connecter plus de 3 fois (la conf avait été changée) : &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:~# cat /var/log/auth.log | grep Failed | tail&lt;br /&gt;
Jan 15 14:25:12 cruella sshd[16423]: Failed password for invalid user admin from 103.145.4.190 port 56230 ssh2&lt;br /&gt;
Jan 15 14:51:33 cruella sshd[17089]: Failed password for root from 184.72.82.0 port 56274 ssh2&lt;br /&gt;
Jan 15 14:51:37 cruella sshd[17091]: Failed password for root from 184.72.82.0 port 56278 ssh2&lt;br /&gt;
Jan 15 14:51:40 cruella sshd[17094]: Failed password for root from 184.72.82.0 port 55786 ssh2&lt;br /&gt;
Jan 15 14:51:44 cruella sshd[17097]: Failed password for root from 184.72.82.0 port 55788 ssh2&lt;br /&gt;
Jan 15 14:51:50 cruella sshd[17099]: Failed password for root from 184.72.82.0 port 55804 ssh2&lt;br /&gt;
Jan 15 15:50:48 cruella sshd[17565]: Failed password for root from 185.246.128.133 port 53811 ssh2&lt;br /&gt;
Jan 15 15:59:51 cruella sshd[17641]: Failed password for root from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45868 ssh2&lt;br /&gt;
Jan 15 16:00:12 cruella sshd[17652]: Failed password for invalid user gaby from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45870 ssh2&lt;br /&gt;
Jan 15 16:00:38 cruella sshd[17652]: Failed password for invalid user gaby from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45870 ssh2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:~# fail2ban-client status sshd&lt;br /&gt;
Status for the jail: sshd&lt;br /&gt;
|- Filter&lt;br /&gt;
|  |- Currently failed:	0&lt;br /&gt;
|  |- Total failed:	0&lt;br /&gt;
|  `- File list:	/var/log/auth.log&lt;br /&gt;
`- Actions&lt;br /&gt;
   |- Currently banned:	1&lt;br /&gt;
   |- Total banned:	1&lt;br /&gt;
   `- Banned IP list:	2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
On remarque bien qu’un adresse IP à été bannie, celle qui à tentée de se connecter plusieurs fois sans succès.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3932</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3932"/>
		<updated>2024-01-16T17:17:27Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
===commandes faites par Mr.Redon à distance===&lt;br /&gt;
&lt;br /&gt;
==== Création des partitions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-home storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-home&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-var storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-var&amp;quot; created.&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier `/etc/exegol.cfg` pour y rajouter les partitions que nous voulons associer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-home,xvda3,w'&lt;br /&gt;
&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-var,xvda4,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer le commutateur virtuel. Pour cela nous allons mettre dans  `/etc/network/interfaces.d/cruella.cfg`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto cruella&lt;br /&gt;
&lt;br /&gt;
iface cruella inet manual&lt;br /&gt;
        bridge_ports none&lt;br /&gt;
&lt;br /&gt;
        post-up ip link set $IFACE up&lt;br /&gt;
&lt;br /&gt;
        post-down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, il faudrait réaliser la commande “ifup cruella”&lt;br /&gt;
&lt;br /&gt;
Avec ces commandes, l’interface est lancée.&lt;br /&gt;
&lt;br /&gt;
Dans les fichiers de configuration d’exegol (`/etc/xen/exegol.cfg`)rajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vif = [ 'bridge=SE5, mac=00:16:3E:5E:XX:XX' , 'bridge=cruella, mac=00:16:3E:5E:XX:XX+1' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configuration des LV ===&lt;br /&gt;
&lt;br /&gt;
Tout d’abord monter les disques “manuellement” pour y placer nos répertoires. Tout d’abord il faut créer deux répertoires :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda3 &lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda4 &lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous vérifions si les répertoires ont bien été créées :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# cd /mnt&lt;br /&gt;
root@exegol:/mnt# ls&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite devoir formater et créer les systèmes de fichiers, que nous allons par la suite associer aux répertoires créés au dessus :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda3&lt;br /&gt;
*mke2fs 1.46.2 (28-Feb-2021)&lt;br /&gt;
Creating filesystem with 2621440 4k blocks and 655360 inodes&lt;br /&gt;
Filesystem UUID: 1651310e-2410-40c5-857b-482a2a99737b&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Writing superblocks and filesystem accounting information: done*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda4&lt;br /&gt;
*mke2fs 1.46.2 (28-Feb-2021)&lt;br /&gt;
Creating filesystem with 2621440 4k blocks and 655360 inodes&lt;br /&gt;
Filesystem UUID: 614d5d6c-9a0d-4bba-a3c3-237574601376&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Writing superblocks and filesystem accounting information: done*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer les points de montage des partitions (la commande ici monte le système de fichier /dev/xvda3 sur le répertoire /mtn/xvda3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mount /dev/xvda3 /mnt/xvda3&lt;br /&gt;
root@exegol:~# mount /dev/xvda4 /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme le répertoire home est déjà vide, nous pouvons uniquement déplacer le répertoire /var sur le disque xvda4, mais par précaution nous le faisons aussi pour /home dans xvda3 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mv /var/* /mnt/xvda4&lt;br /&gt;
root@exegol:~# mv /home/* /mnt/xvda3&lt;br /&gt;
mv: cannot stat '/home/*': No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*root@jiruus:~# cd /home/&lt;br /&gt;
root@jiruus:/home# ls -la&lt;br /&gt;
total 8&lt;br /&gt;
drwxr-xr-x  2 root root 4096 Oct 11  2021 .&lt;br /&gt;
drwxr-xr-x 22 root root 4096 Jan 22  2017 ..*&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons ensuite un lsblk pour lister les LVM sur notre serveur: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /mnt/xvda3&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier /etc/fstab pour monter correctement nos disques :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# nano /etc/fstab&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons rajouter les lignes concernant `/dev/xvda3` et `/dev/xvda4`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/fstab: static file system information.&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;  &amp;lt;options&amp;gt;       &amp;lt;dump&amp;gt;  &amp;lt;pass&amp;gt;&lt;br /&gt;
proc            /proc           proc    defaults        0       0&lt;br /&gt;
devpts          /dev/pts        devpts  rw,noexec,nosuid,gid=5,mode=620 0  0&lt;br /&gt;
/dev/xvda1 none swap sw 0 0&lt;br /&gt;
/dev/xvda2 / ext4 noatime,nodiratime,errors=remount-ro 0 1&lt;br /&gt;
# mettre repertoire /home de la VM jiruus dans la partition LVM jiruus-home&lt;br /&gt;
/dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
# mettre  repertoire /var de la VM jiruus dans la partition LVM jiruus-var&lt;br /&gt;
/dev/xvda4 /var ext4 defaults 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons démonter les 2 volumes/répertoires que nous avons créé :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# umount /mnt/xvda3&lt;br /&gt;
root@exegol:~# umount /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si nous faisons un lsblk, nous voyons bien que c’est démonté (car on ne voit plus /mnt/xvdx dans la partie MOUNTPOINT)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:/mnt# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk &lt;br /&gt;
xvda4 202:4    0   10G  0 disk&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons enfin, avec la commande suivante, monter tous les systèmes de fichiers qui sont spécifiés dans `/etc/fstab`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# mount -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier notre action, encore un lsblk :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /home&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /var&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et la on voit bien que notre xvda3 est monté sur /home et xvda4 sur /var&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services Internet =&lt;br /&gt;
&lt;br /&gt;
== Filtrage des services ==&lt;br /&gt;
Sur la machine mandataire, nous allons vérifier dans le fichier de log /var/log/auth.log si il y a des tentatives d’authentification par ssh. Vérification simplifiée par la commande suivante qui va nous donner le nombre d’authentifications qui ont fail sur environ une journée (contenu du fihcier de log): &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:/var/log# cat auth.log | grep Failed | wc -l&lt;br /&gt;
763&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple nous avons :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Jan 15 09:34:35 cruella sshd[15112]: Failed password for invalid user git from 64.227.185.241 port 33352 ssh2&lt;br /&gt;
Jan 15 09:41:21 cruella sshd[15122]: Failed password for invalid user guest from 64.227.185.241 port 52478 ssh2&lt;br /&gt;
Jan 15 09:48:07 cruella sshd[15127]: Failed password for invalid user www from 64.227.185.241 port 37134 ssh2&lt;br /&gt;
Jan 15 09:53:06 cruella sshd[15134]: Failed password for root from 193.105.134.95 port 54196 ssh2&lt;br /&gt;
Jan 15 09:55:01 cruella sshd[15136]: Failed password for invalid user mysql from 64.227.185.241 port 42730 ssh2&lt;br /&gt;
Jan 15 10:01:46 cruella sshd[15141]: Failed password for invalid user debian from 64.227.185.241 port 42378 ssh2&lt;br /&gt;
Jan 15 10:02:18 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:21 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:25 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:28 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:02:33 cruella sshd[15145]: Failed password for invalid user Admin from 14.33.68.177 port 59271 ssh2&lt;br /&gt;
Jan 15 10:08:31 cruella sshd[15152]: Failed password for invalid user testuser from 64.227.185.241 port 52646 ssh2&lt;br /&gt;
Jan 15 10:15:20 cruella sshd[15157]: Failed password for invalid user pi from 64.227.185.241 port 56514 ssh2&lt;br /&gt;
Jan 15 10:22:05 cruella sshd[15170]: Failed password for invalid user hadoop from 64.227.185.241 port 49388 ssh2&lt;br /&gt;
Jan 15 10:28:51 cruella sshd[15372]: Failed password for invalid user steam from 64.227.185.241 port 39384 ssh2&lt;br /&gt;
Jan 15 10:35:40 cruella sshd[15502]: Failed password for invalid user test1 from 64.227.185.241 port 36486 ssh2&lt;br /&gt;
Jan 15 10:42:26 cruella sshd[15551]: Failed password for invalid user es from 64.227.185.241 port 39242 ssh2&lt;br /&gt;
Jan 15 10:49:16 cruella sshd[15559]: Failed password for invalid user deploy from 64.227.185.241 port 36742 ssh2&lt;br /&gt;
Jan 15 10:56:07 cruella sshd[15568]: Failed password for invalid user minecraft from 64.227.185.241 port 49322 ssh2&lt;br /&gt;
Jan 15 11:02:53 cruella sshd[15573]: Failed password for invalid user ftp from 64.227.185.241 port 49876 ssh2&lt;br /&gt;
Jan 15 11:09:39 cruella sshd[15580]: Failed password for invalid user test2 from 64.227.185.241 port 38594 ssh2&lt;br /&gt;
Jan 15 11:10:55 cruella sshd[15587]: Failed password for root from 185.246.128.133 port 9349 ssh2&lt;br /&gt;
Jan 15 11:16:23 cruella sshd[15605]: Failed password for invalid user student from 64.227.185.241 port 36814 ssh2&lt;br /&gt;
Jan 15 14:25:12 cruella sshd[16423]: Failed password for invalid user admin from 103.145.4.190 port 56230 ssh2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On remarque bien qu’on a des attaques, donc on installe fail2ban sur cruella (notre serveur mandataire). &amp;lt;br&amp;gt;&lt;br /&gt;
Nous allons modifier le fichier `/etc/fail2ban/jail.d/defaults-debian.conf` comme ce qui suit :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[sshd]&lt;br /&gt;
enabled = true&lt;br /&gt;
port     = ssh&lt;br /&gt;
filter   = sshd&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
actionban = ufw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier si les prisons sont bien actives :&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:/etc/fail2ban# fail2ban-client status&lt;br /&gt;
Status&lt;br /&gt;
|- Number of jail:	1&lt;br /&gt;
`- Jail list:	sshd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons alors fait un test avec un camarade qui à essayé de se connecter plus de 3 fois (la conf avait été changée) : &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:~# cat /var/log/auth.log | grep Failed | tail&lt;br /&gt;
Jan 15 14:25:12 cruella sshd[16423]: Failed password for invalid user admin from 103.145.4.190 port 56230 ssh2&lt;br /&gt;
Jan 15 14:51:33 cruella sshd[17089]: Failed password for root from 184.72.82.0 port 56274 ssh2&lt;br /&gt;
Jan 15 14:51:37 cruella sshd[17091]: Failed password for root from 184.72.82.0 port 56278 ssh2&lt;br /&gt;
Jan 15 14:51:40 cruella sshd[17094]: Failed password for root from 184.72.82.0 port 55786 ssh2&lt;br /&gt;
Jan 15 14:51:44 cruella sshd[17097]: Failed password for root from 184.72.82.0 port 55788 ssh2&lt;br /&gt;
Jan 15 14:51:50 cruella sshd[17099]: Failed password for root from 184.72.82.0 port 55804 ssh2&lt;br /&gt;
Jan 15 15:50:48 cruella sshd[17565]: Failed password for root from 185.246.128.133 port 53811 ssh2&lt;br /&gt;
Jan 15 15:59:51 cruella sshd[17641]: Failed password for root from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45868 ssh2&lt;br /&gt;
Jan 15 16:00:12 cruella sshd[17652]: Failed password for invalid user gaby from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45870 ssh2&lt;br /&gt;
Jan 15 16:00:38 cruella sshd[17652]: Failed password for invalid user gaby from 2a01:c916:2047:c800:216:3eff:fe82:8a5c port 45870 ssh2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cruella:~# fail2ban-client status sshd&lt;br /&gt;
Status for the jail: sshd&lt;br /&gt;
|- Filter&lt;br /&gt;
|  |- Currently failed:	0&lt;br /&gt;
|  |- Total failed:	0&lt;br /&gt;
|  `- File list:	/var/log/auth.log&lt;br /&gt;
`- Actions&lt;br /&gt;
   |- Currently banned:	1&lt;br /&gt;
   |- Total banned:	1&lt;br /&gt;
   `- Banned IP list:	2a01:c916:2047:c800:216:3eff:fe82:8a5c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
On remarque bien qu’un adresse IP à été bannie, celle qui à tentée de se connecter plusieurs fois sans succès.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3930</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3930"/>
		<updated>2024-01-16T17:14:27Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Création des VM==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen-create-image --hostname=exegol --dir=/usr/local/xen --dhcp --bridge=SE5 --password=glopglop --dist=chimaera --size=10GB --memory=1GB&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen create -c /etc/xen/exegol.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ même commandes pour créer cruella&lt;br /&gt;
&lt;br /&gt;
==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
===commandes faites par Mr.Redon à distance===&lt;br /&gt;
&lt;br /&gt;
==== Création des partitions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-home storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-home&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-var storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-var&amp;quot; created.&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier `/etc/exegol.cfg` pour y rajouter les partitions que nous voulons associer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-home,xvda3,w'&lt;br /&gt;
&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-var,xvda4,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer le commutateur virtuel. Pour cela nous allons mettre dans  `/etc/network/interfaces.d/cruella.cfg`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto cruella&lt;br /&gt;
&lt;br /&gt;
iface cruella inet manual&lt;br /&gt;
        bridge_ports none&lt;br /&gt;
&lt;br /&gt;
        post-up ip link set $IFACE up&lt;br /&gt;
&lt;br /&gt;
        post-down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, il faudrait réaliser la commande “ifup cruella”&lt;br /&gt;
&lt;br /&gt;
Avec ces commandes, l’interface est lancée.&lt;br /&gt;
&lt;br /&gt;
Dans les fichiers de configuration d’exegol (`/etc/xen/exegol.cfg`)rajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vif = [ 'bridge=SE5, mac=00:16:3E:5E:XX:XX' , 'bridge=cruella, mac=00:16:3E:5E:XX:XX+1' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configuration des LV ===&lt;br /&gt;
&lt;br /&gt;
Tout d’abord monter les disques “manuellement” pour y placer nos répertoires. Tout d’abord il faut créer deux répertoires :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;csyntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda3 &lt;br /&gt;
root@exegol:~# mkdir /mnt/xvda4 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous vérifions si les répertoires ont bien été créées :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# cd /mnt&lt;br /&gt;
root@exegol:/mnt# ls&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite devoir formater et créer les systèmes de fichiers, que nous allons par la suite associer aux répertoires créés au dessus :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda3&lt;br /&gt;
*mke2fs 1.46.2 (28-Feb-2021)&lt;br /&gt;
Creating filesystem with 2621440 4k blocks and 655360 inodes&lt;br /&gt;
Filesystem UUID: 1651310e-2410-40c5-857b-482a2a99737b&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Writing superblocks and filesystem accounting information: done*&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mkfs /dev/xvda4&lt;br /&gt;
*mke2fs 1.46.2 (28-Feb-2021)&lt;br /&gt;
Creating filesystem with 2621440 4k blocks and 655360 inodes&lt;br /&gt;
Filesystem UUID: 614d5d6c-9a0d-4bba-a3c3-237574601376&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Writing superblocks and filesystem accounting information: done*&lt;br /&gt;
&amp;lt;/syntaxligh&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer les points de montage des partitions (la commande ici monte le système de fichier /dev/xvda3 sur le répertoire /mtn/xvda3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mount /dev/xvda3 /mnt/xvda3&lt;br /&gt;
root@exegol:~# mount /dev/xvda4 /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme le répertoire home est déjà vide, nous pouvons uniquement déplacer le répertoire /var sur le disque xvda4, mais par précaution nous le faisons aussi pour /home dans xvda3 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# mv /var/* /mnt/xvda4&lt;br /&gt;
root@exegol:~# mv /home/* /mnt/xvda3&lt;br /&gt;
mv: cannot stat '/home/*': No such file or directory&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*root@jiruus:~# cd /home/&lt;br /&gt;
root@jiruus:/home# ls -la&lt;br /&gt;
total 8&lt;br /&gt;
drwxr-xr-x  2 root root 4096 Oct 11  2021 .&lt;br /&gt;
drwxr-xr-x 22 root root 4096 Jan 22  2017 ..*&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons ensuite un lsblk pour lister les LVM sur notre serveur: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /mnt/xvda3&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier /etc/fstab pour monter correctement nos disques :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# nano /etc/fstab&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons rajouter les lignes concernant `/dev/xvda3` et `/dev/xvda4`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/fstab: static file system information.&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;  &amp;lt;options&amp;gt;       &amp;lt;dump&amp;gt;  &amp;lt;pass&amp;gt;&lt;br /&gt;
proc            /proc           proc    defaults        0       0&lt;br /&gt;
devpts          /dev/pts        devpts  rw,noexec,nosuid,gid=5,mode=620 0  0&lt;br /&gt;
/dev/xvda1 none swap sw 0 0&lt;br /&gt;
/dev/xvda2 / ext4 noatime,nodiratime,errors=remount-ro 0 1&lt;br /&gt;
# mettre repertoire /home de la VM jiruus dans la partition LVM jiruus-home&lt;br /&gt;
/dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
# mettre  repertoire /var de la VM jiruus dans la partition LVM jiruus-var&lt;br /&gt;
/dev/xvda4 /var ext4 defaults 0 2&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons démonter les 2 volumes/répertoires que nous avons créé :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# umount /mnt/xvda3&lt;br /&gt;
root@exegol:~# umount /mnt/xvda4&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si nous faisons un lsblk, nous voyons bien que c’est démonté (car on ne voit plus /mnt/xvdx dans la partie MOUNTPOINT)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:/mnt# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk &lt;br /&gt;
xvda4 202:4    0   10G  0 disk&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous allons enfin, avec la commande suivante, monter tous les systèmes de fichiers qui sont spécifiés dans `/etc/fstab`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@exegol:~# mount -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier notre action, encore un lsblk :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@exegol:~# lsblk&lt;br /&gt;
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&lt;br /&gt;
xvda1 202:1    0  512M  0 disk [SWAP]&lt;br /&gt;
xvda2 202:2    0   10G  0 disk /&lt;br /&gt;
xvda3 202:3    0   10G  0 disk /home&lt;br /&gt;
xvda4 202:4    0   10G  0 disk /var&lt;br /&gt;
&amp;lt;/syntaxlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et la on voit bien que notre xvda3 est monté sur /home et xvda4 sur /var&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3923</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3923"/>
		<updated>2024-01-16T17:08:38Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Configuration des machines de services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Création des VM==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen-create-image --hostname=exegol --dir=/usr/local/xen --dhcp --bridge=SE5 --password=glopglop --dist=chimaera --size=10GB --memory=1GB&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen create -c /etc/xen/exegol.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ même commandes pour créer cruella&lt;br /&gt;
&lt;br /&gt;
==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
===commandes faites par Mr.Redon à distance===&lt;br /&gt;
&lt;br /&gt;
==== Création des partitions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-home storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-home&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-var storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-var&amp;quot; created.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier `/etc/exegol.cfg` pour y rajouter les partitions que nous voulons associer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-home,xvda3,w'&lt;br /&gt;
&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-var,xvda4,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer le commutateur virtuel. Pour cela nous allons mettre dans  `/etc/network/interfaces.d/cruella.cfg`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
auto cruella&lt;br /&gt;
&lt;br /&gt;
iface cruella inet manual&lt;br /&gt;
        bridge_ports none&lt;br /&gt;
&lt;br /&gt;
        post-up ip link set $IFACE up&lt;br /&gt;
&lt;br /&gt;
        post-down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, il faudrait réaliser la commande “ifup cruella”&lt;br /&gt;
&lt;br /&gt;
Avec ces commandes, l’interface est lancée.&lt;br /&gt;
&lt;br /&gt;
Dans les fichiers de configuration d’exegol (`/etc/xen/exegol.cfg`)rajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vif = [ 'bridge=SE5, mac=00:16:3E:5E:XX:XX' , 'bridge=cruella, mac=00:16:3E:5E:XX:XX+1' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3919</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3919"/>
		<updated>2024-01-16T17:06:52Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Création des partitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Création des VM==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen-create-image --hostname=exegol --dir=/usr/local/xen --dhcp --bridge=SE5 --password=glopglop --dist=chimaera --size=10GB --memory=1GB&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen create -c /etc/xen/exegol.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ même commandes pour créer cruella&lt;br /&gt;
&lt;br /&gt;
==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
commandes faites par Mr.Redon à distance&lt;br /&gt;
&lt;br /&gt;
=== Création des partitions ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-home storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-home&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-var storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-var&amp;quot; created.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier `/etc/exegol.cfg` pour y rajouter les partitions que nous voulons associer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-home,xvda3,w'&lt;br /&gt;
&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-var,xvda4,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer le commutateur virtuel. Pour cela nous allons mettre dans  `/etc/network/interfaces.d/cruella.cfg`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
auto cruella&lt;br /&gt;
&lt;br /&gt;
iface cruella inet manual&lt;br /&gt;
        bridge_ports none&lt;br /&gt;
&lt;br /&gt;
        post-up ip link set $IFACE up&lt;br /&gt;
&lt;br /&gt;
        post-down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, il faudrait réaliser la commande “ifup cruella”&lt;br /&gt;
&lt;br /&gt;
Avec ces commandes, l’interface est lancée.&lt;br /&gt;
&lt;br /&gt;
Dans les fichiers de configuration d’exegol (`/etc/xen/exegol.cfg`)rajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vif = [ 'bridge=SE5, mac=00:16:3E:5E:XX:XX' , 'bridge=cruella, mac=00:16:3E:5E:XX:XX+1' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3917</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3917"/>
		<updated>2024-01-16T17:06:12Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Configuration des machines de services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Création des VM==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen-create-image --hostname=exegol --dir=/usr/local/xen --dhcp --bridge=SE5 --password=glopglop --dist=chimaera --size=10GB --memory=1GB&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen create -c /etc/xen/exegol.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ même commandes pour créer cruella&lt;br /&gt;
&lt;br /&gt;
==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
commandes faites par Mr.Redon à distance&lt;br /&gt;
&lt;br /&gt;
=== Création des partitions ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-home storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-home&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-var storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-var&amp;quot; created.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier `/etc/exegol.cfg` pour y rajouter les partitions que nous voulons associer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-home,xvda3,w'&lt;br /&gt;
&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-var,xvda4,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer le commutateur virtuel. Pour cela nous allons mettre dans  `/etc/network/interfaces.d/cruella.cfg`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
auto cruella&lt;br /&gt;
&lt;br /&gt;
iface cruella inet manual&lt;br /&gt;
&lt;br /&gt;
        bridge_ports none&lt;br /&gt;
&lt;br /&gt;
        post-up ip link set $IFACE up&lt;br /&gt;
&lt;br /&gt;
        post-down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, il faudrait réaliser la commande “ifup cruella”&lt;br /&gt;
&lt;br /&gt;
Avec ces commandes, l’interface est lancée.&lt;br /&gt;
&lt;br /&gt;
Dans les fichiers de configuration d’exegol (`/etc/xen/exegol.cfg`)rajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vif = [ 'bridge=SE5, mac=00:16:3E:5E:XX:XX' , 'bridge=cruella, mac=00:16:3E:5E:XX:XX+1' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3915</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3915"/>
		<updated>2024-01-16T17:05:05Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Création des VM==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen-create-image --hostname=exegol --dir=/usr/local/xen --dhcp --bridge=SE5 --password=glopglop --dist=chimaera --size=10GB --memory=1GB&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen create -c /etc/xen/exegol.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ même commandes pour créer cruella&lt;br /&gt;
&lt;br /&gt;
==Configuration des machines de services==&lt;br /&gt;
&lt;br /&gt;
commandes faites par Mr.Redon à distance&lt;br /&gt;
&lt;br /&gt;
=== Création des partitions ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-home storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-home&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
root@capbreton:~# lvcreate -L 10G -n exegol-var storage&lt;br /&gt;
&lt;br /&gt;
Logical volume &amp;quot;exegol-var&amp;quot; created.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite modifier le fichier `/etc/exegol.cfg` pour y rajouter les partitions que nous voulons associer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-home,xvda3,w'&lt;br /&gt;
&lt;br /&gt;
'phy:/dev/&amp;lt;nomVG&amp;gt;/exegol-var,xvda4,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite créer le commutateur virtuel. Pour cela nous allons mettre dans  `/etc/network/interfaces.d/cruella.cfg`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
auto cruella&lt;br /&gt;
iface cruella inet manual&lt;br /&gt;
        bridge_ports none&lt;br /&gt;
        post-up ip link set $IFACE up&lt;br /&gt;
        post-down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, il faudrait réaliser la commande “ifup cruella”&lt;br /&gt;
&lt;br /&gt;
Avec ces commandes, l’interface est lancée.&lt;br /&gt;
&lt;br /&gt;
Dans les fichiers de configuration d’exegol (`/etc/xen/exegol.cfg`)rajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vif = [ 'bridge=SE5, mac=00:16:3E:5E:XX:XX' , 'bridge=cruella, mac=00:16:3E:5E:XX:XX+1' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3878</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3878"/>
		<updated>2024-01-16T16:32:02Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|700px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|600px]]&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3877</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3877"/>
		<updated>2024-01-16T16:31:45Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png|400px]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Wpa_psk_force_brute.png|400px]]&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3876</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3876"/>
		<updated>2024-01-16T16:31:13Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Cassage de clef WEP d'un point d'accès WiFi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fichier:Wpa_psk_force_brute.png]]&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3873</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3873"/>
		<updated>2024-01-16T16:30:03Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Partie en cours..... :)&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3868</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3868"/>
		<updated>2024-01-16T16:26:27Z</updated>

		<summary type="html">&lt;p&gt;Egodard : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Création des VM==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen-create-image --hostname=exegol --dir=/usr/local/xen --dhcp --bridge=SE5 --password=glopglop --dist=chimaera --size=10GB --memory=1GB&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
xen create -c /etc/xen/exegol.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ même commandes pour créer cruella&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
# This file describes the network interfaces available on your system&lt;br /&gt;
# and how to activate them. For more information, see interfaces(5).&lt;br /&gt;
&lt;br /&gt;
# The loopback network interface&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
# The primary network interface&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet dhcp&lt;br /&gt;
# post-up ethtool -K eth0 tx off&lt;br /&gt;
&lt;br /&gt;
#Interface dans le commutateur virtuel cruella&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
 address 192.168.19.2/24&lt;br /&gt;
 gateway 192.168.19.1&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# The commented out line above will disable TCP checksumming which&lt;br /&gt;
# might resolve problems for some users.  It is disabled by default&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Partie en cours..... :)&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3820</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3820"/>
		<updated>2024-01-16T10:50:33Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Cassage de mot de passe WPA-PSK par force brute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
&lt;br /&gt;
Partie en cours..... :)&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3819</id>
		<title>Atelier SysRes SE5 2023/2024 E16</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE5_2023/2024_E16&amp;diff=3819"/>
		<updated>2024-01-16T10:49:51Z</updated>

		<summary type="html">&lt;p&gt;Egodard : Page créée avec « == Effraction Wifi ==  === Avancée ===   ==== Cassage de clef WEP d'un point d'accès WiFi ==== Wifi : cracotte10 Machine :  zabeth02 Interface réseau : wlan1mon Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44  Fichier:Aircrack cracotte10.png ==== Cassage de mot de passe WPA-PSK par force brute ==== Wifi : cracotte10 Machine :  zabeth02 Interface réseau : wlan1mon Partie en cours :)))))) »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Effraction Wifi ==&lt;br /&gt;
&lt;br /&gt;
=== Avancée ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cassage de clef WEP d'un point d'accès WiFi ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
Clé WEP : 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Aircrack cracotte10.png]]&lt;br /&gt;
==== Cassage de mot de passe WPA-PSK par force brute ====&lt;br /&gt;
Wifi : cracotte10&lt;br /&gt;
Machine :  zabeth02&lt;br /&gt;
Interface réseau : wlan1mon&lt;br /&gt;
Partie en cours :))))))&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=3753</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=3753"/>
		<updated>2024-01-13T10:03:13Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Répartition des binômes en PRA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui Mohammed&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Blgrim Haitam&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Konstantin PATRIKEEV&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Karl HABRE&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Rémi FARAULT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en PRA ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| Elom|| || || Baloo|| || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| Mustafar (Mustafare)|| || mustafare.lol|| Baloo|| 193.48.57.189|| Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| Dagobah|| || || Aladin|| || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| Motis|| || || Dingo|| || Mohammed Halaoui&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| bogano|| || || Timon|| || Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| Takobo|| || || Timon|| 193.48.57.184|| Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| Fondor|| || || mushu|| 193.48.57.190|| Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| hoth|| || || BlancheNeige|| 193.48.57.187|| Haitam Blgrim&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| Abafar|| || abafar.lol|| Aladin|| 193.48.57.179|| Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| Rotia|| || || DIngo|| 193.48.57.181|| Rémi Farault&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| jedha|| || || judy|| 193.48.57.182|| Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| Bogden|| || || BlancheNeige|| || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| endor|| 10.10.10.10|| || mickey|| 193.48.57.188 / 10.10.10.1|| Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| jiruus|| 192.168.19.3|| jiruus.lol|| cruella|| || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| exegol|| 192.168.19.2|| exegol.lol|| cruella|| 193.48.57.186 /&lt;br /&gt;
192.168.19.1&lt;br /&gt;
| Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| Jakku|| || || Jafar|| || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| naboo|| 192.168.18.2|| naboo.lol|| bouh|| 193.48.57.180 / 192.168.18.1|| Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| geonosis|| 192.168.18.3|| geonosis.lol|| bouh|| || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| alderaan|| || || Jafar|| 193.48.57.183|| Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| kesh|| || || Judy|| || Konstantin Patrikeev&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| kashyyyk|| || || mushu|| || Maxime BALBASTRE&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| Felucia|| || || || 193.48.57.185|| François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| Pelagon|| 10.10.10.11|| || mickey|| 193.48.57.188 / 10.10.10.1|| Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
|[[Atelier SysRes SE5 2023/2024 E24 | Cahier n°25]]&lt;br /&gt;
|Kalee&lt;br /&gt;
|&lt;br /&gt;
|kalee.lol&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Karl Habre&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 20/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
A noter qu'aucune machine, quelle soit de service ou mandataire, ne peut avoir accès à Internet vu qu'aucun effort n'a été fait pour relier le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; au réseau SE5.&lt;br /&gt;
&lt;br /&gt;
Machines de service.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || || rien&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Liste des machines&lt;br /&gt;
&lt;br /&gt;
 Elom Mustafar dagobah Motis bogano Takobo Fondor hoth abafar Rotia jedha Bogden jiruus exegol Jakku naboo geonosis alderaan kesh kashyyyk Felucia&lt;br /&gt;
&lt;br /&gt;
 Baloo aladin Dingo Timon mushu BlancheNeige cruella Jafar bouh judy&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 03/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; a été relié au réseau SE5 par &amp;lt;code&amp;gt;naboo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il est normal de ne pas avoir d'adresse IPv4 sur la machine de services pour l'interface sur le commutateur virtuel. Par contre, avec mise en place de la mascarade sur la machine mandataire, il doit être possible, pour la machine de services, de se connecter à Internet en IPv4.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON&lt;br /&gt;
| IPv4 sur CV : 10.0.69.220, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe0f:b26d, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fea9:f79, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG&lt;br /&gt;
| IPv4 sur CV : 10.0.69.205, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe53:7d33, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui&lt;br /&gt;
| IPv4 sur CV : 10.0.69.195, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7c:2d6a, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen&lt;br /&gt;
| IPv4 sur CV : 10.0.69.245, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe62:6960, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier&lt;br /&gt;
| IPv4 sur CV : 10.0.69.181, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe93:8c48, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée&lt;br /&gt;
| IPv4 sur CV : 10.0.69.200, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe2d:82bf, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim&lt;br /&gt;
| IPv4 sur CV : 10.0.69.157, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee8:4736, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI&lt;br /&gt;
| IPv4 sur CV : 10.0.69.233, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feae:bcbb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault&lt;br /&gt;
| IPv4 sur CV : 10.0.69.130, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe2e:ec48, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.221, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fef6:364f, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste&lt;br /&gt;
| IPv4 sur CV : 10.0.69.246, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe67:89fd, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.247, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe9c:6f0e, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard&lt;br /&gt;
| IPv4 sur CV : 10.0.69.147, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe17:bc38, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY&lt;br /&gt;
| IPv4 sur CV : 10.0.69.136, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee1:1e4d, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire&lt;br /&gt;
| IPv4 sur CV : 192.168.18.2, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fef2:7e2, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS&lt;br /&gt;
| IPv4 sur CV : 10.0.69.231, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feb0:b140, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON&lt;br /&gt;
| IPv4 sur CV : 10.0.69.106, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe97:2114, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev&lt;br /&gt;
| IPv4 sur CV : 10.0.69.222, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe10:e2cb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE&lt;br /&gt;
| IPv4 sur CV : 10.0.69.240, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feca:73e7, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT&lt;br /&gt;
| IPv4 sur CV : 10.0.69.139, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe89:460a, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo &lt;br /&gt;
| IPv4 sur CV : 10.0.69.152, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fec8:5379, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin&lt;br /&gt;
| IPv4 sur CV : 10.0.69.107, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe6b:c000, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo&lt;br /&gt;
| IPv4 sur CV : 10.0.69.156, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe0d:4f9c, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon&lt;br /&gt;
| IPv4 sur CV : 10.0.69.104, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fedc:7539, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu&lt;br /&gt;
| IPv4 sur CV : 10.0.69.160, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe20:8816, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige&lt;br /&gt;
| IPv4 sur CV : 10.0.69.182, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feba:38f4, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella&lt;br /&gt;
| IPv4 sur CV : 10.0.69.108, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee5:ff99, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar&lt;br /&gt;
| IPv4 sur CV : 10.0.69.171, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe3e:f0bb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh&lt;br /&gt;
| IPv4 sur CV : 192.168.18.1, IPv4 sur SE5 : 193.48.57.180, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe4f:dde2, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy&lt;br /&gt;
| IPv4 sur CV : 10.0.69.216, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7d:4762, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 11/01/2024 ===&lt;br /&gt;
&lt;br /&gt;
Il est normal de ne pas avoir d'adresse IPv4 sur la machine de services pour l'interface sur le commutateur virtuel. Par contre, avec mise en place de la mascarade sur la machine mandataire, il doit être possible, pour la machine de services, de se connecter à Internet en IPv4.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Interfaces dans SE5 et CV !! Domaine Internet !! Accès &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; root !! DNS installé&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;elom.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;mustafare.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;dagobah.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;motis.hair&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;bogano.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;takobo.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;fondor.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;hoth.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;abafar.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault&lt;br /&gt;
| SE5 uniquement || Aucun&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux&lt;br /&gt;
| SE5 uniquement || Aucun&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;bodgen.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;jiruus.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;exegol.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;jakku.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;naboo.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;geonosis.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;alderaan.website&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;kesh.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;kashyyyk.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;felucia.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| pelagon || Paul AMOROS&lt;br /&gt;
| activée le 11/01/2024 (IPv6 &amp;lt;code&amp;gt;2001:660:4401:60b0:216:3eff:fe03:2af3&amp;lt;/code&amp;gt;) || &amp;lt;code&amp;gt;pelagon.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Kalee || Karl HABRE&lt;br /&gt;
| pas de machine virtuelle || &amp;lt;code&amp;gt;kalee.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Commutateur virtuel !! Interfaces dans SE5 et CV !! Accès &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; root !! DNS installé&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo &lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh&lt;br /&gt;
| Oui || Oui&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || mandataire inconnu&lt;br /&gt;
| || &lt;br /&gt;
| || &lt;br /&gt;
|-&lt;br /&gt;
| Paul AMOROS || mandataire inconnu&lt;br /&gt;
| || &lt;br /&gt;
| || &lt;br /&gt;
|-&lt;br /&gt;
| Karl HABRE || mandataire inconnu&lt;br /&gt;
| || &lt;br /&gt;
| || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en ASR ==&lt;br /&gt;
&lt;br /&gt;
Donnez les élèves dans chaque groupe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves &lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux &lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros &lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton &lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut &lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali &lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault &lt;br /&gt;
|-&lt;br /&gt;
|g13&lt;br /&gt;
|Maxime Balbastre &amp;amp; Florian Vallée&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le 05/11/2023, aucun commutateur virtuel correctement configuré, soit une adresse IPv4 sur le commutateur pour aucune raison, soit une configuration &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; non adaptée, pas de &amp;lt;code&amp;gt;up&amp;lt;/code&amp;gt; sur le commutateur virtuel.&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 05/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Migration !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || || jcharleu, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || kpatrikee, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || || gthomas, CV conf. erronée, MV mdp erroné, interf. vlan50 || clemair1, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, une seule interface réseau, pas de config. réseau&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || || bnguyen1, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || tbrenier, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || || drodenbu, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || fnaudot, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || || pas de CV, pas de MV || mdelaby, CV conf. erronée, pygrub dans la MV ? pas de routeur, faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || || hblgrim, CV conf. erronée, MV avec 2 interfaces, pas de MAC sur la 1ère, config. IPv4 OK || bblack, CV commenté, pas de MV (plus exactement une machine visible via &amp;lt;code&amp;gt;xen list&amp;lt;/code&amp;gt; mais pas de &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;/etc/xen&amp;lt;/code&amp;gt;), pas de routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || || jdelanno, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || amouton, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, une seule interface réseau&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || || mriffaut, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || esimon, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, pas de routeur&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || || jdelcour, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || egodard, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, deux interfaces réseau, changez l'ordre des interfaces dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || || khabre, CV conf. erronée, MV non créée, MV interf. vlan50, pas de config. IPv4 || asellali, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || || rfarault, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || pas de CV, MV interf. vlan50, pas de config. IPv4, pas de routeur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 20/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
A noter qu'un sacré coup de pouce aura été nécessaire pour configurer le routeur de promotion, avec un seul élève en appui.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Migration !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || || jcharleu, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || kpatrikee, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || || gthomas, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || clemair1, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4, routeur lancé et correctement configuré&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || || bnguyen1, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || tbrenier, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || || drodenbu, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || fnaudot, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || || toujours pas de CV, pas de VLAN, toujours pas de MV || mdelaby, CV configuration toujours erronée, pas de VLAN, toujours le bootloader &amp;lt;code&amp;gt;pygrub&amp;lt;/code&amp;gt; dans la MV (commenté), MV avec une seule interface réseau (dans le CV), configuration DHCP OK pour l'interface (dans le CV), toujours pas de routeur : il faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || || hblgrim, CV conf. toujours erronée, pas de VLAN, MV ne démarre pas à cause de l'erreur sur le CV (correction ReX sur le CV), MV avec 2 interfaces, pas de MAC sur la première interface dans le .cfg, configuration IPv4 OK dans la MV || bblack, CV configuration toujours erronée, pas de VLAN, toujours pas e &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; pour la MV, un routeur OpenWRT avec la bonne définition de disque, deux interface mais sans @MAC, aucune configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || || jdelanno, CV conf. toujours, erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || amouton, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, une seule interface réseau, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || || mriffaut, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || esimon, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || || jdelcour, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || egodard, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, deux interfaces réseau, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || || khabre, CV conf. toujours erronée, pas de VLAN, MV enfin créée avec une seule interface, pas de configuration IPv4 correcte || asellali, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, une seule interface, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || || rfarault, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || pas de CV, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 30/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || jcharleu, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || kpatrikee, CV et VLAN configurés mais dites moi comment vous trouvez 1 avec la formule &amp;lt;code&amp;gt;6+N%4&amp;lt;/code&amp;gt;, MV avec les bonnes interfaces, inversion dans la configuration IPv4 entre &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;enX1&amp;lt;/code&amp;gt;, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; par contre les deux interfaces demandées sont présentes.&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || gthomas, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4. || clemair1, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4, routeur lancé et correctement configuré.&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || bnguyen1, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || tbrenier, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant.&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || drodenbu, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || fnaudot, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant.&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || toujours pas de CV, pas de VLAN, toujours pas de MV. || mdelaby, CV configuration toujours erronée, pas de VLAN, toujours le bootloader &amp;lt;code&amp;gt;pygrub&amp;lt;/code&amp;gt; dans la MV (commenté), MV avec un chemin des disques étranges, MV avec une seule interface réseau (dans le CV), configuration DHCP OK pour l'interface (dans le CV), toujours pas de routeur : il faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || hblgrim, il manque les directives pour démarrer et arrêter les interfaces mais sinon CV et VLAN configurés, MV lancé et configurée, il ne faut pas de &amp;lt;code&amp;gt;gateway&amp;lt;/code&amp;gt; sur &amp;lt;code&amp;gt;enX1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son adresse par DHCP à cause du commutateur virtuel non activé. || bblack, CV et VLAN configurés mais pas toutes les directives de démarrage et d'arrêt, toujours pas de &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; pour la MV, un routeur OpenWRT avec la bonne définition de disque, deux interface mais sans @MAC, aucune configuration du routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || jdelanno, CV conf. toujours, erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte; || amouton, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, une seule interface réseau, pas de configuration du routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || mriffaut, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte. || esimon, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || jdelcour, CV configuré, VLAN configuré (par contre l'utilisation de &amp;lt;code&amp;gt;ether4&amp;lt;/code&amp;gt; est impossible), MV lancée et correctement configurée en IPv4, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son @IPv4 à cause de l'erreur sur le VLAN. || egodard, CV configuré, VLAN configuré (par contre l'utilisation de &amp;lt;code&amp;gt;ether4&amp;lt;/code&amp;gt; est impossible), MV avec deux interfaces, correctement configurée en IPv4, pas d'adresse obtenue par DHCP, problème de l'OpenWRT, routeur OpenWRT avec les bonnes interfaces, l'adresse IPv4 sur SE5 est donnée avec un mauvais masque, linterface &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; reçoit bien son adresse IPv4 par DHCP.&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || khabre, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface, pas de configuration IPv4 correcte || asellali, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, une seule interface, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || rfarault, CV configuré, VLAN configuré mais configuration commentée (pourquoi donc ?!), MV lancée et correctement configurée en IPv4, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son @IPv4 à cause de l'absence d'interface VLAN. || CV configuré, VLAN configuré, MV avec deux interfaces, correctement configurée en IPv4, un routeur avec les deux interfaces demandées, pas d'adresse IPv4 sur SE5, serveur DHCP fonctionnel.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 02/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! MV &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; !! MV &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; !! Routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet, une IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
| IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.180, une IPv6 routée sur Internet, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel (si ? non, inversion des &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| image disque du fichier de configuration non présente sur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt;&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas de fichier de configuration&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le fichier de configuration&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.116, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe01:754c, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.191, une IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le fichier de configuration, création du routeur impossible&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet, pas d'IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 05/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Pour utiliser l'interface Web LuCi des openWRT à partir d'une zabeth :&lt;br /&gt;
* vérifiez que vous avez bien une IPv6 routée sur IPv6 (avec &amp;lt;code&amp;gt;ip address show dev eth0&amp;lt;/code&amp;gt;, l'adresse commence par &amp;lt;code&amp;gt;2001:660:4401:60b0:&amp;lt;/code&amp;gt;) ;&lt;br /&gt;
* si vous n'en avez pas, prenez le suffixe (les derniers 8 octets de l'adresse locale, celle qui commence par &amp;lt;code&amp;gt;fe80::&amp;lt;/code&amp;gt;) et créez votre adresse IPv6 routée par la commande :&lt;br /&gt;
  ip address add dev eth0 2001:660:4401:60b0:&amp;lt;suffixe&amp;gt;/64&lt;br /&gt;
bien entendu vous n'aurez oublié de rajouter la route IPv6 par défaut vers le routeur de la promotion :&lt;br /&gt;
  ip -6 route add default via 2001:660:4401:60b0:6a9e:bff:fe46:5a76&lt;br /&gt;
* établissez un tunnel &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; avec la commande :&lt;br /&gt;
 zabethXX# ssh -L 6443:localhost:6443 root@IPv6&lt;br /&gt;
* connectez vous sur LuCi avec le navigateur de la zabeth pointant sur &amp;lt;code&amp;gt;https://localhost:6443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attention l'ordre des interfaces &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; a une importance.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! MV &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; !! MV &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; !! Routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet (puis &amp;lt;code&amp;gt;193.48.57.191&amp;lt;/code&amp;gt; donc une erreur), pas d'IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
| IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.180, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe31:b916, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen &lt;br /&gt;
| IPv4 sur CV : 10.0.69.130, IPv4 sur VLAN50 : 172.26.145.107, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feff:4c44, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.167, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.184, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feaa:f293, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
| IPv4 sur CV : 10.0.69.156, IPv4 sur VLAN50 : 172.26.145.109, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe46:70cd, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.106, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.185, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fec6:169, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros&lt;br /&gt;
| IPv4 sur CV : 10.0.69.189, IPv4 sur VLAN50 : 172.26.145.111, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe14:cdb5, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.171, IPv4 sur VLAN50 : 172.26.145.110, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe5b:b2b5, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.188, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe5b:b2b6, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
| IPv4 sur CV : 10.0.69.100, IPv4 sur VLAN50 : 172.26.145.113, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fef9:2bb9, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas de machine virtuelle&lt;br /&gt;
| bloquage du serveur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; par installation du routeur openWRT sous la racine, machine non contactable en IPv6 sur le SE5&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
| CV non configuré, machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudent&lt;br /&gt;
| pas d'adresse MAC dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut&lt;br /&gt;
| CV non configuré, machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| machine non contactable en IPv6 sur le SE5&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.191 (erreur !!), IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feb4:5ea4, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali&lt;br /&gt;
| machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault&lt;br /&gt;
| IPv4 sur CV : 10.0.69.131, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.181, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pas de changement sur les routeurs OpenWRT à 17h30.&lt;br /&gt;
&lt;br /&gt;
Pas de changement sur les MV d'&amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; à 18h00.&lt;br /&gt;
&lt;br /&gt;
Une seule modification sur les MV de &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; à 18h15 : la G7 (&amp;lt;code&amp;gt;g7jdelannoVM&amp;lt;/code&amp;gt;) est maintenant contactable (@IPv4 et @IPv6 sur le VLAN50) mais sans rien de plus.&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 06/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les routeurs openWRT (pas de relancement) :&lt;br /&gt;
&lt;br /&gt;
 G1 | IPv4 sur Internet : 193.48.57.191, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4&lt;br /&gt;
 G2 | IPv4 sur Internet : 193.48.57.180, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe31:b916, connexion à Internet en IPv4 possible&lt;br /&gt;
 G3 | IPv4 sur Internet : 193.48.57.184, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feaa:f293, connexion à Internet en IPv4 possible&lt;br /&gt;
 G4 | IPv4 sur Internet : 193.48.57.185, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fec6:169, connexion à Internet en IPv4 possible&lt;br /&gt;
 G5 | IPv4 sur Internet : 193.48.57.188, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe5b:b2b6, connexion à Internet en IPv4 possible&lt;br /&gt;
 G6 | IPv4 sur Internet : 193.48.57.187, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fef9:2bba, connexion à Internet en IPv4 possible&lt;br /&gt;
 G7 | Bad MAC address &lt;br /&gt;
 G8 | machine non contactable en IPv6 sur le SE5&lt;br /&gt;
 G9 | Rien&lt;br /&gt;
 G10 | IPv4 sur Internet : 193.48.57.186, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feb4:5ea4, pas de connexion à Internet en IPv4&lt;br /&gt;
 G11 | machine non contactable en IPv6 sur le SE5&lt;br /&gt;
 G12 | IPv4 sur Internet : 193.48.57.181, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les MV sur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 ==== g1kpatrikeevVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g2clemair1VM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g3tbrenierVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.167, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g4fnaudotVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.106, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g5mdelabyVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.171, IPv4 sur VLAN50 : 172.26.145.110, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe5b:b2b5, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g6bblackVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.113, IPv4 sur VLAN50 : 172.26.145.112, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe4a:d2be, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g7amoutonVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.114, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe59:7616, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g8esimonVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
 ==== g10egodardVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g11asellaliVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
 ==== g12mhalaouiVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les MV sur &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 ==== g1jcharleuxVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g2gthomasVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g3bnguyen1VM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.130, IPv4 sur VLAN50 : 172.26.145.107, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feff:4c44, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
 ==== g4drodenbuVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.156, IPv4 sur VLAN50 : 172.26.145.109, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe46:70cd, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g5pamorosVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.189, IPv4 sur VLAN50 : 172.26.145.111, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe14:cdb5, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g6hblgrimVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.100, IPv4 sur VLAN50 : 172.26.145.113, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fef9:2bb9, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
 ==== g7jdelannoVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.115, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe0f:aba1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g8mriffautVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
 ==== g10jdelcourVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g11khabreVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
 ==== g12rfaraultVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.131, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
&lt;br /&gt;
Trois groupes finissent à 17h : G2, G5 et G7.&lt;br /&gt;
&lt;br /&gt;
Un groupe à 17h20 : G6.&lt;br /&gt;
&lt;br /&gt;
Un groupe à 17h40 : G10.&lt;br /&gt;
&lt;br /&gt;
Le reste :&lt;br /&gt;
&lt;br /&gt;
  G8 -&amp;gt; installation du conteneur synapse&lt;br /&gt;
  G3 -&amp;gt; erreur à la connexion de la base de données, encodage ASCII&lt;br /&gt;
  G4 -&amp;gt; création de la base de données&lt;br /&gt;
  G12 -&amp;gt; problème à l'exécution du conteneur&lt;br /&gt;
  G11 -&amp;gt; essayent d'installer le conteneur synapse sur la zabeth&lt;br /&gt;
  G13 -&amp;gt; installation du mandataire inverse (reverse proxy nginx)&lt;br /&gt;
  G1 -&amp;gt; installation du conteneur synapse, se lance mais en échec&lt;br /&gt;
&lt;br /&gt;
G13 n'a pas mis à jour le tableau de répartition.&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=3752</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=3752"/>
		<updated>2024-01-13T10:00:31Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Répartition des binômes en PRA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui Mohammed&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Blgrim Haitam&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Konstantin PATRIKEEV&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Karl HABRE&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Rémi FARAULT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en PRA ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| Elom|| || || Baloo|| || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| Mustafar (Mustafare)|| || mustafare.lol|| Baloo|| 193.48.57.189|| Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| Dagobah|| || || Aladin|| || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| Motis|| || || Dingo|| || Mohammed Halaoui&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| bogano|| || || Timon|| || Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| Takobo|| || || Timon|| 193.48.57.184|| Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| Fondor|| || || mushu|| 193.48.57.190|| Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| hoth|| || || BlancheNeige|| 193.48.57.187|| Haitam Blgrim&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| Abafar|| || abafar.lol|| Aladin|| 193.48.57.179|| Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| Rotia|| || || DIngo|| 193.48.57.181|| Rémi Farault&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| jedha|| || || judy|| 193.48.57.182|| Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| Bogden|| || || BlancheNeige|| || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| endor|| 10.10.10.10|| || mickey|| 193.48.57.188 / 10.10.10.1|| Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| jiruus|| 192.168.19.3|| || cruella|| || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| exegol|| 192.168.19.2|| exegol.lol|| cruella|| 193.48.57.186 /&lt;br /&gt;
192.168.19.1&lt;br /&gt;
| Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| Jakku|| || || Jafar|| || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| naboo|| 192.168.18.2|| naboo.lol|| bouh|| 193.48.57.180 / 192.168.18.1|| Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| geonosis|| 192.168.18.3|| geonosis.lol|| bouh|| || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| alderaan|| || || Jafar|| 193.48.57.183|| Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| kesh|| || || Judy|| || Konstantin Patrikeev&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| kashyyyk|| || || mushu|| || Maxime BALBASTRE&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| Felucia|| || || || 193.48.57.185|| François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| Pelagon|| 10.10.10.11|| || mickey|| 193.48.57.188 / 10.10.10.1|| Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
|[[Atelier SysRes SE5 2023/2024 E24 | Cahier n°25]]&lt;br /&gt;
|Kalee&lt;br /&gt;
|&lt;br /&gt;
|kalee.lol&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Karl Habre&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 20/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
A noter qu'aucune machine, quelle soit de service ou mandataire, ne peut avoir accès à Internet vu qu'aucun effort n'a été fait pour relier le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; au réseau SE5.&lt;br /&gt;
&lt;br /&gt;
Machines de service.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || || rien&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Liste des machines&lt;br /&gt;
&lt;br /&gt;
 Elom Mustafar dagobah Motis bogano Takobo Fondor hoth abafar Rotia jedha Bogden jiruus exegol Jakku naboo geonosis alderaan kesh kashyyyk Felucia&lt;br /&gt;
&lt;br /&gt;
 Baloo aladin Dingo Timon mushu BlancheNeige cruella Jafar bouh judy&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 03/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; a été relié au réseau SE5 par &amp;lt;code&amp;gt;naboo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il est normal de ne pas avoir d'adresse IPv4 sur la machine de services pour l'interface sur le commutateur virtuel. Par contre, avec mise en place de la mascarade sur la machine mandataire, il doit être possible, pour la machine de services, de se connecter à Internet en IPv4.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON&lt;br /&gt;
| IPv4 sur CV : 10.0.69.220, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe0f:b26d, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fea9:f79, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG&lt;br /&gt;
| IPv4 sur CV : 10.0.69.205, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe53:7d33, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui&lt;br /&gt;
| IPv4 sur CV : 10.0.69.195, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7c:2d6a, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen&lt;br /&gt;
| IPv4 sur CV : 10.0.69.245, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe62:6960, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier&lt;br /&gt;
| IPv4 sur CV : 10.0.69.181, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe93:8c48, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée&lt;br /&gt;
| IPv4 sur CV : 10.0.69.200, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe2d:82bf, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim&lt;br /&gt;
| IPv4 sur CV : 10.0.69.157, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee8:4736, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI&lt;br /&gt;
| IPv4 sur CV : 10.0.69.233, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feae:bcbb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault&lt;br /&gt;
| IPv4 sur CV : 10.0.69.130, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe2e:ec48, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.221, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fef6:364f, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste&lt;br /&gt;
| IPv4 sur CV : 10.0.69.246, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe67:89fd, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.247, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe9c:6f0e, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard&lt;br /&gt;
| IPv4 sur CV : 10.0.69.147, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe17:bc38, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY&lt;br /&gt;
| IPv4 sur CV : 10.0.69.136, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee1:1e4d, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire&lt;br /&gt;
| IPv4 sur CV : 192.168.18.2, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fef2:7e2, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS&lt;br /&gt;
| IPv4 sur CV : 10.0.69.231, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feb0:b140, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON&lt;br /&gt;
| IPv4 sur CV : 10.0.69.106, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe97:2114, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev&lt;br /&gt;
| IPv4 sur CV : 10.0.69.222, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe10:e2cb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE&lt;br /&gt;
| IPv4 sur CV : 10.0.69.240, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feca:73e7, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT&lt;br /&gt;
| IPv4 sur CV : 10.0.69.139, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe89:460a, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo &lt;br /&gt;
| IPv4 sur CV : 10.0.69.152, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fec8:5379, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin&lt;br /&gt;
| IPv4 sur CV : 10.0.69.107, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe6b:c000, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo&lt;br /&gt;
| IPv4 sur CV : 10.0.69.156, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe0d:4f9c, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon&lt;br /&gt;
| IPv4 sur CV : 10.0.69.104, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fedc:7539, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu&lt;br /&gt;
| IPv4 sur CV : 10.0.69.160, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe20:8816, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige&lt;br /&gt;
| IPv4 sur CV : 10.0.69.182, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feba:38f4, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella&lt;br /&gt;
| IPv4 sur CV : 10.0.69.108, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee5:ff99, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar&lt;br /&gt;
| IPv4 sur CV : 10.0.69.171, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe3e:f0bb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh&lt;br /&gt;
| IPv4 sur CV : 192.168.18.1, IPv4 sur SE5 : 193.48.57.180, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe4f:dde2, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy&lt;br /&gt;
| IPv4 sur CV : 10.0.69.216, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7d:4762, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 11/01/2024 ===&lt;br /&gt;
&lt;br /&gt;
Il est normal de ne pas avoir d'adresse IPv4 sur la machine de services pour l'interface sur le commutateur virtuel. Par contre, avec mise en place de la mascarade sur la machine mandataire, il doit être possible, pour la machine de services, de se connecter à Internet en IPv4.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Interfaces dans SE5 et CV !! Domaine Internet !! Accès &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; root !! DNS installé&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;elom.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;mustafare.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;dagobah.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;motis.hair&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;bogano.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;takobo.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;fondor.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;hoth.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;abafar.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault&lt;br /&gt;
| SE5 uniquement || Aucun&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux&lt;br /&gt;
| SE5 uniquement || Aucun&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;bodgen.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;jiruus.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;exegol.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;jakku.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;naboo.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;geonosis.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;alderaan.website&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;kesh.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;kashyyyk.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT&lt;br /&gt;
| SE5 uniquement || &amp;lt;code&amp;gt;felucia.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| pelagon || Paul AMOROS&lt;br /&gt;
| activée le 11/01/2024 (IPv6 &amp;lt;code&amp;gt;2001:660:4401:60b0:216:3eff:fe03:2af3&amp;lt;/code&amp;gt;) || &amp;lt;code&amp;gt;pelagon.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Kalee || Karl HABRE&lt;br /&gt;
| pas de machine virtuelle || &amp;lt;code&amp;gt;kalee.lol&amp;lt;/code&amp;gt;&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Commutateur virtuel !! Interfaces dans SE5 et CV !! Accès &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; root !! DNS installé&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo &lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh&lt;br /&gt;
| Oui || Oui&lt;br /&gt;
| Ajouté || Non&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy&lt;br /&gt;
| Non || Non&lt;br /&gt;
| Non || Non&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || mandataire inconnu&lt;br /&gt;
| || &lt;br /&gt;
| || &lt;br /&gt;
|-&lt;br /&gt;
| Paul AMOROS || mandataire inconnu&lt;br /&gt;
| || &lt;br /&gt;
| || &lt;br /&gt;
|-&lt;br /&gt;
| Karl HABRE || mandataire inconnu&lt;br /&gt;
| || &lt;br /&gt;
| || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en ASR ==&lt;br /&gt;
&lt;br /&gt;
Donnez les élèves dans chaque groupe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves &lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux &lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros &lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton &lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut &lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali &lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault &lt;br /&gt;
|-&lt;br /&gt;
|g13&lt;br /&gt;
|Maxime Balbastre &amp;amp; Florian Vallée&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le 05/11/2023, aucun commutateur virtuel correctement configuré, soit une adresse IPv4 sur le commutateur pour aucune raison, soit une configuration &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; non adaptée, pas de &amp;lt;code&amp;gt;up&amp;lt;/code&amp;gt; sur le commutateur virtuel.&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 05/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Migration !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || || jcharleu, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || kpatrikee, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || || gthomas, CV conf. erronée, MV mdp erroné, interf. vlan50 || clemair1, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, une seule interface réseau, pas de config. réseau&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || || bnguyen1, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || tbrenier, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || || drodenbu, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || fnaudot, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || || pas de CV, pas de MV || mdelaby, CV conf. erronée, pygrub dans la MV ? pas de routeur, faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || || hblgrim, CV conf. erronée, MV avec 2 interfaces, pas de MAC sur la 1ère, config. IPv4 OK || bblack, CV commenté, pas de MV (plus exactement une machine visible via &amp;lt;code&amp;gt;xen list&amp;lt;/code&amp;gt; mais pas de &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;/etc/xen&amp;lt;/code&amp;gt;), pas de routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || || jdelanno, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || amouton, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, une seule interface réseau&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || || mriffaut, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || esimon, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, pas de routeur&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || || jdelcour, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || egodard, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, deux interfaces réseau, changez l'ordre des interfaces dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || || khabre, CV conf. erronée, MV non créée, MV interf. vlan50, pas de config. IPv4 || asellali, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || || rfarault, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || pas de CV, MV interf. vlan50, pas de config. IPv4, pas de routeur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 20/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
A noter qu'un sacré coup de pouce aura été nécessaire pour configurer le routeur de promotion, avec un seul élève en appui.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Migration !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || || jcharleu, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || kpatrikee, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || || gthomas, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || clemair1, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4, routeur lancé et correctement configuré&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || || bnguyen1, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || tbrenier, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || || drodenbu, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || fnaudot, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || || toujours pas de CV, pas de VLAN, toujours pas de MV || mdelaby, CV configuration toujours erronée, pas de VLAN, toujours le bootloader &amp;lt;code&amp;gt;pygrub&amp;lt;/code&amp;gt; dans la MV (commenté), MV avec une seule interface réseau (dans le CV), configuration DHCP OK pour l'interface (dans le CV), toujours pas de routeur : il faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || || hblgrim, CV conf. toujours erronée, pas de VLAN, MV ne démarre pas à cause de l'erreur sur le CV (correction ReX sur le CV), MV avec 2 interfaces, pas de MAC sur la première interface dans le .cfg, configuration IPv4 OK dans la MV || bblack, CV configuration toujours erronée, pas de VLAN, toujours pas e &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; pour la MV, un routeur OpenWRT avec la bonne définition de disque, deux interface mais sans @MAC, aucune configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || || jdelanno, CV conf. toujours, erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || amouton, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, une seule interface réseau, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || || mriffaut, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || esimon, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || || jdelcour, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || egodard, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, deux interfaces réseau, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || || khabre, CV conf. toujours erronée, pas de VLAN, MV enfin créée avec une seule interface, pas de configuration IPv4 correcte || asellali, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, une seule interface, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || || rfarault, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || pas de CV, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 30/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || jcharleu, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || kpatrikee, CV et VLAN configurés mais dites moi comment vous trouvez 1 avec la formule &amp;lt;code&amp;gt;6+N%4&amp;lt;/code&amp;gt;, MV avec les bonnes interfaces, inversion dans la configuration IPv4 entre &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;enX1&amp;lt;/code&amp;gt;, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; par contre les deux interfaces demandées sont présentes.&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || gthomas, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4. || clemair1, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4, routeur lancé et correctement configuré.&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || bnguyen1, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || tbrenier, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant.&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || drodenbu, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || fnaudot, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant.&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || toujours pas de CV, pas de VLAN, toujours pas de MV. || mdelaby, CV configuration toujours erronée, pas de VLAN, toujours le bootloader &amp;lt;code&amp;gt;pygrub&amp;lt;/code&amp;gt; dans la MV (commenté), MV avec un chemin des disques étranges, MV avec une seule interface réseau (dans le CV), configuration DHCP OK pour l'interface (dans le CV), toujours pas de routeur : il faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || hblgrim, il manque les directives pour démarrer et arrêter les interfaces mais sinon CV et VLAN configurés, MV lancé et configurée, il ne faut pas de &amp;lt;code&amp;gt;gateway&amp;lt;/code&amp;gt; sur &amp;lt;code&amp;gt;enX1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son adresse par DHCP à cause du commutateur virtuel non activé. || bblack, CV et VLAN configurés mais pas toutes les directives de démarrage et d'arrêt, toujours pas de &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; pour la MV, un routeur OpenWRT avec la bonne définition de disque, deux interface mais sans @MAC, aucune configuration du routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || jdelanno, CV conf. toujours, erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte; || amouton, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, une seule interface réseau, pas de configuration du routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || mriffaut, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte. || esimon, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || jdelcour, CV configuré, VLAN configuré (par contre l'utilisation de &amp;lt;code&amp;gt;ether4&amp;lt;/code&amp;gt; est impossible), MV lancée et correctement configurée en IPv4, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son @IPv4 à cause de l'erreur sur le VLAN. || egodard, CV configuré, VLAN configuré (par contre l'utilisation de &amp;lt;code&amp;gt;ether4&amp;lt;/code&amp;gt; est impossible), MV avec deux interfaces, correctement configurée en IPv4, pas d'adresse obtenue par DHCP, problème de l'OpenWRT, routeur OpenWRT avec les bonnes interfaces, l'adresse IPv4 sur SE5 est donnée avec un mauvais masque, linterface &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; reçoit bien son adresse IPv4 par DHCP.&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || khabre, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface, pas de configuration IPv4 correcte || asellali, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, une seule interface, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || rfarault, CV configuré, VLAN configuré mais configuration commentée (pourquoi donc ?!), MV lancée et correctement configurée en IPv4, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son @IPv4 à cause de l'absence d'interface VLAN. || CV configuré, VLAN configuré, MV avec deux interfaces, correctement configurée en IPv4, un routeur avec les deux interfaces demandées, pas d'adresse IPv4 sur SE5, serveur DHCP fonctionnel.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 02/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! MV &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; !! MV &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; !! Routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet, une IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
| IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.180, une IPv6 routée sur Internet, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel (si ? non, inversion des &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| image disque du fichier de configuration non présente sur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt;&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas de fichier de configuration&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le fichier de configuration&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.116, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe01:754c, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.191, une IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le fichier de configuration, création du routeur impossible&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet, pas d'IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 05/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Pour utiliser l'interface Web LuCi des openWRT à partir d'une zabeth :&lt;br /&gt;
* vérifiez que vous avez bien une IPv6 routée sur IPv6 (avec &amp;lt;code&amp;gt;ip address show dev eth0&amp;lt;/code&amp;gt;, l'adresse commence par &amp;lt;code&amp;gt;2001:660:4401:60b0:&amp;lt;/code&amp;gt;) ;&lt;br /&gt;
* si vous n'en avez pas, prenez le suffixe (les derniers 8 octets de l'adresse locale, celle qui commence par &amp;lt;code&amp;gt;fe80::&amp;lt;/code&amp;gt;) et créez votre adresse IPv6 routée par la commande :&lt;br /&gt;
  ip address add dev eth0 2001:660:4401:60b0:&amp;lt;suffixe&amp;gt;/64&lt;br /&gt;
bien entendu vous n'aurez oublié de rajouter la route IPv6 par défaut vers le routeur de la promotion :&lt;br /&gt;
  ip -6 route add default via 2001:660:4401:60b0:6a9e:bff:fe46:5a76&lt;br /&gt;
* établissez un tunnel &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; avec la commande :&lt;br /&gt;
 zabethXX# ssh -L 6443:localhost:6443 root@IPv6&lt;br /&gt;
* connectez vous sur LuCi avec le navigateur de la zabeth pointant sur &amp;lt;code&amp;gt;https://localhost:6443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attention l'ordre des interfaces &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; a une importance.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! MV &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; !! MV &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; !! Routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet (puis &amp;lt;code&amp;gt;193.48.57.191&amp;lt;/code&amp;gt; donc une erreur), pas d'IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
| IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.180, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe31:b916, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen &lt;br /&gt;
| IPv4 sur CV : 10.0.69.130, IPv4 sur VLAN50 : 172.26.145.107, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feff:4c44, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.167, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.184, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feaa:f293, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
| IPv4 sur CV : 10.0.69.156, IPv4 sur VLAN50 : 172.26.145.109, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe46:70cd, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.106, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.185, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fec6:169, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros&lt;br /&gt;
| IPv4 sur CV : 10.0.69.189, IPv4 sur VLAN50 : 172.26.145.111, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe14:cdb5, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.171, IPv4 sur VLAN50 : 172.26.145.110, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe5b:b2b5, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.188, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe5b:b2b6, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
| IPv4 sur CV : 10.0.69.100, IPv4 sur VLAN50 : 172.26.145.113, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fef9:2bb9, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas de machine virtuelle&lt;br /&gt;
| bloquage du serveur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; par installation du routeur openWRT sous la racine, machine non contactable en IPv6 sur le SE5&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
| CV non configuré, machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudent&lt;br /&gt;
| pas d'adresse MAC dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut&lt;br /&gt;
| CV non configuré, machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| machine non contactable en IPv6 sur le SE5&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.191 (erreur !!), IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feb4:5ea4, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali&lt;br /&gt;
| machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault&lt;br /&gt;
| IPv4 sur CV : 10.0.69.131, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.181, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pas de changement sur les routeurs OpenWRT à 17h30.&lt;br /&gt;
&lt;br /&gt;
Pas de changement sur les MV d'&amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; à 18h00.&lt;br /&gt;
&lt;br /&gt;
Une seule modification sur les MV de &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; à 18h15 : la G7 (&amp;lt;code&amp;gt;g7jdelannoVM&amp;lt;/code&amp;gt;) est maintenant contactable (@IPv4 et @IPv6 sur le VLAN50) mais sans rien de plus.&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 06/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les routeurs openWRT (pas de relancement) :&lt;br /&gt;
&lt;br /&gt;
 G1 | IPv4 sur Internet : 193.48.57.191, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4&lt;br /&gt;
 G2 | IPv4 sur Internet : 193.48.57.180, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe31:b916, connexion à Internet en IPv4 possible&lt;br /&gt;
 G3 | IPv4 sur Internet : 193.48.57.184, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feaa:f293, connexion à Internet en IPv4 possible&lt;br /&gt;
 G4 | IPv4 sur Internet : 193.48.57.185, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fec6:169, connexion à Internet en IPv4 possible&lt;br /&gt;
 G5 | IPv4 sur Internet : 193.48.57.188, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe5b:b2b6, connexion à Internet en IPv4 possible&lt;br /&gt;
 G6 | IPv4 sur Internet : 193.48.57.187, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fef9:2bba, connexion à Internet en IPv4 possible&lt;br /&gt;
 G7 | Bad MAC address &lt;br /&gt;
 G8 | machine non contactable en IPv6 sur le SE5&lt;br /&gt;
 G9 | Rien&lt;br /&gt;
 G10 | IPv4 sur Internet : 193.48.57.186, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feb4:5ea4, pas de connexion à Internet en IPv4&lt;br /&gt;
 G11 | machine non contactable en IPv6 sur le SE5&lt;br /&gt;
 G12 | IPv4 sur Internet : 193.48.57.181, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les MV sur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 ==== g1kpatrikeevVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g2clemair1VM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g3tbrenierVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.167, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g4fnaudotVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.106, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g5mdelabyVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.171, IPv4 sur VLAN50 : 172.26.145.110, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe5b:b2b5, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g6bblackVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.113, IPv4 sur VLAN50 : 172.26.145.112, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe4a:d2be, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g7amoutonVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.114, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe59:7616, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g8esimonVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
 ==== g10egodardVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g11asellaliVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
 ==== g12mhalaouiVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les MV sur &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 ==== g1jcharleuxVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g2gthomasVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g3bnguyen1VM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.130, IPv4 sur VLAN50 : 172.26.145.107, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feff:4c44, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
 ==== g4drodenbuVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.156, IPv4 sur VLAN50 : 172.26.145.109, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe46:70cd, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g5pamorosVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.189, IPv4 sur VLAN50 : 172.26.145.111, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe14:cdb5, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g6hblgrimVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.100, IPv4 sur VLAN50 : 172.26.145.113, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fef9:2bb9, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
 ==== g7jdelannoVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.115, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe0f:aba1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g8mriffautVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
 ==== g10jdelcourVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g11khabreVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
 ==== g12rfaraultVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.131, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
&lt;br /&gt;
Trois groupes finissent à 17h : G2, G5 et G7.&lt;br /&gt;
&lt;br /&gt;
Un groupe à 17h20 : G6.&lt;br /&gt;
&lt;br /&gt;
Un groupe à 17h40 : G10.&lt;br /&gt;
&lt;br /&gt;
Le reste :&lt;br /&gt;
&lt;br /&gt;
  G8 -&amp;gt; installation du conteneur synapse&lt;br /&gt;
  G3 -&amp;gt; erreur à la connexion de la base de données, encodage ASCII&lt;br /&gt;
  G4 -&amp;gt; création de la base de données&lt;br /&gt;
  G12 -&amp;gt; problème à l'exécution du conteneur&lt;br /&gt;
  G11 -&amp;gt; essayent d'installer le conteneur synapse sur la zabeth&lt;br /&gt;
  G13 -&amp;gt; installation du mandataire inverse (reverse proxy nginx)&lt;br /&gt;
  G1 -&amp;gt; installation du conteneur synapse, se lance mais en échec&lt;br /&gt;
&lt;br /&gt;
G13 n'a pas mis à jour le tableau de répartition.&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=3319</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=3319"/>
		<updated>2023-12-06T11:04:36Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Répartition des binômes en PRA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui Mohammed&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Blgrim Haitam&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Konstantin PATRIKEEV&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Karl HABRE&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Rémi FARAULT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en PRA ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| Elom|| || || Baloo|| || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| Mustafar|| || || Baloo|| 193.48.57.189|| Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| Dagobah|| || || Aladin|| || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| Motis|| || || Dingo|| || Mohammed Halaoui&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| bogano|| || || Timon|| || Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| Takobo|| || || Timon|| 193.48.57.184|| Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| Fondor|| || || mushu|| 193.48.57.190|| Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| hoth|| || || BlancheNeige|| 193.48.57.187|| Haitam Blgrim&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| Abafar|| || || Aladin|| 193.48.57.179|| Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| Rotia|| || || DIngo|| 193.48.57.181|| Rémi Farault&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| jedha|| || || judy|| 193.48.57.182|| Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| Bogden|| || || BlancheNeige|| || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| || || || || 193.48.57.188|| Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| jiruus|| || || cruella|| || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| exegol|| || || cruella|| 193.48.57.186|| Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| Jakku|| || || Jafar|| || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| naboo|| 192.168.18.2|| naboo.lol|| bouh|| 193.48.57.180 / 192.168.18.1|| Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| geonosis|| || geonosis.lol|| bouh|| || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| alderaan|| || || Jafar|| 193.48.57.183|| Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| kesh|| || || Judy|| || Konstantin Patrikeev&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| kashyyyk|| || || mushu|| || Maxime BALBASTRE&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| Felucia|| || || || 193.48.57.185|| François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| Pelagon|| || || || || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 20/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
A noter qu'aucune machine, quelle soit de service ou mandataire, ne peut avoir accès à Internet vu qu'aucun effort n'a été fait pour relier le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; au réseau SE5.&lt;br /&gt;
&lt;br /&gt;
Machines de service.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || || rien&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Liste des machines&lt;br /&gt;
&lt;br /&gt;
 Elom Mustafar dagobah Motis bogano Takobo Fondor hoth abafar Rotia jedha Bogden jiruus exegol Jakku naboo geonosis alderaan kesh kashyyyk Felucia&lt;br /&gt;
&lt;br /&gt;
 Baloo aladin Dingo Timon mushu BlancheNeige cruella Jafar bouh judy&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 03/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; a été relié au réseau SE5 par &amp;lt;code&amp;gt;naboo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il est normal de ne pas avoir d'adresse IPv4 sur la machine de services pour l'interface sur le commutateur virtuel. Par contre, avec mise en place de la mascarade sur la machine mandataire, il doit être possible, pour la machine de services, de se connecter à Internet en IPv4.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON&lt;br /&gt;
| IPv4 sur CV : 10.0.69.220, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe0f:b26d, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fea9:f79, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG&lt;br /&gt;
| IPv4 sur CV : 10.0.69.205, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe53:7d33, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui&lt;br /&gt;
| IPv4 sur CV : 10.0.69.195, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7c:2d6a, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen&lt;br /&gt;
| IPv4 sur CV : 10.0.69.245, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe62:6960, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier&lt;br /&gt;
| IPv4 sur CV : 10.0.69.181, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe93:8c48, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée&lt;br /&gt;
| IPv4 sur CV : 10.0.69.200, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe2d:82bf, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim&lt;br /&gt;
| IPv4 sur CV : 10.0.69.157, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee8:4736, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI&lt;br /&gt;
| IPv4 sur CV : 10.0.69.233, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feae:bcbb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault&lt;br /&gt;
| IPv4 sur CV : 10.0.69.130, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe2e:ec48, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.221, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fef6:364f, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste&lt;br /&gt;
| IPv4 sur CV : 10.0.69.246, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe67:89fd, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.247, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe9c:6f0e, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard&lt;br /&gt;
| IPv4 sur CV : 10.0.69.147, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe17:bc38, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY&lt;br /&gt;
| IPv4 sur CV : 10.0.69.136, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee1:1e4d, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire&lt;br /&gt;
| IPv4 sur CV : 192.168.18.2, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fef2:7e2, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS&lt;br /&gt;
| IPv4 sur CV : 10.0.69.231, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feb0:b140, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON&lt;br /&gt;
| IPv4 sur CV : 10.0.69.106, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe97:2114, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev&lt;br /&gt;
| IPv4 sur CV : 10.0.69.222, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe10:e2cb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE&lt;br /&gt;
| IPv4 sur CV : 10.0.69.240, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feca:73e7, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT&lt;br /&gt;
| IPv4 sur CV : 10.0.69.139, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe89:460a, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo &lt;br /&gt;
| IPv4 sur CV : 10.0.69.152, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fec8:5379, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin&lt;br /&gt;
| IPv4 sur CV : 10.0.69.107, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe6b:c000, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo&lt;br /&gt;
| IPv4 sur CV : 10.0.69.156, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe0d:4f9c, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon&lt;br /&gt;
| IPv4 sur CV : 10.0.69.104, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fedc:7539, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu&lt;br /&gt;
| IPv4 sur CV : 10.0.69.160, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe20:8816, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige&lt;br /&gt;
| IPv4 sur CV : 10.0.69.182, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feba:38f4, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella&lt;br /&gt;
| IPv4 sur CV : 10.0.69.108, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee5:ff99, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar&lt;br /&gt;
| IPv4 sur CV : 10.0.69.171, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe3e:f0bb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh&lt;br /&gt;
| IPv4 sur CV : 192.168.18.1, IPv4 sur SE5 : 193.48.57.180, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe4f:dde2, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy&lt;br /&gt;
| IPv4 sur CV : 10.0.69.216, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7d:4762, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en ASR ==&lt;br /&gt;
&lt;br /&gt;
Donnez les élèves dans chaque groupe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves &lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux &lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros &lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton &lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut &lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali &lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault &lt;br /&gt;
|-&lt;br /&gt;
|g13&lt;br /&gt;
|Maxime Balbastre &amp;amp; Florian Vallée&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le 05/11/2023, aucun commutateur virtuel correctement configuré, soit une adresse IPv4 sur le commutateur pour aucune raison, soit une configuration &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; non adaptée, pas de &amp;lt;code&amp;gt;up&amp;lt;/code&amp;gt; sur le commutateur virtuel.&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 05/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Migration !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || || jcharleu, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || kpatrikee, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || || gthomas, CV conf. erronée, MV mdp erroné, interf. vlan50 || clemair1, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, une seule interface réseau, pas de config. réseau&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || || bnguyen1, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || tbrenier, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || || drodenbu, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || fnaudot, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || || pas de CV, pas de MV || mdelaby, CV conf. erronée, pygrub dans la MV ? pas de routeur, faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || || hblgrim, CV conf. erronée, MV avec 2 interfaces, pas de MAC sur la 1ère, config. IPv4 OK || bblack, CV commenté, pas de MV (plus exactement une machine visible via &amp;lt;code&amp;gt;xen list&amp;lt;/code&amp;gt; mais pas de &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;/etc/xen&amp;lt;/code&amp;gt;), pas de routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || || jdelanno, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || amouton, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, une seule interface réseau&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || || mriffaut, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || esimon, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, pas de routeur&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || || jdelcour, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || egodard, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, deux interfaces réseau, changez l'ordre des interfaces dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || || khabre, CV conf. erronée, MV non créée, MV interf. vlan50, pas de config. IPv4 || asellali, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || || rfarault, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || pas de CV, MV interf. vlan50, pas de config. IPv4, pas de routeur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 20/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
A noter qu'un sacré coup de pouce aura été nécessaire pour configurer le routeur de promotion, avec un seul élève en appui.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Migration !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || || jcharleu, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || kpatrikee, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || || gthomas, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || clemair1, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4, routeur lancé et correctement configuré&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || || bnguyen1, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || tbrenier, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || || drodenbu, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || fnaudot, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || || toujours pas de CV, pas de VLAN, toujours pas de MV || mdelaby, CV configuration toujours erronée, pas de VLAN, toujours le bootloader &amp;lt;code&amp;gt;pygrub&amp;lt;/code&amp;gt; dans la MV (commenté), MV avec une seule interface réseau (dans le CV), configuration DHCP OK pour l'interface (dans le CV), toujours pas de routeur : il faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || || hblgrim, CV conf. toujours erronée, pas de VLAN, MV ne démarre pas à cause de l'erreur sur le CV (correction ReX sur le CV), MV avec 2 interfaces, pas de MAC sur la première interface dans le .cfg, configuration IPv4 OK dans la MV || bblack, CV configuration toujours erronée, pas de VLAN, toujours pas e &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; pour la MV, un routeur OpenWRT avec la bonne définition de disque, deux interface mais sans @MAC, aucune configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || || jdelanno, CV conf. toujours, erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || amouton, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, une seule interface réseau, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || || mriffaut, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || esimon, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || || jdelcour, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || egodard, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, deux interfaces réseau, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || || khabre, CV conf. toujours erronée, pas de VLAN, MV enfin créée avec une seule interface, pas de configuration IPv4 correcte || asellali, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, une seule interface, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || || rfarault, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || pas de CV, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 30/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || jcharleu, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || kpatrikee, CV et VLAN configurés mais dites moi comment vous trouvez 1 avec la formule &amp;lt;code&amp;gt;6+N%4&amp;lt;/code&amp;gt;, MV avec les bonnes interfaces, inversion dans la configuration IPv4 entre &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;enX1&amp;lt;/code&amp;gt;, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; par contre les deux interfaces demandées sont présentes.&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || gthomas, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4. || clemair1, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4, routeur lancé et correctement configuré.&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || bnguyen1, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || tbrenier, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant.&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || drodenbu, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || fnaudot, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant.&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || toujours pas de CV, pas de VLAN, toujours pas de MV. || mdelaby, CV configuration toujours erronée, pas de VLAN, toujours le bootloader &amp;lt;code&amp;gt;pygrub&amp;lt;/code&amp;gt; dans la MV (commenté), MV avec un chemin des disques étranges, MV avec une seule interface réseau (dans le CV), configuration DHCP OK pour l'interface (dans le CV), toujours pas de routeur : il faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || hblgrim, il manque les directives pour démarrer et arrêter les interfaces mais sinon CV et VLAN configurés, MV lancé et configurée, il ne faut pas de &amp;lt;code&amp;gt;gateway&amp;lt;/code&amp;gt; sur &amp;lt;code&amp;gt;enX1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son adresse par DHCP à cause du commutateur virtuel non activé. || bblack, CV et VLAN configurés mais pas toutes les directives de démarrage et d'arrêt, toujours pas de &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; pour la MV, un routeur OpenWRT avec la bonne définition de disque, deux interface mais sans @MAC, aucune configuration du routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || jdelanno, CV conf. toujours, erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte; || amouton, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, une seule interface réseau, pas de configuration du routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || mriffaut, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte. || esimon, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || jdelcour, CV configuré, VLAN configuré (par contre l'utilisation de &amp;lt;code&amp;gt;ether4&amp;lt;/code&amp;gt; est impossible), MV lancée et correctement configurée en IPv4, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son @IPv4 à cause de l'erreur sur le VLAN. || egodard, CV configuré, VLAN configuré (par contre l'utilisation de &amp;lt;code&amp;gt;ether4&amp;lt;/code&amp;gt; est impossible), MV avec deux interfaces, correctement configurée en IPv4, pas d'adresse obtenue par DHCP, problème de l'OpenWRT, routeur OpenWRT avec les bonnes interfaces, l'adresse IPv4 sur SE5 est donnée avec un mauvais masque, linterface &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; reçoit bien son adresse IPv4 par DHCP.&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || khabre, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface, pas de configuration IPv4 correcte || asellali, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, une seule interface, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || rfarault, CV configuré, VLAN configuré mais configuration commentée (pourquoi donc ?!), MV lancée et correctement configurée en IPv4, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son @IPv4 à cause de l'absence d'interface VLAN. || CV configuré, VLAN configuré, MV avec deux interfaces, correctement configurée en IPv4, un routeur avec les deux interfaces demandées, pas d'adresse IPv4 sur SE5, serveur DHCP fonctionnel.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 02/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! MV &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; !! MV &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; !! Routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet, une IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
| IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.180, une IPv6 routée sur Internet, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel (si ? non, inversion des &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| image disque du fichier de configuration non présente sur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt;&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas de fichier de configuration&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le fichier de configuration&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.116, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe01:754c, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.191, une IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le fichier de configuration, création du routeur impossible&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet, pas d'IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 05/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Pour utiliser l'interface Web LuCi des openWRT à partir d'une zabeth :&lt;br /&gt;
* vérifiez que vous avez bien une IPv6 routée sur IPv6 (avec &amp;lt;code&amp;gt;ip address show dev eth0&amp;lt;/code&amp;gt;, l'adresse commence par &amp;lt;code&amp;gt;2001:660:4401:60b0:&amp;lt;/code&amp;gt;) ;&lt;br /&gt;
* si vous n'en avez pas, prenez le suffixe (les derniers 8 octets de l'adresse locale, celle qui commence par &amp;lt;code&amp;gt;fe80::&amp;lt;/code&amp;gt;) et créez votre adresse IPv6 routée par la commande :&lt;br /&gt;
  ip address add dev eth0 2001:660:4401:60b0:&amp;lt;suffixe&amp;gt;/64&lt;br /&gt;
bien entendu vous n'aurez oublié de rajouter la route IPv6 par défaut vers le routeur de la promotion :&lt;br /&gt;
  ip -6 route add default via 2001:660:4401:60b0:6a9e:bff:fe46:5a76&lt;br /&gt;
* établissez un tunnel &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; avec la commande :&lt;br /&gt;
 zabethXX# ssh -L 6443:localhost:6443 root@IPv6&lt;br /&gt;
* connectez vous sur LuCi avec le navigateur de la zabeth pointant sur &amp;lt;code&amp;gt;https://localhost:6443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attention l'ordre des interfaces &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; a une importance.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! MV &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; !! MV &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; !! Routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet (puis &amp;lt;code&amp;gt;193.48.57.191&amp;lt;/code&amp;gt; donc une erreur), pas d'IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
| IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.180, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe31:b916, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen &lt;br /&gt;
| IPv4 sur CV : 10.0.69.130, IPv4 sur VLAN50 : 172.26.145.107, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feff:4c44, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.167, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.184, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feaa:f293, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
| IPv4 sur CV : 10.0.69.156, IPv4 sur VLAN50 : 172.26.145.109, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe46:70cd, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.106, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.185, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fec6:169, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros&lt;br /&gt;
| IPv4 sur CV : 10.0.69.189, IPv4 sur VLAN50 : 172.26.145.111, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe14:cdb5, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.171, IPv4 sur VLAN50 : 172.26.145.110, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe5b:b2b5, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.188, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe5b:b2b6, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
| IPv4 sur CV : 10.0.69.100, IPv4 sur VLAN50 : 172.26.145.113, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fef9:2bb9, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas de machine virtuelle&lt;br /&gt;
| bloquage du serveur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; par installation du routeur openWRT sous la racine, machine non contactable en IPv6 sur le SE5&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
| CV non configuré, machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudent&lt;br /&gt;
| pas d'adresse MAC dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut&lt;br /&gt;
| CV non configuré, machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| machine non contactable en IPv6 sur le SE5&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.191 (erreur !!), IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feb4:5ea4, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali&lt;br /&gt;
| machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault&lt;br /&gt;
| IPv4 sur CV : 10.0.69.131, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.181, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pas de changement sur les routeurs OpenWRT à 17h30.&lt;br /&gt;
&lt;br /&gt;
Pas de changement sur les MV d'&amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; à 18h00.&lt;br /&gt;
&lt;br /&gt;
Une seule modification sur les MV de &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; à 18h15 : la G7 (&amp;lt;code&amp;gt;g7jdelannoVM&amp;lt;/code&amp;gt;) est maintenant contactable (@IPv4 et @IPv6 sur le VLAN50) mais sans rien de plus.&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 06/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les routeurs openWRT (pas de relancement) :&lt;br /&gt;
&lt;br /&gt;
 G1 | IPv4 sur Internet : 193.48.57.191, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4&lt;br /&gt;
 G2 | IPv4 sur Internet : 193.48.57.180, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe31:b916, connexion à Internet en IPv4 possible&lt;br /&gt;
 G3 | IPv4 sur Internet : 193.48.57.184, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feaa:f293, connexion à Internet en IPv4 possible&lt;br /&gt;
 G4 | IPv4 sur Internet : 193.48.57.185, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fec6:169, connexion à Internet en IPv4 possible&lt;br /&gt;
 G5 | IPv4 sur Internet : 193.48.57.188, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe5b:b2b6, connexion à Internet en IPv4 possible&lt;br /&gt;
 G6 | IPv4 sur Internet : 193.48.57.187, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fef9:2bba, connexion à Internet en IPv4 possible&lt;br /&gt;
 G7 | Bad MAC address &lt;br /&gt;
 G8 | machine non contactable en IPv6 sur le SE5&lt;br /&gt;
 G9 | Rien&lt;br /&gt;
 G10 | IPv4 sur Internet : 193.48.57.186, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feb4:5ea4, pas de connexion à Internet en IPv4&lt;br /&gt;
 G11 | machine non contactable en IPv6 sur le SE5&lt;br /&gt;
 G12 | IPv4 sur Internet : 193.48.57.181, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les MV sur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 ==== g1kpatrikeevVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g2clemair1VM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g3tbrenierVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.167, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g4fnaudotVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.106, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g5mdelabyVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.171, IPv4 sur VLAN50 : 172.26.145.110, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe5b:b2b5, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g6bblackVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.113, IPv4 sur VLAN50 : 172.26.145.112, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe4a:d2be, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
 ==== g7amoutonVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.114, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe59:7616, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g8esimonVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
 ==== g10egodardVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g11asellaliVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
 ==== g12mhalaouiVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
&lt;br /&gt;
Données brutes pour les MV sur &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 ==== g1jcharleuxVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g2gthomasVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g3bnguyen1VM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.130, IPv4 sur VLAN50 : 172.26.145.107, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feff:4c44, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
 ==== g4drodenbuVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.156, IPv4 sur VLAN50 : 172.26.145.109, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe46:70cd, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g5pamorosVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.189, IPv4 sur VLAN50 : 172.26.145.111, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe14:cdb5, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g6hblgrimVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.100, IPv4 sur VLAN50 : 172.26.145.113, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fef9:2bb9, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
 ==== g7jdelannoVM&lt;br /&gt;
 | pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.115, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe0f:aba1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g8mriffautVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
 ==== g10jdelcourVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
 ==== g11khabreVM&lt;br /&gt;
 | machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
 ==== g12rfaraultVM&lt;br /&gt;
 | IPv4 sur CV : 10.0.69.131, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=3307</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=3307"/>
		<updated>2023-12-05T21:36:57Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Répartition des binômes en PRA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui Mohammed&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Blgrim Haitam&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Konstantin PATRIKEEV&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Karl HABRE&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Rémi FARAULT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en PRA ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| Elom|| || || Baloo|| || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| Mustafar|| || || Baloo|| 193.48.57.189|| Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| Dagobah|| || || Aladin|| || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| Motis|| || || Dingo|| || Mohammed Halaoui&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| bogano|| || || Timon|| || Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| Takobo|| || || Timon|| 193.48.57.184|| Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| Fondor|| || || mushu|| || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| hoth|| || || BlancheNeige|| || Haitam Blgrim&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| Abafar|| || || Aladin|| || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| Rotia|| || || DIngo|| 193.48.57.181|| Rémi Farault&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| jedha|| || || judy|| 193.48.57.191|| Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| Bogden|| || || BlancheNeige|| || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| || || || || 193.48.57.188|| Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| jiruus|| || || cruella|| || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| exegol|| || || cruella|| 191.48.57.186|| Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| Jakku|| || || Jafar|| || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| naboo|| 192.168.18.2|| || bouh|| 193.48.57.180 / 192.168.18.1|| Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| geonosis|| || || bouh|| || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| alderaan|| || || Jafar|| || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| kesh|| || || Judy|| || Konstantin Patrikeev&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| kashyyyk|| || || mushu|| || Maxime BALBASTRE&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| Felucia|| || || || 193.48.57.185|| François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 20/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
A noter qu'aucune machine, quelle soit de service ou mandataire, ne peut avoir accès à Internet vu qu'aucun effort n'a été fait pour relier le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; au réseau SE5.&lt;br /&gt;
&lt;br /&gt;
Machines de service.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy || une seule interface dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; (CV SE5), aucun CV privé, pas de configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || || rien&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Liste des machines&lt;br /&gt;
&lt;br /&gt;
 Elom Mustafar dagobah Motis bogano Takobo Fondor hoth abafar Rotia jedha Bogden jiruus exegol Jakku naboo geonosis alderaan kesh kashyyyk Felucia&lt;br /&gt;
&lt;br /&gt;
 Baloo aladin Dingo Timon mushu BlancheNeige cruella Jafar bouh judy&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 03/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; a été relié au réseau SE5 par &amp;lt;code&amp;gt;naboo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il est normal de ne pas avoir d'adresse IPv4 sur la machine de services pour l'interface sur le commutateur virtuel. Par contre, avec mise en place de la mascarade sur la machine mandataire, il doit être possible, pour la machine de services, de se connecter à Internet en IPv4.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elève !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elom || Elias SIMON&lt;br /&gt;
| IPv4 sur CV : 10.0.69.220, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe0f:b26d, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fea9:f79, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG&lt;br /&gt;
| IPv4 sur CV : 10.0.69.205, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe53:7d33, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui&lt;br /&gt;
| IPv4 sur CV : 10.0.69.195, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7c:2d6a, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen&lt;br /&gt;
| IPv4 sur CV : 10.0.69.245, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe62:6960, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier&lt;br /&gt;
| IPv4 sur CV : 10.0.69.181, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe93:8c48, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée&lt;br /&gt;
| IPv4 sur CV : 10.0.69.200, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe2d:82bf, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| hoth || Haitam Blgrim&lt;br /&gt;
| IPv4 sur CV : 10.0.69.157, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee8:4736, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle &lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI&lt;br /&gt;
| IPv4 sur CV : 10.0.69.233, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feae:bcbb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Rotia || Rémi Farault&lt;br /&gt;
| IPv4 sur CV : 10.0.69.130, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe2e:ec48, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.221, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fef6:364f, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Bogden || Black Baptiste&lt;br /&gt;
| IPv4 sur CV : 10.0.69.246, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe67:89fd, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.247, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe9c:6f0e, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard&lt;br /&gt;
| IPv4 sur CV : 10.0.69.147, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe17:bc38, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jakku || Jason DELANNOY&lt;br /&gt;
| IPv4 sur CV : 10.0.69.136, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee1:1e4d, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| naboo || Chloé Lemaire&lt;br /&gt;
| IPv4 sur CV : 192.168.18.2, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fef2:7e2, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS&lt;br /&gt;
| IPv4 sur CV : 10.0.69.231, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feb0:b140, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON&lt;br /&gt;
| IPv4 sur CV : 10.0.69.106, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe97:2114, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev&lt;br /&gt;
| IPv4 sur CV : 10.0.69.222, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe10:e2cb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE&lt;br /&gt;
| IPv4 sur CV : 10.0.69.240, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feca:73e7, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT&lt;br /&gt;
| IPv4 sur CV : 10.0.69.139, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe89:460a, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Machines mandataires.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elèves !! Nom machine !! Configuration IP&lt;br /&gt;
|-&lt;br /&gt;
| Elias SIMON &amp;amp; Mathis RIFFAUT || Baloo &lt;br /&gt;
| IPv4 sur CV : 10.0.69.152, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fec8:5379, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin&lt;br /&gt;
| IPv4 sur CV : 10.0.69.107, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe6b:c000, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo&lt;br /&gt;
| IPv4 sur CV : 10.0.69.156, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe0d:4f9c, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon&lt;br /&gt;
| IPv4 sur CV : 10.0.69.104, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fedc:7539, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu&lt;br /&gt;
| IPv4 sur CV : 10.0.69.160, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe20:8816, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige&lt;br /&gt;
| IPv4 sur CV : 10.0.69.182, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feba:38f4, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella&lt;br /&gt;
| IPv4 sur CV : 10.0.69.108, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee5:ff99, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar&lt;br /&gt;
| IPv4 sur CV : 10.0.69.171, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe3e:f0bb, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh&lt;br /&gt;
| IPv4 sur CV : 192.168.18.1, IPv4 sur SE5 : 193.48.57.180, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe4f:dde2, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy&lt;br /&gt;
| IPv4 sur CV : 10.0.69.216, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7d:4762, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en ASR ==&lt;br /&gt;
&lt;br /&gt;
Donnez les élèves dans chaque groupe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves &lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux &lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros &lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton &lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut &lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali &lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le 05/11/2023, aucun commutateur virtuel correctement configuré, soit une adresse IPv4 sur le commutateur pour aucune raison, soit une configuration &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; non adaptée, pas de &amp;lt;code&amp;gt;up&amp;lt;/code&amp;gt; sur le commutateur virtuel.&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 05/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Migration !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || || jcharleu, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || kpatrikee, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || || gthomas, CV conf. erronée, MV mdp erroné, interf. vlan50 || clemair1, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, une seule interface réseau, pas de config. réseau&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || || bnguyen1, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || tbrenier, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || || drodenbu, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || fnaudot, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur mauvais disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || || pas de CV, pas de MV || mdelaby, CV conf. erronée, pygrub dans la MV ? pas de routeur, faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || || hblgrim, CV conf. erronée, MV avec 2 interfaces, pas de MAC sur la 1ère, config. IPv4 OK || bblack, CV commenté, pas de MV (plus exactement une machine visible via &amp;lt;code&amp;gt;xen list&amp;lt;/code&amp;gt; mais pas de &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;/etc/xen&amp;lt;/code&amp;gt;), pas de routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || || jdelanno, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || amouton, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, une seule interface réseau&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || || mriffaut, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || esimon, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, pas de routeur&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || || jdelcour, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || egodard, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur lancé, deux interfaces réseau, changez l'ordre des interfaces dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || || khabre, CV conf. erronée, MV non créée, MV interf. vlan50, pas de config. IPv4 || asellali, CV conf. erronée, MV interf. vlan50, pas de config. IPv4, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || || rfarault, CV conf. erronée, MV interf. vlan50, pas de config. IPv4 || pas de CV, MV interf. vlan50, pas de config. IPv4, pas de routeur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 20/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
A noter qu'un sacré coup de pouce aura été nécessaire pour configurer le routeur de promotion, avec un seul élève en appui.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Migration !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || || jcharleu, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || kpatrikee, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || || gthomas, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || clemair1, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4, routeur lancé et correctement configuré&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || || bnguyen1, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || tbrenier, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || || drodenbu, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || fnaudot, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || || toujours pas de CV, pas de VLAN, toujours pas de MV || mdelaby, CV configuration toujours erronée, pas de VLAN, toujours le bootloader &amp;lt;code&amp;gt;pygrub&amp;lt;/code&amp;gt; dans la MV (commenté), MV avec une seule interface réseau (dans le CV), configuration DHCP OK pour l'interface (dans le CV), toujours pas de routeur : il faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || || hblgrim, CV conf. toujours erronée, pas de VLAN, MV ne démarre pas à cause de l'erreur sur le CV (correction ReX sur le CV), MV avec 2 interfaces, pas de MAC sur la première interface dans le .cfg, configuration IPv4 OK dans la MV || bblack, CV configuration toujours erronée, pas de VLAN, toujours pas e &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; pour la MV, un routeur OpenWRT avec la bonne définition de disque, deux interface mais sans @MAC, aucune configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || || jdelanno, CV conf. toujours, erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte || amouton, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, une seule interface réseau, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || || mriffaut, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || esimon, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || || jdelcour, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || egodard, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, deux interfaces réseau, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || || khabre, CV conf. toujours erronée, pas de VLAN, MV enfin créée avec une seule interface, pas de configuration IPv4 correcte || asellali, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, une seule interface, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || || rfarault, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte || pas de CV, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 30/11/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! Archi. penfret !! Archi. antifer&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux || jcharleu, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || kpatrikee, CV et VLAN configurés mais dites moi comment vous trouvez 1 avec la formule &amp;lt;code&amp;gt;6+N%4&amp;lt;/code&amp;gt;, MV avec les bonnes interfaces, inversion dans la configuration IPv4 entre &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;enX1&amp;lt;/code&amp;gt;, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; par contre les deux interfaces demandées sont présentes.&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas || gthomas, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4. || clemair1, CV configuré, VLAN configuré, MV lancée et totalement configurée en IPv4, routeur lancé et correctement configuré.&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen || bnguyen1, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || tbrenier, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant.&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg || drodenbu, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte. || fnaudot, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, pour le routeur toujours une mauvaise définition de disque dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, deux interfaces cependant.&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros || toujours pas de CV, pas de VLAN, toujours pas de MV. || mdelaby, CV configuration toujours erronée, pas de VLAN, toujours le bootloader &amp;lt;code&amp;gt;pygrub&amp;lt;/code&amp;gt; dans la MV (commenté), MV avec un chemin des disques étranges, MV avec une seule interface réseau (dans le CV), configuration DHCP OK pour l'interface (dans le CV), toujours pas de routeur : il faut lui créer son propre &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black || hblgrim, il manque les directives pour démarrer et arrêter les interfaces mais sinon CV et VLAN configurés, MV lancé et configurée, il ne faut pas de &amp;lt;code&amp;gt;gateway&amp;lt;/code&amp;gt; sur &amp;lt;code&amp;gt;enX1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son adresse par DHCP à cause du commutateur virtuel non activé. || bblack, CV et VLAN configurés mais pas toutes les directives de démarrage et d'arrêt, toujours pas de &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; pour la MV, un routeur OpenWRT avec la bonne définition de disque, deux interface mais sans @MAC, aucune configuration du routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton || jdelanno, CV conf. toujours, erronée, pas de VLAN, MV avec une seule interface (vlan50), toujours pas de configuration IPv4 correcte; || amouton, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur lancé, une seule interface réseau, pas de configuration du routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut || mriffaut, CV conf. toujours erronée, pas de VLAN, MV avec une seule interface (vlan50), pas de configuration IPv4 correcte. || esimon, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, toujours pas de routeur.&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt || jdelcour, CV configuré, VLAN configuré (par contre l'utilisation de &amp;lt;code&amp;gt;ether4&amp;lt;/code&amp;gt; est impossible), MV lancée et correctement configurée en IPv4, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son @IPv4 à cause de l'erreur sur le VLAN. || egodard, CV configuré, VLAN configuré (par contre l'utilisation de &amp;lt;code&amp;gt;ether4&amp;lt;/code&amp;gt; est impossible), MV avec deux interfaces, correctement configurée en IPv4, pas d'adresse obtenue par DHCP, problème de l'OpenWRT, routeur OpenWRT avec les bonnes interfaces, l'adresse IPv4 sur SE5 est donnée avec un mauvais masque, linterface &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; reçoit bien son adresse IPv4 par DHCP.&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali || khabre, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface, pas de configuration IPv4 correcte || asellali, CV configuration toujours erronée, pas de VLAN, MV avec une seule interface réseau (dans le vlan50), pas de configuration IPv4 correcte, routeur avec une définition de disque aberrante dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;, une seule interface, pas de configuration du routeur&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault || rfarault, CV configuré, VLAN configuré mais configuration commentée (pourquoi donc ?!), MV lancée et correctement configurée en IPv4, &amp;lt;code&amp;gt;enX0&amp;lt;/code&amp;gt; ne trouve pas son @IPv4 à cause de l'absence d'interface VLAN. || CV configuré, VLAN configuré, MV avec deux interfaces, correctement configurée en IPv4, un routeur avec les deux interfaces demandées, pas d'adresse IPv4 sur SE5, serveur DHCP fonctionnel.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 02/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! MV &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; !! MV &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; !! Routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet, une IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
| IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.180, une IPv6 routée sur Internet, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel (si ? non, inversion des &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| image disque du fichier de configuration non présente sur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt;&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas de fichier de configuration&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le fichier de configuration&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.116, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe01:754c, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| routeur openWRT non fonctionnel&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.191, une IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali&lt;br /&gt;
| MV non contactable sur le VLAN 50 en IPv6&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le fichier de configuration, création du routeur impossible&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet, pas d'IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle au 05/12/2023 ===&lt;br /&gt;
&lt;br /&gt;
Pour utiliser l'interface Web LuCi des openWRT à partir d'une zabeth :&lt;br /&gt;
* vérifiez que vous avez bien une IPv6 routée sur IPv6 (avec &amp;lt;code&amp;gt;ip address show dev eth0&amp;lt;/code&amp;gt;, l'adresse commence par &amp;lt;code&amp;gt;2001:660:4401:60b0:&amp;lt;/code&amp;gt;) ;&lt;br /&gt;
* si vous n'en avez pas, prenez le suffixe (les derniers 8 octets de l'adresse locale, celle qui commence par &amp;lt;code&amp;gt;fe80::&amp;lt;/code&amp;gt;) et créez votre adresse IPv6 routée par la commande :&lt;br /&gt;
  ip address add dev eth0 2001:660:4401:60b0:&amp;lt;suffixe&amp;gt;/64&lt;br /&gt;
bien entendu vous n'aurez oublié de rajouter la route IPv6 par défaut vers le routeur de la promotion :&lt;br /&gt;
  ip -6 route add default via 2001:660:4401:60b0:6a9e:bff:fe46:5a76&lt;br /&gt;
* établissez un tunnel &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; avec la commande :&lt;br /&gt;
 zabethXX# ssh -L 6443:localhost:6443 root@IPv6&lt;br /&gt;
* connectez vous sur LuCi avec le navigateur de la zabeth pointant sur &amp;lt;code&amp;gt;https://localhost:6443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attention l'ordre des interfaces &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; a une importance.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves !! MV &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; !! MV &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; !! Routeur OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
| IPv4 sur CV : 10.0.69.185, IPv4 sur VLAN50 : 172.126.145.103, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe00:a98d, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.218, IPv4 sur VLAN50 : 172.26.145.102, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7d:bc44, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 routée sur Internet (puis &amp;lt;code&amp;gt;193.48.57.191&amp;lt;/code&amp;gt; donc une erreur), pas d'IPv6 routée sur Internet, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
| IPv4 sur CV : 10.0.69.212, IPv4 sur VLAN50 : 172.26.145.105, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fedb:2ac4, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.145, IPv4 sur VLAN50 : 172.26.145.104, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe31:b916, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.180, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe31:b916, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen &lt;br /&gt;
| IPv4 sur CV : 10.0.69.130, IPv4 sur VLAN50 : 172.26.145.107, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feff:4c44, connexion à Internet en IPv4 possible, résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.167, IPv4 sur VLAN50 : 172.26.145.106, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feaa:f292, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.184, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feaa:f293, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g4 || François Naudot &amp;amp; Dann Rodenburg &lt;br /&gt;
| IPv4 sur CV : 10.0.69.156, IPv4 sur VLAN50 : 172.26.145.109, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe46:70cd, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.106, IPv4 sur VLAN50 : 172.26.145.108, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fec6:168, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.185, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fec6:169, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Maël Delaby &amp;amp; Paul Amoros&lt;br /&gt;
| IPv4 sur CV : 10.0.69.189, IPv4 sur VLAN50 : 172.26.145.111, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe14:cdb5, connexion à Internet en IPv4 possible, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.171, IPv4 sur VLAN50 : 172.26.145.110, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe5b:b2b5, connexion à Internet en IPv4 possible, resolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.188, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe5b:b2b6, connexion à Internet en IPv4 possible&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black &lt;br /&gt;
| IPv4 sur CV : 10.0.69.100, IPv4 sur VLAN50 : 172.26.145.113, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fef9:2bb9, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas de machine virtuelle&lt;br /&gt;
| bloquage du serveur &amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; par installation du routeur openWRT sous la racine, machine non contactable en IPv6 sur le SE5&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
| CV non configuré, machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudent&lt;br /&gt;
| pas d'adresse MAC dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g8 || Elias Simon &amp;amp; Mathis Riffaut&lt;br /&gt;
| CV non configuré, machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| machine non contactable en IPv6 sur le SE5&lt;br /&gt;
|-&lt;br /&gt;
| g10 || Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 10.0.69.165, IPv4 sur VLAN50 : 172.26.145.121, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe7e:35e1, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur CV : 10.0.69.132, IPv4 sur VLAN50 : 172.26.145.120, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:feb4:5ea3, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.191 (erreur !!), IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:feb4:5ea4, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
| g11 || Karl Habre &amp;amp; Amine Sellali&lt;br /&gt;
| machine non contactable en IPv6 sur le VLAN50&lt;br /&gt;
| machine non contactable en IPv6 sur le bridgeStudents&lt;br /&gt;
| pas d'adresse MAC dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| g12 || Mohammed Halaoui &amp;amp; Rémi Farault&lt;br /&gt;
| IPv4 sur CV : 10.0.69.131, IPv4 sur VLAN50 : 172.26.145.125, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe54:5aee, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| pas d'IPv4 sur le CV, IPv4 sur VLAN50 : 172.26.145.124, IPv6 sur VLAN50 : 2001:660:4401:6050:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4, pas de résolution DNS fonctionnelle&lt;br /&gt;
| IPv4 sur Internet : 193.48.57.181, IPv6 sur Internet : 2001:660:4401:60b0:216:3eff:fe9a:5186, pas de connexion à Internet en IPv4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pas de changement sur les routeurs OpenWRT à 17h30.&lt;br /&gt;
&lt;br /&gt;
Pas de changement sur les MV d'&amp;lt;code&amp;gt;antifer&amp;lt;/code&amp;gt; à 18h00.&lt;br /&gt;
&lt;br /&gt;
Une seule modification sur les MV de &amp;lt;code&amp;gt;penfret&amp;lt;/code&amp;gt; à 18h15 : la G7 (&amp;lt;code&amp;gt;g7jdelannoVM&amp;lt;/code&amp;gt;) est maintenant contactable (@IPv4 et @IPv6 sur le VLAN50) mais sans rien de plus.&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=2065</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=2065"/>
		<updated>2023-10-16T12:30:08Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Répartition des binômes en ASR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui mohammed et rémi farault(absent)&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Blgrim Haitam&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Konstantin PATRIKEEV&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en PRA ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| Elom|| || || Baloo|| || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| Mustafar|| || || Baloo|| || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| Dagobah|| || || Aladin|| || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| Motis|| || || Dingo|| || mohammed halaoui&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| bogano|| || || Timon|| || Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| Takobo|| || || Timon|| || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| Fondor|| || || mushu|| || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| hoth|| || || BlancheNeige|| || Haitam Blgrim&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| Abafar|| || || Aladin|| || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| Rotia|| || || DIngo|| || Rémi farault&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| jedha|| || || judy|| || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| Bogden|| || || BlancheNeige|| || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| jiruus|| || || cruella|| || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| exegol|| || || cruella|| || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| Jakku|| || || Jafar|| || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| naboo|| || || bouh|| || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| geonosis|| || || bouh|| || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| alderaan|| || || Jafar|| || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| kesh|| || || Judy|| || Konstantin Patrikeev&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| kashyyyk|| || || mushu|| || Maxime BALBASTRE&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| Felucia|| || || || || François NAUDOT&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes en ASR ==&lt;br /&gt;
&lt;br /&gt;
Donnez les élèves dans chaque groupe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Groupe !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| g1 || Konstantin Patrikeev &amp;amp; Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| g2 || Chloé Lemaire &amp;amp; Gabriel Thomas&lt;br /&gt;
|-&lt;br /&gt;
| g3 || Timothé Brenier &amp;amp; Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| g4 || Dann Rodenburg &amp;amp; François Naudot&lt;br /&gt;
|-&lt;br /&gt;
| g5 || Delaby Maël &amp;amp; Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| g6 || Haitam Blgrim &amp;amp; Baptiste Black&lt;br /&gt;
|-&lt;br /&gt;
| g7 || Jason Delannoy &amp;amp; Albin Mouton&lt;br /&gt;
|-&lt;br /&gt;
|g8&lt;br /&gt;
|Elias SIMON &amp;amp; Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
|g10&lt;br /&gt;
|Estelle Godard &amp;amp; Jeanne Delcourt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1929</id>
		<title>SE5 système/réseau 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_syst%C3%A8me/r%C3%A9seau_2023/2024&amp;diff=1929"/>
		<updated>2023-10-06T14:46:31Z</updated>

		<summary type="html">&lt;p&gt;Egodard : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PRA SE5 =&lt;br /&gt;
&lt;br /&gt;
== Menu de la première séance ==&lt;br /&gt;
&lt;br /&gt;
Pour la  première séance du 06/10/2023 il vous est demandé d'effectuer individuellement les opérations listées ci-dessous.&lt;br /&gt;
* création d'une machine virtuelle sur le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* création d'un conteneur &amp;quot;à la main&amp;quot; sur votre station de travail &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; :&lt;br /&gt;
** créez un conteneur isolé au maximum (sauf pour les utilisateur) avec la méthode décrite en cours,&lt;br /&gt;
** création d'un commutateur virtuel privé sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt; dans le réseau IPv4 &amp;lt;code&amp;gt;192.168.68.0/24&amp;lt;/code&amp;gt;, l'adresse &amp;lt;code&amp;gt;192.168.68.1&amp;lt;/code&amp;gt; est affectée au commutateur lui-même,&lt;br /&gt;
** création d'une interface Ethernet virtuelle, une extrémité doit être envoyée dans le conteneur, l'autre dans le commutateur virtuel privé,&lt;br /&gt;
** mise en place d'une mascarade sur la &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;, vérifiez que le conteneur a accès aux mêmes machines que la  &amp;lt;code&amp;gt;zabeth&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Par binôme vous devez créer une machine virtuelle mandataire connectée sur le commutateur virtuel SE5 et sur le commutateur virtuel privé des machines virtuelles de services concernées (voir deuxième section du sujet).&lt;br /&gt;
&lt;br /&gt;
Globalement vous devez configurer le routeur principal de la promotion (voir la troisième section du sujet). Pour votre promotion il s'agit du Catalyst 9200 situé en E304. Il faut le connecter en fibre vers le serveur &amp;lt;code&amp;gt;capbreton&amp;lt;/code&amp;gt; de la E306 dans le commutateur virtuel SE5 et aussi en fibre vers le local technique SR52 sur un port dans le VLAN 531. Vous pouvez configurer le commutateur via l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; à partir de la machine &amp;lt;code&amp;gt;zabeth09&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Répartition des élèves pour la première séance :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Station de travail !! Elève&lt;br /&gt;
|-&lt;br /&gt;
| zabeth02 || Elias SIMON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth03 || Mathis RIFFAUT&lt;br /&gt;
|-&lt;br /&gt;
| zabeth04 || Dann RODENBURG&lt;br /&gt;
|-&lt;br /&gt;
| zabeth05 || Benjamin NGUYEN&lt;br /&gt;
|-&lt;br /&gt;
| zabeth06 || Halaoui mohammed&lt;br /&gt;
|-&lt;br /&gt;
| zabeth07 || Blgrim Haitam&lt;br /&gt;
|-&lt;br /&gt;
| zabeth08 || Florian Vallée&lt;br /&gt;
|-&lt;br /&gt;
| zabeth09 (routeur) || Julien Charleux&lt;br /&gt;
|-&lt;br /&gt;
| zabeth10 || Amine SELLALI&lt;br /&gt;
|-&lt;br /&gt;
| zabeth11 || Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
| zabeth12 || Maël Delaby&lt;br /&gt;
|-&lt;br /&gt;
| zabeth13 || Black Baptiste&lt;br /&gt;
|-&lt;br /&gt;
| zabeth14 || Timothé Brenier&lt;br /&gt;
|-&lt;br /&gt;
| zabeth15 || Jeanne Delcourt&lt;br /&gt;
|-&lt;br /&gt;
| zabeth16 || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| zabeth17 || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| zabeth18 || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| zabeth19 || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| zabeth20 || Albin MOUTON&lt;br /&gt;
|-&lt;br /&gt;
| zabeth21 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth22 || Maxime Balbastre&lt;br /&gt;
|-&lt;br /&gt;
| zabeth26 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth27 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth28 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| zabeth30 || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
Concertez-vous pour trouver des noms de machines de services et de machines mandataires dans deux thèmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Nom machine services &lt;br /&gt;
!IP machine services !! Nom de domaine !! Nom machine mandataire &lt;br /&gt;
!IP machine mandataires!! Elève &lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E1 | Cahier n°1]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E2 | Cahier n°2]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E3 | Cahier n°3]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E4 | Cahier n°4]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E5 | Cahier n°5]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E6 | Cahier n°6]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E8 | Cahier n°8]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E9 | Cahier n°9]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E10 | Cahier n°10]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E11 | Cahier n°11]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E12 | Cahier n°12]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E13 | Cahier n°13]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E14 | Cahier n°14]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E15 | Cahier n°15]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E16 | Cahier n°16]]&lt;br /&gt;
| exegol|| || || cruella|| || Estelle Godard&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E17 | Cahier n°17]]&lt;br /&gt;
| Jakku|| || || Jafar|| || Jason DELANNOY&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E18 | Cahier n°18]]&lt;br /&gt;
| naboo|| || || bouh|| || Chloé Lemaire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E19 | Cahier n°19]]&lt;br /&gt;
| geonosis|| || || bouh|| || Gabriel THOMAS&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E20 | Cahier n°20]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E21 | Cahier n°21]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E22 | Cahier n°22]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E23 | Cahier n°23]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E24 | Cahier n°24]]&lt;br /&gt;
| || || || || || Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contrôle continu ==&lt;/div&gt;</summary>
		<author><name>Egodard</name></author>
	</entry>
</feed>