licence-server/docs/loggerservice/02-uredjaji-heartbeat-discovery.md
Nenad Djukic 28296b390c Preuzet radni paket LoggerService (RBAC kontrolna ravan) iz firmverskog repoa
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>
2026-07-25 07:10:37 +02:00

61 lines
2.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).