Hur vi byggde Mail Notifier
Ett skolprojekt som började med ett enkelt problem i vardagen och slutade med ett fungerande IoT-system byggt med Raspberry Pi, PIR-sensor, Flask och realtidssynkronisering.
Se Projektet i AktionBakgrunden
Ett problem vi kände igen
De bästa projekten löser problem man faktiskt stöter på. Vårt var inget undantag.
"Varför ska man behöva gå ut och kolla brevlådan varje dag utan att veta om det ens kom någon post?"
Vi märkte att det är ett litet men irriterande problem i vardagen — man promenerar ut i regnet, öppnar brevlådan och den är tom. Eller ännu värre: man glömmer bort det och posten ligger kvar i dagar. Vi ville ha ett system som vet när posten kommit och berättar det för oss direkt — på telefonen, datorn, eller vilken enhet som helst. Tanken var enkel. Utförandet visade sig vara en helt annan historia.
Processen
Hur vi tog oss dit
Från idé till fungerande system — de stegen som förändrade allt.
Steg 01
Idén och planeringen
Vi började med att identifiera problemet: behoven av en automatisk brevlådenotifikation. Vi ritade upp systemarkitekturen tillsammans och bestämde vilken hårdvara som behövdes. Valet föll på Raspberry Pi och en PIR-sensor — två komponenter vi aldrig jobbat med tidigare.
PlaneringSteg 02
Hårdvara-monteringen
Vi samlade komponenterna och började med att koppla PIR-sensorn till Raspberry Pi. Det var mycket experimentering — det tog tid att förstå GPIO-pins, spänning och jordan. Vi använde jumper-kablar först, och efter många tester fick vi det att fungera. Sensorn triggade in hundratals event per sekund, vilket blev vår första stora utmaning.
Hårdvara
Steg 03
Sensitivitetsjustering
För att lösa det överflödiga event-problemet justerade vi sensitiviteten för sensorn, vilket filtrera bort falskalarm och onödiga event.
OptimeringSteg 04
Flask-backend och datainsamling
Vi byggde en Flask-server som tar emot sensor-data från Pi:n och lagrar allt i JSON-filer. Det var inte en traditionell databas, men det fungerade perfekt för vårt projekt. API:et blev grunden för både dashboarden och e-post-notifieringarna.
BackendSteg 05
E-postnotifikationer
Varken av oss hade jobbat med Gmail SMTP innan. Vi fick lära oss om app-lösenord, SSL-anslutningar och felhantering. Det var frustrerande i början, men när systemet slutligen skickade det första mejlet var det en stor seger!
IntegrationSteg 06
Webbdashboarden
Vi designade ett HTML/CSS/JS-gränssnitt som visar statistik, ohämtad post, och anslutna e-postadresser. Dashboarden pollar servern var 500ms för att hålla sig uppdaterad i realtid. Det blev vackrare och mer funktionellt än vi förväntat!
FrontendSteg 07
Realtidssynkronisering
Det sista stora problemet var att om enhet A hämtade posten uppdaterades inte enhet B förrän nästa poll. Vi implementerade Server-Sent Events — en teknologi som låter servern broadcastas ändringar direkt till alla anslutna klienter. Resultatet: alla enheter uppdateras på millisekunder!
Realtid
Bevis på Concept
Systemet i Full Drift
En autonom loop som visar Mail Notifier när det reagerar på rörelse och utlöser notifikationer i realtid.
Realtidsdemonstration — systemet reagerar på rörelse och uppdaterar alla enheter
Systemet i Bilder
Swipa eller klicka dig igenom dessa nyckelbilder från projektet.
Från koncept till verklighet — systemet i praktiken
Utmaningar
Problem vi löste
Varje projekt stöter på väggar. Här är de som kostade oss mest tid.
PIR-sensorn triggade för ofta
Sensorn skapade hundratals events per sekund vid rörelse. Vi löste det med en motion_active-flagga — ett event per rörelsesession, inte ett per frame.
LöstE-postnotifikationer
Ingen av oss hade jobbat med SMTP tidigare. Vi fick lära oss Gmail App Passwords, SSL-anslutningar och hur man hanterar fel om mottagaren inte finns — allt från grunden.
LöstSynk mellan enheter
Polling visade sig inte räcka — om enhet A hämtade posten visste inte enhet B om det förrän nästa poll. Server-Sent Events löste det: alla enheter uppdateras på millisekunder.
LöstFelaktig statistik vid refresh
Räknaren för ohämtad post visade fel siffra vid sidomladdning — den räknade råa sensor-events istället för faktiska leveranser. Lösningen var att separera todayCount från mailCount i frontend-logiken.
LöstTeknikstack
Vad vi använde
Hela stacken, från hårdvara till webbläsare.