Blame view

python/main.py 6.66 KB
a400222a   rcavalie   deut application
1
2
3
4
5
6
7
8
9
10
11
12
  """
  Created on Thu Jan 11 15:22:56 2018
  @author: Robin Cavalieri 
  IMA5SC - PFE 2018
  P32 - Détection automatique de DoS sur réseau LoRa
  Main - prédictions, affichage, vérification du trafic 
  """
  ###############################################################################
  #LIBRAIRIES UTILES
  ###############################################################################
  import tkinter as tkr;
  import time;
f0cdc988   rcavalie   travail sur la ré...
13
  import serial;
9a50b3df   rcavalie   premiere version ok
14
15
16
17
18
  import pandas as pd
  # Réseau de neurones 
  from keras.models import Sequential
  from keras.layers import Dense
  from keras.models import model_from_json
a400222a   rcavalie   deut application
19
20
  ###############################################################################
  
f0cdc988   rcavalie   travail sur la ré...
21
22
23
  ###############################################################################
  #VARIABLES GLOBALES
  ###############################################################################
9a50b3df   rcavalie   premiere version ok
24
25
  ping_mesured=0; 
  rssi_mesured=0;
f0cdc988   rcavalie   travail sur la ré...
26
  result=0;
9a50b3df   rcavalie   premiere version ok
27
28
29
30
31
32
  puissance_read = 0;
  temp_read = 0;
  trame_read = [];
  state_ok = 'Stable';
  state_attack = 'Perturbé';
  pred = 1;
f0cdc988   rcavalie   travail sur la ré...
33
  ###############################################################################
bdfec245   rcavalie   intégration du ré...
34
  
f0cdc988   rcavalie   travail sur la ré...
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  ##############################################################################
  #DEFINITION DE LA LECTURE DE PORT 
  ##############################################################################
  ser = serial.Serial(      
   #Pour Linux
   #port='/dev/ttyACM0',
   #Pour Windows
   port='COM4',
   #Vitesse de communication
   baudrate = 9600,
   #Parité 
   parity=serial.PARITY_NONE,
   #Bit de stop
   stopbits=serial.STOPBITS_ONE,
   #Taille du message 
   bytesize=serial.EIGHTBITS,
   #Out
   timeout=1
  )
  counter=0;
  ##############################################################################
bdfec245   rcavalie   intégration du ré...
56
  
a400222a   rcavalie   deut application
57
58
59
  ###############################################################################
  #FONCTIONS UTILES
  ###############################################################################
9a50b3df   rcavalie   premiere version ok
60
  def Draw_info():   
a400222a   rcavalie   deut application
61
62
63
64
65
      #FRAME INFORMATIONS
      infos=tkr.Frame(root,width=1000,height=5000,relief='groove',background='white',bd=3);
      infos.place(x=10,y=10);  
      #DATE - HEURE
      global text;
9a50b3df   rcavalie   premiere version ok
66
      text=tkr.Label(infos,text='Contrôle du trafic LoRa\n\n');
a400222a   rcavalie   deut application
67
68
69
      text.config(font=('arial', 20, 'bold'));
      text.config(bg='white', fg='black');
      text.pack();
9a50b3df   rcavalie   premiere version ok
70
71
72
73
74
      global temperature;
      temperature=tkr.Label(infos,text='\n\nTempérature (°C) : '+ str(temp_read));
      temperature.config(font=('arial', 20, 'bold'));
      temperature.config(bg='white', fg='black');
      temperature.pack();
a400222a   rcavalie   deut application
75
      global ping;
9a50b3df   rcavalie   premiere version ok
76
      ping=tkr.Label(infos,text='\n\nPING(ms) : '+ str(ping_mesured));
a400222a   rcavalie   deut application
77
78
79
80
      ping.config(font=('arial', 20, 'bold'));
      ping.config(bg='white', fg='black');
      ping.pack();
      global rssi;
9a50b3df   rcavalie   premiere version ok
81
      rssi=tkr.Label(infos,text='\n\nRSSI(dBm) : '+ str(puissance_read));
a400222a   rcavalie   deut application
82
83
84
85
      rssi.config(font=('arial', 20, 'bold'));
      rssi.config(bg='white', fg='black');
      rssi.pack();
      global trame;
3d16d72c   rcavalie   reception des don...
86
      trame=tkr.Label(infos,text='\n\nTrame : '+ "".join(map(chr, trame_read)));
