This custom integration controls Hartmann Controls Protector.Net and Odyssey door access systems via HTTP + a live SignalR websocket for instant updates.
- Odyssey servers are now supported — auto-detected at runtime (no new options needed).
- Status snapshots (Odyssey only): on connect and ~every 60s we read
/api/Doors/{id}/Statusand normalize to the same payload used by Protector.Net:
- ✅ Cookie login (
ss-id) with automatic re-auth - ✅ Partition selection (imports only your chosen partition)
- ✅ Zero-polling live updates via SignalR
- ✅ Door controls: per-door override UI + Pulse Unlock (+ optional legacy buttons)
- ✅ All Doors Lockdown switch (partition-wide)
- ✅ HA Door Log entries when you use HA buttons (e.g., “Home Assistant unlocked …”)
- ✅ All controls & options in the UI (HACS-friendly)
- ✅ Odyssey servers supported (auto-detect)
HACS (recommended):
- In HACS → Integrations, search for “Protector.Net Access Control” and install.
- Restart Home Assistant.
Manual:
- Copy
custom_components/protector_net/into your Home Assistantconfig/custom_components/. - Restart Home Assistant.
Then go to Settings → Devices & Services → Add Integration → “Protector.Net Access Control”.
- Base URL –
https://host:port - Credentials – a Protector.Net user with sufficient privileges (must be a System Administrator in Hartmann)
- Default override minutes – used for Timed Override
- Partition – select exactly one
- Action Plans – pick trigger plans to clone as System plans (so they can be executed from HA)
Revisit any time: Settings → Devices & Services → Protector.Net → Options.
- Pulse Unlock is always included (not shown in the picker).
- Choose any additional legacy buttons you want; none are pre-selected by default.
- Device:
Hub Status – <Partition> - Entity: Hub Status – (sensor)
State:
running / connecting / idle / stopped / errorAttributes:phase,connected,mapped_doors,partition_id,system_type(“Odyssey” or “ProtectorNET”)
Sensors
- Lock State —
Locked/Unlocked - Overridden —
On/Off - Reader Mode — mapped from controller index:
0/8 Lockdown, 1 Card, 2 Pin, 3 Card or Pin, 4 Card and Pin, 5 Unlock, 6 First Credential In, 7 Dual Credential - Last Door Log by — highlights the last actor; attributes include the last reader/action message/time and the last door message.
Controls
-
Override (switch) — ON applies selected Type + Mode (and minutes if “For Specified Time”); OFF resumes schedule and forces Override Mode = None.
-
Override Type (select) —
For Specified Time/Until Resumed/Until Next Schedule -
Override Mode (select) —
None,Card,Pin,Unlock,Card and Pin,Card or Pin,First Credential In,Dual Credential,Lockdown- OFF ⇒ shows
None; ON ⇒ mirrors the panel’s current reader mode.
- OFF ⇒ shows
-
Override Minutes (number) — used when type is “For Specified Time”
Door Buttons
- Always: Pulse Unlock
- Optional (if selected in Options): Resume Schedule, Unlock Until Resume, Unlock Until Next Schedule, CardOrPin Until Resume, Timed Override Unlock
- Device:
Action Plans – <Partition> - Entities:
Action Plan: <Plan Name>(button) — executes cloned System-type plans.
- Device:
All Doors – <Partition> - Entity: All Doors Lockdown (switch) ON: apply Lockdown override on all doors in the partition. OFF: Resume Schedule across all doors.
-
State becomes the person/app when:
- Access granted/denied events, or
- Action plan messages like “Home Assistant unlocked …”
-
Attributes are stable and minimal:
Reader Message,Reader Message Time(granted/denied or action text + timestamp)Door Message(e.g., “Door is now Locked/Unlocked”)Door ID,Partition ID
Lock/Unlock status messages don’t flip the “by” state (that’s what Lock State is for).
- Sensors didn’t appear previously for “Default Partition” Update to 0.1.7; discovery now correctly loads those doors.
- New: Odyssey servers supported (auto-detect, no config changes).
- New: Odyssey status snapshots on connect and periodically (~60s) to catch schedule flips.
- Improvement: Normalize WS types for
overriddenandtimeZonefrom Odyssey.
- Fix: Last Door Log not updating for some doors – fixed a bug where notifications coming from a reader (instead of directly from the door) were being dropped because the door ID wasn’t in the partition allowlist yet.
- Note: 0.1.9 withdrawn.
- Fix: Reader notifications (including “Reader 2” / in–out readers on the same ODM/TDM) now map cleanly to the right door because we also pull the partition-scoped AvailableReaders API (Reader → DoorId), not just the name.
- Fix: Door sensors now load correctly when the selected partition is named “Default Partition.”
- Reliability: More robust, partition-scoped discovery with safe fallback and retry.
- New: Partition-scoped devices (Hub + Action Plans + All Doors)
- New: All Doors Lockdown switch (partition-wide)
- New: 5 sensors total (Hub Status, Lock State, Overridden, Reader Mode, Last Door Log by)
- New: Per-door Override UI (Switch + Selects + Number), with instant sync
- Change: Legacy buttons refined — Pulse Unlock always; others optional via Options
- Door-action logs (“Home Assistant unlocked …”)
- Plan cloning fixes and reuse; HA Door Log plan
- Action Plans import/execute; options refresh
- Configurable door entities; options flow; base fixes
- Partition selection; session refresh; dynamic titles
- Initial release (doors & basic controls)
Author: Yoel Goldstein / Vaayer LLC