<?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=Pamoros</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=Pamoros"/>
	<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Pamoros"/>
	<updated>2026-05-16T05:59:17Z</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/AmorosDelaby&amp;diff=4873</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4873"/>
		<updated>2024-01-28T17:06:08Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Machine virtuelle (serveur) et requêtes MQTT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus. Cette machine virtuelle est créée et configurée avec Xen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des requêtes vers notre serveur, nous avons fait le choix d'utiliser les requêtes MQTT. Le protocole MQTT a pour particularité d'être un broker, c'est à dire que les informations sont transmises au broker via une connexion TCP/IP, et sont ensuite diffusées à tous les clients abonnés.&lt;br /&gt;
&lt;br /&gt;
Ce protocole a l'avantage d'être assez léger, avec une charge utile de message maximum limitée à 256 Mo.&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
Ce capteur de STD Microelectronics est un capteur de distance laser, composé de plusieurs capteurs formant une matrice de 8 capteur de longueur et 8 capteurs en largeur.&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que Nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur Nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
== Application développée ==&lt;br /&gt;
Le site web développé possède l'interface suivante:[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Ce site web reçoit correctement les requêtes MQTT, et change bien la photo lorsque cette requête indique &amp;quot;Right&amp;quot;. En revanche, un modèle de données utilisable n'étant pas implémenté sur le capteur pour traiter les informations de distance et reconnaitre si le swipe est droit ou gauche, le système prévu utilisant le capteur n'est pas fonctionnel.&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4872</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4872"/>
		<updated>2024-01-28T17:05:48Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Machine virtuelle (serveur) et requêtes MQTT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus. Cette machine virtuelle est créée et configurée avec Xen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des requêtes vers notre serveur, nous avons fait le choix d'utiliser les requêtes MQTT. Le protocole MQTT a pour particularité d'être un broker, c'est à dire que les informations sont transmises au broker via une connexion TCP/IP, qui est ensuite diffusé à tous les clients abonnés.&lt;br /&gt;
&lt;br /&gt;
Ce protocole a l'avantage d'être assez léger, avec une charge utile de message maximum limitée à 256 Mo.&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
Ce capteur de STD Microelectronics est un capteur de distance laser, composé de plusieurs capteurs formant une matrice de 8 capteur de longueur et 8 capteurs en largeur.&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que Nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur Nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
== Application développée ==&lt;br /&gt;
Le site web développé possède l'interface suivante:[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Ce site web reçoit correctement les requêtes MQTT, et change bien la photo lorsque cette requête indique &amp;quot;Right&amp;quot;. En revanche, un modèle de données utilisable n'étant pas implémenté sur le capteur pour traiter les informations de distance et reconnaitre si le swipe est droit ou gauche, le système prévu utilisant le capteur n'est pas fonctionnel.&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4864</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4864"/>
		<updated>2024-01-28T16:55:08Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Application développée */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus. Cette machine virtuelle est créée et configurée avec Xen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des requêtes vers notre serveur, nous avons fait le choix d'utiliser les requêtes MQTT.&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
Ce capteur de STD Microelectronics est un capteur de distance laser, composé de plusieurs capteurs formant une matrice de 8 capteur de longueur et 8 capteurs en largeur.&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que Nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur Nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
== Application développée ==&lt;br /&gt;
Le site web développé possède l'interface suivante:[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Ce site web reçoit correctement les requêtes MQTT, et change bien la photo lorsque cette requête indique &amp;quot;Right&amp;quot;. En revanche, un modèle de données utilisable n'étant pas implémenté sur le capteur pour traiter les informations de distance et reconnaitre si le swipe est droit ou gauche, le système prévu utilisant le capteur n'est pas fonctionnel.&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4860</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4860"/>
		<updated>2024-01-28T16:51:57Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Serveur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus. Cette machine virtuelle est créée et configurée avec Xen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour envoyer des requêtes vers notre serveur, nous avons fait le choix d'utiliser les requêtes MQTT.&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
Ce capteur de STD Microelectronics est un capteur de distance laser, composé de plusieurs capteurs formant une matrice de 8 capteur de longueur et 8 capteurs en largeur.&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que Nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur Nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
== Application développée ==&lt;br /&gt;
Le site web développé possède l'interface suivante:[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4854</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4854"/>
		<updated>2024-01-28T16:48:55Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Modèle de machine learning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus. Cette machine virtuelle est créée et configurée avec Xen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
