Panel API
DMPPanel
DMPPanel(port: int = DEFAULT_PORT, timeout: float = 10.0)
High-level async interface to DMP panel.
Initialize panel.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
port
|
int
|
TCP port (default: 2011) |
DEFAULT_PORT
|
timeout
|
float
|
Connection timeout in seconds |
10.0
|
port
instance-attribute
port = port
timeout
instance-attribute
timeout = timeout
is_connected
property
is_connected: bool
Check if connected to panel.
connect
async
connect(host: str, account: str, remote_key: str) -> None
Connect to panel and authenticate.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
host
|
str
|
Panel IP address or hostname |
required |
account
|
str
|
5-digit account number |
required |
remote_key
|
str
|
Remote key for authentication |
required |
Raises:
| Type | Description |
|---|---|
DMPConnectionError
|
If connection fails |
disconnect
async
disconnect() -> None
Disconnect from panel.
update_status
async
update_status() -> None
Update status of all areas and zones from panel.
Raises:
| Type | Description |
|---|---|
DMPConnectionError
|
If not connected or update fails |
get_areas
async
get_areas() -> list[Area]
Get all areas.
Returns:
| Type | Description |
|---|---|
list[Area]
|
List of Area objects |
Raises:
| Type | Description |
|---|---|
DMPConnectionError
|
If not connected |
get_area
async
get_area(number: int) -> Area
Get specific area by number.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
number
|
int
|
Area number (1-8) |
required |
Returns:
| Type | Description |
|---|---|
Area
|
Area object |
Raises:
| Type | Description |
|---|---|
DMPConnectionError
|
If not connected |
KeyError
|
If area not found |
get_zones
async
get_zones() -> list[Zone]
Get all zones.
Returns:
| Type | Description |
|---|---|
list[Zone]
|
List of Zone objects |
Raises:
| Type | Description |
|---|---|
DMPConnectionError
|
If not connected |
get_zone
async
get_zone(number: int) -> Zone
Get specific zone by number.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
number
|
int
|
Zone number (1-999) |
required |
Returns:
| Type | Description |
|---|---|
Zone
|
Zone object |
Raises:
| Type | Description |
|---|---|
DMPConnectionError
|
If not connected |
KeyError
|
If zone not found |
get_outputs
async
get_outputs() -> list[Output]
Get all outputs.
Note: Outputs are created on-demand; prefer calling update_output_status() first to populate real states from the panel.
Returns:
| Type | Description |
|---|---|
list[Output]
|
List of Output objects |
get_output
async
get_output(number: int) -> Output
Get specific output by number.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
number
|
int
|
Output number (1-999) |
required |
Returns:
| Type | Description |
|---|---|
Output
|
Output object |
Raises:
| Type | Description |
|---|---|
KeyError
|
If output number invalid |
update_output_status
async
update_output_status() -> None
Fetch output status from panel (*WQ) and update known outputs.
The panel returns a stream of output entries in frames. We request the initial page for output 001, then continue with '?WQ' a few times to collect subsequent chunks.
Note: Many residential installations only use outputs 1-4.
sensor_reset
async
sensor_reset() -> None
Send sensor reset command to the panel (!E001).
get_user_codes
async
get_user_codes() -> list[UserCode]
Retrieve all user codes from the panel (decrypting entries).
get_user_profiles
async
get_user_profiles() -> list[UserProfile]
Retrieve all user profiles from the panel.
check_code
async
check_code(code: str, *, include_pin: bool = True, refresh_if_missing: bool = True) -> UserCode | None
Check if a user code (or PIN) exists in the panel.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
code
|
str
|
The code/PIN string to validate |
required |
include_pin
|
bool
|
If True, also match against PIN codes |
True
|
refresh_if_missing
|
bool
|
If True, refresh cache on miss and retry once |
True
|
Returns:
| Type | Description |
|---|---|
UserCode | None
|
Matching UserCode or None if not found |
attach_status_server
attach_status_server(server: Any) -> None
Attach a DMPStatusServer to auto-refresh user cache on Zu events.
When the server receives a User Codes (Zu) event, the panel will refresh its user cache in the background. Call detach_status_server to remove.
detach_status_server
detach_status_server(server: Any) -> None
Detach a previously attached DMPStatusServer.
start_keepalive
async
start_keepalive(interval: float = 10.0) -> None
Start periodic keep-alive (!H) while connected.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
interval
|
float
|
Seconds between keep-alive messages (default: 10) |
10.0
|
stop_keepalive
async
stop_keepalive() -> None
Stop periodic keep-alive if running.
arm_areas
async
arm_areas(area_numbers: list[int] | tuple[int, ...], bypass_faulted: bool = False, force_arm: bool = False, instant: bool | None = None) -> None
Arm one or more areas in a single command.
Concatenates two-digit area numbers per DMP format and sends !C{areas},{bypass}{force}.
disarm_areas
async
disarm_areas(area_numbers: list[int] | tuple[int, ...]) -> None
Disarm one or more areas in a single command: !O{areas}.
DMPPanelSync
DMPPanelSync(port: int = DEFAULT_PORT, timeout: float = 10.0)
High-level synchronous interface to DMP panel.
Initialize sync panel.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
port
|
int
|
TCP port (default: 2011) |
DEFAULT_PORT
|
timeout
|
float
|
Connection timeout in seconds |
10.0
|
is_connected
property
is_connected: bool
Check if connected to panel.
connect
connect(host: str, account: str, remote_key: str) -> None
Connect to panel and authenticate.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
host
|
str
|
Panel IP address or hostname |
required |
account
|
str
|
5-digit account number |
required |
remote_key
|
str
|
Remote key for authentication |
required |
disconnect
disconnect() -> None
Disconnect from panel.
update_status
update_status() -> None
Update status of all areas and zones from panel.
get_areas
get_areas() -> list[AreaSync]
get_area
get_area(number: int) -> AreaSync
Get specific area by number.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
number
|
int
|
Area number (1-8) |
required |
Returns:
| Type | Description |
|---|---|
AreaSync
|
AreaSync object |
get_zones
get_zones() -> list[ZoneSync]
get_zone
get_zone(number: int) -> ZoneSync
Get specific zone by number.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
number
|
int
|
Zone number (1-999) |
required |
Returns:
| Type | Description |
|---|---|
ZoneSync
|
ZoneSync object |
get_outputs
get_outputs() -> list[OutputSync]
get_output
get_output(number: int) -> OutputSync
Get specific output by number.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
number
|
int
|
Output number (1-4) |
required |
Returns:
| Type | Description |
|---|---|
OutputSync
|
OutputSync object |