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!

Raspberry Calendario Mail 01 bujarra

 

Convirtiendo el texto en voz,

Empezamos montando el sistema que nos hablará, mediante un conversor de texto a voz, un Text-to-Speech (TTS) usaremos el sintetizador de voz ‘festival’, lo instalaremos en nuestra Raspberry Pi, que es compatible con cualquier idioma, posteriormente nos bajaremos los dífonos en castellano desde la forja de guadalinex, tendremos dos voces, 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 ejecutaremos:

[sourcecode language =”plain”]amixer cset numid=3 1[/sourcecode]

 

Será interesante poner bien el volumen que queremos 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 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 llamotextoAvoz.sh’:

[sourcecode language =”plain”]echo $1 | festival –tts[/sourcecode]

 

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 Google Calendar Command Line Interface:

[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 listnoauth_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 scriptlee_calendario.shy lo hacemos ejecutable:

[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(new) > 1:
Mails = ‘Tienes ‘ + str(len(new)) + ‘ correos nuevos
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Mails])
elif len(new) == 1:
Mails = ‘Tienes un correo nuevo
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Mails])

if (len(new) > 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: " is 9 characters long
text = decoded[0].replaçament("\r\n", "")
if (decoded[1] != None):
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: " is 9 characters long
text1 = decoded1[0].replaçament(‘"’, "")
if (decoded1[1] != None):
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 + ‘, con asunto: ‘ + textoutput + ‘"
print (Text)
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Text])
[/sourcecode]

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 ho disfrutin!

Posts recomanats

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, no dubtis a contactar amb mi, us intentareu ajudar sempre que pugui, compartir és viure ;) . Gaudir dels documents!!!