Raspberry Pi – Notificant correus electrònics nous i cites del calendari
Fa temps que volia passar-vos un parell de scripts que vaig fer servir perquè una Raspberry Pi que tinc connectada a un altaveu em parli; en aquest document únicament veurem com configurar la Pi perquè ens parli per l'altaveu i ens digui si hem rebut algun correu electrònic, i si és així ens indicarà el remitent i l' assumpte del correu; així com si tenim alguna cita en el calendari en els pròxims 5 minuts, ens ho recordarà per l'altaveu!
Convirtiendo el text en voz,
Empezamos montando el sistema que nos parlarà, mitjançant un conversor de texto a voz, un Text a Speech (TTS) usaremos el sinsintitzador de veu 'festival', installarem en la nostra Raspberry Pi, que és compatible amb qualsevol idioma, posteriorment baixarem els dífons en castellà des de la forja de guadalinex, tendremos dos veus, una femenina (Silvia) y otra masculina (Pedro), cada cual que use la que más le guste 😉
Instalamos festival en nuestras Raspberry Pi:
[sourcecode language =”plain”]sudo apt-get -y install festival[/sourcecode]
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[/sourcecode]
Serà interessant posar bé el volum que volem oir, y grabamos los cambios:
[sourcecode language =”plain”]alsamixer
sudo alsactl Store[/sourcecode]
Bé, 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 [/sourcecode]
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)[/sourcecode]
Y ya podremos probar a convertir un texto en audio con:
[sourcecode language =”plain”]echo Hola manolo que tal estas | festival –tts[/sourcecode]
Si ens interessa, podrem generar un script que en executar-lo amb un paràmetre ens llegeixi aquest paràmetre, més útil per després trucar-lo des d'altres scripts, en el meu cas l'anomeno ‘textoAvoz.sh’:
[sourcecode language =”plain”]echo $1 | festival –tts[/sourcecode]
Llegir el calendari des de la Raspberry Pi,
Si volem llegir el nostre calendari, la millor experiència l'he tinguda amb ‘gcalcli’, ja que es pot gestionar qualsevol calendari, podrem afegir tants calendaris al nostre compte de Gmail que ens interessin, siguin dels nostres Exchange o altres sistemes, així com subscriure'ns a calendaris que ens interessin…
Instal·lem 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[/sourcecode]
Un cop instal·lat, 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[/sourcecode]
Probamos a ver si vemos los calendarios de nuestra cuenta:
[sourcecode language =”plain”]gcalcli list[/sourcecode]
Y probamos a que nos muestre si tenemos eventos en los próximos 15 minuts:
[sourcecode language =”plain”]gcalcli remind 15 ‘echo %s'[/sourcecode]
Creamos el siguiente script ‘lee_calendario.sh’ i el fem executable:
[sourcecode language =”plain”]
#!/bin/bash
CITA=`/usr/local/bin/gcalcli remind 4 ‘echo %s’ –cal=Personal`
echo $CITA
if [ "$CITA" == "" ]; then
echo "No hay citas"
else
echo "Hay citas"
HORA=$(cut -c-7 <<< "$CITA")
echo $HORA
ASUNTO=${CITA:7:1000}
FRASE1="Hector, en cinco minutos, a les "
FRASE2=" acuerdate de "
FRASE="$FRASE1 $HORA $FRASE2 $ASUNTO"
echo $FRASE
echo $FRASE | /usr/bin/festival –tts
fi
[/sourcecode]
I provem d'executar-lo!
[sourcecode language =”plain”]./lee_calendario.sh[/sourcecode]
Lo ponemos en crontab para que se ejecute cada 5 minutos y listo!
[sourcecode language =”plain”]*/5 * * * * /home/pi/lee_calendario.sh[/sourcecode]
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(None, "UNSEEN")
new = new[0].split()
if len(nou) > 1:
Mails = ‘Tienes ‘ + str(len(nou)) + ‘ correos nuevos’
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Correus])
elif len(nou) == 1:
Mails = ‘Tienes un correo nuevo’
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Correus])
if (len(nou) > 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: " és 9 caràcters de llargada
text = decoded[0].replaçament("\r\n", "")
if (decoded[1] != Cap):
text = unicode(text, 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: " és 9 caràcters de llargada
text1 = decoded1[0].replaçament(‘"’, "")
if (decoded1[1] != Cap):
text1 = unicode(text1, decoded1[1])
res1.append(text1.encode(‘utf-8’))
text1 = unicode(text1)
text = unicode(text)
import unicodedata
text1output = unicodedata.normalize(‘NFKD’, text1).encode(‘ascii’,’ignore’)
textoutput = unicodedata.normalize(‘NFKD’, text).encode(‘ascii’,’ignore’)
Texto = ‘"Correo de ‘ + text1output + ‘, amb assumpte: ‘ + textoutput + ‘"’
print (Text)
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Text])
[/sourcecode]
Recordem fer-ho executable, posar-ho al cron igualment si ens interessa amb la programació que ens interessi.
Fàcil i senzill com saber si tenim cites al calendari o correus electrònics i volem que una dolça veu ens ho indiqui! Espero que ho disfrutin!










































