Más de lo mismo: «el tiempo»

Bueno, rapidito que no tengo tiempo, disculpen errores tipográficos y faltas de referencia…

Aca tengo un bot en el jabber que entre otras muchas funciones; da el parte meteorológico proveniente del INSMET. Miren:

click para ampliar

pantallazo

O sea, que para un usuario del Hospital Calixto, ver el parte meteorológico es:

1 – abrir una ventana IM de Pidgin con el usuario «bot@hcg.sld.cu»
2 – escribir la palabra «clima» y presionar enter

Esa es en mi opinión la manera más optima de hacer esto de la meteorología

¿Y Cómo llegamos a esto?

Cuando hablamos de clima, lo primero que hay que hablar es del METAR en los aeropuertos. Ese es el primer paso para programar cualquier cosa relacionada con el clima.

El METAR de la estación meteorológica del aeródromo José Martí, en este caso MUHA.TXT (el metar de La Habana) contiene mil y una información irrelevante, junto a la temperatura y el fenómeno meteorológico que se ponga de manifiesto.

Mira, este el MUHA.TXT, el metar del aeródromo José Martí cito en:

 irb(main):203:0> puts open('http://weather.noaa.gov/pub/data/observations/metar/stations/MUHA.TXT').read
 2014/12/17 16:55
 MUHA 171655Z 01010KT 350V050 9000 BKN030 24/15 Q1022
 => nil

El METAR es un fichero de texto super simple y escribir un software para parsearlo fue una experiencia muy entretenida. Buscas un «/» coges el número de alante, le sumas el de atrás y lo divides entre dos; ahí tienes la temperatura relativa 😉 Porque ese número son la mínima y la máxima.

irb(main):204:0> max,min='MUHA 171655Z 01010KT 350V050 9000 BKN030 24/15 Q1022'.split[-2].split('/')
=> ["24", "15"]
irb(main):205:0> "la temperatura debe estar en #{((max.to_i+min.to_i)/2)} grados celcius"
=> "la temperatura debe estar en 19 grados celcius"

Durante mucho tiempo usé un parser para dockear los grados Celcius en mi conky,lo puedes ver en ftp@hcg.sld.cu con el nombre muha.rb.

Ese script lo ejectuas en conky con exec y te muestra la temperatura. Además, si hay algún fenómeno meteorológico, parsea el código WX y lo muestra. Por ejemplo, para RA pone «está lloviendo» pero para SHRA (shower rain, o chubasco) pone «palo de agua!».

y se acabó la historia del METAR

Después me pareció aburrido eso de ver la temperatura. Además, la necesidad de un PRONÓSTICO me hizo pensar en usar el TAF (terminal area forecast) también del aeropuerto. El TAF contiene un pronóstico a corto y otro a largo plazo; de lo más interesante. Pero vino un «inconveniente»:

¿Donde mostrar toda esa información?

Pues creo que la cosa es mostrar un «algo» que muestre la temperatura y al hacerle click o de alguna forma pedirle detalles, que te muestre el parte.

Conclución, terminé poniendo la temperatura como estado en el bot y actualizando dicha información cada 20 minutos. El que quiera saber el pronóstico, solo tiene que preguntarle al bot.  Hoy en día­ la gente le preocupa más el signo zodiacal o la predicción de cuando se acabará la quota; que el estado del clima. Hablando en números la cifra récord con más peticiones que registré en un día, fueron; 51 peticiones, 39 para el estado de cuota, 9 para el signo zodiacal y 3 para el estado del tiempo.

Finalmente:
Las RSS del insmet muestran un pronóstico de lo más elocuente, sin necesidad de parsear NADA.

