CHAPTER 01System Overview
The TCEC access control system is a Home Assistant-based proximity card platform being built to replace a legacy AS-400 controller at 880 Taylor Creek Drive. Hardware and software for all 11 doors is installed and the new system logs every scan, but the AS-400 remains the live controller for the building — see 1.3 below. It provides full audit logging, voice announcements, and a browser-based management UI.
1.1 Architecture
- Reader layer: ESP32 microcontrollers decode Wiegand card data and publish to MQTT.
- Controller layer: Home Assistant OS on Raspberry Pi 5 (192.168.191.121) receives MQTT events; AppDaemon Python apps execute access logic.
- Data layer: SQLite database (
/config/prox_cards.db) stores tenants, companies, doors, user/door groups and permissions, keys, and access logs. - UI layer: AppDaemon web app at prox.tcec.ca — tenant/company/door/group/key management, access log, arm/disarm, and passwordless SMS admin login.
- Voice layer: ElevenLabs TTS (Sigma Centauri voice) or Google TTS fallback; played through Google Nest Mini in office 122A.
- Kiosk layer: Raspberry Pi 4 (192.168.191.109) runs Chromium in full-screen kiosk mode on the EIS.local WiFi network.
1.2 Signal Flow
→ ESP32 GPIO (pulldown, 26-bit Wiegand format)
→ MQTT publish:
woodhaven/prox/scan→ AppDaemon
prox_card.py — card lookup, group-permission check in SQLite→
access_log row written (Granted / Denied / Armed / Disarmed)→ ElevenLabs TTS announcement → Nest Mini speaker
→ prox.tcec.ca UI updated
1.3 Migration Status
The new system is not yet controlling any doors. The legacy AS-400 remains the live controller for the entire building. Meanwhile, tenant, card, company, and door-group data is being entered and kept up to date in the new database, so that when cutover happens the new system already has current data. Both systems are maintained in parallel until then — any tenant/card change (new tenant, card swap, deactivation) needs to be made in both the AS-400 and prox.tcec.ca for now.
1.4 Covered Doors
All 11 doors below have a reader and relay wired and are recognized by the new system. None are yet firing a physical strike from the new system — see 1.3.
| Door ID | Location | ESP32 Board | GPIO D0/D1 | Exterior |
|---|---|---|---|---|
| 123b | Suite 123B entrance | Freenove #1 | 4 / 5 | |
| boardroom | Boardroom | Freenove #1 | 16 / 17 | |
| main_entrance | Exterior main entrance | Freenove #1 | 18 / 19 | Yes |
| back_entrance | Exterior back entrance | Freenove #1 | 21 / 22 | Yes |
| suite_122 | Suite 122 | Freenove #1 | 25 / 26 | |
| kitchen_hallway | Kitchen hallway | Freenove #1 | 27 / 32 | |
| 123d | Suite 123D | Freenove #1 | 33 / 14 | |
| 123c | Suite 123C | Freenove #2 | 4 / 5 | |
| 123e | Suite 123E | Freenove #2 | 16 / 17 | |
| server_room | Server room | Freenove #2 | 18 / 19 | |
| arm_station | Arming station | Freenove #2 (j11) | 21 / 22 |