Software > Tu Web meteorológica

Re:Corrección lluvia WD pluvio manual

(1/5) > >>

jmviper:
Viendo que tu página web está basada en la de Saratoga antes de intentar tocar el wdisplay.ini (que con WD nunca sabes lo que puede suceder) yo modificaría el valor en el archivo ajax-dashboard.php...

Sería modificar en ese archivo la línea:


--- Código: ---<?php echo strip_units($vpstormrain).$uomRain; ?>
--- Fin del código ---

Por la cantidad real como por ejemplo:


--- Código: ---<?php echo "28.4 mm (2 d&iacute;as)"//strip_units($vpstormrain).$uomRain; ?>
--- Fin del código ---

OJO hazlo si sabes manejar PHP y habiendo hecho previamente una copia de seguridad del archivo por si se pone mal (un error en PHP es fatal y o no sale la página o parte de ella).

Después cuando pasara el episodio sería dejarlo como estaba aunque si se produjera nueva lluvia no la sumaría y se tendría que poner otra vez manualmente...

Es una posible solución.

Saludos

Deltoides:
Perfecto jmviper,

A pesar de ser una opción manual y visto que las opciones para modificar el dato original son nulas, me parece buena solución. La verdad que no me supone trabajo cambiar la linea de código con la cantidad correcta de forma manual en el ajax-dashboard.php, teniendo en cuenta tus recomendaciones todo puede ir bien.

Normalmente el pluvio Davis y el Cocorahs van clavados aunque con lluvias de fuerte intensidad, en mi caso, la Davis va ligeramente por debajo como fué el caso del pasado martes.

Saludos.

jmviper:
Bueno la cosa la verdad es que se puede mejorar...

Insertando un array de etiquetas de WD en el archivo testtags.txt (que es es rellenado y convertido por WD a testtags.php) y una sencilla función PHP se podría editar todo cómodamente desde WD.

Te explico:

En el archivo testtags.txt insertar éste código:


--- Código: ---$dias_lluvia = array(%rainonsunday%,%rainonmonday%,%rainontuesday%,%rainonwedensday%,%rainonthursday%,%rainonfriday%,%rainonsaturday%,$dayrn);
--- Fin del código ---

Después de la línea en la que se rellena el dato de Rain Storm:


--- Código: ---$vpstormrain = '%vpstormrain%';           //Davis VP Storm rain value
--- Fin del código ---

Después sería ya editar el archivo ajax-dashboard.php de la siguiente manera:

Se pone esta función que recorre el array de días y devuelve la cantidad de lluvia total y la cantidad de días del episodio desde ayer (si hoy no hay lluvia) o desde hoy. Si ayer no hay lluvia se dará por finalizado el episodio y pondrá 0 mm o si hay hoy lluvia la cantidad de hoy:


--- Código: ---function stormrain($lluvia){
$d = date('w');
$dia_actual = array_pop($lluvia);
$par = array_splice($lluvia,0,$d);
$lluvia = array_merge($lluvia,$par);
$lluvia = array_reverse($lluvia);
$sum = 0; $i = 0;
while($i < 7 and $lluvia[$i] != 0) $sum += $lluvia[$i++];
$sum += $dia_actual;
if ($dia_actual > 0) $i++;

        return sprintf("%.1f",$sum)." mm".($i ? ($i > 1) ? "<br/>($i d&iacute;as)" : "<br/>($i d&iacute;a)" : "");
}

--- Fin del código ---

Por ejemplo se pone entre la última línea de código de la primera parte de php del ajax-dashboard.php:


--- Código: ---$decimalComma = (strpos($temperature,',') !==false)?true:false; // using comma for decimal point?
--- Fin del código ---

y el comentario


--- Código: --- // --- end of initialization code ---------
--- Fin del código ---

Ya queda solamente por colocar la línea de código en el lugar donde sale el dato de Storm rain que modificamos en las respuestas anteriores por:


--- Código: ---<?php 
$corr = 1; // Poner 1 para el dato de la función o poner 0 para el dato original de Rain Storm de WD
        echo $corr ? stormrain($dias_lluvia) : strip_units($vpstormrain).$uomRain;
?>

--- Fin del código ---

He puesto en dicha línea la variable $corr que si es verdadera (1 ó true) pondrá la cantidad que recoge la función y si es falsa (0 ó false) pondrá la cantidad de la etiqueta de Rain Storm de WD.

Decir que la lluvia de los días de la semana del array se modifican en View => Carta de lluvia y que modificar sus valores no influye en ningún dato de lluvia de WD excepto esos que son los que usamos para el array.

Por el momento con todas las pruebas que he realizado va bien y tiene el beneficio de que se va a ir incrementando de forma automática según llueva.
El "pero" es que sólo abarca hasta 8 días (hoy inclusive) y si el episodio tiene más de esos 8 días habría que ponerlo ya manualmente. La verdad es que eso puede ocurrir por el norte que son más agraciados en el tema de las lluvias pero aquí en el levante creo que nos vendrá bien...  ::)

Si lo pruebas tú o alguien y surge algún problema aquí estoy para intentarlo resolver  ::)

Saludos

Deltoides:
Increíble jmviper,

No me he podio aguantar ;D ;D y hoy mismo me he puesto a ello.

Tras modificar testtags.txt  y el código que indicas en ajax-dashboard.php todo funciona correctamente, la verdad que nunca pensé que se podría hacer algo así, no obstante, veo que sabiendo programar todo es posible.

 apla3

