Skip to content

Protocol

DMPProtocol

DMPProtocol(account_number: str, remote_key: str = '')

DMP protocol encoder/decoder.

Initialize protocol handler.

Parameters:

Name Type Description Default
account_number str

5-digit account number (left-padded with spaces or zeros)

required
remote_key str

Remote key for authentication

''

account_number instance-attribute

account_number = rjust(5)

remote_key instance-attribute

remote_key = remote_key

crypto instance-attribute

crypto = DMPCrypto(account_int, remote_key)

last_nak_detail instance-attribute

last_nak_detail: str | None = None

encode_command

encode_command(command: str, **kwargs: Any) -> bytes

Encode a command for transmission to panel.

Parameters:

Name Type Description Default
command str

Command template (e.g., "!C{area},{bypass}{force}")

required
**kwargs Any

Parameters to substitute into command template

{}

Returns:

Type Description
bytes

Encoded command as bytes

Raises:

Type Description
DMPProtocolError

If command cannot be encoded

decode_response

decode_response(response: bytes) -> str | StatusResponse | UserCodesResponse | UserProfilesResponse | OutputsResponse | None

Decode response from panel.

Parameters:

Name Type Description Default
response bytes

Raw bytes from panel

required

Returns:

Type Description
str | StatusResponse | UserCodesResponse | UserProfilesResponse | OutputsResponse | None
  • ACK/NAK string for command acknowledgments
str | StatusResponse | UserCodesResponse | UserProfilesResponse | OutputsResponse | None
  • StatusResponse for status queries
str | StatusResponse | UserCodesResponse | UserProfilesResponse | OutputsResponse | None
  • None for empty/auth responses

Raises:

Type Description
DMPInvalidResponseError

If response cannot be decoded

StatusResponse dataclass

StatusResponse(areas: dict[str, AreaStatus], zones: dict[str, ZoneStatus])

Combined status response from panel.

areas instance-attribute

areas: dict[str, AreaStatus]

zones instance-attribute

zones: dict[str, ZoneStatus]

UserCodesResponse dataclass

UserCodesResponse(users: list[UserCode], has_more: bool, last_number: str | None)

users instance-attribute

users: list[UserCode]

has_more instance-attribute

has_more: bool

last_number instance-attribute

last_number: str | None

UserProfilesResponse dataclass

UserProfilesResponse(profiles: list[UserProfile], has_more: bool, last_number: str | None)

profiles instance-attribute

profiles: list[UserProfile]

has_more instance-attribute

has_more: bool

last_number instance-attribute

last_number: str | None