Blogg

Så fungerar Baby Monitor Timmy tekniskt

WebRTC, Firebase och end-to-end-skydd – förklarat utan modeordsdimma.

Tre byggstenar, ett mål

Bakom kulisserna är Timmy byggd på ett ganska pragmatiskt sätt: Flutter för appen, WebRTC för ljud och video i realtid, och Firebase för samordning. Jag ville inte bygga en enorm plattform som skickar allt via molnet. Varje del ska känna till så lite som möjligt och ändå fungera tillförlitligt tillsammans med de andra.

WebRTC: Direkt anslutning, krypterad som standard

WebRTC (Web Real-Time Communication) överför ljud och video mellan baby- och föräldraenheten. I bästa fall flödar datan direkt mellan de två enheterna, peer-to-peer, utan någon mediaserver däremellan.

Varje WebRTC-anslutning använder DTLS-SRTP som standard. Om någon fångar upp nätverkspaket kan de inte läsa ut ljud eller video ur dem. Krypteringen är en del av protokollet och kan inte bara stängas av i WebRTC.

Det var viktigt för mig: ljud och video från barnrummet hör inte hemma på min server. De stannar mellan dina enheter.

Signalering via Firebase Firestore

Innan WebRTC kan starta behöver enheterna hitta varandra och komma överens om hur de kan ansluta. Den delen kallas signalering. Timmy använder Firebase Firestore, Googles molndatabas, för detta.

Endast tekniska anslutningsuppgifter utbyts:

Ljud och video hamnar inte i Firebase. Firestore transporterar bara de tekniska anslutningsuppgifterna. Timmy krypterar även detta signaleringslager, så att Firestore inte blir en mötesplats där SDP och ICE förekommer i klartext.

TURN-servrar: När den direkta vägen inte fungerar

Vissa nätverk blockerar direkta anslutningar, till exempel strikta brandväggar eller vissa mobiloperatörer. Då behöver WebRTC en TURN-reläserver (Traversal Using Relays around NAT).

Timmy provar först den lokala TURN-servern och använder Cloudflare som reserv när det lokala reläet inte är tillgängligt eller är överbelastat. Reläet vidarebefordrar krypterade paket. Det får inga nycklar till ljud eller video; WebRTC-krypteringen förblir intakt.

TURN-autentiseringsuppgifter kommer från en Firebase Cloud Function och är giltiga i bara 24 timmar. Permanenta autentiseringsuppgifter i en babyvaktsapp vore för riskabelt för min smak.

Närliggande anslutningar: Enheterna hittar varandra automatiskt

För att slippa krångliga installationssteg mellan baby- och föräldraenheten använder Timmy Nearby Connections. Google tillhandahåller detta upptäcktslager via Bluetooth och Wi-Fi.

Automatisk parkoppling i Timmy fungerar utan att du behöver skriva in en kod: enheterna hittar varandra och hittar samma mötesplats för nyckelutbytet. Om det misslyckas finns en kod med 4 tecken som du kan skriva in. Parkopplingskoden lämnar aldrig enheten; Firestore ser bara en kryptografisk hash (SHA-256) som dokumentidentifierare.

Anonym autentisering

Timmy använder Firebase Anonymous Authentication. Första gången appen startas får varje enhet ett tillfälligt, anonymt ID. Det finns inget konto, ingen e-postadress och inget lösenord. ID:t finns bara för att tillämpa Firestore-regler: endast autentiserade enheter får läsa eller skriva sessionsdata.

Arkitekturen: Vem skickar, vem tar emot

Timmy har två lägen:

Reglage för exempelvis tryck-och-prata-funktionen och att slå på eller stänga av kameran använder en DataChannel, en annan WebRTC-kanal som skickar små krypterade meddelanden direkt mellan enheterna.

Varför Flutter?

Flutter är Googles ramverk för appar på flera plattformar. För Timmy innebär det att jag kan skriva mycket av logiken en gång och använda den på Android och iOS. Timmy finns för Android, och iOS-versionen närmar sig lansering. Mindre dubblerad kod innebär färre ställen där buggar kan smyga sig in.

Sammanfattning

Den tekniska regeln är enkel: Timmy ska bara hantera de data som appen verkligen behöver. WebRTC skyddar ljud och video, Firebase samordnar anslutningen, TURN ser bara krypterade paket och Nearby Connections gör parkopplingen smidigare.

Bra teknik märks knappt i vardagen. Den fungerar utan att göra barnrummet till ett molnprojekt.


Fler artiklar