He realizado varia pruebas y parece que funciona a la perfección de manera automática. Esta vez, el dato "Storm Rain" se incrementa tanto si llueve, como si realizo la corrección (Pluvio_Davis vs Pluvio_manual) en "Adjust all rainfall totals by this amount only", y además, suma los acumulados en caso de días consecutivos de lluvia. Por otra parte, excelente idea que indique el número de días consecutivos con lluvia.

También indicas que el dato de Storm Rain se puede modificar sin afectar a los totales en View => Carta de lluvia, pero entiendo que si todo va bien que no es necesario tocar nada en esta pantalla.

Una vez mas gracias por compartir tus conocimientos, ahora solo falta esperar a que vengan las lluvias de otoño y ver como va cambiando ese dato, a pesar de tener la limitación de 8 días como bien dices, aquí es casi imposible que este lloviendo toda una semana seguida  :-\

Gracias. Saludos.  ;)

jmviper:
Celebro que te guste  ;)

La verdad es que he estado pensando que cuando se pasara el episodio de esos 8 días si siguiera lloviendo se tendría que poner manualmente y a mí me gustan las cosas automáticas, de hecho los scripts sirven para eso para que hagan su trabajo y nos despreocupemos.

He reescrito el código para que salga el dato de Rain Storm automáticamente si hay más de esos 8 días consecutivos de lluvia aunque tendremos que editar cosas manualmente en caso de tener que corregir cosas...

Lo primero es insertar estas dos líneas:


--- Código: ---$offset = 0;  // Poner la diferencia entre la cantidad Rain Storm de WD y la cantidad verdadera (número positivo o negativo)
$fecha_episodio = "";  // Poner fecha de comienzo del episodio si WD no la pone bien. Formato "año-mes-dia" ejemplo "2016-8-23". Poner comillas vacías "" si no se pone fecha
--- Fin del código ---

entre la etiqueta de comienzo de php y el primer comentario del ajax-dashboard.php quedando así:


--- Código: ---<?php
$offset = 0;  // Poner la diferencia entre la cantidad Rain Storm de WD y la cantidad verdadera (número positivo o negativo)
$fecha_episodio = "";  // Poner fecha de comienzo del episodio si WD no la pone bien. Formato "año-mes-dia" ejemplo "2016-8-23". Poner comillas vacías "" si no se pone fecha
// ajax-dashboard.php  - Ken True - [email protected]
--- Fin del código ---

Después se modificaría donde sale el dato de Storm Rain que pusimos de:


--- Código: ---<?php 
$corr = 1; // Poner 1 para el dato de la función o poner 0 para el dato original de Rain Storm de WD
        echo $corr ? stormrain($dias_lluvia) : strip_units($vpstormrain).$uomRain;
?>
--- Fin del código ---

por:


--- Código: ---<?php 
$dias = ""; $dhoy = 0; $corr = 1;
$hoy = strtotime(date('Y-m-d'));
if ($fecha_episodio){
$fecha_episodio = strtotime($fecha_episodio);
if ($hoy - $fecha_episodio > 86400 * 20) $fecha_episodio = 0;
}
if ($vpstormrain > 0 and $vpstormrainstart != '0/0/0') {
if ($fecha_episodio) $comienzo = $fecha_episodio;
else{
$co_ep = explode('/',$vpstormrainstart);
$comienzo = strtotime($co_ep[2].'-'.$co_ep[1].'-'.$co_ep[0]);
}
if ($dayrn > 0) $dhoy = 1;
$dias = ($hoy - $comienzo) / 86400;
if ($dias > 7) $corr = 0;
$dias += $dhoy;
$dias = ($dias > 1) ? "<br/>($dias d&iacute;as)" : "<br/>(1 d&iacute;a)";
}

echo $corr ? stormrain($dias_lluvia) : sprintf("%.1f",$vpstormrain + $offset).$uomRain.$dias;
?>

--- Fin del código ---

Explico brevemente el funcionamiento.

Hasta los 8 días funcionará de manera automática conforme a la función stormrain que pusimos antes. Si el episodio pasa de los 8 días se pondrá automáticamente el dato de lluvia de Rain Storm de WD más el número de días del episodio. Si se quiere modificar porque se corrigió con pluvio manual se pondrá la cantidad de diferencia en la variable $offset que pusimos al principio del ajax-dashboard.php sumando (número positivo no hace falta poner + delante) o restando (número negativo).

En el testtags.php viene la fecha en la que empezó el episodio de lluvia (los dos primeros vuelcos consecutivos de la Davis). Si esa fecha no coincidiera con la fecha en la que empezó realmente el episodio se puede poner manualmente la fecha en la variable $fecha_episodio después de $offset al principio del ajax-dashboard.php.
Respetar el formato de fecha que se indica en el comentario o saldrá error en la página. Esa fecha sobreescribirá la que pone WD de comienzo del episodio y no valdrá cuando se pasen 20 días desde el día actual.

Resumiendo no hace falta tocar nada si el episodio dura 8 días o menos. Si dura más poner el offset si lo hubiese y poner la fecha sólo si la que pone WD de principio del episodio fuera errónea. Mi recomendación es que $fecha_episodio esté vacía ($fecha_episodio = "") y si se pone fecha una vez pasado el episodio acordarse de ponerla vacía a los 20 días desde la fecha actual no vale).

Sobre todo si lo pruebas o prueba alguien hacer una copia previa a la modificación del ajax-dashboard.php en caso de imprevistos.

Por lo que lo he probado funciona OK

Que lo disfrutéis  ;D

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa