Raspberry Pi – Posta elektroniko berriak eta egutegiko hitzorduak jakinarazten

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 cómo configurar la Pi para que nos hable por el altavoz y nos diga si hemos recibido 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 minutu, nos lo recordará por el altavoz!

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 hizkuntza=”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 hizkuntza=”plain”]amixer cset numid=3 1[/sourcecode]

 

Será interesante poner bien el volumen que queremos oir, y grabamos los cambios:

[sourcecode hizkuntza=”plain”]alsamixer
sudo alsactl store[/sourcecode]

 

Ondo, 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 hizkuntza=”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 hizkuntza=”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 hizkuntza=”plain”]echo Hola manolo que tal estas | festivaltts[/sourcecode]

 

Guretzat interesgarria bada, script bat sor dezakegu parametro batekin exekutatzean parametro hori irakurtzeko, gero beste script batzuetatik deitzeko erabilgarria, nire kasuan honela deitzen diot ‘textoAvoz.sh’:

[sourcecode hizkuntza=”plain”]echo $1 | festivaltts[/sourcecode]

 

Raspberry Pi-tik egutegia irakurtzea,

Gure egutegia irakurri nahi badugu, esperientzia onena ‘gcalcli’-rekin izan dut, egutegi edozein kudeatu daitekeelako, Gmail kontura interesatzen zaizkion egutegi asko gehitu ahal izango ditugu, Exchange edo beste sistemetakoak izan daitezela, eta interesgarriak diren egutegietara harpidetu gaitezke…

 

gcalcli instalatzen dugu edo Google Calendar Command Line Interface:

[sourcecode hizkuntza=”plain”]sudo apt-get install git python-pip python-gdata python-dateutil python-gflags python-vobject python-parsedatetime
sudo pip install gcalcli[/sourcecode]

 

Behin instalatuta, 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 hizkuntza=”plain”]gcalcli list –noauth_local_webserver[/sourcecode]

 

Probamos a ver si vemos los calendarios de nuestra cuenta:

[sourcecode hizkuntza=”plain”]gcalcli list[/sourcecode]

 

Y probamos a que nos muestre si tenemos eventos en los próximos 15 minutu:

[sourcecode hizkuntza=”plain”]gcalcli remind 15 'echo %s'[/sourcecode]

 

Creamos el siguiente script ‘lee_calendario.sh’ y lo hacemos ejecutable:

[sourcecode hizkuntza=”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 las "
FRASE2=" acuerdate de "
FRASE="$FRASE1 $HORA $FRASE2 $ASUNTO"
Oihartzuna $FRASE
Oihartzuna $FRASE | /usr/bin/festivaltts
fi
[/sourcecode]

Y probamos a ejecutarlo!

[sourcecode hizkuntza=”plain”]./lee_calendario.sh[/sourcecode]

Lo ponemos en crontab para que se ejecute cada 5 minutos y listo!

[sourcecode hizkuntza=”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 hizkuntza=”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(luzeera(new)) + ‘ correos nuevos
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Mails])
elif len(new) == 1:
Mails = 'Posta berri bat duzu'’
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Mails])

if (luzeera(new) > 0):
res = zerrenda()
res1 = zerrenda()
for msg in new:
typ, data = mail.fetch(msg, ‘(BODY[HEADER.FIELDS (SUBJECT)])’) # FROM, DATE, eta abar
data = data[0][1].strip()
decoded = decode_header(data[9:])[0] # "Subject: " da 9 karaktere luzeak
text = decoded[0].replace("\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, eta abar
data1 = data1[0][1].strip()
Arroba = data1.index(‘<‘)
decoded1 = decode_header(data1[6:Arroba-1])[0] # "Subject: " da 9 karaktere luzeak
text1 = decoded1[0].replace(‘"’, "")
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 + ‘, gaiarekin: ‘ + textoutput + ‘"
inprimatu (Testua)
import subprocess
subprocess.call(["/home/pi/textoAvoz.sh", Testua])
[/sourcecode]

Gogoratu exekutagarria egiteko, eta cron-era jartzea ere interesatzen bazaigu, nahi dugun programazioarekin.

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!

Izenburuko mezuak

Egilea

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, ez zalantzarik izan nirekin harremanetan jartzeko, ahal duzun guztietan laguntzen saiatuko naiz, partekatu ahal dudan guztietan ;) . Dokumentuez gozatu!!!