diff --git a/wiki/concepts/entry-exit-readers.md b/wiki/concepts/entry-exit-readers.md index 3d83211..27ee7c6 100644 --- a/wiki/concepts/entry-exit-readers.md +++ b/wiki/concepts/entry-exit-readers.md @@ -22,6 +22,12 @@ There are **two populations** of users, and they map to **two integration paths* | [[wiegand]] reader → UHPPOTE port | The controller | Controller (onboard card list) | **Yes** — works if host down | | Pure TCP/IP reader | Host only | Host, then UDP `open` to relay | No — host on critical path | | [[lpr-camera|LPR]] / QR scanner | Host only | Host | No | +| **[[gee-qr-er80]] QR reader (serial)** | Host only | Host (reads serial → `read` bus) | No | + +> Concrete host-side reader on hand: the **[[gee-qr-er80]]** (QR over RS-232/RS-485). Note autonomy +> is moot here anyway — the current relay ([[dingtian-relay]]) has **no onboard card list**, so even +> a Wiegand reader would be host-decided. So we take the serial/QR path straight to the host's +> `read` bus. ## Key points diff --git a/wiki/concepts/ticket-encoding.md b/wiki/concepts/ticket-encoding.md index 83c2020..e573285 100644 --- a/wiki/concepts/ticket-encoding.md +++ b/wiki/concepts/ticket-encoding.md @@ -37,6 +37,9 @@ must have: - The **scanner is a device behind an adapter** ([[device-adapter-pattern]]): a new `ReaderDevice` kind (QR/barcode imager) — likely the same `IdentitySource = "ticket"` / `"qr"` path. Keeps the app device-agnostic; hardware model is procurement ([[bom]], [[open-questions]]). + - **On hand:** the **[[gee-qr-er80]]** QR access reader (`-Q-W`: QR scanner, Wiegand/RS-232/RS-485, + Linux-supported) — the concrete scanner for this path. A serial `ReaderDevice` adapter feeds the + `read` bus; pending the reader's RS-232 frame/baud (see [[gee-qr-er80]] open questions). ## Ticketless alternative (plate as the ticket) diff --git a/wiki/entities/gee-qr-er80.md b/wiki/entities/gee-qr-er80.md new file mode 100644 index 0000000..03f68c8 --- /dev/null +++ b/wiki/entities/gee-qr-er80.md @@ -0,0 +1,59 @@ +--- +type: entity +tags: [parking, hardware, readers, qr] +sources: [gee-qr-er80] +updated: 2026-06-16 +status: open +--- + +# GEE-QR-ER80 (QR access reader) + +The project's **QR-code reader** (GEE NFC LIMITED). A static optical scanner for **QR / +DataMatrix / 1D barcode**, optional ID/IC card. This is the **[[ticket-encoding|QR ticket]] +scanner** the design called for — read at the pay station and exit lane — and a path for **QR +[[permit]]** credentials. On hand: variant **`-Q-W`** (QR scanner; Wiegand/RS-232/RS-485). +(See [[gee-qr-er80|datasheet summary]] / `raw/`.) + +## What it is (and isn't) + +- **Optical, not RFID-prox.** Earlier we *assumed* "ER80-EM" = a 125 kHz EM4100 card reader — the + datasheet corrects that: it's a **QR/barcode scanner**. The `-EM` in the original label was a + mis-id; the real model is **GEE-QR-ER80**. Optional `D`/`C` variants add ID/IC card, but the unit + on hand is **QR-only** (`-Q`). +- **Multi-interface** (Wiegand 26/34, RS-232, RS-485, USB, TCP/IP); the `-W` variant exposes + **Wiegand + RS-232/RS-485**. + +## How it fits our architecture — host-side reader + +It's a **host-side identity source** ([[entry-exit-readers]]): the host sees the scan, decides, and +commands the relay — exactly the model the read-driven flows already use. A scan becomes a +`DeviceReadEvent` on the internal `read` bus (`kind: "qr"`/`"ticket"`, value = the scanned string), +consumed by the **exit flow** and the **QR-permit** path ([[parking-session]], [[permit]]) — both +**already built**. So integration is a new **`ReaderDevice` adapter**, no business-logic change +([[device-adapter-pattern]]). + +- **Interface choice:** prefer **RS-232/RS-485 (serial)** for the QR variant — Wiegand can't carry a + variable-length QR string well (it's built for fixed-width card IDs). The host reads scans over a + serial port (USB-serial on TX/RX, or the USB variant); no Wiegand-decode hardware needed. This + suits [[offline-first]] (local serial, no network) and sidesteps the [[dingtian-relay|Dingtian]]'s + lack of an onboard card list (we never wanted autonomy here anyway). +- **LED/BEEP control lines** mean the host can drive scan feedback (accepted/rejected) — nice for an + unmanned lane. +- **Linux-supported**, 4–15 VDC — fits the [[disk-os-hardening|appliance]]. + +## Open questions (block the adapter) + +1. **RS-232/RS-485 protocol:** baud rate + frame format, and confirm a QR scan emits as an **ASCII + string** (expected) terminated by CR/LF vs. a framed/checksummed protocol. This is the one fact + the adapter needs and the datasheet omits. Resolve via vendor docs or by observing the port on a + scan. +2. **Serial vs. USB-CDC vs. TCP/IP** for *this* unit: `-W` is Wiegand/RS-232/485. Decide the host + wiring (a USB-RS232/485 adapter on TX/RX, most likely). +3. **Does Wiegand mode even carry QR?** Likely Wiegand is for the optional *card* modes only; confirm + so we don't design a Wiegand path for QR. + +## Next + +A `ReaderDevice` driver in `packages/devices` (serial transport) emitting `read` events. Add it to +the [[device-registry]] under the `reader` category so the [[first-run-setup]] wizard can assign it +per lane. Pending open-question #1 (the serial frame) before coding. diff --git a/wiki/index.md b/wiki/index.md index 0595f78..ea83e78 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -7,7 +7,7 @@ updated: 2026-06-14 # Index Content catalog for the wiki. Start at [[overview]]. Maintained on every ingest. -Counts: 1 source · 18 entities · 24 concepts · 5 decision records. +Counts: 2 sources · 19 entities · 24 concepts · 5 decision records. ## Overview & navigation - [[overview]] — the top-level synthesis and entry point. @@ -16,6 +16,7 @@ Counts: 1 source · 18 entities · 24 concepts · 5 decision records. ## Sources - [[parking-system-architecture]] — design notes: stack, threat model, devices, UHPPOTE, ESP32, readers, BOM, open decisions. +- [[gee-qr-er80]] — datasheet: GEE QR access reader (QR/DM/1D; Wiegand/RS-232/485/USB/TCP; Linux). ## Entities — technology stack - [[technology-stack]] — the full stack table; all MIT/Apache/BSD, chosen to avoid lock-in. @@ -37,6 +38,7 @@ Counts: 1 source · 18 entities · 24 concepts · 5 decision records. - [[atecc608]] — secure element; non-extractable signing key (host events + controller auth). - [[wiegand]] — reader standard feeding the controller directly (autonomous permit-holder path). - [[lpr-camera]] — edge-AI plate recognition; host-side casual-identity source. +- [[gee-qr-er80]] — QR access reader on hand; host-side serial → `read` bus (the QR-ticket scanner). - [[zkteco-controller]] — ❌ rejected/historical; aux-input path was a contender, not pursued. - [[dingtian-relay]] — ✅ CHOSEN access controller; decoupled inputs solve the button blocker (driver verified on hardware). - [[rongta-printer]] — ✅ CHOSEN 80mm thermal printer; ESC/POS over raw TCP 9100; driver written, one unit reachable at 10.0.10.6. diff --git a/wiki/log.md b/wiki/log.md index f9093ee..cc713f5 100644 --- a/wiki/log.md +++ b/wiki/log.md @@ -607,3 +607,19 @@ guarantee. Recorded in [[dingtian-relay]] (new Hardening section). free −1); exit frees a slot; routes RBAC (op can't set, −5→400, set/clear ok); verifyChain ok. Full build 5/5. Physical FULL-sign relay output deferred. - Updated [[capacity-occupancy]] (as-built). + +## [2026-06-16] ingest | GEE-QR-ER80 QR access reader datasheet +- User has the reader; ingested `raw/GEE-QR-ER80 QR Code Access Control Reader.pdf`. +- CORRECTION: earlier guessed "ER80-EM" = a 125 kHz EM4100 prox-card reader. WRONG — the datasheet + shows **GEE-QR-ER80**, a **QR / DataMatrix / 1D barcode** optical access reader (optional ID/IC + card). It's the [[ticket-encoding|QR ticket]] scanner the design already needed, not a card reader. +- Specs: interfaces Wiegand 26/34 · RS-232 · RS-485 · USB · TCP/IP; 4–15 VDC <800 mA; 360°; + Windows + **Linux**; wiring VCC/GND/D0/D1/TX(R+)/RX(R-)/LED/BEEP. On hand: **`-Q-W`** (QR scanner; + Wiegand/RS-232/RS-485). +- Fit: host-side reader → a serial `ReaderDevice` adapter emitting `read` events → consumed by the + already-built exit flow + QR-permit path. Prefer RS-232/485 (serial) over Wiegand (Wiegand can't + carry variable-length QR; autonomy moot since [[dingtian-relay]] has no onboard ACL). +- New: source [[gee-qr-er80]] summary + entity [[gee-qr-er80]]. Updated [[ticket-encoding]], + [[entry-exit-readers]], [[index]]. +- OPEN (blocks the adapter): the RS-232/485 **frame + baud** — is a QR scan an ASCII CR/LF string + (expected) or framed? Datasheet omits it; resolve via vendor docs or by observing the port. diff --git a/wiki/raw/GEE-QR-ER80 QR Code Access Control Reader.pdf b/wiki/raw/GEE-QR-ER80 QR Code Access Control Reader.pdf new file mode 100644 index 0000000..eca161c Binary files /dev/null and b/wiki/raw/GEE-QR-ER80 QR Code Access Control Reader.pdf differ diff --git a/wiki/sources/gee-qr-er80.md b/wiki/sources/gee-qr-er80.md new file mode 100644 index 0000000..c7dd832 --- /dev/null +++ b/wiki/sources/gee-qr-er80.md @@ -0,0 +1,37 @@ +--- +type: source +tags: [parking, hardware, readers, qr, datasheet] +sources: [gee-qr-er80] +updated: 2026-06-16 +--- + +# Source: GEE-QR-ER80 QR Code Access Control Reader (datasheet) + +Vendor datasheet (GEE NFC LIMITED, ©2007–2019) for the **GEE-QR-ER80** — a static +**QR-code access-control reader**, optional ID/IC card. The reader the project has +on hand for the [[ticket-encoding|QR ticket]] path. Raw: +`raw/GEE-QR-ER80 QR Code Access Control Reader.pdf` (3 pages). Entity: [[gee-qr-er80]]. + +## Key takeaways + +- **Optical scanner**, not a prox-card reader: reads **QR, DataMatrix, 1D barcode** (static). + Optional add-ons for **IC card UID / ID card**. +- **Multi-interface:** **Wiegand 26/34, RS-232, RS-485, USB, TCP/IP** — selectable by variant. +- **Power:** 4–15 VDC, < 800 mA. **Read direction:** 360°. Built-in scanner LED. +- **OS:** Windows XP/7/8/10 **and Linux** (explicit) — fits the [[disk-os-hardening|Linux appliance]]. +- **Wiring (Wiegand/RS-232/485 variant):** VCC(+12V), GND, **D0/D1** (Wiegand), **TX/R+ , RX/R-** + (RS-232 / RS-485), plus **LED** and **BEEP** control lines (host can drive feedback). +- **Order code** `GEE-QR-ER80--`: `Q`=QR scanner / `D`=ID reader / `C`=IC reader; + `W`=WG·RS232·RS485 / `U`=USB / `T`=RJ45 (TCP/IP). **On hand: `-Q-W`** (QR scanner; Wiegand/RS-232/RS-485). + +## Section map + +- p1 — overview, physical + feature table (interfaces, power, read direction). +- p2 — supported types (QR/DM/1D + optional IC/ID), OS, environment; **wire definition** (pin table). +- p3 — order-code breakdown, applications (access control / vacation rentals / time attendance). + +## Not in this datasheet (open) + +- The **RS-232/RS-485 data protocol**: baud rate, frame format, and whether a QR scan is emitted as + an **ASCII string** (expected) vs. some framed protocol. Decides the host-side adapter — see + [[gee-qr-er80]] open questions. Resolve by vendor docs or by observing the port on a scan.