Commit e9db206189a43f8d75763692743e461492bc1aa2

Authored by sfeutrie
1 parent 180f54e5

Ajout de fonctionnalites sur le site

-Il est désormais possible de changer le groupe d'utilisateur
-Le code du programme sur la Raspberry a été légèrement modifié pour être plus propre
PFE06/src/main/java/com/PFE/ServerManager/MainController.java
... ... @@ -121,6 +121,7 @@ public class MainController {
121 121 modelAndView.addObject("succeed", succeed);
122 122 System.out.println("all teams : " + teamRepository.findAll());
123 123 modelAndView.addObject("allTeams", teamRepository.findAll());
  124 + modelAndView.addObject("allCustomers", customerRepository.findAll());
124 125 modelAndView.setViewName("registration");
125 126 return modelAndView;
126 127 }
... ... @@ -130,26 +131,11 @@ public class MainController {
130 131 return "denied";
131 132 }
132 133  
133   - @PostMapping(path="/addTeam")
134   - public String addNewTeam(@RequestParam String teamName){
135   -
136   - if(teamRepository.findByTeam(teamName) != null) {
137   - return "redirect:/registration?message=Le groupe&succeed=-1";
138   - }
139   - else {
140   - Team t = new Team();
141   - t.setTeam(teamName);
142   - t.setTeamId((int)(teamRepository.count()+1));
143   - teamRepository.save(t);
144   - return "redirect:/registration?message=Le groupe&succeed=1";
145   - }
146   - }
147   -
148 134 @PostMapping(path="/addUser")
149 135 public String addNewUser(@RequestParam String email, @RequestParam String password, @RequestParam String role, @RequestParam String team) {
150 136  
151 137 if(customerRepository.findByEmail(email) != null) {
152   - return "redirect:/registration?message=L'utilisateur&succeed=-1";
  138 + return "redirect:/registration?message=L'utilisateur existe+d%C3%A9j%C3%A0&succeed=-1";
153 139 }
154 140 else {
155 141 Customer n = new Customer();
... ... @@ -164,9 +150,43 @@ public class MainController {
164 150 Team temp = teamRepository.findByTeam(team);
165 151 temp.addCustomer(n);
166 152 teamRepository.save(temp);
167   - return "redirect:/registration?message=L'utilisateur&succeed=1";
  153 + return "redirect:/registration?message=L'utilisateur a+%C3%A9t%C3%A9+ajout%C3%A9&succeed=1";
168 154 }
  155 + }
169 156  
  157 + @PostMapping(path="/addTeam")
  158 + public String addNewTeam(@RequestParam String teamName){
  159 +
  160 + if(teamRepository.findByTeam(teamName) != null) {
  161 + return "redirect:/registration?message=Le groupe existe+d%C3%A9j%C3%A0&succeed=-1";
  162 + }
  163 + else {
  164 + Team t = new Team();
  165 + t.setTeam(teamName);
  166 + t.setTeamId((int)(teamRepository.count()+1));
  167 + teamRepository.save(t);
  168 + return "redirect:/registration?message=Le groupe a+%C3%A9t%C3%A9+ajout%C3%A9&succeed=1";
  169 + }
  170 + }
  171 +
  172 + @PostMapping(path="/changeCustomerTeam")
  173 + public String addCustomerTeam(@RequestParam String teamName, @RequestParam String customerName){
  174 + Team newTeam = teamRepository.findByTeam(teamName);
  175 + Customer customer = customerRepository.findByEmail(customerName);
  176 + Team oldTeam = teamRepository.findByCustomersContaining(customer);
  177 + if( newTeam == null || customer == null) {
  178 + return "redirect:/registration?message=le+groupe+ou+l%27utilisateur+n%27existe+plus&succeed=-1";
  179 + }
  180 + else if(oldTeam == newTeam){
  181 + return "redirect:/registration?message=l%27utilisateur+appartient+d%C3%A9j%C3%A0+%C3%A0+ce+groupe&succeed=-1";
  182 + }
  183 + else {
  184 + newTeam.addCustomer(customer);
  185 + oldTeam.removeCustomer(customer);
  186 + teamRepository.save(newTeam);
  187 + teamRepository.save(oldTeam);
  188 + return "redirect:/registration?message=le+groupe+de+l%27utilisateur+a+bien+%C3%A9t%C3%A9+chang%C3%A9&succeed=1";
  189 + }
170 190 }
171 191  
172 192 @RequestMapping(value = "/file", method = RequestMethod.POST)
... ...
PFE06/src/main/java/com/PFE/ServerManager/Team.java
... ... @@ -52,6 +52,11 @@ public class Team {
52 52 }
53 53 this.customers.add(customer);
54 54 }
  55 + public void removeCustomer(Customer customer){
  56 + if(customers != null){
  57 + customers.remove(customer);
  58 + }
  59 + }
