- UDP prijemnik (podrazumevano 46465, NE 46464 gde uredjaji slusaju discovery): dnevnik rada sa zaglavljem #TERMINIA, heartbeat JSON, sve ostalo se odbacuje - paket bez zaglavlja (FW < 0.13.4) se vodi kao "nepoznat uredjaj" po izvornoj IP adresi i tako je i oznacen u prikazu - dnevnik u fajlove po uredjaju i danu, rotacija po velicini + tri kvote (starost, po uredjaju, ukupno); otvoren fajl se nikad ne brise - heartbeat u memoriji; interval se meri iz razmaka javljanja, "tih" = 3x interval - web stranica (podrazumevano 127.0.0.1:8081): spisak uredjaja, crveno za tihe, poslednjih N linija sa pretragom, /dnevnik.txt i /api/uredjaji - bez baze i bez spoljnih zavisnosti; ne dira licencni servis, njegovu bazu, rute ni nginx - sanitizacija svega iz paketa (duzine, kontrolni znaci, ime foldera) — bez izlaska iz foldera dnevnika - systemd unit + primer env fajla + README sa uputstvom za pustanje na server - testovi: parsiranje (zaglavlje/JSON/bez zaglavlja/smece), registar, rotacija i kvote, web rute Nije pusteno na server — puštanje radi vlasnik po logger/README.md.
66 lines
3.1 KiB
Markdown
66 lines
3.1 KiB
Markdown
# 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.~~
|
||
> **UDP prijemnik je NAPISAN 2026-07-25:** [`logger/`](../../logger/README.md)
|
||
> (Go, bez baze, zaseban proces i systemd unit; dnevnik u fajlove sa rotacijom,
|
||
> heartbeat u memoriji, mala web stranica). Nije još pušten na server —
|
||
> puštanje radi vlasnik po uputstvu u `logger/README.md`. Upis u `devices`
|
||
> tabelu (tačka 2 ispod) ostaje za RBAC fazu.
|
||
|
||
## 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).
|