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
-
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.
-
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).
-
Kľúčové postupy a konfiguračné kroky:
- Pracovný postup (Workflow): Aplikácia digitalizuje celý proces návštevy wellnessu:
- 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ľkyregistrations. - Vstup (RFID Zámok): Zákazník priloží náramok k zámku. Zámok zavolá
POST /api/checks UID tagu. Aplikácia overí, či existuje aktívna registrácia a vráti odpoveďaccess_grantedaleboaccess_denied. Pokus je zalogovaný doaccess_logs. - Recepcia (Python App): Po skončení pobytu personál odregistruje náramok cez
POST /api/get(action:unregister). Záznam vregistrationsje ukončený a náramok je voľný.
- Recepcia (Python App): Personál pomocou desktopovej aplikácie a USB čítačky zaregistruje RFID náramok zákazníka cez
- 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_logsaregistrations(napr. aktuálna obsadenosť, pomery úspešných a zamietnutých prístupov).
- Pracovný postup (Workflow): Aplikácia digitalizuje celý proces návštevy wellnessu:
-
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.
- API (v
-
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) atags(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ľkutagsa 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ť.
- Problém: Pôvodná databázová štruktúra (
-
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.