Framboesa Pi – Notificando correos electrónicos nuevos y citas del calendario
Hace tiempo que quería pasaros un par de scripts que suelo usar para que una Raspberry Pi que tengo conectada a un altavoz me hable; en este documento únicamente veremos como configurar la Pi para que nos hable por el altavoz y nos diga si hemos recebido algún correo electrónico, y si es así nos indicará el remitente y el asunto del correo; así como si tenemos alguna cita en el calendario en los próximos 5 ata, nos lo recordará por el altavoz!
Convirtiendo el texto en voz,
Empezamos montando o sistema que nos falará, mediante um conversor de texto a voz, um Text-to-Speech (TTS) usaremos o sintetizador de voz 'festival', instalaremos no nosso Raspberry Pi, que é compatível com qualquer idioma, posteriormente baixaremos os dífões em castelhão desde a força de guadalinex, tendremos dos voces, una femenina (Silvia) y otra masculina (Pedro), cada que use la que más le guste 😉
Instalamos festival en nuestras Raspberry Pi:
[sourcecode language=”plain”]sudo apt-get -y install festival[/Código-fonte]
Si queremos usar la salida 3,5 del jack de audio para el sonido en vez del HDMI executaremos:
[sourcecode language=”plain”]amixer cset numid=3 1[/Código-fonte]
Será interessante poner bien el volume que queremos oir, y grabamos los cambios:
[sourcecode language=”plain”]alsamixer
sudo alsactl store[/Código-fonte]
Nada mau, ahora descargaremos los idiomas que nos interesen, poner el que queráis, os dejo en orden primero voz femenina y el otro la masculina. Además los instalamos e indicamos en el fichero de configuración cual usar:
[sourcecode language=”plain”]
wget https://github.com/guadalinex-archive/hispavoces/raw/master/packages/festvox-sflpc16k_1.0-1_all.deb
wget https://github.com/guadalinex-archive/hispavoces/raw/master/packages/festvox-palpc16k_1.0-1_all.deb
sudo dpkg -i festvox-sflpc16k_1.0-1_all.deb
sudo dpkg -i festvox-palpc16k_1.0-1_all.deb
sudo vim /etc/festival.scm [/Código-fonte]
Al final añadimos la que nos interese, y comentamos las demás:
[sourcecode language=”plain”];(set! voice_default ‘voice_JuntaDeAndalucia_es_pa_diphone)
(set! voice_default ‘voice_JuntaDeAndalucia_es_sf_diphone)[/Código-fonte]
Y ya podremos probar a convertir un texto en audio con:
[sourcecode language=”plain”]echo Hola manolo que tal estas | festival –Tts[/Código-fonte]
Si nos interesa, podremos generar un script que al ejecutarlo con un parámetro nos lea dicho parámetro, más útil para luego llamarlo desde otros scripts, en mi caso le llamo ‘textoAvoz.sh’:
[sourcecode language=”plain”]ECO $1 | festival –Tts[/Código-fonte]
Leer calendario desde la Raspberry Pi,
Si queremos leer nuestro calendario, la mejor experiencia la he tenido con ‘gcalcli’, ya que se puede gestionar cualquier calendario, podremos agregar tantos calendarios a nuestra cuenta de Gmail que nos interesen, sean de nuestros Exchange u otros sistemas, así como suscribirnos a calendarios que nos interesen…
Instalamos gcalcli o
[sourcecode language=”plain”]sudo apt-get install git python-pip python-gdata python-dateutil python-gflags python-vobject python-parsedatetime
sudo pip install gcalcli[/Código-fonte]
Uma vez instalado, ejecutaremos el siguiente comando para obtener la URL que nos permita obtener el código de activación y darle permisos en nuestra cuenta de Gmail. Ejecutamos el siguiente comando y abrimos la URL en un navegador, pegaremos el código y listo!
[sourcecode language=”plain”]gcalcli list –noauth_local_webserver[/Código-fonte]
Probamos a ver si vemos los calendarios de nuestra cuenta:
[sourcecode language=”plain”]gcalcli list[/Código-fonte]
Y probamos a que nos muestre si tenemos eventos en los próximos 15 ata:
[sourcecode language=”plain”]gcalcli remind 15 ‘echo %s'[/Código-fonte]
Creamos el siguiente script ‘lee_calendario.sh’ e torná-lo executável:
[sourcecode language=”plain”]
#!/bin/bash
CITA=`/usr/local/bin/gcalcli remind 4 ‘echo %s’ –cal=Personal`
echo $CITA
se [ "$CITA" == "" ]; em seguida,
echo "No hay citas"
mais
echo "Hay citas"
HORA=$(cut -c-7 &Tenente;&Tenente;&Tenente; "$CITA")
echo $HORA
ASUNTO=${CITA:7:1000}
FRASE1="Hector, en cinco minutos, em "
FRASE2=" acuerdate de "
FRASE="$FRASE1 $HORA $FRASE2 $ASUNTO"
echo $FRASE
echo $FRASE | /usr/bin/festival –Tts
Fi
[/Código-fonte]
E tentamos executá-lo!
[sourcecode language=”plain”]./lee_calendario.sh[/Código-fonte]
Lo ponemos en crontab para que se ejecute cada 5 minutos y listo!
[sourcecode language=”plain”]*/5 * * * * /home/pi/lee_calendario.sh[/Código-fonte]
Leer el mail desde la Raspberry Pi,
Con este sencillo script de python podremos obtener los mails no leidos mediante una conexión IMAP a nuestro servidor de correo, nos leerá el remitente y el asunto de cada correo. Creamos el archivo ‘lee_mail.py’:
[sourcecode language=”plain”]
import imaplib
from email.header import decode_header
mail = imaplib.IMAP4_SSL(‘FQDN_SERVIDOR_CORREO’)
mail.login(‘USUARIO@DOMINIO’, ‘CONTRASEÑA’)
mail.select(‘INBOX’, readonly=True)
typ, new = mail.search(Nenhum, "UNSEEN")
new = new[0].fender()
Se Len(novo) > 1:
Mails = ‘Tienes ‘ + str(len(novo)) + ‘ correos nuevos’
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Mails])
elif len(novo) == 1:
Mails = ‘Tienes un correo nuevo’
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Mails])
se (len(novo) > 0):
res = list()
res1 = list()
for msg in new:
typ, data = mail.fetch(Msg, ‘(BODY[HEADER.FIELDS (SUBJECT)])’) # FROM, DATE, etc
data = data[0][1].strip()
decoded = decode_header(data[9:])[0] # "Subject: " é 9 characters long
text = decoded[0].Substituir("\r\n", "")
se (decoded[1] != Nenhum):
text = unicode(Texto, decoded[1])
res.append(text.encode(‘utf-8’))
typ, data1 = mail.fetch(Msg, ‘(BODY[HEADER.FIELDS (FROM)])’) # FROM, DATE, etc
data1 = data1[0][1].strip()
Arroba = data1.index(‘<‘)
decoded1 = decode_header(data1[6:Arroba-1])[0] # "Subject: " é 9 characters long
text1 = decoded1[0].Substituir(‘"’, "")
se (decoded1[1] != Nenhum):
text1 = unicode(text1, decoded1[1])
res1.append(text1.encode(‘utf-8’))
text1 = unicode(text1)
text = unicode(Texto)
import unicodedata
text1output = unicodedata.normalize(‘NFKD’, text1).encode(‘ascii’,’ignore’)
textoutput = unicodedata.normalize(‘NFKD’, Texto).encode(‘ascii’,’ignore’)
Texto = ‘"Correo de ‘ + text1output + ‘, con asunto: ‘ + textoutput + ‘"’
imprimir (Texto)
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Texto])
[/Código-fonte]
Recordamos hacerlo ejecutable, ponerlo en el cron igualmente si nos interesa con la programación que nos interese.
Fácil y sencillo cómo saber si tenemos citas en el calendario o mails y queremos que una dulce voz nos lo indique! Espero que lo disfrutéis!









































