RFID System Overview
Parlevel uses UHF RFID (860–960 MHz, EPC Gen 2) to track inventory in real time. Tags are attached to bottles, kegs, or other assets. Readers detect tags passively — no battery required in the tags.
Components
| Component | Role |
|---|---|
| Chainway U300 | Multi-port UHF RFID reader. Reads EPC, TID, and user/reserved banks |
| U300 Relay APK | Android bridge app. Polls reader → forwards events to Parlevel |
| Parlevel App | Stores events, classifies fluid levels, displays live inventory |
| Supabase | Persistent store for tag assignments, events, and per-location config |
Tag data banks
Each EPC Gen 2 RFID tag has four memory banks:
| Bank | Purpose | Used for |
|---|---|---|
| EPC | Tag identifier (12–24 bytes) | Primary product identifier in Parlevel |
| TID | Chip serial number (read-only) | Identifying tag family (e.g. AZN3120-AFR) |
| User | General purpose storage | Not currently used |
| Reserved | Kill/access passwords + sensor data | Moisture/fluid level (word 12) |
Event flow
Reader detects tag
│
▼
Relay APK polls /inventory
│
▼
POST /api/rfid/u300/ingest (tag EPC + metadata)
│
▼
Parlevel saves rfid_event row
│
├──► Zone/Storeroom inventory updates
│
└──► Moisture poll reads Reserved bank word 12
│
▼
classifyFromHistory() → fluid level badgePer-location configuration
Every RFID setting can be overridden per location via the RFID tab in the location settings page. This includes:
- U300 reader URL and relay token
- Ingest endpoint and key
- RF link profile and antenna power
- Which antenna ports are active (1–8)
- Tag family for moisture sensing
- Kill password
See Environment Variables for the full list and priority order.