2 pièce(s) jointe(s)
Interface Web d'échange entre un automate et un robot AIV
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:
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:
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 :)