a400222a   rcavalie   deut application
87
88
      trame.config(font=('arial', 20, 'bold'));
      trame.config(bg='white', fg='black');
9a50b3df   rcavalie   premiere version ok
89
90
91
92
93
94
      trame.pack(); 
      global etat;
      etat=tkr.Label(infos,text='\n\nEtat du trafic : '+ state_ok);
      etat.config(font=('arial', 20, 'bold'));
      etat.config(bg='white', fg='black');
      etat.pack();
a400222a   rcavalie   deut application
95
      
9a50b3df   rcavalie   premiere version ok
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
  ###############################################################################
  #FONCTION DE PREDICTION APPELEE DANS LE MAIN 
  ###############################################################################
  def predictions(data_eval):
      ###########################################################################
      #ARCHITECTURE DU RESEAU DE NEURONES par le biais de la librairie KERAS
      #ANN 
      ###########################################################################
      #Création du classifieur 
      classifier = Sequential();
      #Couche d'entrée donc avec 2 entrées, PING et DELTA_RSSI
      classifier.add(Dense(input_dim = 2, output_dim = 3, init = 'uniform', activation = 'sigmoid'));
      #Couche cachée
      classifier.add(Dense(output_dim = 3, init = 'uniform', activation = 'sigmoid'));
      #Sortie du réseau de neurones 
      classifier.add(Dense(output_dim = 1, init = 'uniform', activation = 'sigmoid'));
      ###########################################################################
      #LOAD DU TRAINING SET
      ###########################################################################
      json_file=open('C:/Users/Utilisateur/PFE/python/Training/training.json','r');
      loaded_model_json=json_file.read();
      json_file.close();
      loaded_model=model_from_json(loaded_model_json);
      loaded_model.load_weights('C:/Users/Utilisateur/PFE/python/Training/training.h5');
      ###########################################################################
      #REALISER DES PREDICTIONS
      ###########################################################################
      #Normalisation des données 
      #sc = StandardScaler();
      predictions = classifier.predict(data_eval);
      return predictions;
  ###############################################################################
a400222a   rcavalie   deut application
128
129
      
  def Refresher():
9a50b3df   rcavalie   premiere version ok
130
131
      #VARIABLES GLOBALES
      global cpt_trame;
a400222a   rcavalie   deut application
132
      global text;
9a50b3df   rcavalie   premiere version ok
133
134
135
136
137
138
139
      global temp;
      global temperature;
      global ping;
      global rssi;
      global trame;
      global etat;
      #RECUPERATION DES DONNEES
a400222a   rcavalie   deut application
140
      text.configure(text=time.asctime());
9a50b3df   rcavalie   premiere version ok
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
      x = ser.readline();
      if(0x46 in x and cpt_trame == 0):
          cpt_trame = cpt_trame + 1;
          temp = time.time();
      if(0x46 in x and cpt_trame >= 1):
          t2 = time.time();
          ping_mesured = (t2-temp)*1000;
          temp = t2;
          cpt_trame = cpt_trame + 1;
          #Lecture de la trame 
          trame_read = x;
          #Récupération de la température
          temp_read = (trame_read[11]-48)*10 + trame_read[12]-48;
          #Récupération de la puissance 
          x = ser.readline();
          puissance_read = (x[1]-48)*10 + x[2]-48;
      #REFRESH DES DONNEES   
      temperature.configure(text='\n\nTempérature (°C) : '+ str(temp_read));
      ping.configure(text='\n\nPING(ms) : '+ str(ping_mesured));
      rssi.configure(text='\n\nRSSI(dBm) : '+ str(puissance_read));
      trame.configure(text='\n\nTrame : '+ "".join(map(chr, trame_read)));
      #PREDICTION
      data_to_pred = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/data_to_pred.csv');
      pred = predictions(data_to_pred);
      if(pred==0):
          etat.configure(text='\n\nEtat du trafic : '+ state_ok);
      elif(pred==1):
          etat.configure(text='\n\nEtat du trafic : '+ state_attack);
a400222a   rcavalie   deut application
169
170
      root.after(1000, Refresher);#Refresh toutes les secondes
  
bdfec245   rcavalie   intégration du ré...
171
172
173
  ###############################################################################
  #AFFICHAGE
  ###############################################################################
a400222a   rcavalie   deut application
174
  root=tkr.Tk();
9a50b3df   rcavalie   premiere version ok
175
  Draw_info();
a400222a   rcavalie   deut application
176
177
178
  Refresher();
  root.mainloop();
  ###############################################################################