Arduino energiemeter: Hardware en Setup; What does this button do?

Wie houdt er van slagroomtaart? Met zo’n geheel ongerelateerde vraag open ik hierbij deze blogpost, ’t is altijd lastig een goed begin te kiezen :P. In een eerdere blogpost heb ik al gezegd dat ik uitgebreider in zou gaan op de Arduino Yún die ik heb waarmee ik het stroom energieverbruik wil gaan meten. Dit is het eerste deel van een vierdelig en dus stuk uitgebreidere blogpost. Een overzicht van wat is en wat komen gaat:

  • Arduino energiemeter: Hardware en Setup; What does this button do?
  • Arduino energiemeter: Arduino software; Do you even I/O?
  • Arduino energiemeter: Python software; The snake that stores the data.
  • Arduino energiemeter: Visualisatie; Graphics and Charts baby!

Het verhaal is met opzet verdeeld in vier verschillende stukken. Als schrijver is het makkelijker, omdat ik nu niet in eens een heel groot stuk tekst hoef te gaan tikken. Als lezer is het fijner, omdat je nu niet in eens een heel groot stuk tekst hoeft te lezen.

Lees verder Arduino energiemeter: Hardware en Setup; What does this button do?

E-mail versturen met Python en Gmail

Ik heb afgelopen weekend een mooie Arduino Yún binnen gehad waarover binnenkort een uitgebreidere post volgt. Met deze Arduino wil ik het stroomverbruik gaan meten. Wat de Arduino Yún zo bijzonder maakt is dat het een mix is van een processor die de Arduino omgeving draait en een processor die een Linux omgeving draait. Het voordeel hiervan is dat je als gebruiker niet gelimiteerd wordt door de beperkte hoeveelheid geheugen die je hebt aan de Arduino kant. Nee echt, 28KB voor een sketch is gewoon niet voldoende als je complexe taken uit probeert te voeren. Met de Yún heb je nog steeds dat probleem, maar kan je dat omzeilen door code op de linux kant uit te voeren (en eventueel data aan die code mee te geven!). Nog mooier is het als je een lekker groot micro-sd kaartje – ja dat klinkt raar – eraan toevoegt en je de Linux root daarop draait. Zo krijg je nog eens extra, zelf aan te geven hoeveel, ruimte.

Dat was wel zo’n beetje het globale inleidende verhaal, maar wat heeft dit dan te maken met de titel van deze post? Nou, dat zit zo: ik wil als een soort activiteitrapport elke x periode een update met betrekking tot de verkregen data naar mijn eigen e-mail adres verzenden. Een sommatie van verbruik, gemiddeld verbruik, dat soort ongein. Aangezien ik Gmail al vaker als SMTP server gebruik voor “huishoudelijke” taken zoals het voltooien van een download door mijn fileserver wilde ik daar ook nu weer gebruik van kunnen maken. En uiteraard biedt dat prachtige Python gewoon een library voor SMTP! Een voorbeeld van hoe je een email verzend met Python (snippet, aanpassen voor productie gebruik 😉 ):


## Geweldig, een ingebakken library! Importeren die shit
import smtplib

## variabelen initialiseren
vanEmail = 'van.emailadres@gmail.com'
naarEmail = 'naar.emailadres@gmail.com'
onderwerp = 'Gewoon, zomaar'
txtBericht = "\r\n".join(["From: " + vanEmail, "To: " + naarEmail, "Subject: " + onderwerp, "", "Berichtje!"])
gebruikersnaam = vanEmail ## hoeft niet gelijk te zijn!
wachtwoord = '123dachthetniet'
server = smtplib.SMTP('smtp.gmail.com:587') ## TLS
server.ehlo() ## functionaliteit van server ophalen
server.starttls() ## TLS connectie beginnen
server.login( gebruikersnaam, wachtwoord ) ## obviously
server.sendmail( vanEmail, naarEmail, txtBericht ) ## MAIL MOTHERF*CKER!
server.quit() ## wel zo netjes om de verbinding te verbreken

Het bericht kan je uiteraard vervangen door (valid) (X)HTML (en css) met misschien zelfs template + variables (whatevs) in plaats van een plain text bericht zoals hier, maar het gaat om het idee. Na wat research blijkt dit toch niet zo eenvoudig als wat ik zei, hier is een voorbeeld hoe je wél HTML als bericht kan versturen.


import smtplib

## Toevoegen bovenaan je bestand bij import
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

## variabelen initialiseren
vanEmail = 'van.emailadres@gmail.com'
naarEmail = 'naar.emailadres@gmail.com'
onderwerp = 'Gewoon, zomaar'

txtBericht = MIMEMultipart('alternative')
txtBericht['From'] = vanEmail
txtBericht['To'] = naarEmail
txtBericht['Subject'] = onderwerp
txtBericht.attach( MIMEText( '<h1>Berichtje!</h1>', 'html') )

gebruikersnaam = vanEmail ## hoeft niet gelijk te zijn!
wachtwoord = '123dachthetniet'
server = smtplib.SMTP('smtp.gmail.com:587') ## TLS
server.ehlo() ## functionaliteit van server ophalen
server.starttls() ## TLS connectie beginnen
server.login( gebruikersnaam, wachtwoord ) ## obviously
server.sendmail( vanEmail, naarEmail, txtBericht.as_string() ) ## MAIL MOTHERF*CKER!
server.quit() ## wel zo netjes om de verbinding te verbreken

Zodra ik alle onderdelen binnen heb, en daarmee bedoel ik uiteraard de sensoren die omdat alles zo goedkoop mogelijk moest uit China komen, ga ik na veel gekloot en documentatie er een mooie blogpost van maken, hopelijk zelfs met een impressie van de werking!

Cheerio