Blog

Jak Baby Monitor Timmy technicky funguje

WebRTC, Firebase a ochrana mezi koncovými zařízeními vysvětlené bez marketingové mlhy.

Tři stavební kameny, jeden cíl

Timmy je po technické stránce postavený docela pragmaticky: Flutter pro aplikaci, WebRTC pro zvuk a video v reálném čase a Firebase pro koordinaci. Nechtěl jsem budovat obrovskou platformu, která všechno žene přes cloud. Každá část by měla vědět co nejméně a přitom s ostatními spolehlivě fungovat.

WebRTC: přímé spojení, ve výchozím nastavení šifrované

WebRTC (Web Real-Time Communication) přenáší zvuk a video mezi zařízením u miminka a zařízením rodiče. V ideálním případě data proudí přímo mezi oběma zařízeními, peer-to-peer, bez media serveru mezi nimi.

Každé připojení WebRTC ve výchozím nastavení používá DTLS-SRTP. Pokud někdo zachytí síťové pakety, nezíská čitelný zvuk ani video. Toto šifrování je součástí protokolu a ve WebRTC ho nelze jednoduše vypnout.

To pro mě bylo důležité: média z dětského pokoje na můj server nepatří. Zůstávají mezi vašimi zařízeními.

Signalizace přes Firebase Firestore

Než může WebRTC začít, zařízení se musí najít a domluvit se, jak se mohou propojit. Této části se říká signalizace. Timmy k tomu používá Firebase Firestore, cloudovou databázi od Googlu.

Vyměňují se pouze technické údaje o připojení:

Zvuk a video se do Firebase nedostávají. Firestore přenáší jen technické údaje o připojení. Timmy tuto signalizační vrstvu také šifruje, takže se Firestore nestává místem, kde jsou SDP a ICE v otevřeném textu.

Servery TURN: když přímá cesta nefunguje

Některé sítě blokují přímé připojení, například přísné firewally nebo někteří mobilní operátoři. Pak WebRTC potřebuje zprostředkovací server TURN (Traversal Using Relays around NAT).

Timmy nejprve zkusí místní server TURN a Cloudflare použije jako zálohu, když místní zprostředkovací server není k dispozici nebo je přetížený. Zprostředkovací server přeposílá šifrované pakety. Nemá klíče ke zvuku ani videu; šifrování WebRTC zůstává zachováno.

Přihlašovací údaje TURN pocházejí z Firebase Cloud Function a platí jen 24 hodin. Trvalé přihlašovací údaje v aplikaci chůvičky by pro mě byly příliš rizikové.

Nearby Connections: zařízení se najdou automaticky

Aby nastavení mezi zařízením u miminka a zařízením rodiče nebylo zbytečně složité, Timmy používá Nearby Connections. Google tuto vrstvu pro vyhledávání zařízení poskytuje přes Bluetooth a Wi‑Fi.

Automatické párování v Timmy funguje bez ručního zadávání kódu: zařízení se navzájem najdou a najdou stejné místo pro výměnu klíčů. Pokud se to nepodaří, můžete zadat 4znakový kód. Párovací kód nikdy neopustí zařízení; Firestore vidí pouze kryptografický hash (SHA-256) jako identifikátor dokumentu.

Anonymní ověřování

Timmy používá Firebase Anonymous Authentication. Při prvním spuštění získá každé zařízení dočasné anonymní ID. Neexistuje žádný účet, e-mailová adresa ani heslo. ID slouží jen k vynucení pravidel Firestore: data relace mohou číst nebo zapisovat pouze ověřená zařízení.

Architektura: kdo odesílá a kdo přijímá

Timmy má dva režimy:

Ovládání, jako je push-to-talk a zapnutí či vypnutí kamery, používá DataChannel, další kanál WebRTC, který posílá malé šifrované zprávy přímo mezi zařízeními.

Proč Flutter?

Flutter je framework od Googlu pro aplikace na více platformách. Pro Timmy to znamená, že velkou část logiky mohu napsat jednou a používat ji na Androidu i iOS. Timmy je k dispozici pro Android a verze pro iOS je téměř připravená k vydání. Méně duplicitního kódu znamená méně míst, kde se mohou objevit chyby.

Shrnutí

Technické pravidlo je jednoduché: Timmy by měl pracovat jen s daty, která skutečně potřebuje. WebRTC chrání média, Firebase koordinuje navázání spojení, TURN vidí jen šifrované pakety a Nearby Connections usnadňuje párování.

Dobrá technologie se trochu ztratí v každodenním životě. Prostě funguje, aniž by z dětského pokoje dělala cloudový projekt.


Další články