Blog

Hoe Baby Monitor Timmy technisch werkt

WebRTC, Firebase en end-to-endbeveiliging, helder uitgelegd zonder marketingjargon.

Drie bouwstenen, één doel

Achter de schermen is Timmy vrij praktisch opgebouwd: Flutter voor de app, WebRTC voor audio en video in realtime, en Firebase voor de coördinatie. Ik wilde geen enorm platform bouwen dat alles via de cloud stuurt. Elk onderdeel moet zo min mogelijk weten en toch betrouwbaar samenwerken met de rest.

WebRTC: directe verbinding, standaard versleuteld

WebRTC (Web Real-Time Communication) brengt audio en video over tussen het babyapparaat en het ouderapparaat. In het ideale geval stroomt de data rechtstreeks tussen de twee apparaten, peer-to-peer, zonder mediaserver ertussen.

Elke WebRTC-verbinding gebruikt standaard DTLS-SRTP. Als iemand netwerkpakketten onderschept, krijgen ze geen leesbare audio of video. Deze versleuteling maakt deel uit van het protocol en kan in WebRTC niet zomaar worden uitgeschakeld.

Dat was voor mij het belangrijkste punt: media uit de babykamer horen niet op mijn server thuis. Ze blijven tussen jouw apparaten.

Signalering via Firebase Firestore

Voordat WebRTC kan starten, moeten de apparaten elkaar vinden en afspreken hoe ze verbinding kunnen maken. Dat heet signalering. Timmy gebruikt hiervoor Firebase Firestore, de clouddatabase van Google.

Er worden alleen technische verbindingsgegevens uitgewisseld:

Audio en video komen niet in Firebase terecht. Firestore transporteert alleen de technische verbindingsgegevens. Timmy versleutelt ook deze signaleringslaag, zodat Firestore geen ontmoetingsplek wordt waar SDP en ICE leesbaar zijn.

TURN-servers: wanneer de directe route niet werkt

Sommige netwerken blokkeren directe verbindingen, bijvoorbeeld strenge firewalls of bepaalde mobiele providers. Dan heeft WebRTC een TURN-relay (Traversal Using Relays around NAT) nodig.

Timmy probeert eerst de lokale TURN-server en gebruikt Cloudflare als back-up wanneer de lokale relay niet beschikbaar of overbelast is. De relay stuurt versleutelde pakketten door. Hij krijgt geen sleutels voor geluid of video; de WebRTC-versleuteling blijft intact.

TURN-inloggegevens komen van een Firebase Cloud Function en zijn slechts 24 uur geldig. Permanente inloggegevens in een babyfoon-app zouden naar mijn smaak te riskant zijn.

Nearby Connections: apparaten vinden elkaar automatisch

Om onhandige installatiestappen tussen het babyapparaat en het ouderapparaat te voorkomen, gebruikt Timmy Nearby Connections. Google biedt deze detectielaag via Bluetooth en wifi.

Automatisch koppelen in Timmy werkt zonder handmatig een code in te voeren: de apparaten ontdekken elkaar en vinden hetzelfde ontmoetingspunt voor de sleuteluitwisseling. Als dat niet lukt, kun je een code van 4 tekens invoeren. De koppelcode verlaat het apparaat nooit; Firestore ziet alleen een cryptografische hash (SHA-256) als document-ID.

Anonieme authenticatie

Timmy gebruikt Firebase Anonymous Authentication. Bij de eerste start krijgt elk apparaat een tijdelijke, anonieme ID. Er is geen account, geen e-mailadres en geen wachtwoord. De ID is er alleen om de Firestore-regels af te dwingen: alleen geauthenticeerde apparaten mogen sessiegegevens lezen of schrijven.

De architectuur: wie verstuurt, wie ontvangt

Timmy heeft twee modi:

Bedieningselementen zoals push-to-talk en camera aan/uit gebruiken een DataChannel, een ander WebRTC-kanaal dat kleine versleutelde berichten rechtstreeks tussen apparaten verstuurt.

Waarom Flutter?

Flutter is het framework van Google voor apps op meerdere platforms. Voor Timmy betekent dat dat ik veel logica één keer kan schrijven en die op Android en iOS kan gebruiken. Timmy is beschikbaar op Android en de iOS-versie is bijna klaar voor release. Minder dubbele code betekent minder plekken waar fouten kunnen sluipen.

Samenvatting

De technische regel is simpel: Timmy mag alleen de gegevens gebruiken die het echt nodig heeft. WebRTC beschermt de media, Firebase coördineert het opzetten van de verbinding, TURN ziet alleen versleutelde pakketten en Nearby Connections maakt koppelen eenvoudiger.

Goede technologie verdwijnt een beetje naar de achtergrond in het dagelijks leven. Ze werkt zonder van de babykamer een cloudproject te maken.


Meer artikelen