Rev 2026-07-30 TCEC Access Control System Documentation

CHAPTER 03Software Components

All software layers from Home Assistant OS through to ESPHome firmware and third-party services.

3.1 Platform

SoftwareDetailAccess
Home Assistant OSHAOS on Pi 5192.168.191.121:8123 · ha.tcec.ca
AppDaemonHA addon (a0d7b954_appdaemon)HA → Settings → Add-ons → AppDaemon
ESPHomeHA addonHA → Settings → Add-ons → ESPHome
Mosquitto MQTTHA addonBroker on 192.168.191.121:1883
Nabu CasaCloud remote access / SSLha.tcec.ca · prox.tcec.ca
Blue Iris NVRWindows app on 192.168.191.80192.168.191.80:8081 (admin requires desktop app)
Viking PC SoftwareWindows — COM port directory uploadSystem Administrator workstation

3.2 AppDaemon Applications

App NameClassModule FilePurpose
prox_cardProxCardprox_card.pyCore access logic — MQTT listener, SQLite lookup, strike control, TTS
prox_uiProxUIprox_ui.pyFull web app — tenant/company/door/group/key management, access log, arm/disarm, passwordless SMS admin login (20+ endpoints), snapshot and manual serving
motion_monitorMotionMonitormotion_monitor.pyCamera motion event handler
VikingEntryLogger(planned)viking_entry_logger.pyViking C-4000 LOG BUS serial reader — not yet deployed
hello_worldHelloWorldhello.pyDiagnostic placeholder — safe to remove
Patch App Pattern: HTML modifications use a temporary AppDaemon app that edits the target file, runs once, then is removed. See Chapter 6.

3.3 ESPHome Devices

HostnameBoardConnectionReaders / OutputsMQTT Topic
wiegand-readersFreenove ESP32-WROOM #1 (192.168.191.64)WiFi EIS.local7 readers: 123b, boardroom, main_entrance, back_entrance, suite_122, kitchen_hallway, 123dwoodhaven/prox/scan
wiegand-readers-2Freenove ESP32-WROOM #2 (192.168.191.73)WiFi EIS.local4 readers: 123c, 123e, server_room, arm_station (j11) — plus 1 spare header (j12)woodhaven/prox/scan
access-controlWaveshare ESP32-S3, W5500 Ethernet192.168.191.1007 relay switch entities (strikes for Freenove #1 doors)ESPHome native API
access-control-2Waveshare ESP32-S3, W5500 Ethernet192.168.191.1013 relay switch entities (strikes for Freenove #2 doors)ESPHome native API
MQTT Topic Prefix: All Wiegand boards publish to woodhaven/prox/scan — a historical prefix. Do not change it without updating all ESPHome configs simultaneously.

3.4 Third-Party Services

ServicePurposeConfig Location
TwilioSMS — passwordless admin login magic links, and notifications from prox_card / motion_monitorapps.yaml → prox_ui + prox_card + motion_monitor (twilio_sid, twilio_token, twilio_from)
ElevenLabs TTSPrimary voice — Sigma Centauri (bAq8AI9QURijOtmeFFqT), model eleven_turbo_v2_5apps.yaml → prox_card + prox_ui
Google TTSFallback if ElevenLabs API unavailableBuilt into prox_card.py
Google CastAudio delivery to Nest MiniHA media_player entity
Nabu CasaSSL reverse proxy for ha.tcec.ca and prox.tcec.ca (HTTPS only — does not forward SSH)HA → Settings → Home Assistant Cloud
Admin login: prox.tcec.ca uses passwordless SMS login (no passwords stored). An admin enters their phone number at /app/admin_login, receives a magic link via Twilio SMS, and the confirming device is remembered as a trusted device. See Chapter 5 and Chapter 8 for admin accounts.
← Previous2 · HardwareNext →4 · Configuration