Hardware > Bricometeo
Sensor de Radiacion Solar en w/m^2
jmviper:
A ver prueba esto:
<?php
$archivo_solar = 'solar.txt'; //Datos recibidos del Arduino Solar
if (file_exists($archivo_solar)){
$archivo_solar = file_get_contents($archivo_solar); //Leemos dato solar del archivo
$valor_solar = intval($archivo_solar); //Extraemos el valor de radiación solar
$lat = 42.55;
$lon = -6.62;
$offset = explode(':',date('P'))[0];
$fecha = time();
$salida = date_sunrise($fecha, SUNFUNCS_RET_STRING, $lat, $lon, 90.6, $offset);
$puesta = date_sunset($fecha, SUNFUNCS_RET_STRING, $lat, $lon, 90.6, $offset);
$valor_solar = (strtotime(date('d-m-Y '.$salida))-600 < $fecha and $fecha < strtotime(date('d-m-Y '.$puesta))+600) ? $valor_solar : 0;
echo $valor_solar;
}
?>
Lo que hace el script es calcular que si la hora actual está entre la salida y la puesta de sol (en verdad con -600 y más 600 le resta o le suma 10 minutos a la salida o la puesta y ya he puesto tu latitud / longitud) sacará el valor de radiación solar y si no está entre esas horas pondrá 0.
--- Cita de: EA1AML en 12 de Mayo de 2018, 19:11:12 ---Si os vale este enlace? aqui lo pongo:
https://sites.google.com/site/pormetexpdomel/scripts-y-simulink-matlab
Saludos
--- Fin de la cita ---
Ese enlace es de Matlab. Nada que ver con PHP. Gracias ;)
spyfly:
muchas gracias jmviper, me he permitido retocar un poco tu código para recoger también la unidad
<?php
$archivo_solar = 'solar.txt'; // Datos recibidos del Arduino Solar
$lat = 42.57277777777778; // Mi latitud
$lon = -6.642499999999999; // Mi longitud
if (file_exists($archivo_solar))
{
list($valor_solar, $txt) = split('[ ]', file_get_contents($archivo_solar)); // Extraemos las unidades como texto y el valor como texto
$salida = strtotime(date('d-m-Y '.date_sunrise(time(), SUNFUNCS_RET_STRING, $lat, $lon, 90.6, explode(':',date('P'))[0])))-600; // Calcula la hora de salida del sol
$puesta = strtotime(date('d-m-Y '.date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $lon, 90.6, explode(':',date('P'))[0])))+600; // Calcula la hora de salida del sol
if (time() < $salida or $puesta < time())
$valor_solar = '0.00';
echo $valor_solar.' '.$txt;
}
?>
jmviper:
Ok Javier aunque algunas puntualizaciones a la modificación de tu código... no entiendo el propósito de list($valor_solar, $txt) = split('[ ]', file_get_contents($archivo_solar)); . Mejor que lo hagas con explode ya que split quedará obsoleta si tu hosting pasa a PHP 7. Además no sé cómo va a dividir el texto en array con ese separador ('[ ]'). Se supone que si la separación es un espacio será explode(' ', ...etc
Y en segundo lugar es mejor, aunque en scripts pequeños no sea muy necesario, guardar el resultado de funciones o métodos en variables en vez de tenerlas que repetir tipo poner $fecha = time(). El valor se queda en esa variable llamando solamente una vez a time() pero si lo llamas 4 veces, 4 veces accederá al reloj de sistema.
Ya digo que no es nada grave pero es bueno ir depurando código para scripts más grandes.
Pruébalo a ver qué tal va
spyfly:
El que yo puse va bien, pero acepto tus indicaciones para mejorarlo. La modificación del time y del explode que comentas creo que serian así...
--- Código: ---<?php
$archivo_solar = 'solar.txt'; // Datos recibidos del Arduino Solar
$lat = 42.57277777777778; // Mi latitud
$lon = -6.642499999999999; // Mi longitud
if (file_exists($archivo_solar))
{
list($valor_solar, $unidades) = explode(" ", file_get_contents($archivo_solar)); // Extraemos las unidades como texto y el valor como texto
$fecha=time();
$salida = strtotime(date('d-m-Y '.date_sunrise($fecha, SUNFUNCS_RET_STRING, $lat, $lon, 90.6, explode(':',date('P'))[0])))-600; // Calcula la hora de salida del sol
$puesta = strtotime(date('d-m-Y '.date_sunset($fecha, SUNFUNCS_RET_STRING, $lat, $lon, 90.6, explode(':',date('P'))[0])))+600; // Calcula la hora de salida del sol
if ($fecha < $salida or $puesta < $fecha)
$valor_solar = '0.00';
echo $valor_solar.' '.$unidades;
}
?>
--- Fin del código ---
jmviper:
--- Cita de: spyfly en 13 de Mayo de 2018, 10:55:35 ---
El que yo puse va bien, pero acepto tus indicaciones para mejorarlo. La modificación del time y del explode que comentas creo que serian así...
--- Fin de la cita ---
Ok ok... gracias por aceptar mis condiciones ;D
Ahora lo que debes de hacer es mejorar la comunicación estación-consola o consola-PC ya que sigue haciendo planos en el gráfico y va a entrar a menudo en observación. Ahora mismo tienes uno desde las 1 de la madrugada aprox.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa