diff --git a/Raspberry/Module_4G/serverBlue.py b/Raspberry/Module_4G/_serverBlue.py
similarity index 100%
rename from Raspberry/Module_4G/serverBlue.py
rename to Raspberry/Module_4G/_serverBlue.py
diff --git a/Raspberry/Module_4G/processusEnvoi.py b/Raspberry/Module_4G/processusEnvoi4G.py
similarity index 100%
rename from Raspberry/Module_4G/processusEnvoi.py
rename to Raspberry/Module_4G/processusEnvoi4G.py
diff --git a/Raspberry/Module_4G/server.py b/Raspberry/Module_4G/server.py
new file mode 100644
index 0000000000000000000000000000000000000000..3bb7154b9fb3042c7ee09c064de6879e00d50d51
--- /dev/null
+++ b/Raspberry/Module_4G/server.py
@@ -0,0 +1,49 @@
+# PYTHON 3.5+
+import socket
+import sys
+from datetime import datetime
+
+CHUNK_SIZE = 2048
+log = open("log.txt", "w")
+file = None
+
+while True:
+	try:
+		print("Attente Client")
+		server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+		server.bind(("", 12345))
+		server.listen(10)
+
+		client, addr = server.accept()
+		print("Client acceptee : ", addr)
+
+		name = datetime.now().strftime("%d-%m-%Y_%H.%M.%S")
+		file = open("data/"+name, "wb")
+
+		while True:
+			data = client.recv(CHUNK_SIZE)
+			file.write(data)
+
+			if len(data) == 0:
+				print("Fichier recu")
+				log.write(str(datetime.now())+" => Fichier Recu\n")
+
+				file.close()
+				client.close()
+				server.close()
+				break
+			print("  -> chunk")
+
+	except KeyboardInterrupt:
+		if file is not None:
+			file.close()
+			client.close()
+			print("Deconnexion")
+			server.close()
+		log.write(str(datetime.now())+" ==> End Keyboard\n")
+		log.close()
+		sys.exit(0)
+
+	except Exception as ex:
+		print("Exception ", type(ex))
+		log.write(str(datetime.now())+" ==> Exception "+str(type(ex))+" ("+str(ex.args)+")\n")
diff --git a/Raspberry/Raspberry_central/Dispatcher.py b/Raspberry/Raspberry_central/Dispatcher.py
new file mode 100644
index 0000000000000000000000000000000000000000..ab085ed053d6d05c9661f97a9022ea832fe93f41
--- /dev/null
+++ b/Raspberry/Raspberry_central/Dispatcher.py
@@ -0,0 +1,64 @@
+import glob
+import subprocess
+import sys
+import serial
+import time
+import os
+import psutil
+from datetime import datetime
+
+
+def check_pid(pid):
+	# Verifie l'existance d'un pid
+	if psutil.pid_exists(pid):
+		p = psutil.Process(pid)
+		if p.status() != psutil.STATUS_ZOMBIE:
+			return True
+	return False
+
+
+process_port = [] # Liste des ports en cours d'utilisation
+monitoringPID = {} # Permet de recuperer et tester les processus des ports en cours d'utilisation
+
+log = open("log/logDispacher.txt", "w")
+
+while True:
+	try:
+		ports_series = glob.glob("/dev/ttyACM*")
+
+		print("Port = ", ports_series)
+		print("Open = ", process_port)
+
+		# Lance la recuperation des port existants
+		for port in ports_series:
+			if port not in process_port:
+				try:
+					process = subprocess.Popen(["python3", "RecuperationValeur.py", port])
+					process_port.append(port)
+					monitoringPID[port] = process.pid
+					log.write(str(datetime.now())+" => Start "+port+"\n")
+				except:
+					log.write(str(datetime.now())+" => Exception au Demmarrage "+port+"\n")
+					process_port.remove(port)
+					del monitoringPID[port]
+
+		# Test si des processus sont morts
+		for port in process_port:
+			if not check_pid(monitoringPID[port]):
+				log.write(str(datetime.now())+" => Mort de "+port+"\n")
+				process_port.remove(port)
+				del monitoringPID[port]
+
+		time.sleep(10)
+
+	except KeyboardInterrupt:
+		log.write(str(datetime.now())+" => End Keyboard\n")
+		log.close()
+		sys.exit(0)
+
+	#except Exception as ex:
+	#	print("Exception ", type(ex))
+	#	log.write(str(datetime.now())+" => Exception "+str(type(ex))+" ("+str(ex.args)+")\n")
+	#	sys.exit(1)
+
+
diff --git a/Raspberry/Raspberry_central/RecuperationValeur.py b/Raspberry/Raspberry_central/RecuperationValeur.py
index 37f5fe0daf3d36241b1a3e673a32c300a51b4e3f..ca54eec84c6904718245dce8295152289779fb40 100644
--- a/Raspberry/Raspberry_central/RecuperationValeur.py
+++ b/Raspberry/Raspberry_central/RecuperationValeur.py
@@ -5,13 +5,12 @@ import sys
 import subprocess
 import os
 
-port = sys.argv[1] #"ttyACM0"
+port = sys.argv[1].split("/")[2] #"/dev/ttyACM0"
 
 try:
 	os.makedirs(port)
