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

2.8 KiB
Raw Blame History

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:
{"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:
{"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).