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, tis 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.

Verder lezen

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.

Arduino Yun van arduino.cc.blog

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

Zo voorkom je scriptiestress

Begin gelijk, wacht er niet mee. Dat is het beste advies dat ik afstudeerders mee kan geven wanneer ze net beginnen. Schrijf die scriptie vanaf dag één, punt! Neem maar van me aan dat als je het niet doet, de kans groot is dat je vele slapeloze nachten aan elkaar mag gaan knopen met koffie en oppeppers om magertjes wat woorden uit te kunnen spugen op het digitale papier. En wie weet ben je al te laat? Ben je stappen vergeten? Stress zeg ik je. Stress!

NoSQL-databases

Inleiding

Als we het over databases hebben dan verwijst men vrijwel altijd naar relationele databases. Voor het relationele model in 1970 bedacht werd waren er andere vormen van elektronische databases.

Relationele databases zijn de standaard geworden omdat bij dit model de opbouw en organisatie los staan van de manier van opslag: gegevens worden op een gestandaardiseerde manier opgeslagen buiten de applicatie die de gegevens gebruikt. Dit maakt de databases meer toekomst bestendig omdat de manier waarop de data gebruikt wordt kan veranderen dan waar de data in eerste instantie voor opgeslagen is.

Toch is het relationele model niet overal geschikt voor. Wanneer men met grote hoeveelheden data werkt of gegevens serveert onder hoge druk merkt men al snel op dat relationele databases hier niet in uitblinken, tenzij fors geïnvesteerd wordt in de onderliggende hardware. Maar hardware die 2x zo snel is in theorie schaalt niet 2x zo snel mee in praktijk. De performance van het systeem is niet lineair evenredig met de snelheid van de onderdelen.

In sommige gevallen is een relationele database gewoonweg niet nodig, bijvoorbeeld omdat informatie helemaal geen relatie met iets heeft en dus maar op één manier opgeslagen wordt. Of als er geen complexe queries op de data uitgevoerd hoeven te worden. In weer andere gevallen biedt een relationele database niet genoeg functionaliteit, bijvoorbeeld bij het leggen van een groot aantal verbanden tussen punten.

NoSQL-databases zijn ontwikkeld om in te springen waar SQL niet praktisch is. NoSQL is ten eerste een verwijzing naar SQL, een door IBM ontwikkelde taal voor het werken met gegevens binnen een relationele database. Voorbeelden van database software die zwaar op SQL leunen zijn o.a. MySQL – de meest gebruikte web database -, Microsoft SQL Server, Oracle Database en PostgreSQL.

De No in NoSQL verwijst niet naar geen zoals velen denken maar naar not only. Hiermee wordt bedoeld dat relationele databases niet overal voor geschikt zijn. Er is daardoor ook geen complete definitie van NoSQL-databases omdat er veel verschillende gebieden zijn waar verschillende NoSQL oplossingen uit voortgekomen zijn. Er is echter wel één eigenschap die NoSQL-databases verenigt: ze verschillen op een of meer punten van traditionele relationele databases.

Verder lezen

[Update] Hoogtekaart in kleur

Een “kleine” update. Na wat fine tuning en een zeer passende methode om kleuren weer te geven in plaats van grijswaarden is hier het volgende resultaat behaald met de hoogtedata van Rotterdam:

Hoogtekaart Rotterdam in kleur

Download hier de kaart op volledige resolutie [22528×9728@72MB]: Hoogtekaart Rotterdam in kleur

— Update van 19-03-14 —

Na wat rondvragen heb ik een voor de hoogte betere verdeling van kleurwaarden gevonden. Enig nadeel is dat deze verdeling ervoor zorgt dat minieme verschillen in hoogte (in termen van kleiner dan halve meters) nu vaak niet meer zichtbaar is. Waar voorheen gewerkt werd met een formule om de RGB waarden aan de hand van de hoogte te berekenen, heb ik deze render laten uitvoeren met een zogenaamde Look Up Table voor de kleurreferenties welke overeenkomt met die van het AHN. Laat maar weten wat jullie er van denken.

Hoogtekaart Rotterdam in Kleur

Download hier de kaart op volledige resolutie [22528×9728@48MB]: Hoogtekaart Rotterdam in kleur volgens AHN

[Update] RD coördinaten omzetten naar WGS84 coördinaten

Het volgende stuk code hieronder leek me wel handig te delen, deels omdat ik het vast nog wel vaker nodig ga hebben maar ook omdat anderen er misschien ook wel baat bij hebben uiteraard. De code is geschreven in python maar elke gangbare programmeertaal zal zich er wel voor lenen om iets vergelijkbaars ervan te maken.

Verder lezen

De jeugd van tegenwoordig

Een oudere man komt binnen met trolley en al. Hij kijkt verward om zich heen maar nergens is ruimte om nog te gaan zitten. Ik bied hem mijn plek aan en wordt bedankt door de conducteur die net aan komt lopen. Als sneer naar de rest van het gepeupel roept de oude man nog iets over “de jeugd van tegenwoordig”. Vlak daarna staat ook mijn vriendin haar plaats af aan een oudere dame, die haar bedankt en zegt dat ze dat zo lief vindt.

Verder lezen

Van algoritme naar afbeelding [Gigapica]

Kaart Rotterdam Hoogtedata klein

Voor de minor die ik volg moest nog maar een stukje voltooid worden om deze af te ronden, namelijk het werken met Hadoop MapReduce om een grote hoeveelheid data (ongeveer 77 miljoen gemeten punten aan hoogtedata) om te zetten naar een betekenisvolle visualisatie.

Zie hierboven het resultaat (statisch, non Google Maps style). Om het resultaat op de juiste resolutie te zien klik je op bovenstaande afbeelding of volg je deze link: Giga Rotterdam. Let wel, de afbeelding is enorm dus laden kan even duren! Mocht het openen in de browser niet lukken, probeer dan de afbeelding te downloaden [rechtermuisknop op link => opslaan als]

Wallpaper

Een lui lijf en een warm bedde zijn goede vrienden

Wat is het toch een lekker weer de afgelopen weken, gemiddeld zo’n 25 graden Celsius. Je zou het bijna een absurditeit noemen. Het is mooi geen typisch Nederlands weer; sterker nog, ik waan me soms wel op vakantie in een Zuid-Europees land als Spanje of Griekenland.

De vruchten van die warmte: luiheid, volslagen nutteloos niks doen tot het tijdstip aanbreekt dat het te laat is en ik mijn ogen weer sluit. In zoverre heb ik deze vakantie al wat gedaan van ‘t onderstaande to-do lijstje:

  • Genieten van het weer
  • Server omzetten naar Ubuntu
  • Data op server uitzoeken en opschonen
  • Veel fietsen
  • Administratiesysteem verder uitwerken
  • Android applicatie maken voor administratiesysteem
  • Hadoop onder de knie krijgen
  • Email opruimen

Zoals je ziet, het lijstje is redelijk lang en er is ook nog maar weinig van gedaan. Ik ga vast als een zeur klinken, maar was het gewoon maar eens een paar dagen iets Nederlandser weer, dan krijg ik tenminste nog iets gedaan.