PyDMP¶
PyDMP is a platform-agnostic Python library for controlling DMP (Digital Monitoring Products) alarm panels over TCP/IP — dual async/sync APIs, high-level panel/area/zone abstractions, built-in rate limiting, and real-time S3 event handling. No vendor lock-in.
Guide
Getting started
Installation, connecting to a panel, and the command flow.
Guide
CLI
Drive panels from the command line with the bundled CLI.
Guide
Realtime status (S3)
Run the S3 status server and parse live panel events.
Guide
Encryption & user data
User code decryption and remote key behavior.
Reference
Panel compatibility
Tested panels and community compatibility reports.
Reference
API reference
Panel, entities, protocol, and the S3 server — generated from docstrings.
Installation¶
pip install pydmp
# CLI
pip install pydmp[cli]
# Docs tooling (to build the API reference locally)
pip install pydmp[docs]
Quick Start (Async)¶
import asyncio
from pydmp import DMPPanel
async def main():
panel = DMPPanel()
await panel.connect("192.168.1.100", "00001", "YOURKEY")
# Pull status (connect() is side-effect free)
await panel.update_status()
areas = await panel.get_areas()
zones = await panel.get_zones()
# Control
await areas[0].arm(bypass_faulted=False, force_arm=False, instant=None)
await areas[0].disarm()
# Outputs
outs = await panel.get_outputs()
await outs[0].pulse()
await panel.disconnect()
asyncio.run(main())
Realtime Status (S3)¶
import asyncio
from pydmp import DMPStatusServer, parse_s3_message
async def run():
server = DMPStatusServer(host="127.0.0.1", port=5001)
server.register_callback(lambda msg: print(parse_s3_message(msg)))
await server.start()
await asyncio.sleep(3600)
asyncio.run(run())
Migration¶
Upgrading from an earlier version? See the migration guide for breaking API changes.