Bonjour à tous,
Je travaille actuellement sur élaboration d'une interface entre un automate programmable SCHNEIDER ELECTRIC (M251) et un robot mobile (MIR500).
Le robot peut uniquement recevoir ses missions sous forme de requêtes HTTP.
Quand à lui, notre automate n'est pas en capacité d'envoyer ses requêtes. Il est pas contre capable, via une passerelle, d'interagir avec une base de données MySQL.
Le fournisseur de mon robot m'a fournit le code source d'une page web réalisant l'envoi de ses requêtes. J'ai donc pris la décision de mettre un PC entre l'automate et le robot afin de faire la passerelle.
Ainsi, l'automate enverra ses missions à la base SQL, que je renverrai via une page web au robot.
J'ai donc adapté le code de la page que mon fournisseur m'a donné afin de la rendre "automatique".
Je l'actualise toute les secondes et je consulte ma base de données MySQL afin de voir si il y a une mission à transmettre au robot.
Si il y a, je la traite et l'envoi au robot.
Seulement j'ai un soucis, je ne suis pas le créateur de la partie "requête http", je n'arrive donc pas a retrouver mes petits la dedans.
Je souhaiterai récupérer le code http résultant de la requête (200, 404, etc...) sur ma page index afin de le mettre dans ma base de données et avoir un suivi du bon envoi de la requête.
Voici ma page index (qui s'actualise en continu) :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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
128
129
130
131
132
133
134
135
136
137
138
139
140
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194 <meta http-equiv="Refresh" content="1"> <!-- Actualisation automatique de la page toute les secondes--> <!----------------------------------------------------------------------------------> <!-------------------------------------Code PHP-------------------------------------> <!----------------------------------------------------------------------------------> <?php $etat_co_bdd = 1; // Initialisation de la variable d'état de connexion à la BDD $fp = @fsockopen("192.168.0.101", 80, $errno, $errstr, 1); // Ping sur l'adresse IP du MiRFleet try { $bdd = new PDO('mysql:host=localhost;dbname=com_api_mirfleet_schneider;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); // Connexion à la BDD } catch (Exception $e) // En cas de connexion non-valide { $etat_co_bdd = 0; // Mise à 0 de la variable $etat_co_bdd } $sql = $bdd->query('UPDATE connections_status SET state="1" WHERE connection="connection_api_script"'); // Mise à 1 du bit de vie script if ($etat_co_bdd == 1) { $etatSQL = 'OK'; // Affichage de l'etat OK de la connexion avec la BDD $sql = $bdd->query('UPDATE connections_status SET state="1" WHERE connection="connection_script_sql"'); // Mise à 1 du bit de vie SQL ?> <style type="text/css"> #p_etat_sql { color: green; /* Mettre en vert l'indication de l'etat de la connexion avec la BDD */ } </style> <?php } elseif ($etat_co_bdd == 0) { $etatSQL = 'KO'; // Affichage de l'etat KO de la connexion avec la BDD ?> <style type="text/css"> #p_etat_sql { color: red; /* Mettre en vert l'indication de l'etat de la connexion avec la BDD */ } </style> <?php } if ($fp) { $etatIpFleet = 'OK'; // Affichage de l'etat OK de la connexion avec le MiRFleet $sql = $bdd->query('UPDATE connections_status SET state="1" WHERE connection="connection_script_fleet"'); // Mise à 1 du bit de vie MiRFleet ?> <style type="text/css"> #p_etat_fleet { color: green; /* Mettre en vert l'indication de l'etat de la connexion avec le MiRFleet */ } </style> <?php } else { $etatIpFleet = 'KO'; // Affichage de l'etat OK de la connexion avec le MiRFleet $sql = $bdd->query('UPDATE connections_status SET state="0" WHERE connection="connection_script_fleet"'); // Mise à 0 du bit de vie MiRFleet ?> <style type="text/css"> #p_etat_fleet { color: red; /* Mettre en vert l'indication de l'etat de la connexion avec le MiRFleet */ } </style> <?php } if ($fp && $etat_co_bdd == 1) { // Si le ping est ok $sql_id = 0; $reponse = $bdd->query('SELECT id, mission_id FROM missions_to_send LIMIT 0, 1'); // Selection de la première ligne dans la BDD $donnees = $reponse->fetch(); if (is_array($donnees)) { // Si données est bien un array $sql_id = $donnees['id']; // Stockage de l'ID de la ligne de la BDD dans la variable $sql_id $requete_mission_id = $donnees['mission_id']; // Stockage de la mission_id de la BDD dans la variable $requete_mission_id } $reponse->closeCursor(); // Arrêt du fetch if (isset($requete_mission_id)) { $req = $bdd->prepare('INSERT INTO return_missions_sent (mission_id) VALUES(?)'); // Consolidation de l'envoi de la requete dans la table return_mission_sent $req->execute(array($requete_mission_id)); } $reponse = $bdd->query("DELETE FROM missions_to_send WHERE id= '$sql_id'"); // Supprimer la ligne envoyée en requête HTTP } ?> <!----------------------------------------------------------------------------------> <!---------------------------------Code HTML / JS-----------------------------------> <!----------------------------------------------------------------------------------> <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>GTSF Web API</title> </head> <header> <center><img src="images/banniere_haute.png" class="banniere_haute" alt="Image bannière haute"></center> <br><br><br> </header> <body> <h1>PASSERELLE API REST : <br><br>Automate -> Base SQL -> MiR Fleet</h1><br><br><br> <h2>Ici est assuré l'envoi des missions entre l'automate et le MiR Fleet. <br><br>Ne pas fermer cette page !</h2><br><br><br> <p id="p_etat_sql">Etat liaison avec base de données SQL : <?php echo $etatSQL; ?></p> <p id="p_etat_fleet">Etat liaison avec MiRFleet : <?php echo $etatIpFleet; ?></p> <script> var mission_id_for_send = "<?php echo("$requete_mission_id") ?>"; RestFunction2(); function RestFunction2() { var xhttp = new XMLHttpRequest(); xhttp.withCredentials = true; var urlrobot = "BackendHandle2.php" xhttp.open("POST", urlrobot); xhttp.setRequestHeader("content-Type", "application/json"); xhttp.send(JSON.stringify({ "mission_id": mission_id_for_send })); } </script> </body> <footer> <center><img src="images/banniere_basse.png" class="banniere_basse" alt="Image bannière basse"></center> </footer> </html> <!----------------------------------------------------------------------------------> <!-------------------------------------Code CSS-------------------------------------> <!----------------------------------------------------------------------------------> <style type="text/css"> html { background-color: #d9d9d9; background-attachment: fixed; background-size: 105% auto; } body { width: 900px; border: 2px solid black; margin: auto; background-color: white; color: #357AB7; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16px; line-height: 1.5em; font-family: Calibri; text-align: center; } h1 { width: 80%; margin: 2% auto; text-align: center; } h2 { text-align: center; color: red; text-decoration: underline; font-size: 1.3em; } </style>
et ma page établissant la requête :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 <?php // Make sure that it is a POST request. if(strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') != 0){ throw new Exception('Request method must be POST!'); } // Make sure that the content type of the POST request has been set to application/json $contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : ''; if(strcasecmp($contentType, 'application/json') != 0){ throw new Exception('Content type must be: application/json'); } // Receive the RAW post data. $content = trim(file_get_contents("php://input")); // Attempt to decode the incoming RAW post data from JSON. $decoded = json_decode($content, true); // If json_decode failed, the JSON is invalid. if(!is_array($decoded)){ throw new Exception('Received content contained invalid JSON!'); } unset($headers); $headers[] = "Accept-Language: en_US"; $headers[] = "Authorization: Basic YWRtaW46OGM2OTc2ZTViNTQxMDQxNWJkZTkwOGJkNGRlZTE1ZGZiMTY3YTljODczZmM0YmI4YTgxZjZmMmFiNDQ4YTkxOA=="; $headers[] = "Content-Type: application/json"; $ch = curl_init("192.168.0.101/api/v2.0.0/mission_scheduler"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_VERBOSE,false); curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST"); curl_setopt($ch,CURLOPT_HEADER,true); curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($decoded)); curl_setopt($ch,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4); curl_setopt($ch,CURLOPT_TIMEOUT,1); curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); $response = curl_exec($ch); curl_close($ch); echo "<pre>"; print_r($response); echo "</pre>\n"; ?>
J'ai également ajouté les codes sources en PJ.
Comment puis-je récupérer ce résultat de requête afin de le mettre dans ma base de données...
Je tiens à préciser que je ne suis pas développeur web, je suis responsable projet dans une entreprise qui installe des solutions logistiques type convoyeurs. Je me suis lancé dans cette aventure par ambition. Je n'ai pas de réelle formation en dev, c'est ma curiosité qui m'a poussé la dedans.
J'ai suivi des cours PHP, HTML, CSS, MySQL.
J'ai également essayé de suivre les cours JS mais j'ai beaucoup de mal avec ce langage. Je bloque rapidement.
Je vous remercie d'avance de votre aide
Partager