Northern Ballet Technical

RFID Network Reader Dashboard

4 online
16 offline
Reader status refreshes every 15s
RFID Bridge Setup Guide
S4A UHF-202420
v25 / v26 Multi

Run a small Python script on any PC on your network. It reads tags from the reader, sends them to the app, and provides a local relay API for remote reboot/write commands.

Blank-EPC tags need one-time programming

The S4A reader cannot read TID bank over TCP. Tags with blank EPCs must have their TID written into the EPC bank first using the demo software (USB). Tags that already have E2xx in their EPC (like your LED Batten) work automatically. See Step 3 below.

Scanning flow:

S4A Reader
→ TCP →
Bridge + Relay
→ HTTP →
This App

Reboot/Write commands flow:

This App
→ HTTP →
Bridge Relay
→ TCP →
S4A Reader
1
Install Python
2
Install Python library
3
Program blank tags (one-time)
Required
4
Copy the bridge script (single reader)
5
OR: Multi-reader script (multiple readers, one computer)
6
Edit the settings
7
Run the bridge

Tips:

  • • No prompts — edit the settings at the top of the file before running
  • • Multi-reader (v26) — run up to 4+ readers from one Mac. Edit the READERS list with each IP
  • • Default: 192.168.2.125:49152 — change to match your reader
  • • Relay API — runs on port 8888 by default. Set the relay URL on your reader in Reader Setup (e.g. http://192.168.2.100:8888)
  • • Reboot/Write — now work via the relay! The cloud sends commands to the relay, which forwards them to the reader locally
  • • On Mac use python3 not python
  • • Tag programming — blank-EPC tags need TID written to EPC via USB demo software (one-time per tag)
  • • E2 tags work already — tags where EPC contains E2xx (like LED Batten) need no programming
  • • Batch mode — tags are collected for 2 seconds then sent in one API call (no rate limits)
  • • Duplicate tags within 3 seconds are automatically ignored
  • • Auto-reconnects if connection drops
  • • Find reader IP in your router's DHCP list or S4A demo software
Network Reader API Endpoint
POST https://www.northern-ballet-technical.com/api/functions/processRFIDScan

Configure your network RFID readers to POST JSON to this endpoint with: rfid_code, location, scan_type, reader_id

Live Scan Feed

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
07:13:42

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
07:08:42

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
07:03:41

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
07:03:34

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:58:27

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:53:23

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:48:19

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:43:16

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:38:16

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:33:13

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:28:12

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:23:08

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:18:05

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:13:04

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:08:00

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
06:02:58

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:57:55

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:52:52

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:47:51

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:42:51

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:37:47

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:32:46

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:27:45

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:22:44

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:17:43

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:12:42

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:07:40

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
05:02:36

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:57:27

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:52:24

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:47:22

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:42:18

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:37:11

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:32:08

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:27:08

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:22:04

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:17:02

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:11:59

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:06:54

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
04:01:51

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:56:51

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:51:48

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:46:47

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:41:44

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:36:41

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:31:36

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:26:34

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:21:33

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:16:30

DRYER

E28069150000700ED543A896 • via quarry_hill_reader1

↑ exit
quarry hill
unknown
03:11:30