Aquí va el php al que llama la placa en su proceso de pasar datos al servidor: getdata.php
<!DOCTYPE html>
<html>
<head><title>Recibe datos de Arduino</title></head>
<?php
include("funciones.php");
if (!isset($_GET["ip"])){registra_error("No se ha recibido dirección IP");}
else {$ip=$_GET["ip"];}
if(!isset($_GET["cadena"])){registra_error("No se ha recibido la cadena de datos");}
else {$cadena=$_GET["cadena"];}
echo "
" . $ip;
echo "
" . $_SERVER['REMOTE_ADDR'];
echo "
" . $cadena;
$cadena=str_replace("_"," ",$cadena);
sqlmedida($ip, $cadena);
?>
<body></body></html>
Este es el funciones.php (lo usan varios scripts) que incluye al inicio
<?php
//funciones.php
function sqlmedida($puerto,$scadena)
{
$alarma = 0;
$parciales = explode("*",$scadena);
$j = count($parciales) - 1;
//El primer parcial es el encabezado. Se desecha
for ($i = 1; $i <=$j ; $i++){
//Para cada parcial el primer carácter indica si es analógica o digital
$andig=substr($parciales[$i],0,1);
if ($andig=="A"){
//Es una analógica
$alarma=$alarma + agrega_medida($puerto, $parciales[$i]);
}
if ($andig=="D"){
agrega_alarma($puerto, $parciales[$i]);
}
}
return 0;
}
function detcomando($puerto){
//Determina si el puerto es serie o una dirección IP
if (strstr($puerto,"/dev/tty"))
{$comando="/usr/bin/python3 /var/www/html/cgi-bin/serie.py ";}
elseif (strstr($puerto, "192.168."))
{$comando="/usr/bin/python3 /var/www/html/cgi-bin/tcpip.py ";}
else
{echo "
Puerto de placa no esperado";return 1;}
return $comando;
}
function agrega_medida($puerto,$mvariable){
$long=strlen($mvariable);
$codigo=substr($mvariable,0,2);
$fechahora=substr($mvariable,2,19);
$fecharecibido=date("Y-m-d H:i:s");
$valor=substr($mvariable,21,$long-2);
$numalarmas=0;
//Abre conexion a base de datos
$mysqli = new mysqli('localhost','root','password','ADQDATA');
//$mysqli = new mysqli($ServerDB, $UserDB, $PasswordDB, $NameDB);
if ($mysqli->connect_error)
{echo "
" . "ERROR EN LA CONEXION SQL"; return 0; }
//Busca el codigo de la variable
$sql = "SELECT acodigo, afaditivo, afmultip, aDecimales, amin, amax FROM analogicas
WHERE (apuerto = '$puerto' AND adirecc = '$codigo' AND aActivado)";
$resultado = $mysqli->query($sql);
if (!$resultado)
{echo "
" . "ERROR EN LA CONSULTA SQL"; return 0; }
if ($resultado->num_rows == 0)
{registra_error("No encontrada variable " . $puerto . "-" . $codigo);return 0;}
elseif ($resultado->num_rows == 1)
{
//Recupera la matriz de campos de la fila
$linea = $resultado->fetch_assoc();
//Extrae los valores de los campos
$code = $linea["acodigo"];
$aditivo=$linea["afaditivo"];
$multip=$linea["afmultip"];
$decimales = $linea["aDecimales"];
$calcu = $valor + $aditivo;
$calcu = $calcu * $multip;
$calcu = round($calcu, $decimales);
//Inserta el registro
$sql = "INSERT INTO historia_medidas (hm_codigo, hm_fecha, hm_fecha_recibido, hm_valor)
VALUES ($code, '$fechahora' , '$fecharecibido' ,$calcu)";
if ($mysqli->query($sql) === TRUE)
{echo "
" . "Registro insertado OK: " . $fechahora . "-" . $code . "-" . $calcu;}
else
{echo "
" . "Error en la insercion de registro"; return 0;}
}
return $numalarmas;
}
function agrega_alarma($puerto,$mvariable){
$long=strlen($mvariable);
$codigo=substr($mvariable,0,2);
$valor=substr($mvariable,2,2);
$fechahora=substr($mvariable,4,19);
$fecharecibido=date("Y-m-d H:i:s");
$numalarmas=0;
//Abre conexion a base de datos
$mysqli = new mysqli('localhost','root','password,'ADQDATA');
//$mysqli = new mysqli($ServerDB, $UserDB, $PasswordDB, $NameDB);
if ($mysqli->connect_error)
{echo "
" . "ERROR EN LA CONEXION SQL"; return 0; }
//Busca el codigo de la variable
$sql = "SELECT dcodigo FROM digitales
WHERE (dpuerto = '$puerto' AND ddirecc = '$codigo')";
$resultado = $mysqli->query($sql);
if (!$resultado)
{echo "
" . "ERROR EN LA CONSULTA SQL"; return 0; }
if ($resultado->num_rows == 0)
{registra_error("No encontrada variable " . $puerto . "-" . $codigo);return 0;}
elseif ($resultado->num_rows == 1)
{
//$fechahora = date("Y-m-d H:i:s");
//Recupera la matriz de campos de la fila
$linea = $resultado->fetch_assoc();
//Extrae los valores de los campos
$code = $linea["dcodigo"];
if ($valor=='11'){$al=1;}
elseif ($valor=='00'){$al=0;}
else{$al=2;}
//Inserta el registro
$sql = "INSERT INTO historia_alarmas (ha_codigo, ha_fecha, ha_fecha_recibido, ha_valor)
VALUES ($code, '$fechahora' , '$fecharecibido' , $al)";
if ($mysqli->query($sql) === TRUE)
{echo "
" . "Registro insertado OK: " . $fechahora . "-" . $code . "-" . $al;}
else
{echo "
" . "Error en la insercion de registro"; return 0;}
}
return $numalarmas;
}
function registra_error($cadena){
//Registra algunos mensajes de error en la tabla de historia_errores
//Abre conexion a base de datos
$mysqli = new mysqli('localhost','root','ketinueb','ADQDATA');
if ($mysqli->connect_error) {return 0; }
$fecharecibido=date("Y-m-d H:i:s");
$sql = "INSERT INTO historia_errores (he_fecha_recibido, he_texto)
VALUES ('$fecharecibido', '$cadena')";
if ($mysqli->query($sql) === TRUE)
{return 0;}
else
{return 0;}
}
?>
Faltaría el código de los python para enviar órdenes a las placas, así como la página que uso para llamarlos. Luego los copio.