Mis nooit de kans op een zelfgebakken pizza!

Het begin...

Oventhermometer
Laserthermometer
Bakthermometer

Om goede pizza's te kunnen bakken is het van belang om de oventemperatuur te kennen. Tijdens het ontwerpen van de pizzaoven ontdekte ik dat dit op verschillende manier kan. In eerste instatie dacht ik aan een eenvoudige oventhermometer. Zo'n thermometer heeft echter enkele nadelen. Het meetbereik gaat vaak niet verder dan 300 graden Celcius, terwijl de oven tot vier- à vijfhonderd graden opgestookt kan worden. Daarnaast je wil de temperatuur binnenin de oven meten én tegelijkertijd de thermometer kunnen uitlezen.
De tweede optie is een laser-thermometer. Op zich een handige oplossing, maar het lijkt me wel belangrijk om je meting telkens op dezelfde plek te doen, wil je verschillende metingen met elkaar vergelijken.
Niet veel later bestelde ik een thermokoppel (met lang aansluitsnoer). Daarna begon de echte uitdaging.

De oplossing

De thermokoppel is ingemetseld in de koepel en meet de temperatuur van de oven. Omdat een (digitaal) display op of aan de oven niet past bij zo'n traditionele Toscaanse oven heb ik gezocht naar een alternatief. Ik heb gekozen voor aflezen van de temperatuur op je telefoon. Uiteindelijk is het een website geworden waar je (naast het aflezen van de actuele temperatuur) ook informatie kunt terugvinden over de bouw van de oven en je je kunt aanmelden voor een notificatiemail. Als je je hiervoor aanmeldt, ontvang je een mailtje zodra de oven opgestookt wordt. Aangezien het tot wel enkele uren kan duren voordat de oven goed warm is, heb je tijd genoeg om je deeg uit de koeling te halen en de pizzasaus te maken.
Hieronder staat uitgebreid beschreven hoe de totale oplossing is opgebouwd.

Amazon Web Services

AWS Amazon is bekend van de verkoop van o.a. boeken. Lang niet iedereen weet dat ze één van de grootste leveranciers van clouddiensten ter wereld zijn. Dit PizzaApp-project leek mij bij uitstek geschikt om kennis en ervaring met dit platform op te doen. Voor niet-commerciële projecten zoals dit zijn de kosten redelijk beperkt. Door gebruik te maken van de Free Tier kunnen de meeste diensten gratis worden afgenomen. Voor het registreren van een domeinnaam en het beheren van de DNS worden wel kosten in rekening gebracht.

Eisen en uitgangspunten

Bij het uitdenken van de oplossing heb ik de volgende uitgangspunten meegenomen:

Wensen

Daarnaast had ik nog enkele wensen opgesteld. De eerste is op het moment van schrijven nog niet gerealiseerd, de tweede is een key-feature van dit project geworden.

Internet of Things (IoT)

De IoT-node is het onderdeel dat verantwoordelijk is voor het meten van de temperatuur en het draadloos versturen hiervan. De node bestaat naast de temperatuursensor uit een microcontroller met bijbehorende software, een LORA-WAN-radio en een batterij. Voor het versturen van de berichten wordt gebruik gemaakt van The Things Network.

The Things Network

TTNThe Things Network is een Nederlands inititief van een wereldwijd publiek toegankelijk IoT-netwerk. In veel steden is al een redelijke dekking van dit netwerk. Ik beschik zelf over een gateway voor toegang tot dit netwerk, waardoor ik zeker weet dat de dekking perfect is. De dekking van mijn gateway is zichtbaar op deze kaart en deze kaart. Binnen het Things Network heb ik een applicatie aangemaakt. Deze ontvangt de berichten van de IoT-node en stuurt deze door naar een API van de back-end applicatie.

De applicatie

TTNDe applicatie draait volledig op het Amazon Webservice-platform (AWS). De applicatie is op te delen in een frontend- en een backend-applicatie. De frontend-applicatie is een responsive website (www.PizzaApp.nl) en de backend bestaat uit diverse (web)services, database etc. De applicatie op het AWS-platform bestaat uit de volgende onderdelen:

Voor het ontwikkelen van de applicatie wordt gebruik gemaakt het Serverless-framework. Dit framework wordt gebruikt voor de volgende zaken:

Als IDE van de applicatie heb ik gekozen voor Visual Studio Code.

Details van de IoT-node

Hardware

Schema IoT node

