Aplicación para Motherbox:
Consultas de datos a través de la red con PHP
Una página Web muestra muchos aparatos...
La comunicación por red entre un navegador y un equipo terminal sólo es posible con técnicas Web ejecutadas en el lado del cliente (p. ej. JavaScript/AJAX, Java-Applet) cuando el terminal mismo pone a disposición la página Web solicitada. Las restricciones de seguridad asociadas a esas técnicas Web prohíben estrictamente el intercambio de datos entre el navegador (página Web cargada por el termina A) y otros equipos terminales (B, C, ...).
Cuando se quiera activar al mismo tiempo varios aparatos, p. ej. para visualizar en una página Web las temperaturas medidas en varias cámaras de refrigeración, se requiere un acceso central con software ejecutado en el lado del servidor (p. ej. PHP). Si se cumplen esos requisitos se anulan las limitaciones indicadas más arriba. La iniciación de la comunicación es ahora tarea del servidor Web, autorizado en la red para el establecimiento de la conexión con los terminales deseados.
Planteamiento
El presente ejemplo describe como se establece una conexión con una fuente de datos vía PHP. A través de esa conexión se consultará luego un valor de medición que finalmene aparecerá representado en la página Web reenviada. Los parámetros necesarios (dirección IP, puerto HTTP y número del canal de medición) se extraen de un formulario y serán transmitidos al abrir la página por post.
Como servidor Web con soporte PHP se utiliza la Motherbox. La fuente de datos con puntos de medición para temperatura, humedad y presión del aire es un Web-Termo-Higrobarógrafo.
Para la realización de este ejemplo se requiere únicamente un archivo PHP, que será activado de nuevo cuando se soliciten nuevos datos con el grupo de parámetros necesario. Puede descargar el archivo ejemplo aquí.
Guarde el archivo ejemplo temperature_request.php en la carpeta websites en la Motherbox. A continuación utilice el siguiente URL en un navegador cualquiera:
http://<IP-Adresse>/websites/temperature_request.php
Texto fuente
En el área PHP de introducción tiene lugar la inicialización de las variables. Cuando se abre la página Web introduciendo el URL en el navegador no se transmiten los valores de dirección IP, puerto HTTP y número de canal por post. En ese caso se utiliza en las variables valores estándar. Si se accede a la página a través del botón Request Data en la página Web, se transmiten los valores especificados por el usuario aplicándolos a las variables.
<?php
if(isset($_POST["ip"]))
{
$ip = $_POST["ip"];
$port = $_POST["port"];
$slot = $_POST["slot"];
}
else
{
$ip = "";
$port = "80";
$slot = 1;
}
?>
En la parte head se determina el grupo de caracteres y por CSS la orientación y el diseño de los componentes HTML centrales.
El formulario en el body sirve para la introducción de los datos por parte del usuario. Los campos de texto ip y port recogen los datos de dirección IP y puerto HTTP del Web-IO a consultar. Los botones de radio slot definen el canal a consultar. Esos campos se rellenan en la salida vía PHP bien con valores estándar bien con los valores actuales consultados. Si se transmite el formulario se envían los datos especificados por post al servidor.
<form action="temperature_request.php" method="post">
<table align="center">
<tr>
<th>IP-Address:</th>
<td>
<input name="ip" type="text" value="<?php echo $ip; ?>" />
</td>
</tr>
<tr>
<th>Port:</th>
<td>
<input name="port" type="text" value="<?php echo $port; ?>" />
</td>
</tr>
<tr>
<th>Channel:</th>
<td>
<input <?php if($slot == 1) echo "checked"; ?> name="slot" type="radio" value="1" />1
<input <?php if($slot == 2) echo "checked"; ?> name="slot" type="radio" value="2" />2
<input <?php if($slot == 3) echo "checked"; ?> name="slot" type="radio" value="3" />3
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="Request Data" />
</td>
</tr>
</table>
</form>
El manejo de la comunicación tiene lugar en área PHP dentro del elemento DIV measurement. Si al abrir se transmite un grupo de parámetros, entonces se establece una conexión socket para la dirección IP y el número de puerto indicados. Para el establecimiento de la conexión se ha definido un tiempo de 3 s. En caso de error se emite el mensaje Connection Error. El símbolo @ delante del comando fsockopen suprime adicionalmente un mensaje de error generado por PHP. Si se establece correctamente la comunicación se solicita el valor de medición a través de Request GET /single, seguido del número de canal deseado. La respuesta es leída a continuación por caracteres, hasta que se recibe un Byte 0 que marca el final de la respuesta del Web-IO. La cadena de caracteres compuesta en la recepción es convertida ahora en un array, utilizándose el punto y coma como caracter de separación de los distintos elementos. El último elemento del array representa el valor de medición, incluida la unidad; el penúltimo elemento es el nombre del canal. Los dos son editados.
Cuando se abre la página sin grupo de parámetros no se establece la comunicación, emitiéndose únicamente tres guiones (---).
<?php
if($ip)
{
$handle = @fsockopen($ip, $port, $errno, $errstr, 3);
if (!$handle)
echo "Connection Error!";
else
{
$response = "";
fwrite($handle, "GET /single" . $slot);
do
{
$data = fgets($handle, 2);
if(ord($data) != 0)
$response = $response . utf8_encode($data);
else
break;
}
while(true);
fclose($handle);
$parts = explode(";", $response);
echo "<b>" . $parts[count($parts)-1] . "</b> (" . $parts[count($parts)-2] . ")";
}
}
else
echo "---";
?>
Resumen
Motherbox, combinada con un servidor Web apto para PHP, ofrece todo lo necesario para la comunicación con otros componentes de la red. Acceda a los datos de medición o los datos de distintos terminales desde un punto central y asegúrelos en una página Web. Esta función Gateway es muy práctica también para el acceso a diversos terminales de redes privadas desde el exterior. Sólo tiene que configurar el NAT-Routing para la Motherbox, en lugar de crear un acceso propio para cada terminal.