RabbitPi - den Alexa aktiverad IFTTT ansluten, örat-vickar IoT assistenten (6 / 12 steg)
Steg 6: Säga vad?
Så jag hade en kanin (i stycken hela bänken) som kunde tala, men det behövs en mekanism för att ta emot meddelanden och skicka dem till Ivona tjänsten läsas ut. Jag tittade på möjligheten av textmeddelanden via en online-tjänst eller SIM-kort adapter, och även Twitter och Dropbox för att leverera strängar/textfiler, men beslutade slutligen att använda imaplib, ett Python-baserade sätt att interagera med IMAP-e-postkonton. Jag bestämde mig på den här främst eftersom det integreras väl med tjänsten IFTTT, kan du vara riktigt kreativ med formateringen av tillkännagivanden email. Det innebar också att jag skulle kunna skicka e-post direkt till RabbitPi för att läsas högt.
Jag tittade igenom massor av imaplib python exempel online, och efter kombinera bitar och arbeta igenom imaplib dokumentation jag lyckades sluta med ett skript som kollade Gmail för olästa meddelanden regelbundet och tryckt annan text på skärmen beroende på innehållet i ämnesraden. Detta var verkligen händig, som jag kunde anpassa uttrycket "Om" i koden för att endast fungera om mailet kom från mig själv, och sedan byta ut åtgärden "Skriv ut" för koden anropa tjänsten Ivona.
Jag tillbringade ganska länge försöker anpassa den imaplib & Pyvona kod för att läsa ut kroppen av e-post men detta visade sig vara oerhört komplicerat - jag lärde mig snart att core e-fält (från, till, ämne etc) är formaterade mycket enkelt, men att e-brödtext kan vara strukturerad på många olika sätt. Till slut ingen gjorde det egentligen roll, var jag kunna uppnå vad jag behövde genom att använda e-föremål som fältet som anmälan texten skulle läsas från.
Jag anpassade sedan i imaplib kodexempel så att istället för att stoppa efter varje kontroll för e-post det skulle slinga runt oändligt, kontroll för e-post några gånger per minut och läsa ut någon nya ganska mycket som de anlände. Detta var användbart för att testa men i praktiken skulle jag antagligen göra det lite mindre ofta. Också värt att notera att skriptet lagrar lösenordet i klartext så behöver vissa kryptering till i någon gång.
Jag är 100% säker på att detta kan uppnås mycket mer elegant och effektivt i Python men det var roligt och utmanande att få det att fungera alls - jag har lånat "Python för barn" på biblioteket denna vecka så min kod kommer att förhoppningsvis förbättra som jag lära mig mer.
Med grundläggande get-an-email-and-read-it-out script arbetar la jag i de extra bitarna av kod som skulle göra kaninen öron flytta och LED ljus medan du läser anmälningarna. Koden jag använde är på GitHub men tänk på min nuvarande brist på python skicklighet!