Paket je nastao u asp-terminia/serviseri/ ali je sav posao serverski (isti backend i baza kao ASP-Terminia licenciranje), pa se seli ovde - isto obrazlozenje i put kao docs/asp-terminia/. - docs/loggerservice/ - 7 dokumenata: vizija/MVP (merodavan dokument), ZAKLJUCEN RBAC model (stablo orgs, 4 role, invarijante, seme tabela), heartbeat/discovery formati koje uredjaj vec salje, provisioning i katalog firmvera, zadaci S1-S7, pravila rada na produkciji - reference prepravljene: "ASP repo" = https://git.terminia.net/djuka/asp-terminia, link ka docs/asp-terminia/ unutar istog repoa umesto stare "dal-license-server repo:" oznake - CLAUDE.md: sekcija LoggerService + koordinacija sa docs/asp-terminia/ (S1-S2 idu POSLE Z1 da se migracije ne sudare) Firmverska strana (svc.cpp, discovery/heartbeat) ostaje u ASP repou i ne dira se. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
61 lines
2.8 KiB
Markdown
61 lines
2.8 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.
|
||
|
||
## 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).
|