irb(main):209:0> parte=open('http://www.met.inf.cu/asp/genesis.asp?TB0=RSSFEED').read
irb(main):210:0> puts (RSS::Parser.parse parte,false,true).items.first.description
Fecha: 17 de diciembre de 2014. Hora: 3:00 a.m.<br><br>
<p align='justify'><font color='#003d6c'><i>...Día fresco y aislados chubascos en la costa norte...<br><br></i></font><br>Estará parcialmente nublado en zonas de la costa norte y se nublará de manera ocasional con aislados chubascos, principalmente en el extremo oriental. En el resto del país amanecerá con poca nubosidad y en la tarde estará parcialmente nublado con escasas lluvias. <br><br>El día será fresco con temperaturas máximas entre 25 y 28 grados Celsius, hasta 31 grados Celsius en las provincias del sur oriental. Por la noche, las temperaturas estarán 18 y 21 grados Celsius.<br><br>Soplarán vientos del nordeste entre 10 y 25 kilómetros por hora, superiores en zonas de la costa norte oriental.<br><br>Habrá oleaje en ambos litorales orientales y poco oleaje en el resto de las costas.<br><br></p>
J. González
Y. Arias.
<hr>
=> nil

De echo en la mañana te da el pronóstico de la tarde y en la tarde, el del otro díaa por la mañana. Bárbaro para tu lector de tabaquería automatizado, ya que está escrito de manera natural, lo lees y te parece ver a Rubiera hablando 😀

Fin de la historia del clima…

Fumero: Escribí­ un script que te extrae el pronóstico de las rss. Lo corres en tu script y te baja el elocuente parte, o sea, tu script tendrá­ 3 lineas:

#!/bin/bash
el script que te hice
speak  /tmp/parte.txt
rm /tmp/parte.txt

Escribe a ftp@hcg.sld.cu y pon en el asunto «insmet»

Más o menos así se ve en pidgin.

pantalla

¿Te resultó interesante? Compártelo ...



låzaro

Publicado por låzaro

http://github.com/uranio-235 » Forma parte de GUTL desde el 27 junio, 2014.

