diff --git a/Raspberry/Module_4G/processusEnvoi4G.py b/Raspberry/Module_4G/processusEnvoi4G.py old mode 100644 new mode 100755 index 876cdffdd9a5040dc117ad2028b4684342df684c..8accb44cca20a3c611dce1628759a13cddd70ed5 --- a/Raspberry/Module_4G/processusEnvoi4G.py +++ b/Raspberry/Module_4G/processusEnvoi4G.py @@ -1,14 +1,109 @@ -#Python 3.5 +# A executer avec SUDO +# PYTHON 3.5+ + +import subprocess +import time import socket import sys +import os +import os.path +from datetime import datetime +import psutil + +def check_pid(pid): + # Verifie l'existence d'un pid + if psutil.pid_exists(pid): + p = psutil.Process(pid) + if p.status() != psutil.STATUS_ZOMBIE: + return True + return False + + +# Verifie qu'il n'y a pas d'autres 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() + subprocess.Popen(["chmod", "777", ".lockprocess"]) +else: # Si un processus s'est activée entre la 1ere boucle et la condition + while os.path.isfile("./.lockprocess"): time.sleep(1) + open(".lockprocess", "a").close() + subprocess.Popen(["chmod", "777", ".lockprocess"]) + +IP_PC = "91.162.19.165" +PORT = 20000 nomFichier = sys.argv[1] -print(nomFichier) -sock = socket.socket() -sock.connect(('localhost', 3400)) -print("Debut processus envoi") -with open(nomFichier, 'rb') as f: - print("SEND") - sock.sendfile(f, 0) -sock.close() -print("Fin processus emvoi") +chemin = nomFichier.split("/") + +log = open("log/"+chemin[1]+".log", "w") +f = None + + +try: + pid = subprocess.Popen(["wvdial"]) + + print("============ WVDIAL LANCE ==============") + print("PID = ",pid.pid) + + time.sleep(10) + + print("============ CORRECTION ROUTE ==============") + subprocess.Popen(["route", "add", "default", "dev", "ppp0"]) # Corrige la 4G au demarrage du raspberry + + + print("============ CONNEXION ==============") + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.connect((IP_PC, PORT)) + + f = open(nomFichier, "rb") + + + print("======== CALCUL TAILLE ========") + taille = os.path.getsize(nomFichier) + + + print("============ ENVOI FICHIER ==============") + 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") + + server.close() +except KeyboardInterrupt : + print("============= LIBERATION =============") + os.remove(".lockprocess") + + print("============ WVDIAL ARRET ==============") + subprocess.Popen(["kill", "-1", pid.pid]) + + +except Exception as ex: + print("Exception, voir log") + log.write(str(datetime.now())+" => Exception "+str(type(ex))+" ("+str(ex.args)+")\n") + time.sleep(1) + print("============= LIBERATION =============") + os.remove(".lockprocess") + + print("============ WVDIAL ARRET ==============") + subprocess.Popen(["kill", "-1", pid.pid]) + + +print("================ FIN =================") +if f is not None: + f.close() + server.close() + +log.close() + +if check_pid(pid.pid): + print("============ WVDIAL ARRET ==============") + subprocess.Popen(["kill", "-1", str(pid.pid)]) + +time.sleep(1) +if os.path.isfile("./.lockprocess"): + print("=========== LIBERATION ============") + os.remove(".lockprocess") diff --git a/Raspberry/Module_4G/server.py b/Raspberry/Module_4G/server.py index 3bb7154b9fb3042c7ee09c064de6879e00d50d51..1e93d9b218cbd3bba4eb6908da46a0645d81ef09 100644 --- a/Raspberry/Module_4G/server.py +++ b/Raspberry/Module_4G/server.py @@ -1,9 +1,11 @@ # PYTHON 3.5+ import socket import sys +import time from datetime import datetime CHUNK_SIZE = 2048 +PORT = 12345 log = open("log.txt", "w") file = None @@ -11,7 +13,7 @@ while True: try: print("Attente Client") server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - server.bind(("", 12345)) + server.bind(("", PORT)) server.listen(10) client, addr = server.accept() @@ -31,6 +33,8 @@ while True: file.close() client.close() server.close() + + time.sleep(1) # Laisse le temps au port de se liberer break print(" -> chunk")