Raspberry 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 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 minutos, 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:

sudo apt-get -y install festival

Si queremos usar la salida 3,5 del jack de audio para el sonido en vez del HDMI ejecutaremos:

amixer cset numid=3 1

 

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

alsamixer
sudo alsactl store

 

Bien, 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:

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 

 

Al final añadimos la que nos interese, y comentamos las demás:

;(set! voice_default 'voice_JuntaDeAndalucia_es_pa_diphone)
(set! voice_default 'voice_JuntaDeAndalucia_es_sf_diphone)

 

Y ya podremos probar a convertir un texto en audio con:

echo Hola manolo que tal estas | festival --tts

 

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’:

echo $1 | festival --tts

 

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:

sudo apt-get install git python-pip python-gdata python-dateutil python-gflags python-vobject python-parsedatetime
sudo pip install gcalcli

 

Una 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!

gcalcli list --noauth_local_webserver

 

Probamos a ver si vemos los calendarios de nuestra cuenta:

gcalcli list

 

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

gcalcli remind 15 'echo %s'

 

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

#!/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"
 echo $FRASE
 echo $FRASE | /usr/bin/festival --tts
fi

Y probamos a ejecutarlo!

./lee_calendario.sh

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

*/5 * * * * /home/pi/lee_calendario.sh

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’:

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].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, 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].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  + ', con asunto: ' + textoutput + '"'
    print (Texto)
    import subprocess
    subprocess.call(["/home/pi/textoAvoz.sh", Texto])

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!

Últimas entradas de Héctor Herrero (ver todo)