Este artículo tiene 11 comentarios

  1. Excelente lázaro!, No sabes como le envidio que sepa tocar la corneta(o programar el Ruby que es lo mismo). BTW, para los conky, sin necesidad de usar lenguajes externos(que con LUA ya vamos sobrados), es factible utilizar curl, más o menos de esta forma:

    curl -x http://proxy:puerto --proxy-user usuario:passwd -L http://www.met.inf.cu/asp/genesis.asp?TB0=RSSFEED -o insmet.xml

    y luego con un poco de magia negra con grep parsear la salida para el conky.(lo de grep lo dejo para los más bisoños, que soy zurdo en bash).
    PS: Lázaro, sea más cuidadoso a la hora de redactar, recuerde que ninguno de nosotros tenemos interés pecuniario en estas actividades…

  2. mis tiempos de hacer maromas con curl pasaron, las últimas las hice con cURB, (curl en ruby) Realmente la «magia negra» me resolvió mucho hasta que empecé a crear ficheros para alar curl; cada véz más específicos. Luego me di cuenta que era lo mismo correr el comando en el conky quer correr curl. Lua lo estuve usando en el 2007, porque era un legnuaje practicamente nativo en DamnSmallLinux y te digo que en mi opinión, le faltan muchas cosas.

    Ruby no es el tipo de lenguaje que recomiende porque es muy a su manera, te recomiendo que admires a Python, el todo terreno del software libre.

  3. Felicidades, hermano! Ya te estabas tardando demasiado en poner tu aporte. Ya mandé a descargar ese script (sigo en deuda con el estudio del Ruby; ten compasión de mis dos neuronas!).

    Y me has dado una idea ahora mismo, como siempre me pasa con tus aportes: ¿por qué en lugar de hacer que abran una ventana con el usuario “bot@hcg.sld.cu” y tecleen Enter, no ponemos como texto del MOTD (Message Of The Day) del Jabber el parte meteorológico? Así lo leería todo el mundo al encender su máquina y conectarse a su chat. A fin de cuentas, ya tenemos soluciones para descargar esa información, y solo nos quedaría que el usuario admin mandara esa información como motd…

    Probando con el ejabberd que tengo acá, veo que desde un cliente Jabber (por ejemplo, Pidgin) puedo, desde la cuenta admin@miservidor, enviar un mensaje Jabber a miservidor/announce/motd/update con el texto que quiero que salga como motd. Ese texto no se mostrará a la gente que esté conectada en ese momento, sino solo a a los que se conecten a partir de ese momento (lógico en un motd). Eso podría ser una primera idea, para empezar a probar.

    Pero eso me obligaría a hacerlo a mano, quiero decir, copiar el texto del parte dentro de la ventanita de entrada del mensaje, y no me convendría así. Mejor usar un script como el que posteé hoy a la lista (aclaro que no es mío, alguien me lo enseñó), y que el script sea quien envíe el texto del motd a miservidor/announce/motd/update. La ventaja es que podrías mandar a crontab a que te descargue la información del parte por la vía que prefieras, y luego el mismo crontab te mande a ejecutar el script que actualiza el motd en el servidor. Y si hay que actualizar la información después del mediodía, pues crontab de nuevo con él.

    Si se quiere que la información le salga a todos los que estén conectados, el mensaje sería para miservidor/announce.

    • me alegra que te halla dado una idea, esa el objetivo del post; transmitir idea. Como te dije, Ruby no es lo único ni lo último, podrías hacerlo tambien con php o python

      Sobre el tema del estado del bot: Como mencioné, el bot tiene MUCHAS funciones, no solo la meteorología. A la gente le interesa más la quota, a que velocida se consume, quien es el usuario más consumidor e incluso el signo zoodiacal, meter un número de teléfono para ver el nombre y el signo de la persona (etecsa.db) que el clima del mundo real.

      Hubo un tiempo que el estado del bot decía ambas cosas, la temperatura y la cuota, pero a nadie le interesaba el clima (mira las estadísticas que puse en el post) y deje los detalles sobre el consumo de cuota.

      Por ejemplo, la información de «cuando se acabará la cuota» ocupa mucho espacio y la temperatura pasó a ser algo secundario. Un estado de jabber no debe tener más de 2 lineas…

      • Ahora mismo el ftp me mandó tu script.
        Dedididamente tengo que ponerme a estudiar los ‘bots.

        ¿Cómo es eso de «que el estado del bot»? ¿Dónde publicas esa información?

  4. recuerdas al bot «Enfermera» del canal IRC?? pues este es igual pero jabber…

    generar y estamparle en la cara un MOTD a TODOS los usuarios no me parece un buen negocio, sobre todo teniendo en cuenta que a nadie le importa. En cambio, como vez en la imagen, el bot es un usuario del roster, ten en cuenta que ahí lo estás viendo con bitlbee, pero imagínatelo con pidgin.

    El bot, tiene su estado, como usaurio del jabber, este puee ser away, online, etc… pero además, como mensaje de estado tiene puesta la información que muestro 😉

    eso me da otras posibilidades deingenería social, como por ejemplo “cuantas veces se consulta que” y así saber que es lo que más le interesa a la gente…

  5. Voy a subirle una imagen al post como se ve la ventana IM de pidgin. Mira donde dice «hora de que te vallas pa tu casa» ahora no se está mostrando nada relevante, pero ahí es donde muestro el estado de cuota cuando no se acabó 😉

  6. Creo que 24/15 no es máxima y mínima, es la temperatura actual y la de saturación. Es información que se utiliza por las tripulaciones en despegues y aterrizajes al igual que QNH Q1022 es la presión atmosférica para ajustar los altímetros. Saludos a todos.

  7. Dar los detalles de todos los campos del METAR sería un poco aburrido, por eso obvié las referencias. De igual, cuando promedias esas temperaturas, te dan una temperatura similar MUY similar a la que marca el temómetro de la sala de mi casa. Al menos esa es mi experiencia.

  8. Claro, quería decir que si llegan a hacer un script que actualizara el conky cada hora para los usuarios de intranet podían extraer los datos que necesitan . En este caso temperatura 24 grados, parcialmente nublado (BKN) para relacionarle el ícono correcto y si se quería la presión atmosférica en Milibares. Si la temperatura real es 24 no creo que tenga sentido promediar a 19,5 la jornada. La idea es seguir optimizando nuestro softwear libre, es mi sugerencia como usuario final. 🙂

Los comentarios están cerrados.