Blogg

Slik fungerer Baby Monitor Timmy teknisk

WebRTC, Firebase og ende-til-ende-beskyttelse – forklart uten buzzword-tåke.

Tre byggeklosser, ett mål

Bak kulissene er Timmy bygget på en ganske praktisk måte: Flutter for appen, WebRTC for lyd og video i sanntid, og Firebase for koordinering. Jeg ønsket ikke å bygge en enorm plattform som sender alt gjennom skyen. Hver del skal vite så lite som mulig og likevel fungere pålitelig sammen med de andre.

WebRTC: Direkte tilkobling, kryptert som standard

WebRTC (Web Real-Time Communication) overfører lyd og video mellom baby- og foreldreenhetene. I beste fall flyter dataene direkte mellom de to enhetene, punkt til punkt, uten noen medieserver imellom.

Alle WebRTC-tilkoblinger bruker DTLS-SRTP som standard. Hvis noen fanger opp nettverkspakker, får de ikke lesbar lyd eller video. Denne krypteringen er en del av protokollen og kan ikke bare slås av i WebRTC.

Det var det viktige for meg: Lyd og video fra barnerommet hører ikke hjemme på serveren min. De forblir mellom enhetene dine.

Signalering via Firebase Firestore

Før WebRTC kan starte, må enhetene finne hverandre og bli enige om hvordan de kan koble seg til. Den delen kalles signalering. Timmy bruker Firebase Firestore, Googles skydatabase, til dette.

Bare tekniske tilkoblingsdata utveksles:

Lyd og video havner ikke i Firebase. Firestore transporterer bare de tekniske tilkoblingsdataene. Timmy krypterer også dette signaleringslaget, slik at Firestore ikke blir et møtested med klartekst for SDP og ICE.

TURN-servere: Når den direkte veien ikke fungerer

Noen nettverk blokkerer direkte tilkoblinger, for eksempel strenge brannmurer eller enkelte mobiloperatører. Da trenger WebRTC et TURN-relé (Traversal Using Relays around NAT).

Timmy prøver først den lokale TURN-serveren og bruker Cloudflare som reserve når det lokale reléet ikke er tilgjengelig eller er overbelastet. Reléet videresender krypterte pakker. Det får ikke nøklene til lyd eller video; WebRTC-krypteringen forblir intakt.

TURN-tilgangsopplysninger kommer fra en Firebase Cloud Function og er bare gyldige i 24 timer. Permanente tilgangsopplysninger i en babycall-app ville vært for risikable etter min smak.

Nærhetstilkoblinger: Enhetene finner hverandre automatisk

For å unngå tungvinte oppsett mellom baby- og foreldreenheten bruker Timmy Nearby Connections. Google tilbyr dette oppdagelseslaget via Bluetooth og Wi-Fi.

Automatisk sammenkobling i Timmy fungerer uten at du må skrive inn en kode manuelt: Enhetene finner hverandre og finner det samme kontaktpunktet for nøkkelutvekslingen. Hvis det ikke fungerer, finnes det en kode på 4 tegn som du kan skrive inn. Sammenkoblingskoden forlater aldri enheten; Firestore ser bare en kryptografisk hash (SHA-256) som dokumentidentifikator.

Anonym autentisering

Timmy bruker Firebase Anonymous Authentication. Første gang appen åpnes, får hver enhet en midlertidig, anonym ID. Det finnes ingen konto, ingen e-postadresse og ingen passord. ID-en er bare der for å håndheve Firestore-reglene: Bare autentiserte enheter kan lese eller skrive øktdata.

Arkitekturen: Hvem sender, hvem mottar

Timmy har to moduser:

Kontroller som snakkefunksjon og å slå kameraet av eller på bruker en DataChannel, en annen WebRTC-kanal som sender små krypterte meldinger direkte mellom enhetene.

Hvorfor Flutter?

Flutter er Googles rammeverk for apper på flere plattformer. For Timmy betyr det at jeg kan skrive mye av logikken én gang og bruke den på Android og iOS. Timmy er tilgjengelig på Android, og iOS-versjonen er snart klar for lansering. Mindre dobbeltarbeid i koden betyr færre steder feil kan snike seg inn.

Oppsummering

Den tekniske regelen er enkel: Timmy skal bare håndtere dataene den faktisk trenger. WebRTC beskytter mediene, Firebase koordinerer oppsettet av tilkoblingen, TURN ser bare krypterte pakker, og Nearby Connections gjør sammenkoblingen enklere.

God teknologi glir litt inn i hverdagen. Den fungerer uten å gjøre barnerommet til et skyprosjekt.


Flere artikler