Hola de nuevo Carlos y feliz año a ti también
Estaba viendo que estabas bastante tiempo callado y me decía que este está tramando algo
Me gusta que tengas el interés por mejorar el script y te las hayas ingeniado para meter la info del METAR supliendo las carencias del sensor/ubicación del sensor.
A ver, como decía Jack el destripador, vayamos por partes:
¿por cierto para cuando una sección php?
Pronto pronto... a ver si para este mes y para cosas básicas en principio. Tengo que desliarme un poco con los proyectos. Por lo que veo vamos a comentar primero cosas de javascript.
Ahora quiero preguntarte una duda del script sobre la var teomaxrad = realtime[56];
Cuando la declaras la llamas teomaxrad, pero luego en mas partes del código la llamas teoradmax
else if (teoradmax === "0") con1 = "Noche";
Es cosa mía o es un error¿?
Le llamé de dos maneras diferentes en dos funciones distintas pero no altera el funcionamiento, quizás ni me di cuenta.
teomaxrad es como le puse a la variable dentro de la función principal
ajaxLoader que es la que se encarga de actualizar los valores con su
setInterval (ahora te comentaré más adelante esto). Sin embargo
teoradmax es como se llama dentro de la función
condicAsí tenemos que dentro de la función
ajaxLoader creamos la variable
teomaxrad a la que le asignamos el valor de radiación máxima teórica del
realtime.php y después la metemos en la función
condicvar condiciones =
condic(porcen10m, porcen1h, solar, porcen, rad1min, rad2min,
teomaxrad, humidity, wind, rainratehr, diaonoche, ajaxtimeformat.split(':')[0]);
Dentro de esa función se llama
teoradmax:
function
condic(solar10, solar60, solar, solarpct, solar1, solar2,
teoradmax, humedad, viento, intensidad, diaonoche, hora) {...
Como ves una cosa son los nombres de las variables que se meten como argumentos de la función y otra cómo son tomados dentro de la función (según la posición del argumento). Todo esto son cosas básicas de las funciones.
Viendo tu código para crear lo del metar has puesto más código de la cuenta, basado seguramente en prueba/error. Te lo comento un poco:
//Asignamos valor 0 a todas las var
var SKC = "0";
...
No hace falta ponerle el 0 como string (encerrado en las comillas), lo puedes poner como número, de hecho "0" == 0 es verdadero.
var SKC = Metar.search("SKC");
if (SKC > 0) SKC = "1";
if (SKC < 0) SKC = "0";
...
Aquí estás sobrescribiendo lo que has declarado antes, puedes prescindir por lo tanto del bloque anterior. Por ejemplo le estás dando otro valor a la variable SKC que será su posición en el
string (-1 si no existe), pero no uses eso para ver si existe una palabra en un texto, por ejemplo si la palabra está al principio te devolvería posición 0 que sería
false. Usa
match() o
test() de la siguiente manera:
var SKC = Metar.match("SKC");
...
o
var SKC = /SKC/.test(Metar);
...
Esta última es más rápida en ejecución ya que
match devuelve un objeto que se evalúa a
true si existe la cadena y
undefined que se evalúa a
false si no existe, mientras que
test devuelve los boleanos
true o
false. O sea que no hace falta ponerle los ifs siguientes ni declararlos anteriormente.
Así la línea del if puede quedar así:
if (con1 != "Despejado" && teoradmax >= 30 && (SKC || CAVOK || NSC || NCD )) con1 = " Despejado";
Esos valores ya contendrán el valor
true o
falseEsas declaraciones las has hecho fuera de una función, por lo que son solo cargadas al llamar a la página y no van a ser actualizadas a menos que recargues la página. Tendrías que ponerlas dentro de la función
condic en su inicio para que lo evalúe en cada petición ajax, aunque la actualización de los metars es cada hora más o menos y no haría falta actualizarlo en tiempo real.
También cuando llamas a la URL con ajax no hace falta ponerle el dominio completo en la URL sino solamente la ruta relativa:
req.open('GET', 'cache/metarcache-LEZL.txt', false); // Direccion url del fichero cache, sustituir XXXX por el codigo de estacion Metar
Las peticiones ajax son de política del mismo dominio (
Same Origin Policy), eso quiere decir que solamente se pueden hacer a archivos de tu dominio y no a ningún otro dominio. No puedes ponerle otra URL a un dominio diferente por que no lo permite el (
Cross Domain).
En cuanto al html adjunto que has puesto mejor que me pongas el enlace a su página ya que se puede ver su código fuente en el navegador y verlo en funcionamiento. Yo en local poco puedo probarlo.
Y ahora ya para finalizar no tienes que poner el script en la página principal sin más. En javascript si metes un setInterval dentro de otro setInterval sucede que se vuelve loca la página como a ti te pasa porque se están llamando ya alterando los intervalos. Cuidado con eso porque puede generar muchísimas peticiones al servidor hasta colapsarlo tipo ataque DOS ó DDOS aunque probablemente sea el navegador el que colapse antes.
La página llama al setInterval que hay en el
ajaxCUwx.js y si le pones ese después ya viene el lío. Ese código lo deberías de combinar en el ajaxCUwx.js poniendo las funciones
condic y
condicicon (en las declaraciones de funciones al principio del script) y después en el interior de la función
ajaxLoader donde se manejan los datos del
realtime poner las líneas que llaman a las condiciones nubosas:
//Condiciones actuales
var ajaxtimeformat = realtime[1];
var porcen = realtime[59];
var rad1min = realtime[60];
var rad2min = realtime[61];
var porcen10m = realtime[62];
var porcen1h = realtime[63];
var diaonoche = realtime[49];
var teomaxrad = realtime[56];
var condiciones = condic(porcen10m, porcen1h, solar, porcen, rad1min, rad2min, teomaxrad, humidity, wind, rainratehr, diaonoche, ajaxtimeformat.split(':')[0]);
set_ajax_obs("ajaxconditionicon2", condicicon(teomaxrad, condiciones, temp));
set_ajax_obs("ajaxcurrentcond", condiciones);
Con eso no haría falta incluir el
condicionesmxmetar.html en un iframe
Ahhhh los METARS.... qué buenos recuerdos....hará unos 8 años con ayuda de Breitling que era amante de los vuelos en avioneta y por lo tanto de METARS me puse en marcha para hacer uno de mis primeros scripts en javascript para elaborar un METAR a partir de los datos de WD:
https://www.meteoarchena.es/wx8.htmlSu código fuente en
view-source:https://www.meteoarchena.es/wx8.htmlLo único que le falta es la visibilidad ya que no la pueden dar nuestras estaciones, pero bueno, aparte de eso para ser automático cumple su cometido y aprendí cómo están hechos.
Vaya tocho que me ha salido.... últimamente los domingos por la mañana me explayo mucho
Ya me vas diciendo cómo vas los cambios si quieres ir probando lo que te he dicho.
Saludos