Thermokoppel Thermokoppel Thermokoppel Arduino Pro-mini RFM95 De node is opgbouwd rond een Arduino Pro-Mini microcontroller. Deze werkt op een voedingsspanning van 3v3 en draait op 8MHz. De temeratuursensor is een PT1000-sensor welke via een MAX6675-chip uitgelezen wordt. De resolutie van de sensor is 0.25 graden Celcius. Als zendontvanger wordt een RFM95-tranceiver gebruikt op 868MHz. Dit is de frequentieband die in Europa vrij toegankelijk is. De voeding van de node bestaat uit twee AA-type 1.5 volt Alkaline batterijen. Om het energieverbruik zo laag mogelijk te krijgen heb ik de volgende maatregelen genomen:

Software (functioneel)

Iedere 15 minuten ontwaakt de node om de temperatuur te meten. Deze wordt via het Things Network verzonden. Zodra de temperatuur boven de 50 graden komt, wordt iedere minuut de temperatuur verzonden.

Beveiliging

De node maakt gebruik van Over The Air Activation (OTAA). Dit betekent dat de beveiligingssleutels aanwezig zijn in het geheugen van de node en op die manier een beveligde verbinding met het TTN kan opzetten.

Payload-decoder

Ieder bericht dat vanuit de node op The Things Network binnenkomt bevat naast gegevens over de transmissie de payload. De payload bestaat uit twee bytes data voor de temperatuur. Via een decoder-functie wordt dit binnen de TTN-applicatie vertaald naar een (leesbare) temperatuurswaarde.

Ontwikkeltools

Thermokoppel

De software is gechreven in C. Als IDE maak ik gebruik van Visual Studio Code uitgebereid met PlatformIO. Voor het deployen van de gecompileerde code naar de microcontroller maak ik gebruik van een USB-programmer.

Details van de applicatie

Zoals eerder geschreven draait de gehele applicatie op het Amazon Web Services platform. De backend-applicatie bestaat uit vershillende Lambda-functies. Deze zijn allen geschreven in NodeJS.

AWS services

Infrastructuur

Zowel de website als de webservice zijn met een SSL-certificaat beveilgd en draaien op het pizzaapp.nl-domein. De certificaten zijn uitegegeven via de AWS Certificate Manager-service. De DNS wordt verzorgd door de AWS Route 53-service. Binnen de AWS IAM-service is een account aangemaakt welke de specifieke rechten binnen de verschillende services heeft om de applicatie te kunnen deployen en uit te voeren. Om inzicht en foutopsporing te kunnen doen wordt geruik gemaakt van de AWS CloudWatch-service. Vanuit de diverse applicatieonderdelen worden alle gegevens via deze service ontsloten.

Webservices

Er zijn twee types webservices beschikbaar. Dit zijn REST en Websocket. De REST-service wordt gebruikt voor:

De websocket wordt gebruikt om websitebezoekers realtime de nieuwste temperatuurmeting te kunnen tonen. Hierdoor hoeft er geen polling vanuit de website plaats te vinden. Bij elke nieuw opgeslagen meting in de database wordt met behulp van een DynamoStream-handler een bericht via de websocket verzonden naar alle openstaande browsersessies.

Website

Thermokoppel De website is opgebouwd met behulp van Bootstrap. Voor het weergeven van de actuele temperatuur wordt gebruik gemaakt van de beschikbare webservices. Daarnaast kan een gebruiker zich via de website aanmelden voor het ontvangen van een notificatie wanneer de oven opgestookt wordt. De statische content van de website wordt gehost in een AWS S3-bucket. De AWS CloudFront-service zorgt voor caching van de data zodat het verkeer naar de bucket geminimaliseerd is.
De actuele temperatuur wordt grafisch weergegeven (in de vorm van een thermometer met schaalverdeling) hiervoor wordt gebuik gemaakt van Google Charts.

Inschrijven en activeren

Thermokoppel Het inschrijfformulier is voorzien van ReCaptcha-beveiliging om spammers buiten de deur te houden. Na het opgeven van je naam en e-mailadres wordt er een activeringsmail verstuurd naar het opgegeven adres. In deze email is een activatielink opgenomen. Alléén na het aanklikken van deze link, wordt het account geactiveerd. Na activatie wordt een bevestigingsmail naar de gebruiker gestuurd. Voor het versturen van deze emails wordt gebruik gemaakt van de AWS Simple Email Service (SES).

Notificatie

De DynamoStream die binnenkomt bij elke nieuw opgeslagen temperatuurmeting, wordt ook gebruikt als trigger voor de email-notificatie. Bij iedere binnengekomen meting wordt gekeken of deze een temperatuurswaarde van meer dan 50 graden Celsius heeft én of er de afgelopen 20 uur nog geen notificatie is verzonden. Als aan beide voorwaarden is voldaan, dan wordt er naar alle geactiveerde accounts een e-mail gestuurd.

Schrijf je nu in en mis geen pizza!