# Uređaji: šta terminal VEĆ šalje (formati) i šta server treba da primi > Firmware strana je GOTOVA (FW 0.10.0+, modul `firmware/10_terminia/svc.cpp`). > Server strana (prijemnik) NE postoji — to je zadatak u 04. ## 1. LAN discovery (za servisera na licu mesta / PC alat) - Uređaj UVEK sluša **UDP port 46464**. - Upit: paket čiji sadržaj počinje ASCII stringom `TERMINIA?` (može broadcast). - Odgovor (unicast pošiljaocu), JSON u jednom paketu: ```json {"app":"TERMINIA","name":"TERM-001","mac":"1C:DB:D4:A6:A4:60", "ip":"192.168.123.1","fw":"0.11.0","serial":"1CDBD4A6A460"} ``` - `serial` = korisnički serijski broj ili MAC bez dvotačaka ako serijski nije zadat. - `ip` = adresa interfejsa (ETH ima prednost nad WiFi ako je povezan). - Provereno uživo 2026-07-24 (PowerShell UDP upit → odgovor za <100 ms). **Upotreba:** serviserski PC/telefon alat „nađi sve uređaje na mreži" — broadcast `TERMINIA?` na 255.255.255.255:46464 i skupi odgovore. ## 2. Heartbeat (za `devices.status` / `poslednji_heartbeat`) - Uređaj šalje na **`cfg.svcLogHost` (`ip:port`, UDP)** na **`cfg.svcHbSeconds`** sekundi (0 = isključeno). Podešava se u SPA: Podešavanja → Servis. - Format = isti identitet kao discovery + oznaka: ```json {"app":"TERMINIA","name":"...","mac":"...","ip":"...","fw":"...","serial":"...","hb":1} ``` **Server treba:** UDP prijemnik (port po dogovoru, npr. 46465 javno) koji: 1. parsira JSON, ključ = `mac`; 2. upsert u `devices` (`fw_verzija`, `ip`, `poslednji_heartbeat = NOW()`); 3. status: `online` ako je heartbeat mlađi od 3×interval, inače `offline` (interval po uređaju čuvati ili pretpostaviti default). ⚠️ Heartbeat trenutno gađa LOKALNI prijemnik (LAN). Za javni server preko interneta: NAT izlaz radi (UDP out), ali treba javna IP/port + odluka da li UDP ili prelazak na HTTPS POST uz sync (v. „Zahtevi ka firmveru" u 04 ako se menja). ## 3. Dnevnik rada (dbg) na server - Isti `cfg.svcLogHost` prima i tok dbg linija (tekst, UDP, više linija po paketu, do ~1 KB) kada je uključeno „Šalji dnevnik rada na server". - Namena: teren-dijagnostika („šta se dešava kad pravi problem"). - **Server treba:** isti prijemnik upisuje sirove linije u fajl po MAC-u/danu (rotacija!) — NE u bazu (obim). Toggle je na uređaju, podrazumevano isključen — server ne sme pretpostaviti da tok uvek stiže. ## 4. Identitet uređaja — izvor istine - **MAC iz eFuse** (`1C:DB:D4:A6:A4:60` je razvojni uređaj) — nepromenljiv, ključ za `devices.mac` i za licencu. - `serial` je korisnički (promenljiv) — samo za prikaz. - Registracija uređaja u org (ko ga poseduje) ide kroz RBAC/provisioning (03), ne kroz heartbeat — heartbeat samo ažurira POZNATE uređaje (nepoznat MAC: zabeleži u „neregistrovani" listu za kasnije usvajanje, ne pravi org sam).