U300 Reader
The Chainway U300 is a multi-port UHF RFID reader that communicates over a local HTTP API (port 5000 by default). Parlevel talks to it through the U300 Relay APK — the app never calls the reader directly.
Specifications
| Spec | Value |
|---|---|
| Frequency | 860–960 MHz (UHF, EPC Gen 2) |
| Antenna ports | Up to 8 (model dependent) |
| Antenna power | 1–30 dBm (configurable per port) |
| API | HTTP REST on port 5000 |
| Bank reads | EPC, TID, User, Reserved |
RF Link profiles
The RF link profile controls the modulation, encoding, and backscatter frequency. Parlevel defaults to profile 1.
| Profile | Mode | Encoding | Frequency | Notes |
|---|---|---|---|---|
0 | DSB ASK | FM0 | 40 kHz | Fast, short range |
1 | PR ASK | Miller4 | 250 kHz | Default — stable for sensor reads |
2 | PR ASK | Miller4 | 300 kHz | |
5 | PR ASK | Miller8 | 250 kHz | |
10–25 | Various | Various | Various | See U300 docs |
For AZN3120-AFR moisture tags, profile 1 gives the most reliable Reserved bank reads.
Antenna power
Power is set per antenna port (1–30 dBm). Higher power = longer range but more interference.
- 20 dBm — safe default, works for most bar layouts
- 30 dBm — maximum, use when tags are far from the reader or behind glass
Set via the RFID settings UI or U300_ANTENNA_POWER env var.
Relay APK endpoints used
Parlevel uses these U300 relay endpoints:
| Method | Path | Purpose |
|---|---|---|
GET | /status | Reader status, scanning state, configured antennas |
GET | /inventory | Live tag list (EPC + RSSI) |
POST | /ingest/start | Start polling and forwarding events |
POST | /ingest/stop | Stop polling |
POST | /antennas/mask | Set which antenna ports are active |
POST | /antennas/power | Set TX power for a port |
GET | /antennas/status | Currently configured antenna ports |
POST | /rflink | Set RF link profile |
POST | /banks/read/batch | Read a memory bank from multiple tags in one cycle |
POST | /buzzer/mute | Mute the reader buzzer |
POST | /buzzer/unmute | Unmute the reader buzzer |
bankReadLock — new APK requirement
Older relay APK builds allowed concurrent bank reads which could crash the inventory cycle (scanning: false). The new APK serializes all bank reads behind a ReentrantLock (fair queue). Always use the latest APK for reliable bank reads.
If bank reads cause issues on an older APK, set skipTidReads: true in the location RFID config — this skips TID reads entirely and treats all tags as the configured family.