RFID Entry Manager - Systém pre správu vstupov

Vytvorené: 24. 8. 2025 08:48 Aktualizované: 27. 8. 2025 13:15
Vyriešené
Obsah článku

title: "RFID Entry Manager - Systém pre správu vstupov"
slug: "rfid-entry-manager-nette-sqlite"
technologies: ["PHP", "Nette Framework", "SQLite", "REST API", "JavaScript", "Python"]
tags: ["rfid", "access-control", "nette", "php", "sqlite", "api", "iot"]
date_solved: "2025-08-21"

Projekt/Téma: RFID Entry Manager - Systém pre správu vstupov

  1. Cieľ / Problém na vyriešenie: Vytvoriť webovú aplikáciu a súvisiace API na správu a monitorovanie prístupového systému založeného na RFID technológii pre wellness prevádzku. Aplikácia musí zabezpečiť registráciu a odregistráciu RFID náramkov (tagov), overovať oprávnenosť prístupu v reálnom čase a logovať všetky udalosti.

  2. Použité technológie a nástroje:

    • Backend: PHP, Nette Framework
    • Databáza: SQLite (súborová databáza)
    • API: REST API pre komunikáciu s externými zariadeniami
    • Externé klienty: Desktopová aplikácia v Pythone (pre recepciu), hardvérový RFID zámok (pravdepodobne mikrokontrolér ako ESP8266/ESP32).
  3. Kľúčové postupy a konfiguračné kroky:

    • Pracovný postup (Workflow): Aplikácia digitalizuje celý proces návštevy wellnessu:
      1. Recepcia (Python App): Personál pomocou desktopovej aplikácie a USB čítačky zaregistruje RFID náramok zákazníka cez POST /api/get (action: register). Záznam sa uloží do tabuľky registrations.
      2. Vstup (RFID Zámok): Zákazník priloží náramok k zámku. Zámok zavolá POST /api/check s UID tagu. Aplikácia overí, či existuje aktívna registrácia a vráti odpoveď access_granted alebo access_denied. Pokus je zalogovaný do access_logs.
      3. Recepcia (Python App): Po skončení pobytu personál odregistruje náramok cez POST /api/get (action: unregister). Záznam v registrations je ukončený a náramok je voľný.
    • Databázová schéma: Systém využíva normalizovanú schému pre oddelenie zodpovedností:
      • registrations: Uchováva len aktuálne aktívne alebo nedávno ukončené pobyty.
      • tags: Definuje metadáta a typy tagov (štandardný, admin, manager), čo umožňuje granulárne riadenie prístupu.
      • access_logs: Slúži ako nemenný, historický záznam všetkých prístupových pokusov.
    • Databázové migrácie: Aplikácia využíva vlastný, interný migračný mechanizmus v App\Model\Settings::configInit(), ktorý pri štarte overí a prípadne aktualizuje schému databázy.
    • Administrácia: Webové rozhranie poskytuje plnú CRUD správu pre tagy, vrátane prideľovania aliasov a typov. Implementovaná je funkcia "Promovať zamietnutý prístup", ktorá zjednodušuje pridávanie nových tagov priamo z logu neúspešných pokusov.
    • Analytika: Aplikácia obsahuje modul pre štatistiky, ktorý vizualizuje dáta z access_logs a registrations (napr. aktuálna obsadenosť, pomery úspešných a zamietnutých prístupov).
  4. Výsledné kódy a skripty:

    • API (v ApiPresenter.php): Kľúčové endpointy pre fungovanie systému:
      • POST /api/get (registrácia/odregistrácia)
      • POST /api/check (overenie prístupu)
    • Dátový model (v app/Model/):
      • Registration.php: Logika pre prácu s aktuálnymi pobytmi.
      • Tag.php: Logika pre prácu s metadátami tagov.
      • AccessLog.php: Logika pre zápis a čítanie historických záznamov.
      • Settings.php: Obsahuje interný migračný mechanizmus databázy.
  5. Zistené problémy a riešenia (Gotchas):

    • Problém: Pôvodná databázová štruktúra (entries) miešala aktuálne stavy s historickými logmi, čo bolo neprehľadné a neefektívne.
    • Riešenie: Refaktoring databázy – rozdelenie na registrations (aktuálny stav), access_logs (história) a tags (metadáta).
    • Problém: Napevno zakódované "admin" karty v kóde predstavovali bezpečnostné riziko a boli neflexibilné.
    • Riešenie: Odstránenie hardcoded hodnôt a implementácia správy typov tagov (admin, manager) priamo v databáze cez tabuľku tags a UI administrácie.
    • Problém: Zabezpečenie kontinuity prevádzky pri zachovaní spätnej kompatibility API.
    • Riešenie: Počas refaktoringu bolo kľúčové zachovať existujúce API endpointy a ich JSON štruktúry, pretože hardvér (Python aplikácia, RFID zámky) nebolo možné jednoducho aktualizovať.
  6. Finálny výsledok / Záver: Aplikácia je plne funkčná a nasadená v produkcii. Poskytuje spoľahlivý systém pre správu vstupov, ktorý nahradil pôvodné nespoľahlivé riešenie. Má webové rozhranie pre administráciu, logovanie a základné štatistiky. Existuje jasný plán pre ďalší rozvoj, ktorý zahŕňa pokročilejšiu analytiku a CLI nástroje.

Vyriešené: 21. 8. 2025