--- type: entity tags: [parking, hardware, access-control, current-choice] sources: [parking-system-architecture] updated: 2026-06-14 --- # UHPPOTE Controller (current choice) The starting access-control hardware: a **UHPPOTE Wiegand 26/34 network controller (4-door)** — a cheap reader-plus-relay frontend, acceptable **provided you understand its limits**. The plan is UHPPOTE now → ZKTeco later (see [[bom]]). (See [[parking-system-architecture]] §6.) ## What it is - Combines reader input ([[wiegand]]) and door relays, with an onboard card list enabling **autonomous offline decisions** for Wiegand lanes. - Stores an **indexed event log** (see [[event-log-ingestion]]): `get-events` returns the stored range + current index; each record has event ID, timestamp, card number, door, access-granted flag, reason code. **At the record level it's effectively append-only** — no command edits/deletes an individual event. ## The catch It speaks the [[uhppote-udp-protocol]]: **UDP port 60000, no auth, no encryption**. Anyone on the LAN can open any door — and several unauthenticated commands can blind/reset/skew the log. So the device is **tamper-evident, not tamper-proof**, and only trustworthy behind [[network-isolation]] (mandatory). **Firmware cannot be customized** — the open-source `uhppoted` ecosystem is protocol reverse-engineering only; the controller accepts only the manufacturer's official firmware images. Make the log trustworthy via [[event-log-ingestion]] (host-side index tracking) landing into the [[append-only-event-chain]]. For prevention-grade authentication, see the [[esp32-custom-controller]]. The choice between them is the [[trust-boundary]] decision.