61
Tu Web meteorológica / Re:Script condiciones nubosas en páginas Saratoga con Cumulus MX
« en: 09 de Enero del 2022, 20:22:43 pm »
Hola es https://www.meteoviso.es/ajaxCUwx.js , ahora mismo está sobre el fichero final.
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Buenas, te voy respondiendo:
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.
Mas vale tarde que nunca
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 condic
Así 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 condic
var 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.
Entiendo mas o menos lo que me explicas, una cosa es la variable y otra función
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:
Jeje, por supuesto google, leer y probar es lo mío.
No hace falta ponerle el 0 como string (encerrado en las comillas), lo puedes poner como número, de hecho "0" == 0 es verdadero.
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");
ó
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.
Si realmente si el código esta al principio no funciona, lo puse con match y perfecto, corregido
Así la línea del if puede quedar así:Código: [Seleccionar]if (con1 != "Despejado" && teoradmax >= 30 && (SKC || CAVOK || NSC || NCD )) con1 = " Despejado";
A veces me complico solo, mas fácil y limpio imposible
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
No había caído
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.
Mmmm no te entiendo, lo adjunte y también puse el enlace al final del todo, entiendo que no lo viste
Condicionesmx con metar
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:Código: [Seleccionar]//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
Voy a ver si soy capaz....
Ya me vas diciendo cómo vas los cambios si quieres ir probando lo que te he dicho.
Claro que lo iré probando, ya todo corregido, salvo lo de incluirlo en la web sin iframe, creo que seré capaz, mil gracias
Edito no soy capaz, he puesto las líneas en el mismo lugar en el ajaxCUwx.js y aparentemente no da error, pero si declaro una variable para probarlo junto antes de los if , var intensidad = 10; no hace nada.... Creo que falta algo mas
Saludos
req.open('GET', 'https://www.tuweb.es/cache/metarcache-XXXX.txt', false);
(Lo explico, pero vamos que es por si alguien decide usarlo, tu lo veras al vuelo)if (con1 != "Despejado" && teoradmax >= 30 && (SKC === "1" || CAVOK === "1" || NSC === "1" || NCD === "1" )) con1 = " Despejado";
Básicamente es que si la condición no es "Despejado" y la estación metar indica que si lo esta imponga dicha condición. No es la mejor solución, pero funciona y puedo seguir usando tu scriptelse if (teoradmax === "0") con1 = "Noche";
Es cosa mía o es un error¿?Tras leerte y según te entiendo, agregó sobre la línea 777Eres un mago, ya lo cambie todo a ajax. Añadi las varibles y funciones que faltaban y funciona!!
// inTemp
var intemp = realtime[22];
set_ajax_obs("ajaxintemp",intemp) ;
Se supone que debe darme valor de la temperatura interior.
Con un <span class="ajax" id="intemp"></span>
Pero no muestra nada. Con cualquier otro valor ya definido no tengo problema.
<span class="ajax" id="ajaxintemp"></span>
tienes que poner el primer nombre de la función set_ajax_obs. Esa función busca la etiqueta con id con ese nombre y pone el valor de la variable (en este caso intemp) en ella.
Y no puedes subir la estación un poco más ?? Quizás un metro más y ya no tendrías el problema.
Hola
Otra alternativa podría ser cambiar la estación al mismo mástil de la antena, en la punta y bajar la antena esos 60-70 cms que parece haber hasta el juego de vientos
Te resultaría posible?
Si, en su día lo leí, pero me sigue sonando a chino... Ya puestos
Valla no sabia lo de ver las variables en acción. Pero no se por que no puedo imprimirlas en pantalla desde el propio script, aunque eso es lo de menos.
var porcen = realtime[59];
Si fuese $porcen = realtime[59]; no habría problema, pero ese ya es otro tema.
Lo primero es javascript, lo segundo PHP. PHP se ejecuta en el servidor, javascript en el navegador.
Tu web está basada en Saratoga y hace ya algún tiempo (5 años) puse en esta misma sección del foro un tema con chincheta sobre el funcionamiento con Ajax de estas páginas:
https://forum.meteoclimatic.net/index.php/topic,1032.0.html
Básicamente hay que ponerle un atributo class="ajax" y un id="iddelvalorquesequierecambiar" al elemento <span> en el que queremos que se actualice la información en cada petición ajax. Luego en el script se van poniendo set_ajax_obs("iddelvalorquesequierecambiar", variableamostrar); dentro de la función llamada por Ajax.
Así puedes poner toda la info que quieras en la página en tiempo real.
La estación sigue puesta exactamente en el mismo lugar. B. Santiago. Como se puede comprobar, en hora civil, a las 12:05 pega un bajón, a las 12.20 esta abajo y a las 12:35 sigue normalmente, esta claro que debe tener una sombra, no se de que, sobre todo por que sobre esa hora el sol esta muy arriba. Este finde no estuve aquí así que no pude observarlo. Lo que si parece que sensor de UV/solar no pega esos bajones al amanecer y el día como si hacia antes, si los da al atardecer, es mas normal puede tener varias sombras. En el adjunto de hoy se observa comparándolo con otra estación (la marcada en rojo) que su campana si es perfecta. A ver si próximo finde puedo subirse a esa hora, pensándolo ahora podría ser sombra de mástil o antena de tv, que aunque esta a unos 3-4 metros lo mismo es eso. Lo que si observo es que el sensor solar siempre va muy por debajo de otros, si el mío marca 300, otros están en 400 o mas. Buena parte del día si marco hoy despejado e script. Al menos se que algún problema había y eso si se ha resuelto, evidentemente, lo que produce la sombra sigue ahí. Lo seguiré observando.La comparación con otras estaciones es perfectamente innecesaria e inútil. El estado del cielo y la intensidad de la radiación solar podrían pueden varíar notablemente en cortas distancias y por diferentes factores, y por no referirme a la nubosidad visible lo referiré, para empezar, al tipo de piranómetro, al polvo en suspensión, y a otros etcéteras. No te empeñes en obtener una parábola ni unos valores idénticos a los de otra estación, ni siquiera muy parecidos; no tiene sentido.
Repito una vez más que los sensores toman sus medidas en el emplazamiento en que están dispuestos, y no en otro lugar, por cercano que esté.
En cuanto a la existencia de sombras, (cosa que ofrecía pocas dudas) tú mismo lo dices: tendrás que observarlo, y tal vez corregirlo. En mi opinión no se trataría de una sombra ligera, difusa, de un mástil o antena en alto, (aunque también podría serlo), sino de una sombra bien intensa dada la profundidad de la hendidura en la parábola. Quizá sea la propia estación la que la origine: el pluviómetro, por ejemplo.
Dado que Meteoclimatic no guarda valores de radiación solar, (solo refleja y muestra la última medición), ni mira el UVI, tiene muy poca importancia que tú parábola salga más o menos imperfecta.
En cuanto a las horas de sol..., es otro asunto del que quizá deberíamos desentendernos, a no ser para satisfacer tu curiosidad personal. A Meteoclimatic eso no le importa.