Negli articoli precedenti abbiamo visto come realizzare sia la parte hardware che la parte software del nostro progetto: siamo quindi riusciti ad inviare tramite delle pagine web i dati raccolti al nostro database mysql.
Ma come sono strutturate queste pagine di cui non abbiamo ancora parlato?
Abbiamo citato la pagina aggiungi.php che si occupa di inviare i dati di temperatura, umidità, pressione, luminosità, velocità del vento, precipitazioni e la pagina aggiungi_fulmini.php per i dati relativi ai fulmini.
Al termine dell’articolo sarà possibile scaricare i file con il codice completo di entrambe le pagine.
Partiamo da aggiungi.php!
Innanzitutto dobbiamo recuperare i dati che la stazione meteo ci sta inviando tramite il metodo GET:
<?php
header("Access-Control-Allow-Origin: *");
//recupero dei valori tramite il metodo GET
$temperatura = $_GET['temp'];
$umidita = $_GET['umid'];
$pressione = $_GET['pres'];
$luminosita= $_GET['lumi'];
$velocita_vento = $_GET['velo'];
$velocita_vento_max = $_GET['velo_max'];
$velocita_vento_min = $_GET['velo_min'];
$precipitazioni = $_GET['prec'];
Prima di salvare i dati bisogna ovviamente connettersi al database: per farlo impostiamo le variabili con le credenziali corrette ed eseguiamo la connessione.
//dati del database a cui connettersi
$username="nome_utente";
$password="password";
$database="nome_database";
$host="nome_host";
//connessione al database
$con = mysqli_connect($host, $username, $password);
mysqli_select_db($con, $database) or die ("Impossibile selezionare database.");
Ricordate le due tabelle che abbiamo creato e chiamato “alba” e “tramonto”? È arrivato il momento di popolarle!
Tramite il codice seguente andiamo ad individuare la data e l’intensità relativi all’ultimo valore di luminosità salvati, la data dell’ultima alba salvata e la data dell’ultimo tramonto salvato oltre che la data e l’ora attuali:
//lettura ultima luminosita e data salvata
$querylastluminosita = mysqli_query($con, "select luminosita, time_stamp from stazione_meteo order by time_stamp desc limit 1");
$lastluminositaarray = mysqli_fetch_array($querylastluminosita);
$lastluminosita = round(floatval($lastluminositaarray['luminosita']), 2);
$datalastluminosita = $lastluminositaarray['time_stamp'];
$datalastluminosita = date("Y-m-d H:i:s", strtotime($datalastluminosita));
//lettura data ultima alba salvata
$querylastalba = mysqli_query($con, "select time_stamp from alba order by time_stamp desc limit 1");
$lastalbaarray = mysqli_fetch_array($querylastalba);
$lastalba = $lastalbaarray['0'];
$lastalba = date("Y-m-d", strtotime($lastalba));
//lettura data ultimo tramonto salvato
$querylasttramonto = mysqli_query($con, "select time_stamp from tramonto order by time_stamp desc limit 1");
$lasttramontoarray = mysqli_fetch_array($querylasttramonto);
$lasttramonto = $lasttramontoarray['0'];
$lasttramonto = date("Y-m-d", strtotime($lasttramonto));
//data attuale
$dataattuale = date("Y-m-d", time());
$timestampattuale = date("Y-m-d H:i:s", time());
Per capire quando i valori di luminosità ci stanno indicando che il sole è sorto dobbiamo affidarci al seguente codice:
if ($luminosita >= 300 and $lastluminosita < 300 and $luminosita <> "") {
//luminosità attuale >=300 e precedente <300 significa che è sorto il sole
if ($dataattuale == $lastalba){
$query="UPDATE alba SET time_stamp = "."'".$timestampattuale."'"." WHERE CAST(time_stamp as date) = "."'".$dataattuale."'"."";
$result = mysqli_query($con, $query);
} else{
//esecuzione della query
$query="INSERT INTO alba (time_stamp) VALUES (NOW())";
$result = mysqli_query($con, $query);
}
}
Se la luminosità che la stazione ci sta inviando ha un valore maggiore o uguale di 300 e l’ultima luminosità salvata è minore di 300 significa che il sole sta sorgendo. Ovviamente il valore di 300 è un valore arbitrario scelto per evitare falsi positivi, siete liberi di variarlo e di sperimentare!
In realtà il codice si spinge anche oltre, ovvero verifica che non ci sia già un’alba registrata con la stessa data ed in caso aggiorna il suo valore.
Un ragionamento del tutto analogo viene fatto per identificare il momento del tramonto:
if ($luminosita <= 300 and $lastluminosita > 300 and $luminosita <> "") {
//luminosità attuale <=300 e precedente >300 significa che è tramontato il sole
if ($dataattuale == $lasttramonto){
$query="UPDATE tramonto SET time_stamp = "."'".$datalastluminosita."'"." WHERE CAST(time_stamp as date) = "."'".$dataattuale."'"."";
$result = mysqli_query($con, $query);
} else{
//esecuzione della query
$query="INSERT INTO tramonto (time_stamp) VALUES ("."'".$datalastluminosita."'".")";
$result = mysqli_query($con, $query);
}
}
Andiamo ora a popolare la tabella stazione_meteo e chiudiamo la connessione al database:
//esecuzione della query
$query="INSERT INTO stazione_meteo(temperatura, umidita, pressione, luminosita, velocita_vento, velocita_vento_max, velocita_vento_min, precipitazioni) VALUES ($temperatura, $umidita, $pressione, $luminosita, $velocita_vento, $velocita_vento_max, $velocita_vento_min, $precipitazioni)";
$result = mysqli_query($con, $query);
mysqli_close($con);
?>
La pagina aggiungi_fulmini.php funziona in modo analogo e molto più semplice. Vediamola insieme!
Innanzitutto come visto nel caso precedente recuperiamo i valori che la stazione ci invia tramite il metodo GET:
<?php
header("Access-Control-Allow-Origin: *");
//verifica che le variabili esistano e non siano nulle (isset in questo caso restituisce true, altrimenti false)
if(isset($_GET['numero_fulmini']) && isset($_GET['distanza_fulmini']) && isset($_GET['disturbi_rilevati']))
{
//recupero dei valori tramite il metodo GET
$numero_fulmini = $_GET['numero_fulmini'];
$distanza_fulmini = $_GET['distanza_fulmini'];
$disturbi_rilevati = $_GET['disturbi_rilevati'];
}
Eseguiamo la connessione al database mysql:
//dati del database a cui connettersi
$username="nome_utente";
$password="password";
$database="nome_database";
$host="nome_host";
//connessione al database
$con = mysqli_connect($host, $username, $password);
mysqli_select_db($con, $database) or die ("Impossibile selezionare database.");
Infine non ci rimane che eseguire la query per salvare i dati nella nostra tabella:
//esecuzione della query
$query="INSERT INTO fulmine(numero_fulmini, distanza_fulmini, disturbi_rilevati) VALUES ($numero_fulmini, $distanza_fulmini, $disturbi_rilevati)";
$result = mysqli_query($con, $query);
mysqli_close($con);
?>
Il file contenente il codice completo di entrambe le pagine web è disponibile cliccando qui.