Ce capteur de STD Microelectronics est un capteur de distance laser, composé de plusieurs capteurs formant une matrice de 8 capteur de longueur et 8 capteurs en largeur.&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que Nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur Nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
== Application développée ==&lt;br /&gt;
Le site web développé possède l'interface suivante:[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4849</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4849"/>
		<updated>2024-01-28T16:42:56Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Capteur X-NUCLEO-53L5A1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
Ce capteur de STD Microelectronics est un capteur de distance laser, composé de plusieurs capteurs formant une matrice de 8 capteur de longueur et 8 capteurs en largeur.&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que Nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur Nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
== Application développée ==&lt;br /&gt;
Le site web développé possède l'interface suivante:[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4831</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4831"/>
		<updated>2024-01-28T16:24:17Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Modèle de machine learning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que Nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur Nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
== Application développée ==&lt;br /&gt;
Le site web développé possède l'interface suivante:[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4830</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4830"/>
		<updated>2024-01-28T16:22:48Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Modèle de machine learning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que Nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur Nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4823</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=4823"/>
		<updated>2024-01-28T16:16:34Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Raspberry Pi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous devons installer un OS sur notre Raspberry. A l'aide du Raspberry Pi Imager, nous installons un système d'exploitation Raspbian, conçu pour les Raspberry. &lt;br /&gt;
&lt;br /&gt;
Cette Raspberry est ensuite branchée en port série à notre machine Zabeth, et nous utilisons l'utilitaire Minicom pour accéder aux fichiers de la RPi sans interface. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser la partie de gestion des données, nous avons créé une VM sur le serveur Chassiron, qui sera chargée de traiter les données et appliquer le modèle d'apprentissage dessus.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes Sources ==&lt;br /&gt;
[[Fichier:PhotoSite.png|bordure|centré|sans_cadre|700x700px|Capture d'ecran du site final. L'image change à chaque message MQTT de type &amp;quot;Right&amp;quot; sur le topic &amp;quot;history&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
webserver.py :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, render_template, jsonify&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
import random&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
client_id = f'python-mqtt-{random.randint(0, 1000)}'&lt;br /&gt;
&lt;br /&gt;
IMAGE_DIR = os.path.join('static', 'images')&lt;br /&gt;
image_files = [f for f in os.listdir(IMAGE_DIR) if os.path.isfile(os.path.join(IMAGE_DIR, f))]&lt;br /&gt;
current_image_index = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mqtt_client = mqtt.Client(client_id, userdata=None)#,protocol=mqtt.MQTTv5)&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
broker = '127.0.0.140'&lt;br /&gt;
#broker = '2001:660:4401:6050:216:3eff:fe40:73d8'&lt;br /&gt;
port = 1883&lt;br /&gt;
username = &amp;quot;paul&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
messages = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def on_connect(client,userdata,flags, rc):&lt;br /&gt;
	print(&amp;quot;Connected with result code &amp;quot; +str(rc))&lt;br /&gt;
	client.subscribe(&amp;quot;history&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_message(client, userdata, msg):&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	print(msg.topic+&amp;quot;  &amp;quot;+str(msg.payload))&lt;br /&gt;
	messages.append(str(msg.payload))&lt;br /&gt;
	if msg.payload.decode() == &amp;quot;Right&amp;quot;:&lt;br /&gt;
        	current_image_index = (current_image_index + 1) % len(image_files)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.on_connect = on_connect&lt;br /&gt;
mqtt_client.on_message = on_message&lt;br /&gt;
mqtt_client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
mqtt_client.connect(broker,port)&lt;br /&gt;
print(&amp;quot;MQTT client connected successfuly !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/home&amp;quot;)  # this sets the route to this page&lt;br /&gt;
def home():&lt;br /&gt;
	return &amp;quot;Hello! this is the main page &amp;lt;h1&amp;gt;HELLO&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
	return render_template('index.html')&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/get_messages&amp;quot;)&lt;br /&gt;
def get_messages():&lt;br /&gt;
	return jsonify(messages)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_index')&lt;br /&gt;
def current_index():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	return jsonify(current_image_index)&lt;br /&gt;
&lt;br /&gt;
@app.route('/current_image')&lt;br /&gt;
def current_image():&lt;br /&gt;
	global current_image_index&lt;br /&gt;
	image_path = os.path.join('static', 'images', image_files[current_image_index])&lt;br /&gt;
	return jsonify({'image_url': image_path})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	mqtt_client.loop_start()&lt;br /&gt;
	app.run(host=&amp;quot;0.0.0.0&amp;quot;,debug=True)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
index.html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;MQTT Messages&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		function fetchMessages(){&lt;br /&gt;
		fetch('/get_messages')&lt;br /&gt;
			.then(response =&amp;gt; response.json())&lt;br /&gt;
			.then(data =&amp;gt; {document.getElementById('messages').innerHTML = data.join('&amp;lt;br&amp;gt;');&lt;br /&gt;
			if (data.includes(&amp;quot;Right&amp;quot;)) {&lt;br /&gt;
                    		updateCarouselImage();&lt;br /&gt;
                	}&lt;br /&gt;
		})&lt;br /&gt;
		.catch(error =&amp;gt; {&lt;br /&gt;
                console.error('Error fetching messages:', error);&lt;br /&gt;
		});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateCarouselImage() {&lt;br /&gt;
        	fetch('/current_image')&lt;br /&gt;
            		.then(response =&amp;gt; response.json())&lt;br /&gt;
            		.then(data =&amp;gt; {&lt;br /&gt;
                			document.getElementById('carousel-image').src = data.image_url;&lt;br /&gt;
            		console.log('Updated Carousel');&lt;br /&gt;
})&lt;br /&gt;
            		.catch(error =&amp;gt; {&lt;br /&gt;
                	console.error('Error fetching current image:', error);&lt;br /&gt;
            });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		setInterval(fetchMessages, 1000);&lt;br /&gt;
		setInterval(updateCarouselImage, 1000);&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;TINDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;carousel-images&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;img id=&amp;quot;carousel-image&amp;quot; src=&amp;quot;static/images/img1.jpg&amp;quot; alt=&amp;quot;Carousel Image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h1&amp;gt;MQTT Messages&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
File Structure :&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
`-- website&lt;br /&gt;
    |-- static&lt;br /&gt;
    |   |-- images&lt;br /&gt;
    |   |   |-- img1.jpg&lt;br /&gt;
    |   |   |-- img2.jpg&lt;br /&gt;
    |   |   `-- img3.jpg&lt;br /&gt;
    |   `-- index.css&lt;br /&gt;
    |-- templates&lt;br /&gt;
    |   `-- index.html&lt;br /&gt;
    `-- webserver.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raspberry script :&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import paho.mqtt.client as paho&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
username = &amp;quot;pifou&amp;quot;&lt;br /&gt;
password = &amp;quot;pasglop&amp;quot;&lt;br /&gt;
server_address = &amp;quot;2001:660:4401:6050:216:3eff:fe40:73d8&amp;quot;&lt;br /&gt;
mqtt_hostname = &amp;quot;G5_RPI4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connecting to MQTT server&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client = paho.Client(client_id=&amp;quot;&amp;quot;, userdata=None, protocol=paho.MQTTv5)&lt;br /&gt;
&lt;br /&gt;
#client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)&lt;br /&gt;
&lt;br /&gt;
client.username_pw_set(username,password)&lt;br /&gt;
&lt;br /&gt;
client.connect(server_address, 1883)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Connection to MQTT server successfully established !&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
now = datetime.now()&lt;br /&gt;
dt_string = now.strftime(&amp;quot;%d/%m/%Y %H:%M:%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
client.publish(&amp;quot;history&amp;quot;, payload= mqtt_hostname+&amp;quot; &amp;quot;+dt_string, qos=1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Mqtt message sent, exiting&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pamoros</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=3768</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=3768"/>
		<updated>2024-01-15T07:10:06Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* 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|| || dagobah.lol|| 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|| || bogano.lol|| Timon|| || Benjamin Nguyen&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE5 2023/2024 E7 | Cahier n°7]]&lt;br /&gt;
| Takobo|| || &amp;lt;code&amp;gt;takobo.lol&amp;lt;/code&amp;gt;|| 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|| || hoth.lol|| 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|| || bodgen.lol|| 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|| 192.168.26.2|| || Ursula|| 193.48.57.185 / 192.168.26.1|| 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.2|| Paul Amoros&lt;br /&gt;
|-&lt;br /&gt;
|[[Atelier SysRes SE5 2023/2024 E24 | Cahier n°25]]&lt;br /&gt;
|Kalee&lt;br /&gt;
|192.168.26.3&lt;br /&gt;
|kalee.lol&lt;br /&gt;
|Ursula&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 &amp;amp; Karl HABRE || Ursula|| 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 &amp;amp; Karl HABRE ||&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 &amp;amp; Karl HABRE || Ursula&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;
|}&lt;br /&gt;
&lt;br /&gt;
=== Contrôle du 14/01/2024 ===&lt;br /&gt;
&lt;br /&gt;
Il est normal, pour les machines de services, de ne pas avoir d'@IPv4 sur le commutateur virtuel.&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;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Mustafar|| Mathis RIFFAUT&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Dagobah|| Dann RODENBURG&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Motis || Mohammed Halaoui&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| bogano || Benjamin Nguyen&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Takobo || Timothé Brenier&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Fondor || Florian Vallée&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&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, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, &amp;lt;code&amp;gt;bind9&amp;lt;/code&amp;gt; installé pas plus.&lt;br /&gt;
|-&lt;br /&gt;
| Abafar || Amine SELLALI&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| jedha || Julien Charleux&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&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, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| jiruus || Jeanne Delcourt&lt;br /&gt;
| IPv4 sur CV : 192.168.19.3, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe9c:6f0e, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, serveur DNS fonctionnel.&lt;br /&gt;
|-&lt;br /&gt;
| exegol || Estelle Godard&lt;br /&gt;
| IPv4 sur CV : 192.168.19.2, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe17:bc38, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, serveur DNS fonctionnel.&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, résolution DNS fonctionnelle, serveur DNS fonctionnel.&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, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, serveur DNS fonctionnel.&lt;br /&gt;
|-&lt;br /&gt;
| geonosis || Gabriel THOMAS&lt;br /&gt;
| IPv4 sur CV : 192.168.18.3, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feb0:b140, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle, serveur DNS fonctionnel (aide massive).&lt;br /&gt;
|-&lt;br /&gt;
| alderaan || Albin MOUTON&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| kesh || Konstantin Patrikeev&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| kashyyyk || Maxime BALBASTRE&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Felucia || François NAUDOT&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| pelagon || Paul Amoros&lt;br /&gt;
| pas d'IPv4 sur le CV, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe03:2af3, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| endor || Maël Delaby&lt;br /&gt;
| pas d'IPv4 sur le CV, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe5f:ebac, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, serveur DNS fonctionnel (mauvais domaine).&lt;br /&gt;
|-&lt;br /&gt;
| Kalee || Karl Harbre&lt;br /&gt;
| pas d'IPv4 sur le CV, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe45:42ed, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle, pas de serveur DNS.&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;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Dann RODENBURG &amp;amp; Amine SELLALI || Aladin&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Mohammed Halaoui &amp;amp; Rémi Farault || Dingo&lt;br /&gt;
| IPv4 sur CV : 193.48.57.181 10.0.69.156, IPv4 sur SE5 : 193.48.57.181, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Benjamin Nguyen &amp;amp; Timothé Brenier || Timon&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Florian Vallée &amp;amp; Maxime BALBASTRE || mushu&lt;br /&gt;
| pas d'IPv4 sur le CV, 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, pas de serveur DNS.pas de serveur DNS.z&lt;br /&gt;
|-&lt;br /&gt;
| Haitam Blgrim &amp;amp; Black Baptiste || BlancheNeige&lt;br /&gt;
| IPv4 sur CV : 193.48.57.187 10.0.69.182, IPv4 sur SE5 : 193.48.57.187, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:feba:38f4, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, &amp;lt;code&amp;gt;bind9&amp;lt;/code&amp;gt; installé sans plus.&lt;br /&gt;
|-&lt;br /&gt;
| Jeanne Delcourt &amp;amp; Estelle Godard || cruella&lt;br /&gt;
| IPv4 sur CV : 193.48.57.186 192.168.19.1, IPv4 sur SE5 : 193.48.57.186, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fee5:ff99, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, serveur DNS secondaire configuré.&lt;br /&gt;
|-&lt;br /&gt;
| Jason DELANNOY &amp;amp; Albin MOUTON || Jafar&lt;br /&gt;
| IPv4 sur CV : 193.48.57.183 10.0.69.1, IPv4 sur SE5 : 193.48.57.183, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe3e:f0bb, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, &amp;lt;code&amp;gt;bind9&amp;lt;/code&amp;gt; installé sans plus.&lt;br /&gt;
|-&lt;br /&gt;
| Chloé Lemaire &amp;amp; Gabriel THOMAS || bouh&lt;br /&gt;
| IPv4 sur CV : 193.48.57.180 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, serveur DNS secondaire configuré.&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Patrikeev &amp;amp; Julien Charleux || judy&lt;br /&gt;
| IPv4 sur CV : 193.48.57.182, IPv4 sur SE5 : 193.48.57.182, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe7d:4762, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, pas de serveur DNS.&lt;br /&gt;
|-&lt;br /&gt;
| Paul Amoros &amp;amp; Maël Delaby || mickey&lt;br /&gt;
| IPv4 sur CV : 193.48.57.188 10.10.10.2 10.10.10.1, IPv4 sur SE5 : 193.48.57.188, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe34:13d5, connexion à Internet en IPv4 possible, connexion à Internet en IPv6 possible, résolution DNS fonctionnelle, serveur DNS secondaire configuré mais le répertoire pour les zones secondaires n'existe pas, l'écriture échoue.&lt;br /&gt;
|-&lt;br /&gt;
| François NAUDOT &amp;amp; Karl HABRE || Ursula&lt;br /&gt;
| pas d'IPv4 sur le CV, pas d'IPv4 sur SE5, IPv6 sur SE5 : 2001:660:4401:60b0:216:3eff:fe33:7f89, pas de connexion à Internet en IPv4, connexion à Internet en IPv6 possible, pas de résolution DNS fonctionnelle, pas de serveur DNS.&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>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=3666</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=3666"/>
		<updated>2023-12-20T16:49:14Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* Serveur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
- Création d'une image Raspberry Pi OS pour la Raspberry pi 4 et formatage de la carte SD. &lt;br /&gt;
&lt;br /&gt;
- Premier démarrage de la Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
- Communication en série avec la carte grâce à Minicom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création d'une VM sur Chassiron pour l’agrégation des données.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes ==&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=3665</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=3665"/>
		<updated>2023-12-20T16:48:41Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /*20/12/23 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
- Création d'une image Raspberry Pi OS pour la Raspberry pi 4 et formatage de la carte SD. &lt;br /&gt;
&lt;br /&gt;
- Premier démarrage de la Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
- Communication en série avec la carte grâce à Minicom&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création d'une VM sur Chassiron pour l’agrégation des données.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes ==&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=3664</id>
		<title>SE5 ECEAI/eceai 2023/2024/AmorosDelaby</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE5_ECEAI/eceai_2023/2024/AmorosDelaby&amp;diff=3664"/>
		<updated>2023-12-20T16:48:16Z</updated>

		<summary type="html">&lt;p&gt;Pamoros : /* 20/12/2023 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous essayons d'implémenter une application qui permet de détecter un mouvement de type &amp;quot;Swipe&amp;quot; vers la gauche, la droite, le haut ou le bas, dans l'objectif de développer une application type Tinder.&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
- Création d'une image Raspberry Pi OS pour la Raspberry pi 4 et formatage de la carte SD. &lt;br /&gt;
&lt;br /&gt;
- Premier démarrage de la Raspberry PI.&lt;br /&gt;
&lt;br /&gt;
- Communication en série avec la carte grâce à Minicom&lt;br /&gt;
&lt;br /&gt;
=== Serveur ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création d'une VM sur Chassiron pour l’agrégation des données.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|hostname&lt;br /&gt;
|g5amodelVM&lt;br /&gt;
|-&lt;br /&gt;
|ipv6&lt;br /&gt;
|2001:660:4401:6050:216:3eff:fe40:73d8/64&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Machine virtuelle (serveur) et requêtes MQTT ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Capteur X-NUCLEO-53L5A1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modèle de machine learning ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les jeux de données d'entraînement pour le modèle créés sont les suivants:&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour lequel rien de se passe pour le capteur (ni mouvement de swipe à gauche, ni à droite)&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à gauche,&lt;br /&gt;
&lt;br /&gt;
- un jeu de données pour le swipe à droite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le formatage des données pour que nanoedgestudio puisse les utiliser pour générer un modèle est un mélange du code implémenté dans le capteur et d'un script Python modifiant les fichiers de logs générés par nanoedgestudio pour créer des lignes contenant les données des 16 axes sur une durée de 10 à 16 samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le test du benchmark sur nanoaistudio avec les jeux de données de swipe gauche ou swipe droite n'ont pas donné de résultats concluants lors de l'émulation avec un nouveau jeu de données de test. En revanche, les jeux de données avec aucun mouvement et un mouvement de swipe droit on donné un modèle assez efficace dans la reconnaissance du mouvement.&lt;br /&gt;
&lt;br /&gt;
Le manque d'efficacité d'un modèle peut-être dû notamment aux jeu de données d’entraînement qui n'est pas assez conséquent. Pour obtenir un modèle fiable dans tous les cas, il  serait nécessaire d'utiliser des certaines voire des milliers de samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 20/12/23 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en place de la réception des requêtes MQTT sur le serveur de la page web.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Travail restant ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Implémentation du modèle de machine learning sur le capteur NUCLEO-53L5A1 avec STM32CubeIDE&lt;br /&gt;
&lt;br /&gt;
- Récupération de la réponse du modèle de machine learning via la Raspberry&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codes ==&lt;/div&gt;</summary>
		<author><name>Pamoros</name></author>
	</entry>
</feed>