Buenas , os voy a explicar como guardar los datos del sensor en nuestra base de datos mysql , lo primero que haremos será crear una tabla donde irán los datos , yo la cree con la siguiente estructura
CREATE TABLE `Aire_Casa` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`SDS_P1` DOUBLE(16,2) DEFAULT 0.00,
`SDS_P2` DOUBLE(16,2) DEFAULT 0.00,
`BME280_temperature` DOUBLE(16,2) DEFAULT 0.00,
`BME280_pressure` DOUBLE(16,2) DEFAULT 0.00,
`BME280_humidity` DOUBLE(16,2) DEFAULT 0.00,
`Fecha` DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`)
)
La finalidad es grabar en nuestra base de datos todos los datos que nos enviara el sensor en formato JSON
{
"software_version":"NRZ-2020-133",
"age":"264",
"sensordatavalues":[
{
"value_type":"SDS_P1",
"value":"9.88"
},
{
"value_type":"SDS_P2",
"value":"2.60"
},
{
"value_type":"BME280_temperature",
"value":"16.61"
},
{
"value_type":"BME280_pressure",
"value":"101120.66"
},
{
"value_type":"BME280_humidity",
"value":"62.74"
},
{
"value_type":"samples",
"value":"10514545"
},
{
"value_type":"min_micro",
"value":"28"
},
{
"value_type":"max_micro",
"value":"20040"
},
{
"value_type":"interval",
"value":"300000"
},
{
"value_type":"signal",
"value":"-53"
}
]
}
Luego crearemos una pagina llamada data.php , a la cual llegara el json anterior , en esta pagina trataremos los datos , los extraeremos y los insertaremos en la tabla Aire_Casa . os pego mi código para que no vayáis sobre seguro
<?php
$servername = "localhost";
$dbname = "sensores";
$username = "XXXXXXXXXXXXXXXXXX";
$password = "YYYYYYYYYYYYYYYYYYYYYYYYYY";
$connect = mysqli_connect($servername, $username, $password, $dbname);
// Conexion
if (!$connect) {
die("Fallo en la conexion : " . mysqli_connect_error());
}
$data = json_decode(file_get_contents('php://input'), true);
$datavalues = $data['sensordatavalues'];
print_r($datavalues);
//Extraemos los datos del json
foreach ($datavalues as $item) {
// echo $item['value_type'], PHP_EOL;
// echo $item['value'], PHP_EOL;
if ($item['value_type'] == "SDS_P1"){
$aire_SDS_P1 = $item['value'];
}
if ($item['value_type'] == "SDS_P2"){
$aire_SDS_P2 = $item['value'];
}
if ($item['value_type'] == "BME280_temperature"){
$aire_BME280_temperature = $item['value'];
}
if ($item['value_type'] == "BME280_pressure"){
$aire_BME280_pressure = $item['value'] / 100;
}
if ($item['value_type'] == "BME280_humidity"){
$aire_BME280_humidity = $item['value'];
}
if ($item['value_type'] == "signal"){
$aire_signal = $item['value'];
}
}
$sql = "INSERT INTO Aire_Casa(SDS_P1, SDS_P2, BME280_temperature, BME280_pressure, BME280_humidity) VALUES('$aire_SDS_P1', '$aire_SDS_P2', '$aire_BME280_temperature', '$aire_BME280_pressure', '$aire_BME280_humidity')";
echo "SDS_P1 : " . $aire_SDS_P1, PHP_EOL;
echo "SDS_P2 : " . $aire_SDS_P2, PHP_EOL;
echo "BME280_temperature : " . $aire_BME280_temperature, PHP_EOL;
echo "BME280_pressure : " . $aire_BME280_pressure, PHP_EOL;
echo "BME280_humidity : " . $aire_BME280_humidity, PHP_EOL;
echo "signal : " . $aire_signal, PHP_EOL;
if (mysqli_query($connect, $sql)) {
echo "Registro insertado....";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($connect);
}
mysqli_close($connect);
?>
Para probarlo os recomiendo grabar un fichero data.json y enviarlo por curl para ver la respuesta del servidor al envío de los datos , podéis usar este comando para comprobarlo
curl -X POST -H "Content-Type: application/json" -d @data.json http://192.168.1.20:8045/aire/data.php
La respuesta si es correcto todo deberia ser algo como esto
[6] => Array
(
[value_type] => min_micro
[value] => 28
)
[7] => Array
(
[value_type] => max_micro
[value] => 20040
)
[8] => Array
(
[value_type] => interval
[value] => 300000
)
[9] => Array
(
[value_type] => signal
[value] => -53
)
)
SDS_P1 : 9.88
SDS_P2 : 2.60
BME280_temperature : 16.61
BME280_pressure : 1011.2066
BME280_humidity : 62.74
signal : -53
Registro insertado....
Si es así , perfecto entonces vamos a configurar el sensor para que envíe los datos de forma automática a data.php y este los inserte en la base de datos , para ello debemos rellenar la sección de api propia con los valores correctos
Si todo es correcto en cada ciclo de envío de datos ( yo lo tengo puesto a 300 segundos ) nos debería insertar un registro en nuestra tabla Aire_Casa y ver desde phpMyAdmin algo similar a esto.
Ya teneis los datos del sensor en vuestra base de datos , a partir de aquí el resto ya corre de vuestra imaginación