You are here

El hombre del tiempo es Asterisk

Los que me conocéis sabéis que me encantan las cosas del tiempo, hace poco escribí sobre el paquete weather de Debian. Hoy he estado jugando con el servidor Asterisk y he hecho un pequeño script para descargar las previsiones del tiempo del INM. Tras descargar las previsiones del tiempo, gracias a Festival creamos un pequeño fichero de alaw para que nuestros usuarios de Asterisk puedan ver el la previsión de hoy.

A pesar de la integración de Festival con Asterisk he decidido separar la descarga de la información y la creación del fichero de audio usando un script bash de lo que es Asterisk propiamente, puesto que dicha operación requiere cierto tiempo de proceso que considero inaceptable para cada vez que se quiera escuchar la previsión del tiempo. Por tanto creo que la mejor opción es programar la creación del fichero de audio mediante una entrada en cron que podemos ejecutar diariamente a la hora que más nos convenga (aunque considero que lo más apropiado sería que se ejecutara a primera hora de la mañana).

Sin más preámbulos vamos allá con la receta:

El primer paso será instalar festival, en Debian nos bastará con un apt-get. Luego nos bajaremos las voces en español (yo he elegido la femenina pero esto va a gustos) y las instalaremos. Gracias a Elio Rojano por notificar de las voces en español. Wink

apt-get install festival
wget forja.guadalinex.org/repositorio/frs/download.php/154/festvox-sflpc16k_1.0-1_all.deb
dpkg -i festvox-sflpc16k_1.0-1_all.deb

Una vez tenemos instalado Festival, creamos el pequeño script. Yo lo he colocado en /opt/weatherget:

#!/bin/sh
wget -O /opt/wthget www.inm.es/cgi-bin/p07hesp1.sh.2001
cat /opt/wthget | paste -s | sed -e 's/<PRE CLASS="textopredClass">/$/' | sed -e 's/<\/PRE>/$/' | cut -d$ -f2 > /opt/weather
rm /opt/wthget
/usr/bin/text2wave /opt/weather -o /var/lib/asterisk/sounds/prevtiempo.ulaw -otype ulaw
rm /opt/weather

Probamos a ejecutar el script para comprobar su correcto funcionamiento, si no observamos ningún problema podemos proceder a crear ya una entrada en el cron.

./weatherget
--19:29:39--  http://www.inm.es/cgi-bin/p07hesp1.sh.2001
           => `/opt/wthget'
Resolviendo www.inm.es... 193.144.152.138
Connecting to www.inm.es|193.144.152.138|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: no especificado [text/html]

    [ <=>    ] 12,577        65.67K/s

19:29:40 (65.57 KB/s) - `/opt/wthget' saved [12577]

Duration tree extreme for d 3.05406
Duration tree extreme for l 3.82722
Duration tree extreme for d 3.39688
Duration tree extreme for m 3.39688
Duration tree extreme for i 3.39766
Duration tree extreme for n 3.54519
Duration tree extreme for b 3.39688
Duration tree extreme for e 3.2419
Duration tree extreme for o 3.39766
Duration tree extreme for m 3.39688
Duration tree extreme for i 3.39766
Duration tree extreme for i 3.39766
Duration tree extreme for e 3.2419
Duration tree extreme for e 3.2419
Duration tree extreme for e 3.2419
Duration tree extreme for n 3.54519
Duration tree extreme for l 3.82722
Duration tree extreme for e 3.2419
Duration tree extreme for n 3.54519
Duration tree extreme for r 3.82722
Duration tree extreme for l 3.82722
Duration tree extreme for b 3.05406
Duration tree extreme for l 3.05406

Probaremos de reproducir el archivo de audio que hemos creado desde Asterisk, para el tiempo yo he usado la extensión 003 que he creado en un nuevo contexto weather-ext pero podéis usar la que más os convenga:

[weather-ext]
exten => 003,1,Answer
exten => 003,2,Playback(prevtiempo)
exten => 003,3,Hangup()

Espero que os lo hayáis pasado tan bien como yo. Acepto sugerencias. Ahora tan solo nos falta descolgar nuestra extensión y marcar 003, la voz es muy robótica pero es posible llegar a entenderla. Cruzaremos los dedos y estaremos atentos esperando que haga buen tiempo y podamos salir a dar una vuelta en la moto Laughing

Asterisk: 
Debian: 
Qué te parece: