Autor Tema: Problemas raros con script  (Leído 56 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado CarlosLSev

  • Full Member
  • ***
  • Mensajes: 120
    • Ver Perfil
    • MeteoViso
  • Estación: Waldbeck Halley- ESAND4100000041520A
Problemas raros con script
« en: 08 de Mayo del 2021, 00:10:27 am »
Hola aunque ya te comente algo por privado  jmviper, lo pongo por aquí ya que aletoriamente me sigue pasando lo mismo.
Tengo 2 script que leen el fichero realtime, uno obtiene el valor de lluvia caida, y el otro script revisa si hay cambios en el fichero realtime
Me centro en el de la lluvia por que creo que cuando fallan todos es por el mismo motivo.
He estado investigando y creo haber encontrado el motivo pero no la causa y no es el script. Ya que este ha estado muchos días funcionado correctamente. El fichero cache  guarda fecha, hora y litros.

Pero cuando llueve ejemplo 0.2 y ya no llueve mas durante el día, aleatoriamente recibo email de primera lluvia, he observado si abro el fichero cache me encuentro esto:
--20 ,0.0 en vez de esto que es lo que suele haber 28-04-2021 22:45:51,0.2
Es como si no guardase bien dicho fichero cache o se corrompiera, cuando se vuelve a ejecuta el script este no puede leerlo y piensa que esta a 0 y por eso me vuelve a enviar el email con el mensaje correspondiente.
Creí solucionarlo con un fsck
Añadí un sleep como me indicaste y tampoco.
Posiblemente sea como dijiste que CumulusMX escribe el realtime.txt y el script al mismo tiempo intenta leerlo.

Doy mas datos
En la raspberry tengo en el crontab
15 23 * * 7 sudo shutdown -r
He probado a ejecutar el script de lluvia desde la raspberry y pasa lo mismo.

Ahora en vps donde alojo la web
El crontab
Código: [Seleccionar]
*/12 * * * * php /var/www/html/script/alertarealtime.php
*/3 * * * *   php /var/www/html/script/alertameteoclimatic.php
*/10 * * * * php /var/www/html/script/alertalluvia.php
*/15 * * * * sh /var/www/html/webtest/script/raspionline.sh miipxxx.ddns.net 22>/dev/null 2>&1
Resumiendo
1.- Script que notifica que el fichero realtime esta actualizado o no
2.- Script que me notifica si se envían datos a meteoclimatic o no
3.- Script que indica si empezó a llover
4,. Script que me notifica si la raspberry esta offline
El 1 y 3 leen el realtime.txt
En los 2 script suelo recibir un correo de crontab con errores cuando fallan y luego en el caso del script de lluvia el email de Primera luvia
En el caso del script de lluvia
Código: [Seleccionar]
PHP Notice:  Undefined offset: 1 in /var/www/html/script/alertalluvia.php on line 26
PHP Notice:  Undefined offset: 2 in /var/www/html/script/alertalluvia.php on line 26
PHP Notice:  Undefined offset: 1 in /var/www/html/script/alertalluvia.php on line 26
PHP Notice:  Undefined offset: 9 in /var/www/html/script/alertalluvia.php on line 27

Siendo esas lineas
26  $fechar = $fecha[0].'-'.$fecha[1].'-20'.$fecha[2].' '.$realtime[1];
27  $lluvia = $realtime[9];
Creo que indica que no ha podido leerlo
Con el script de realtime me pasa algo parecido, pero solo me llegan los email de error de cron y nada mas, se que puedo desactivarlos.
Otra curiosidad, si cron ejecuta el script cada 10 minutos me llega el email y telegram  y a los 10 minutos otro.
Una solución podría ser subir el realtime.txt en vez de a los 15 seg ponerlo mas tiempo.
O ejecutar los script una vez se ha guardado el realtime.txt tal y como leí, pero creo que es marear mas la perdiz,,,
https://www.lineadecodigo.es/ejecutar-un-script-al-modificar-un-fichero-con-inotify

Lo raro es que me ha estado funcionando bien, me di cuenta 2 días que llovía algo por la noche y luego no mas...
Siento darte la paliza :((
« Última modificación: 08 de Mayo del 2021, 04:22:20 am por CarlosLSev »

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 3.570
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Problemas raros con script
« Respuesta #1 en: 08 de Mayo del 2021, 11:43:07 am »
Ya probaré el de la lluvia yo y veré si también me falla de la misma manera y te digo algo. Puede que tengamos que comprobar previamente si el valor de la lluvia leído del realtime es correcto.



Archena, Valle de Ricote (Murcia). 120 msnm. 19.428 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado CarlosLSev

  • Full Member
  • ***
  • Mensajes: 120
    • Ver Perfil
    • MeteoViso
  • Estación: Waldbeck Halley- ESAND4100000041520A
Re:Problemas raros con script
« Respuesta #2 en: 08 de Mayo del 2021, 11:58:15 am »
Ya probaré el de la lluvia yo y veré si también me falla de la misma manera y te digo algo. Puede que tengamos que comprobar previamente si el valor de la lluvia leído del realtime es correcto.

Gracias y de nuevo perdona la paliza que te estoy dando.

El script actual es
Código: [Seleccionar]
<?php



///////////Configuracion/////////////////////
$realtimefile '/var/www/html/realtime.txt';
$realtimecachefile '/var/www/html/script/alertalluvia.txt'
$umbraltormenta 4//umbral en mm sobre el cual se considera tormenta
$tiempocomprobacion 10//minutos para la comprobación de la tormenta
$tiemporeanudacion 120//minutos comprobacion de reanudacion de lluvia
$direccionaenviar 'xxxxxx@gmail.com';
//$direccionaenviar = "xxxxxxx@gmail.com,xxxxxxx@gmail.com";
$test false//true, probar correo. false, no probar
$now date('H:i:s');
$contenido ''//Añadir si queremos enviar contenido en el email
////////////////////////////////////////////

if ($test) {mail($direccionaenviar"Prueba"''); exit;}

$mensaje "";

//sleep(3);

$realtime explode(' 'file_get_contents($realtimefile));
$fecha explode('/'$realtime[0]);
$fechar $fecha[0].'-'.$fecha[1].'-20'.$fecha[2].' '.$realtime[1];
//$lluvia = $realtime[9];
$lluvia 0.1//Valor para probar manualmente
//El tiempo de reanudacion empieza a contar desde la ultima lluvia o cambio en el valor lluvia.
if (!file_exists($realtimecachefile)) file_put_contents($realtimecachefile$fechar.','.$lluvia);
$realtimecache explode(','file_get_contents($realtimecachefile));
$flaglluviacache 0;
if (
substr($realtimecache[0],0,2) != $fecha[0]) {file_put_contents($realtimecachefile$fechar.',0.0'); $flaglluviacache 1;}

$fecha strtotime($fechar);

$fechacache strtotime($realtimecache[0]);
$lluviacache $realtimecache[1];
if (
$flaglluviacache$lluviacache "0.0";
$diff $fecha $fechacache;

$difflluvia $lluvia $lluviacache;

if (
$lluvia == or $difflluvia == 0) exit;
if (
$lluviacache == and $lluvia 0$mensaje "Primera lluvia del día ".$lluvia." l  ".$now;
if (
$difflluvia and $lluviacache and $diff >= $tiemporeanudacion 60$mensaje "Vuelve a llover ".$lluvia." l  ".$now;
if (
$difflluvia >= $umbraltormenta and $diff >= $tiempocomprobacion 60$mensaje "Chaparron ".$lluvia." l  ".$now;

file_put_contents($realtimecachefile$fechar.','.$lluvia);

if (
$mensajemail($direccionaenviar$mensaje$contenido); //enviamos email
file_get_contents('https://api.telegram.org/botbbbbbbbbbbb:xxxxxxxxxxxxxxxxxxxxxxxxxxxx/sendMessage?chat_id=yyyyyyyyy&text='.$mensaje);//enviamos telegram


?>