-except OSError:
-	if not os.path.isdir(port):
-		Raise
+except:
+	print ("Existing folder")
 
 serial_port = "/dev/"+port
 baud_rate = 9600; #In arduino, Serial.begin(baud_rate)
@@ -20,30 +19,40 @@ file = port+"/"+datetime.now().strftime("%d-%m-%Y_%H.%M.%S")
 delai = datetime.now()
 output_file = open(file, "w+")
 output_file.write("id:"+port+"\n")
-ser = serial.Serial(serial_port, baud_rate)
+
+try:
+	ser = serial.Serial(serial_port, baud_rate)
+except:
+	print("Deconnexion")
+	sys.exit(1)
+
 while True:
 	try:
 		line = ser.readline();
-   		line = line.decode("utf-8") #ser.readline returns a binary, convert to string
+		line = line.decode("utf-8") #ser.readline returns a binary, convert to string
    		#temps = time.time()-debut
   		#temps = datetime.now()-debut
- 		s = str(datetime.now())+" ; "+line
-		print(s);
-	 	output_file.write(s);
-		if ((datetime.now()-delai).seconds)/60 >= 60:
+		s = str(datetime.now())+" ; "+line
+		if (datetime.now()-delai).seconds % 10 == 1:
+			print(s);
+		output_file.write(s);
+		if ((datetime.now()-delai).seconds)/60 >= 1:
 			print("PROCESS "+port)
 			output_file.close()
 			fichierAEnvoyer = file
 			file = port+"/"+datetime.now().strftime("%d-%m-%Y_%H.%M.%S");
-			subprocess.Popen(["python", "processusEnvoiBluetooth.py", fichierAEnvoyer])
+			subprocess.Popen(["python3", "processusEnvoi.py", fichierAEnvoyer])
 			delai = datetime.now()
 			output_file = open(file, "w+")
 			output_file.write("id:"+port+"\n")
 		else:
-			print(((datetime.now()-delai).seconds)/60)
+			if (datetime.now()-delai).seconds % 10 == 1:
+				print(((datetime.now()-delai).seconds)/60)
 
 	except (KeyboardInterrupt, SystemExit):
 		sys.exit(0)
+	except serial.SerialException as e:
+		sys.exit(1)
 	except:
 		print("Exception")
 		pass
diff --git a/Raspberry/Raspberry_central/processusEnvoiBluetooth.py b/Raspberry/Raspberry_central/_processusEnvoiBluetooth.py
similarity index 100%
rename from Raspberry/Raspberry_central/processusEnvoiBluetooth.py
rename to Raspberry/Raspberry_central/_processusEnvoiBluetooth.py
diff --git a/Raspberry/Raspberry_central/processusEnvoi.py b/Raspberry/Raspberry_central/processusEnvoi.py
new file mode 100644
index 0000000000000000000000000000000000000000..c22f48e8dfc71344a573331d761872b36270644c
--- /dev/null
+++ b/Raspberry/Raspberry_central/processusEnvoi.py
@@ -0,0 +1,63 @@
+# PYTHON 3.5+
+from datetime import datetime
+import socket
+import sys
+import os
+import os.path
+import time
+
+# Verifie qu'il n'y a pas d'autre processus d'envoi en verifiant le fichier lock
+if os.path.isfile("./.lockprocess"): print("Locked")
+while os.path.isfile("./.lockprocess"): time.sleep(1)
+
+# Creer un nouveau fichier lock pour verrouiller les autres processus
+if not os.path.isfile("./.lockprocess"):
+	open(".lockprocess", "a").close()
+else: # Dans l'improbable eventualite ou un processus se serait activee entre la 1ere boucle et la condition
+	while os.path.isfile("./.lockprocess"): time.sleep(1)
+	open(".lockprocess", "a").close()
+
+IP_MODULE_4G = "169.254.240.59"
+nomFichier = sys.argv[1]
+chemin = nomFichier.split("/")
+
+log = open("log/"+chemin[1]+".log", "w")
+f = None
+
+try:
+	server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+	server.connect((IP_MODULE_4G, 12345))
+
+	print("Connexion")
+	f = open(nomFichier, "rb")
+
+	print("Calcul Taille")
+	taille = os.path.getsize(nomFichier)
+
+	print("Envoi")
+	totalEnvoyee = 0
+
+	with open(nomFichier, 'rb') as f:
+		totalEnvoyee += server.sendfile(f, 0)
+		print("   -> chunk %d/%d " % (totalEnvoyee, taille))
+		log.write("   -> chunk "+str(totalEnvoyee)+"/"+str(taille)+"\n")
+
+
+	print("FIN")
+	server.close()
+
+except Exception as ex:
+	print("Exception, voir log")
+	log.write(str(datetime.now())+" => Exception "+str(type(ex))+" ("+str(ex.args)+")\n")
+	time.sleep(1)
+	os.remove(".lockprocess")
+
+print("Fin processus envoi")
+if f is not None:
+	f.close()
+	server.close()
+
+log.close()
+time.sleep(1)
+if os.path.isfile("./.lockprocess"):
+	os.remove(".lockprocess")