Lokální síť je v GrowVPD preferovaná cesta pro ovládání chytrých zařízení. Žádný cloud, žádná latence, žádné předplatné, žádná závislost na tom, jestli zrovna jedou servery výrobce. Tento průvodce vysvětluje, jak GrowVPD mluví přímo s Tuya Wi-Fi zařízeními po TCP, jak ovládáme Mars Hydro lampy přes BLE, kdy padáme do cloud/REST cloudu a co dělat, když síť neposlouchá.
Obsah
1. Proč lokální LAN a co tím získáte
Většina chytrých zařízení má dva režimy: lokální (přímo přes Wi-Fi/BLE bez internetu) a cloudový (přes servery výrobce). GrowVPD jde opačnou cestou: nejdřív zkusí lokál, cloud je až záchranná síť.
- Nezávislost na internetu. Garáž, sklep, chalupa, slabý signál? LAN běží i bez WAN.
- Latence pod 1 sekundu. Cloud round-trip 5–30 s. LAN paket Tuya v3.3 pod 200 ms.
- Žádné předplatné. Některé brandy zavádějí „premium konektivitu" za $2–5/měsíc. LAN to obchází.
- Soukromí. Vaše příkazy nikdy neopustí domácí síť.
- Odolnost. Tuya výpadky 2023 a 2024 vás nevyřadí. ~99,5 % uptime.
Realita Tuya cloudu: v posledních dvou letech tři významné výpadky (jeden 6 hodin, dva nad 2 hodiny). Lokální LAN se těchto chvil ani nedotkne.
2. Mapa protokolů
| Značka | Protokol | Cloud-free? | Status |
|---|---|---|---|
| Tuya Wi-Fi (zásuvky, klima, hub) | LAN v3.3/v3.4/v3.5 (TCP 6668) | Ano po pairingu | Ověřeno hardware |
| Tuya kamery | LAN RTSP + cloud control | Částečně | Ověřeno |
| Mars Hydro TS-řada | BLE GATT | Ano | Ověřeno na TS600 |
| Spider Farmer | cloud ((skrytý broker)) | Ne | Kód připraven |
| AC Infinity (UIS) | REST (cloud výrobce) | Ne | ~85 % UIS parity |
| Vivosun | AWS IoT cloud + REST + BLE + RTSP | Ne (LAN oznámen) | Kód připraven |
| Bluelab Edenic | REST ((skrytý REST endpoint)) | Ne | Kód připraven |
| SANlight | BLE Mesh | Ano | Experimentální |
| Generická BLE TH | BLE GATT | Ano | Ověřeno |
3. Tuya LAN protokol (v3.3 / v3.4 / v3.5)
Tuya je největší výrobce IoT komponentů (tisíce značek: Smart Life, Klimo, Lidl, Brennenstuhl, BlitzWolf). Všechna Wi-Fi zařízení mluví stejným proprietárním protokolem na TCP portu 6668.
Tři verze, tři kryptografie
| Verze | Šifrování | Handshake |
|---|---|---|
| v3.3 | AES-128-ECB (NoPadding) | Žádný, klíč rovnou z local_key |
| v3.4 | AES-128-ECB + PKCS7 padding | 3-fázový SESS_KEY_NEG s HMAC |
| v3.5 | AES-128-GCM | Modifikovaný + UDP discovery port 7000 |
Local_key — srdce LAN řetězce
Každé Tuya zařízení má unikátní 16-bajtový local_key. Vytvořený při prvním pairingu ve Smart Life. Jediné tajemství mezi telefonem a zařízením. GrowVPD ho stáhne z Tuya cloudu při importu a uloží do Room.
Re-pair ve Smart Life? Vygeneruje se nový local_key, starý je neplatný. GrowVPD detekuje chybu dešifrování a spustí witness rotate — vyžádá fresh klíč z cloudu. Detaily v Cloud Bridge Deep Dive.
v3.5 GCM a UDP discovery
- AES-128-GCM — authenticated encryption (chrání integritu).
- UDP broadcast discovery port 7000 — REQ_DEVINFO, zařízení odpovídají IP + verzí. Užitečné při změně IP po restartu routeru.
- CONTROL_NEW (cmd 0x10) pro čtení stavu.
Ověřeno (květen 2026)
- Tuya Smart Plug (v3.5) — LAN-only po pairingu. Stabilní.
- Tuya klima (Klimo, v3.3) — LAN-only, ~30s firmware cooldown při reconnectu.
- Tuya Multi-Mode Gateway (v3.4) — funkční po nedávné aktualizaci. Sub-devices přes
HUB_LAN. Postup v Tuya Zigbee Hub Setup. - Tuya kamera — částečně LAN. RTSP video lokálně, ovládání cloud.
4. Persistentní socket a jeden TCP slot
Pravidlo č. 1: 1 TCP spojení na port 6668
Dva paralelní readery stejného zařízení = druhý dostane „odpověděl, ale prázdná DP mapa". Řešení: mutex pro každé deviceId ((interní mutex) v (náš device manager)).
Lesson learned: „responded but empty DP map" není router. V 100 % případů to byl souběžný read.
Pravidlo č. 2: Persistentní socket, ne forget-and-reconnect
Tuya klima firmware má po každém disconnectu ~30sekundový reconnect cooldown. Když zavřete socket a hned otevřete, firmware vás 30 s ignoruje.
Původní implementace volala tuyaLocalClient.forget() před každým čtením. Výsledek: klima nečetla nikdy spolehlivě. Oprava: forget jen tehdy, když se materiálně něco změnilo (nová IP, nová verze). Po fixu vidíme seq=1, seq=2, seq=3, seq=4 — ten samý socket. Klima čte spolehlivě každých 20 s.
Co si vzít, když píšete vlastní Tuya klient
- Per-device mutex okolo všech TCP operací.
- Persistentní socket. Forget jen na změnu IP / verze / auth failure.
- Sledujte sekvenční čísla v logu — rostoucí
seq= socket žije. - Backoff: 30 s před dalším pokusem po neodpovědi (firmware cooldown).
5. Mars Hydro přes BLE
Mars Hydro TS-řada (TS600, TS1000, TS2000+) má dvě cesty: BLE (lokál) a cloud (cloud sdílený se Spider Farmer). GrowVPD preferuje BLE v dosahu (5–10 m), padá na cloud mimo.
BLE GATT struktura
- Service UUID 0xfff0 — kořen Mars Hydro.
- Characteristic 0xfff4 — read/notify (stav).
- Characteristic 0xfff1 — write (příkazy).
Příkazy
- zapnout/vypnout (multi-port 1–4).
- 0–100 %.
- světelný plán (např. 6:00–18:00 pro 12/12).
- manuál / auto / sunrise / sunset ramp.
Spárování
- GrowVPD → Zařízení → Přidat → BLE skenování.
- Zapněte Mars Hydro lampu, počkejte 10–20 s. Objeví se jako „MarsHydro".
- Klepněte — GrowVPD spáruje, přečte stav.
- Test: změňte jas na 50 %. Reakce pod 1 s = BLE běží.
Detailní průvodce v Connect Mars Hydro.
cloud fallback
Mimo BLE dosah GrowVPD přejde na (skrytý broker) (Mars Hydro + Spider Farmer = MZ Group, sdílená cloud infra). Topiky: (interní topic) a (interní topic).
Stav hardware testu: ověřeno pouze TS600. Ostatní TS modely sdílí stejnou rodinu čipů, ale hardware test čeká.
7. AC Infinity REST API
AC Infinity je v komunitě populární značka pro ventilátory a controllery (Controller 67, 69, UIS). Bohužel nemají lokální port — pouze cloud (skrytý REST API).
8. Vivosun, Bluelab, SANlight
Vivosun — hybrid AWS IoT + REST + BLE + RTSP
Nejpestřejší stack: AWS IoT cloud přes (skrytý AWS IoT endpoint), REST pro účet, BLE pro některé senzory, RTSP pro kamery. Příkazy: AWS device shadow updates — {"desired": {"brightness": 80}}. LAN-only mód oznámen, ETA neznámé.
Bluelab Edenic — REST cloud only
Bluelab Guardian (pH/EC/teplota) jede přes (skrytý REST endpoint). API key (roční expirace). Rate limit 1 req/min. Žádná LAN. Pro cloud-free pH/EC zvažte Atlas Scientific s ESP32 (DIY).
SANlight BLE Mesh — experimentální
SANlight LED bary (rakouský výrobce) používají proprietární BLE Mesh. Reverzně inženýrované, experimentální — budoucí firmware může věci rozbít. Pro produkční pěstovny: Tuya zásuvka před LED + on/off ovládání.
9. Topologie sítě a router
1. AP Isolation = OFF
AP Isolation (někdy „Client Isolation") zakazuje zařízením na stejné Wi-Fi navzájem komunikovat. Nejčastější příčina „zařízení se spárovalo v Smart Life, ale GrowVPD ho nevidí". TP-Link „AP Isolation", ASUS „AP Isolated", Mikrotik „Default Forward".
2. Guest network = ne Tuya tam
Guest Wi-Fi izoluje klienty. Telefon main + Tuya guest = vzájemně neviditelní.
3. mDNS / Bonjour
Pomáhá s discovery, ale není nutné. GrowVPD používá UDP broadcasty na portech 6666 a 6667 (v3.5 plus 7000). „Smart" routery, které blokují broadcasty, naruší discovery.
4. IPv6
Tuya jede výhradně IPv4.
5. VLANy
Broadcasty se přes VLAN hranice nepropagují. Pokud máte IoT VLAN, nastavte unicast routing na porty 6666/6667/6668 a cross-VLAN provoz.
Doporučená topologie
- Telefon (s GrowVPD) na Wi-Fi.
- Tuya/AC Infinity/Vivosun zařízení na stejné Wi-Fi (ne guest).
- BLE zařízení v dosahu (Mars Hydro do 10 m).
- Volitelně: druhý telefon jako Hub Mode bridge.
10. Troubleshooting
„Tuya se spárovalo v Smart Life, ale GrowVPD nevidí"
AP Isolation. Vypněte v routeru.
„Klima čte jednou, pak 30 s nic"
Firmware reconnect cooldown. od nedávné aktualizace GrowVPD drží persistent socket. Aktualizujte.
„Všechny Tuya OK, jen jedna zlobí"
Zastaralý local_key (po re-pair). Smart Life → Device → Remove → znovu Add. GrowVPD → Witness Sync now — nový klíč přijde z cloudu.
„Mars Hydro BLE se spáruje, hned odpojí"
Interference. BLE dosah 5–10 m při přímé viditelnosti. Stěny, kov tentu, jiná BLE zařízení zhoršují.
„cloud k Spider Farmer brokeru selže za NAT"
Některé routery (CG-NAT) blokují port 1883. GrowVPD zkusí TLS 8883. Pokud i to selže, ISP příliš restriktivní.
„Tuya kamera má RTSP, ovládání nereaguje"
Očekávané. Video lokálně RTSP, příkazy cloud.