Sistemati i test di collazione e quello di invio dei dati, come nei post precedenti, adesso vediamo come ho gestito il sistema lato server. Quindi , ricapitolando, il sistema prevede la raccolta dei dati da una macchina industriale attraverso il protocollo ModBus. L'invio di questi dati attraverso una chiamata request in POST verso un server che si occuperà di ricevere e di registrare i dati raccolti su MySQL standard.
Qui di seguito descrivo la ricezione dei dati attraverso una pagina PHP che si occupa anche dell'invio verso MySql dei dati stessi, quindi il nostro server dovrà avere caricato e funzionante il PHP, il MySql ed un web server con certificato SSL che possa ricevere chiamate https.
Ipotizziamo di ricevere dei dati da una macchina industriale, per esempio questi:
"ser"
"t1"
"t2"
"ai"
"ah"
"h1"
"h2"
"h3"
"h4"
"i1"
"i2"
"i3"
"i4"
"i5"
"f1"
"f2"
"f3"
"f4"
"f5"
"t1_max"
"t1_min"
"t2_max"
"t2_min"
"IS"
"ai_max"
"vers_soft"
"mac"
"eth0"
"ipp"
"gw"
"sft_ver"
"power_up_time"
"wlan0"
"O3_ppm"
"temperature"
"humidity"
Per poterli inserire in un database, dobbiamo intanto creare una tabella che si aspetti di ricevere questi dati, oltre al timestamp per definire il tempo di ricezione ed il numero ID progressivo dell'operazione.
Quindi Creata la tabella ed inseriti i nomi dei campi sul server MySql (settati i vari parametri relativi al MySql), a questo punto dobbiamo costruire una pagina php che riceva la chiamata request POST dal nostro ESP32 e si preoccupi di prelevare i dati allegati al POST, e correttamente li inserisca in una query di INSERT nel database.
<?php
/*
TecnoGeppetto
Inserimento dati in DB
11/07/2020
*/
$servername = "localhost:3306";
$dbname = "NAME DB";
$username = "DB USERNAME";
$password = "DB PASSW";
// Change this value, the ESP32 sketch needs to match
$api_key_value = "YOUR API KEY";
//Build variables
$api_key= $ser = $t1 = $t2 = $ai = $ah = $h1 = $h2 = $h3 = $h4 = $i1 = $i2 = $i3 = $i4 = $i5 = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$api_key = test_input($_POST["API_KEY"]);
if($api_key == $api_key_value) {
$post = file_get_contents('php://input');
$post = json_decode($post, TRUE);
echo var_dump($post);
$ser = test_input($post["ser"]);
$t1 = test_input($post["t1"]);
$t2 = test_input($post["t2"]);
$ai = test_input($post["ai"]);
$ah = test_input($post["ah"]);
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO sensor_data (ser, t1, t2, ai, ah)
VALUES ('" . $ser . "', '" . $t1 . "', '" . $t2 . "', '" . $ai . "', '" . $ah . "')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
else {
echo "Wrong API Key provided.";
}
}
else {
echo "No data posted with HTTP POST.";
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Come potete leggere nel codice sopra per la fase di test ho deciso di inviare solo alcune delle variabili (ser, t1, t2, ai, ah), le altre le ho omesse solo per praticità.
Il codice sopra dovrà essere inserito in un file .php sul server web in cloud. Detto file verrà quindi chiamato dal codice che gira su ESP32 e che effettua la chiamata request POST.
Buon Lavoro
TecnoGeppetto