CHAPTER 03Software Components
All software layers from Home Assistant OS through to ESPHome firmware and third-party services.
3.1 Platform
| Software | Detail | Access |
|---|---|---|
| Home Assistant OS | HAOS on Pi 5 | 192.168.191.121:8123 · ha.tcec.ca |
| AppDaemon | HA addon (a0d7b954_appdaemon) | HA → Settings → Add-ons → AppDaemon |
| ESPHome | HA addon | HA → Settings → Add-ons → ESPHome |
| Mosquitto MQTT | HA addon | Broker on 192.168.191.121:1883 |
| Nabu Casa | Cloud remote access / SSL | ha.tcec.ca · prox.tcec.ca |
| Blue Iris NVR | Windows app on 192.168.191.80 | 192.168.191.80:8081 (admin requires desktop app) |
| Viking PC Software | Windows — COM port directory upload | System Administrator workstation |
3.2 AppDaemon Applications
| App Name | Class | Module File | Purpose |
|---|---|---|---|
| prox_card | ProxCard | prox_card.py | Core access logic — MQTT listener, SQLite lookup, strike control, TTS |
| prox_ui | ProxUI | prox_ui.py | Full web app — tenant/company/door/group/key management, access log, arm/disarm, passwordless SMS admin login (20+ endpoints), snapshot and manual serving |
| motion_monitor | MotionMonitor | motion_monitor.py | Camera motion event handler |
| VikingEntryLogger | (planned) | viking_entry_logger.py | Viking C-4000 LOG BUS serial reader — not yet deployed |
| hello_world | HelloWorld | hello.py | Diagnostic 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
| Hostname | Board | Connection | Readers / Outputs | MQTT Topic |
|---|---|---|---|---|
| wiegand-readers | Freenove ESP32-WROOM #1 (192.168.191.64) | WiFi EIS.local | 7 readers: 123b, boardroom, main_entrance, back_entrance, suite_122, kitchen_hallway, 123d | woodhaven/prox/scan |
| wiegand-readers-2 | Freenove ESP32-WROOM #2 (192.168.191.73) | WiFi EIS.local | 4 readers: 123c, 123e, server_room, arm_station (j11) — plus 1 spare header (j12) | woodhaven/prox/scan |
| access-control | Waveshare ESP32-S3, W5500 Ethernet | 192.168.191.100 | 7 relay switch entities (strikes for Freenove #1 doors) | ESPHome native API |
| access-control-2 | Waveshare ESP32-S3, W5500 Ethernet | 192.168.191.101 | 3 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
| Service | Purpose | Config Location |
|---|---|---|
| Twilio | SMS — passwordless admin login magic links, and notifications from prox_card / motion_monitor | apps.yaml → prox_ui + prox_card + motion_monitor (twilio_sid, twilio_token, twilio_from) |
| ElevenLabs TTS | Primary voice — Sigma Centauri (bAq8AI9QURijOtmeFFqT), model eleven_turbo_v2_5 | apps.yaml → prox_card + prox_ui |
| Google TTS | Fallback if ElevenLabs API unavailable | Built into prox_card.py |
| Google Cast | Audio delivery to Nest Mini | HA media_player entity |
| Nabu Casa | SSL 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.