Pokud chcete vést pěstební deník na jednom telefonu, sledovat senzory z druhého a nechat starý telefon hlídat tent v Hub módu, potřebujete jeden mechanismus, který udrží všechna zařízení v synchronizaci. V GrowVPD Pro tuto roli plní třívrstvá synchronizace: lokální síť, cloud relay a budicí push. (Nezaměňujte ji s witness — to je samostatná služba, která pomáhá číst zařízení Tuya přes cloud, třeba při přihlášení přes Smart Life nebo u bateriových senzorů.)
Cílem této architektury je jednoduchý kompromis: žádný centrální server nikdy nevidí váš deník v čitelné podobě, a přesto vám funguje synchronizace i mimo domácí Wi-Fi.
Soukromí v jedné větě. Sync relay (Cloudflare Worker) nikdy nedešifruje vaše zprávy. Šifrování probíhá end-to-end mezi vašimi zařízeními (identita Ed25519 + výměna klíčů X25519 + AES-GCM). Server vidí pouze hashe veřejných klíčů, časová razítka a zašifrované bloky.
Obsah
1. Přehled architektury
| Vrstva | Použití | Latence | Internet? |
|---|---|---|---|
| 1. LAN (mDNS/NSD) | Oba na stejné Wi-Fi | sekundy | Ne |
| 2. Cloud Relay (Cloudflare Worker) | Tam, kde přímé spojení po LAN nejde | sekundy až desítky sekund | Ano |
| 3. FCM Push Trigger | Probudit spící telefon | různá (podle systému) | Ano |
Aplikace volí vrstvu sama: nejdřív LAN, pak Cloud Relay, pak FCM jako budicí signál.
2. Vrstva 1 — Lokální LAN (preferovaná)
Když jsou oba telefony na stejné Wi-Fi, najde je aplikace přes mDNS/NSD. Hub telefon (i GrowVPD Hub na počítači) inzeruje službu _growvpd._tcp a ostatní spárovaná zařízení mu změny posílají přímo přes TCP.
Šifrování:
- Ed25519 — dlouhodobý podpisový klíč. Autentizace.
- X25519 — výměna klíčů (Diffie-Hellman), z níž se odvodí společný klíč dvojice.
- AES-256-GCM — šifrování obsahu.
Ed25519 a X25519 přes knihovnu libsodium. Soukromý klíč je uložený šifrovaně (Android Keystore / iOS Keychain).
Praktická poznámka. LAN vrstva nezná internet. Vypadne ISP? Telefony na vaší Wi-Fi dál posílají změny hubu přímo.
3. Vrstva 2 — Cloud Relay (záloha)
Jeden telefon doma, druhý v práci — NAT brání přímé TCP spojení. Aplikace přepne na Cloud Relay na sync.growvpd.pro.
Relay (Cloudflare Worker) dělá:
- Drží zašifrované zprávy v Cloudflare KV, dokud si je příjemce nestáhne; každý požadavek je podepsaný HMAC.
- Směruje podle
fromPeerHash → toPeerHash. - Nikdy nedešifruje payload.
- Nevyzvednuté zprávy maže nejpozději po 7 dnech.
Pro vás zdarma.
4. Vrstva 3 — FCM Push Trigger
Když relay uloží zprávu pro telefon, který zrovna spí, pošle mu přes FCM krátký budicí signál sync_pending bez obsahu. Telefon se probudí a zprávy si z relay stáhne. Dokud je aplikace otevřená, kontroluje relay sama zhruba každých 15 sekund.
Mobilní data: ve výchozím stavu povolená, nejvýš jednou za 15 minut a do 50 MB denně. Změníte to v Nastavení → Hub & synchronizace → Spravovat → Síť a data.
5. Párovací postup přes QR
Otevřete párovací obrazovku
Telefon A: Nastavení → Hub & synchronizace → Spravovat → Spárovat telefon → Zobraz QR pro druhý telefon.
QR obsahuje 4 položky
- Název zařízení.
- Ed25519 veřejný klíč A (32 B).
- Náhodné číslo (nonce, 16 B), nové při každém vygenerování.
- Seznam schopností zařízení (např.
sync_v1).
Naskenovat QR
Telefon B: stejná obrazovka, ale Naskenuj QR z druhého telefonu. Fotoaparát detekuje automaticky.
X25519 výměna klíčů
Z veřejného klíče A a svého vlastního klíče si B odvodí společný klíč dvojice (X25519 + HKDF). Tajný klíč nikdy necestuje.
Ověření 8znakovým kódem
Oba telefony ukážou stejný 8znakový kód. Když se shoduje, potvrďte na B tlačítkem „Kódy se shodují — potvrdit pár". Pak totéž obráceně (QR ukáže B, A ho naskenuje), aby měl každý telefon ten druhý mezi spárovanými. Bez hesla, bez PINu.
První plná synchronizace
Hned po potvrzení pošle telefon, který skenoval, druhému všechno, co má: deník, stany, zařízení, pravidla a další synchronizovaná data.
QR obsahuje jen veřejné údaje. Při každém otevření obrazovky (nebo po klepnutí na obnovit) vznikne nový kód s novým náhodným číslem.
6. Co se synchronizuje (a co ne)
Každý záznam má časové razítko HLC (hybrid logical clock). Řešení konfliktů:
- Záznamy (growy, zápisy, stany, zařízení, pravidla): vyhrává novější zápis (last-writer-wins).
- Smazání se synchronizuje taky — smazaný záznam zmizí i na ostatních zařízeních.
- Logy (měření, akce automatizace): append-only.
Synchronizované tabulky
- grows, grow_entries, grow_rooms, grow_tents
- smart_devices — bez creds
- sensor_readings — posledních 30 minut po jednotlivých měřeních, starší data jako hodinové souhrny
- automation_rules
- fotky z deníku — záznamy vždy; samotné soubory jen přes Wi-Fi a přes GrowVPD Hub na počítači
- katalog odrůd — vaše odrůdy a jejich rodokmen
- plány hnojení a vlastní šablony
Nesynchronizováno
- Raw logy a diagnostické dumpy.
- Přihlašovací údaje (Tuya, Mars Hydro, AC Infinity) zůstávají na každém zařízení. Výjimka: když zapnete „Synchronizovat přihlášení mezi telefony", zkopírují se end-to-end šifrovaně na spárované telefony (a jen s dalším souhlasem i do GrowVPD Hub na počítači).
- BLE bond keys.
- Nastavení aplikace (motiv, jazyk, zámek PIN) — každé zařízení má vlastní.
7. Hub-as-relay topologie
S Hub módem — hvězdicová topologie: hub čte zařízení a rozesílá měření a záznamy akcí automatizace; deník a pravidla může upravovat kterékoli zařízení.
| Topologie | Mesh | Hvězda (Hub) |
|---|---|---|
| Zdroj pravdy | Nejnovější HLC | Hub pro měření a akce, jinak nejnovější HLC |
8. Bezpečnost
- Cloudflare kompromitovaný → útočník vidí jen ciphertext. Bez klíčů nedešifruje.
- Únik QR kódu → je v něm jen veřejný klíč a název zařízení. Data posíláte jen zařízením, která máte mezi spárovanými.
- Ztráta telefonu → na ostatních zařízeních ho odeberte ze spárovaných (Nastavení → Hub & synchronizace → Spravovat).
- GrowVPD jako firma skončí → Cloud Relay zmizí, LAN sync funguje dál.
9. Šířka pásma a kvóty
| Položka | Výchozí nastavení |
|---|---|
| Synchronizace přes mobilní data | Zapnutá (Síť a data → Kdy synchronizovat?) |
| Interval na mobilních datech | Nejvýš jednou za 15 minut |
| Denní limit mobilních dat | 50 MB, pak jen naléhavé zprávy |
| Měření na mobilních datech | Jen hodinové souhrny |
| Fotky | Jen přes Wi-Fi |
10. Řešení problémů
Synchronizace nejde přes lokální síť
Router izoluje klienty (AP isolation, síť pro hosty, VLAN). Router → AP Isolation: OFF. Jinak data půjdou přes Cloud Relay.
LAN funguje, Cloud Relay ne
Nastavení → Hub & synchronizace → Spravovat → Otestovat cloud relay. „Cloud relay je v pořádku" = OK. „Nedostupné" = vaše síť se k relay nedostane (firewall, DNS filtr, blokovaná doména).
Některé záznamy chybí
Na obrazovce Hub & synchronizace klepněte na Synchronizovat nyní.
Zastaralé odečty
Hub telefon musí běžet (trvalá notifikace „GrowVPD Hub") a být online. Kdy se naposledy ozval, uvidíte v Nastavení → Hub & synchronizace.