55 60  
56 61 public void setUpdates(Set<Update> updates) {
57 62 this.updates = updates;
... ...
PFE06/src/main/resources/templates/registration.html
... ... @@ -41,17 +41,17 @@
41 41  
42 42 <div th:if="${succeed == 1}">
43 43 <div class="alert alert-success" style="margin-top:50px" role="alert">
44   - <span th:utext="${message + ' a été ajouté'}"></span>
  44 + <span th:utext="${message}"></span>
45 45 </div>
46 46 </div>
47 47  
48 48 <div th:if="${succeed == -1}">
49 49 <div class="alert alert-danger" style="margin-top:50px" role="alert">
50   - <span th:utext="${message + ' existe déjà'}"></span>
  50 + <span th:utext="${message}"></span>
51 51 </div>
52 52 </div>
53 53  
54   - <h1 style="margin-bottom:50px; margin-top:50px; border-bottom:1px solid #CCC; padding-bottom:20px;">Formulaire d'ajout d'un utilisateur</h1>
  54 + <h1 style="margin-bottom:50px; margin-top:50px; border-bottom:1px solid #CCC; padding-bottom:20px;">Ajouter un utilisateur</h1>
55 55 <div class="login-form">
56 56 <form id="Login" th:action="@{/addUser}" method="POST">
57 57 <div class="form-team">
... ... @@ -80,7 +80,7 @@
80 80 </form>
81 81 </div>
82 82  
83   - <h1 style="margin-bottom:50px; margin-top:50px; border-bottom:1px solid #CCC; padding-bottom:20px;">Formulaire d'ajout d'un groupe de travail</h1>
  83 + <h1 style="margin-bottom:50px; margin-top:50px; border-bottom:1px solid #CCC; padding-bottom:20px;">Ajouter un groupe de travail</h1>
84 84 <div class="login-form">
85 85 <form id="addTeam" th:action="@{/addTeam}" method="POST">
86 86 <div class="form-team">
... ... @@ -90,6 +90,26 @@
90 90 <button @click.prevent="registration" type="submit" class="btn btn-primary">Ajouter</button>
91 91 </form>
92 92 </div>
  93 +
  94 + <h1 style="margin-bottom:50px; margin-top:50px; border-bottom:1px solid #CCC; padding-bottom:20px;">Changer le groupe d'un utilisateur</h1>
  95 + <div class="login-form">
  96 + <form id="addTeam" th:action="@{/changeCustomerTeam}" method="POST">
  97 + <div class="form-group">
  98 + <label for="sel2">Selectionnez un utilisateur</label>
  99 + <select class="form-control" id="sel2" name="customerName" required>
  100 + <option name="customerName" th:each="customer : ${allCustomers}" th:value="${customer.getEmail()}" th:utext="${customer.getEmail()}"/>
  101 + </select>
  102 + </div>
  103 + <div class="form-group">
  104 + <label for="sel2">Selectionnez un groupe de travail</label>
  105 + <select class="form-control" id="sel2" name="teamName" required>
  106 + <option name="teamName" th:each="team : ${allTeams}" th:value="${team.getTeam()}" th:utext="${team.getTeam()}"/>
  107 + </select>
  108 + </div>
  109 + <br/>
  110 + <button @click.prevent="registration" type="submit" class="btn btn-primary">Changer</button>
  111 + </form>
  112 + </div>
93 113 </div>
94 114  
95 115 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
... ...
Raspberry/config_experimentation.txt
1 1 temperature_1
2   -mouvement_2
3   -wrong_file
4 2 \ No newline at end of file
  3 +mouvement_2
5 4 \ No newline at end of file
... ...
Raspberry/data deleted
No preview for this file type
Raspberry/data.c deleted
... ... @@ -1,85 +0,0 @@
1   -#include <stdio.h>
2   -#include <stdlib.h>
3   -#include <unistd.h>
4   -#include <termios.h>
5   -#include <string.h>
6   -#include <sys/stat.h>
7   -#include <fcntl.h>
8   -#include <stropts.h>
9   -
10   -int pt;
11   -struct termios tty, old; /* Create the structure */
12   -
13   -void reset_tty(){
14   - tcsetattr(pt, TCSANOW, &old);
15   - close(pt);
16   -}
17   -
18   -int main(){
19   - int r=-1;
20   - char * device = "/dev/ttyS3";
21   - pt = open(device, O_RDWR | O_NOCTTY | O_SYNC);
22   - if(pt == -1){
23   - perror("open");
24   - exit(-1);
25   - }
26   - printf("open : %d\n",pt);
27   - ioctl(pt, I_SRDOPT, RMSGD);
28   - tcgetattr(pt, &old);
29   - atexit(reset_tty);
30   -
31   - tcgetattr(pt, &tty); // Get the current attributes of the Serial port
32   -
33   - //cfmakeraw(&tty);
34   - tty.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON | IXOFF);
35   - printf("iflag = %x\n",tty.c_iflag);
36   - tty.c_oflag &= ~(OPOST);
37   - printf("oflag = %x\n",tty.c_oflag);
38   - tty.c_cflag |= (CS8);
39   - tty.c_cflag &= ~(CSIZE|PARENB);
40   - printf("cflag = %x\n",tty.c_cflag);
41   - tty.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
42   - printf("lflag = %x\n",tty.c_lflag);
43   -
44   - tty.c_cc[VMIN] = 7;
45   - tty.c_cc[VTIME] = 0;
46   - cfsetispeed(&tty,B9600); // Setting the Baud rate
47   - cfsetospeed(&tty,B9600);
48   -
49   - /*Peut-être inutile si on est en liaison série et pas en USB : le TCSAFLUSH devrait suffir*/
50   - sleep(1);
51   -
52   - if(tcflush(pt, TCIFLUSH)==-1){
53   - perror("tcflush");
54   - exit(-1);
55   - }
56   -
57   - if(tcsetattr(pt, TCSANOW, &tty)==-1){
58   - perror("tcsetattr");
59   - }
60   -
61   - int i = 0;
62   - char end[20];
63   -
64   - if(cfgetispeed(&tty)!=B9600)
65   - {
66   - perror("cfgetispeed");
67   - exit(-1);
68   - }
69   -
70   - int count = 0;
71   - char line[20];
72   - memset(line,0,sizeof(line));
73   -
74   - while(count<14){
75   - r = read(pt ,line,1);
76   - printf("c = %c (characters read : %d)\n",line[0],r);
77   - //printf("l = %c\n",line[0]);
78   - count++;
79   - memset(line,0,sizeof(line));
80   - printf("\n");
81   - }
82   -
83   - //close(pt);
84   - return 0;
85   -}
86 0 \ No newline at end of file
Raspberry/data.cpp deleted
... ... @@ -1,8 +0,0 @@
1   -#include <iostream>
2   -using namespace std;
3   -
4   -int main()
5   -{
6   - cout << "Hello, World!";
7   - return 0;
8   -}
9 0 \ No newline at end of file
Raspberry/listener
No preview for this file type
Raspberry/listener.c
... ... @@ -55,7 +55,7 @@ void save_data(int pt, char* sensor){
55 55 strcat(base, sensor);
56 56 strcat(base, ".txt");
57 57 file = fopen(base,"w");
58   - printf("base = %s\n",base);
  58 + //printf("base = %s\n",base);
59 59 if(file==NULL){
60 60 perror("fopen");
61 61 exit(-1);
... ... @@ -66,8 +66,10 @@ void save_data(int pt, char* sensor){
66 66 memset(line,0,sizeof(line));
67 67 while(1){
68 68 int r = read(pt ,line,1);
69   - printf("c = %c (characters read : %d)\n\n", line[0], r);
70   - r = fprintf(file, "%c",line[0]);
  69 + if(r>=0){
  70 + printf("sensor : %s - c = %c (characters read : %d)\n\n", sensor, line[0], r);
  71 + r = fprintf(file, "%c",line[0]);
  72 + }
71 73 fflush(file);
72 74 memset(line,0,sizeof(line));
73 75 count++;
... ... @@ -85,32 +87,35 @@ void reset_serial(int pt){
85 87 printf("end reset_serial\n");
86 88 }
87 89  
88   -void * set_serial(void * sensorAndPort2){
89   - char *device = ((SensorAndPort *)sensorAndPort2)->port;
  90 +int set_serial(SensorAndPort* sensorAndPort){
  91 + char *device = sensorAndPort->port;
90 92 printf("device : %s\n",device);
91   - //char * device = (char *)deviceV;
92 93 int pt = open(device, O_RDWR | O_NOCTTY | O_SYNC); // retourne une erreur si le terminal n'est connecté à rien (pas de STM32 ni de Arduino dans notre cas)
93 94 if(pt == -1){
94   - create_error_file(((SensorAndPort *)sensorAndPort2)->sensor, "impossible de se connecter au port série, veuillez vérifier le microprocesseur et la raspberry");
  95 + create_error_file(sensorAndPort->sensor, "impossible de se connecter au port série, veuillez vérifier le microprocesseur et la raspberry");
95 96 perror("in set_serial(...) - open");
96 97 pthread_exit(NULL);
97 98 }
98   - ioctl(pt, I_SRDOPT, RMSGD);
99   - //fcntl(pt, F_SETFL, 0);
  99 + //ioctl(pt, I_SRDOPT, RMSGD);
100 100 tcgetattr(pt, &old);
101   - tcgetattr(pt, &tty); // Get the current attributes of the Serial port
102   - // cfmakeraw(&tty);
103   - tty.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON | IXOFF);
104   - tty.c_oflag &= ~(OPOST);
105   - tty.c_cflag |= (CS8);
106   - tty.c_cflag &= ~(CSIZE|PARENB);
107   - tty.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
108   - tty.c_cc[VMIN] = 1;
109   - tty.c_cc[VTIME] = 0;
  101 + tcgetattr(pt, &tty);
  102 + ////////////////////////////////////////////////////////////////////////////////////////
  103 + // Sur les Raspberry le code du read() est bien bloquant comme prévu mais par sur linux Ubuntun.
  104 + // Donc sur les Raspberry, il est nécessaire de mettre un VTIME et de mettre VMIN = 0
  105 + // car le timer commence lorsque le premier caractère est détécté :
  106 + // Si aucun caractère n'arrive le timer ne commence jamais et le read bloque à l'infini
  107 + ////////////////////////////////////////////////////////////////////////////////////////
110 108 cfsetispeed(&tty,B9600);
111 109 cfsetospeed(&tty,B9600);
112 110  
113   - sleep(1);
  111 + tty.c_cc[VMIN] = 1;
  112 + tty.c_cc[VTIME] = 10;
  113 +
  114 + tty.c_cflag |= CLOCAL;
  115 + tty.c_cflag |= CREAD;
  116 + cfmakeraw(&tty);
  117 +
  118 + sleep(1); // nécessaire pour que le flush soit fait
114 119 if(tcflush(pt, TCIFLUSH)==-1){
115 120 perror("in set_serial(...) - tcflush");
116 121 pthread_exit(NULL);
... ... @@ -124,8 +129,12 @@ void * set_serial(void * sensorAndPort2){
124 129 perror("in set_serial(...) - cfgetispeed");
125 130 pthread_exit(NULL);
126 131 }
  132 + return pt;
  133 +}
127 134  
128   - save_data(pt, ((SensorAndPort *)sensorAndPort2)->sensor);
  135 +void * start(void * sensorAndPort){
  136 + int pt = set_serial((SensorAndPort *) sensorAndPort);
  137 + save_data(pt, ((SensorAndPort *)sensorAndPort)->sensor);
129 138 reset_serial(pt);
130 139 pthread_exit(NULL);
131 140 }
... ... @@ -168,17 +177,27 @@ void get_ports_to_read(char list_sensors[MAX_SENSORS][30], char list_serial_port
168 177 }
169 178  
170 179  
171   -int main(){
  180 +int main(int argc, char *argv[]){
  181 + char * config_experimentation = "config_experimentation.txt";
  182 + char * config_raspberry = "config_raspberry.txt";
  183 + if(argc>1){
  184 + printf("fichier contenant la liste des capteurs de l'experimentation : %s\n",argv[1]);
  185 + char * config_experimentation = argv[1];
  186 + }
  187 + if(argc>2){
  188 + printf("fichier contenant la correspondance de tous les capteurs avec leur liaison série : %s\n",argv[2]);
  189 + char * config_raspberry = argv[2];
  190 + }
172 191 SensorAndPort sensorAndPort[MAX_SENSORS];
173   -
  192 +
174 193 char device[MAX_SENSORS][12];
175 194 pthread_t threads[MAX_SENSORS];
176 195  
177 196 char list_sensors[MAX_SENSORS][30], list_serial_port[MAX_SENSORS][30], sensors_ports[MAX_SENSORS][30];
178 197 int i=0, count_sensors=0, count_serial_port=0;
179   - count_sensors = read_file_by_line(list_sensors, "config_experimentation.txt");
  198 + count_sensors = read_file_by_line(list_sensors, config_experimentation);
180 199 printf("numbers of sensors = %d\n",count_sensors);
181   - count_serial_port = read_file_by_line(list_serial_port, "config_raspberry.txt");
  200 + count_serial_port = read_file_by_line(list_serial_port, config_raspberry);
182 201 get_ports_to_read(list_sensors,list_serial_port,count_sensors, count_serial_port, sensors_ports);
183 202  
184 203 action.sa_handler=sig_handler;
... ... @@ -187,10 +206,14 @@ int main(){
187 206 for(i=0;i<count_sensors;i++){
188 207 strcpy(sensorAndPort[i].sensor,list_sensors[i]);
189 208 strcpy(sensorAndPort[i].port,sensors_ports[i]);
190   - pthread_create(&(threads[i]), NULL, set_serial, (void *)(&(sensorAndPort[i])));
  209 + pthread_create(&(threads[i]), NULL, start, (void *)(&(sensorAndPort[i])));
191 210 }
192 211 for(i=0;i<count_sensors;i++){
193 212 pthread_join(threads[i],NULL);
194 213 }
195 214 return 0;
196   -}
197 215 \ No newline at end of file
  216 +}
  217 +
  218 +//169.254.24.80
  219 +
  220 +//169.254.25.26
198 221 \ No newline at end of file
... ...
Raspberry/res/result_exp_mouvement_2.txt deleted
1 1 Binary files a/Raspberry/res/result_exp_mouvement_2.txt and /dev/null differ
... ...
Raspberry/res/result_exp_temperature_1.txt deleted
... ... @@ -1 +0,0 @@
1   -impossible de se connecter au port série, veuillez vérifier le microprocesseur et la raspberry
2 0 \ No newline at end of file
Raspberry/res/result_exp_wrong_file.txt deleted
... ... @@ -1 +0,0 @@
1   -impossible de se connecter au port série, veuillez vérifier le microprocesseur et la raspberry
2 0 \ No newline at end of file