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!
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
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!
Posts recomendados:
- Arpwatch - 30 de mayo de 2023
- Midiendo el consumo eléctrico del hogar con Home Assistant - 23 de mayo de 2023
- Monitorizando Dell EMC Unity - 25 de abril de 2023