pyad2 Package

ad2 Module

Provides the full AD2 class and factory.

class pyad2.ad2.AD2Factory(attached_event=None, detached_event=None)[source]

Bases: object

Factory for creation of AD2USB devices as well as provides attach/detach events.”

on_attached

Called when an AD2USB device has been detected.

on_detached

Called when an AD2USB device has been removed.

classmethod find_all()[source]

Returns all AD2USB devices located on the system.

Returns:list of devices found
Raises :CommError
classmethod devices()[source]

Returns a cached list of AD2USB devices located on the system.

Returns:cached list of devices found.
classmethod create(device=None)[source]

Factory method that returns the requested AD2USB device, or the first device.

Parameters:device (tuple) – Tuple describing the USB device to open, as returned by find_all().
Returns:AD2USB object utilizing the specified device.
Raises :NoDeviceError
close()[source]

Clean up and shut down.

start()[source]

Starts the detection thread, if not already running.

stop()[source]

Stops the detection thread.

get_device(device=None)[source]

Factory method that returns the requested AD2USB device, or the first device.

Parameters:device (tuple) – Tuple describing the USB device to open, as returned by find_all().
class DetectThread(factory)[source]

Bases: threading.Thread

Thread that handles detection of added/removed devices.

stop()[source]

Stops the thread.

run()[source]

The actual detection process.

class pyad2.ad2.AD2(device)[source]

Bases: object

High-level wrapper around AD2 devices.

on_arm

Called when the panel is armed.

on_disarm

Called when the panel is disarmed.

on_power_changed

Called when panel power switches between AC and DC.

on_alarm

Called when the alarm is triggered.

on_fire

Called when a fire is detected.

on_bypass

Called when a zone is bypassed.

on_boot

Called when the device finishes bootings.

on_config_received

Called when the device receives its configuration.

on_zone_fault

Called when the device detects a zone fault.

on_zone_restore

Called when the device detects that a fault is restored.

on_low_battery

Called when the device detects a low battery.

on_panic

Called when the device detects a panic.

on_relay_changed

Called when a relay is opened or closed on an expander board.

on_message

Called when a message has been received from the device.

on_lrr_message

Called when an LRR message is received.

on_rfx_message

Called when an RFX message is received.

on_open

Called when the device has been opened.

on_close

Called when the device has been closed.

on_read

Called when a line has been read from the device.

on_write

Called when data has been written to the device.

F1 = u'\x01\x01\x01'

Represents panel function key #1

F2 = u'\x02\x02\x02'

Represents panel function key #2

F3 = u'\x03\x03\x03'

Represents panel function key #3

F4 = u'\x04\x04\x04'

Represents panel function key #4

BATTERY_TIMEOUT = 30

Timeout before the battery status reverts.

FIRE_TIMEOUT = 30

Timeout before the fire status reverts.

id[source]

The ID of the AD2 device.

Returns:The identification string for the device.
open(baudrate=None, no_reader_thread=False)[source]

Opens the device.

Parameters:
  • baudrate (int) – The baudrate used for the device.
  • no_reader_thread (bool) – Specifies whether or not the automatic reader thread should be started or not
close()[source]

Closes the device.

send(data)[source]

Sends data to the AD2 device.

Parameters:data (str) – The data to send.
get_config()[source]

Retrieves the configuration from the device.

save_config()[source]

Sets configuration entries on the device.

reboot()[source]

Reboots the device.

fault_zone(zone, simulate_wire_problem=False)[source]

Faults a zone if we are emulating a zone expander.

Parameters:
  • zone (int) – The zone to fault.
  • simulate_wire_problem (bool) – Whether or not to simulate a wire fault.
clear_zone(zone)[source]

Clears a zone if we are emulating a zone expander.

Parameters:zone (int) – The zone to clear.

devices Module

Contains different types of devices belonging to the AD2 family.

class pyad2.devices.Device[source]

Bases: object

Generic parent device to all AD2 products.

on_open

Called when the device has been opened

on_close

Called when the device has been closed

on_read

Called when a line has been read from the device

on_write

Called when data has been written to the device

id[source]

Retrieve the device ID.

Returns:The identification string for the device.
is_reader_alive()[source]

Indicates whether or not the reader thread is alive.

Returns:Whether or not the reader thread is alive.
stop_reader()[source]

Stops the reader thread.

close()[source]

Closes the device.

class ReadThread(device)[source]

Bases: threading.Thread

Reader thread which processes messages from the device.

READ_TIMEOUT = 10

Timeout for the reader thread.

stop()[source]

Stops the running thread.

run()[source]

The actual read process.

class pyad2.devices.USBDevice(interface=(None, 0))[source]

Bases: pyad2.devices.Device

AD2USB device exposed with PyFTDI’s interface.

FTDI_VENDOR_ID = 1027

Vendor ID used to recognize AD2USB devices.

FTDI_PRODUCT_ID = 24577

Product ID used to recognize AD2USB devices.

BAUDRATE = 115200

Default baudrate for AD2USB devices.

static find_all()[source]

Returns all FTDI devices matching our vendor and product IDs.

Returns:list of devices
Raises :CommError
interface[source]

Retrieves the interface used to connect to the device.

Returns:the interface used to connect to the device.
serial_number[source]

Retrieves the serial number of the device.

Returns:The serial number of the device.
description[source]

Retrieves the description of the device.

Returns:The description of the device.
open(baudrate=115200, no_reader_thread=False)[source]

Opens the device.

Parameters:
  • baudrate (int) – The baudrate to use.
  • no_reader_thread (bool) – Whether or not to automatically start the reader thread.
Raises :

NoDeviceError

close()[source]

Closes the device.

write(data)[source]

Writes data to the device.

Parameters:data (str) – Data to write
Raises :CommError
read()[source]

Reads a single character from the device.

Returns:The character read from the device.
Raises :CommError
read_line(timeout=0.0, purge_buffer=False)[source]

Reads a line from the device.

Parameters:
  • timeout (float) – Read timeout
  • purge_buffer (bool) – Indicates whether to purge the buffer prior to reading.
Returns:

The line that was read.

Raises :

CommError, TimeoutError

class pyad2.devices.SerialDevice(interface=None)[source]

Bases: pyad2.devices.Device

AD2USB or AD2SERIAL device exposed with the pyserial interface.

BAUDRATE = 19200

Default baudrate for Serial devices.

static find_all(pattern=None)[source]

Returns all serial ports present.

Parameters:pattern (str) – Pattern to search for when retrieving serial ports.
Returns:list of devices
Raises :CommError
interface[source]

Retrieves the interface used to connect to the device.

Returns:the interface used to connect to the device.
open(baudrate=19200, no_reader_thread=False)[source]

Opens the device.

Parameters:
  • baudrate (int) – The baudrate to use with the device.
  • no_reader_thread (bool) – Whether or not to automatically start the reader thread.
Raises :

NoDeviceError

close()[source]

Closes the device.

write(data)[source]

Writes data to the device.

Parameters:data (str) – The data to write.
Raises :CommError
read()[source]

Reads a single character from the device.

Returns:The character read from the device.
Raises :CommError
read_line(timeout=0.0, purge_buffer=False)[source]

Reads a line from the device.

Parameters:
  • timeout (float) – The read timeout.
  • purge_buffer (bool) – Indicates whether to purge the buffer prior to reading.
Returns:

The line read.

Raises :

CommError, TimeoutError

class pyad2.devices.SocketDevice(interface=('localhost', 10000))[source]

Bases: pyad2.devices.Device

Device that supports communication with an AD2 that is exposed via ser2sock or another Serial to IP interface.

interface[source]

Retrieves the interface used to connect to the device.

Returns:the interface used to connect to the device.
ssl[source]

Retrieves whether or not the device is using SSL.

Returns:Whether or not the device is using SSL.
ssl_certificate[source]

Retrieves the SSL client certificate path used for authentication.

Returns:The certificate path
ssl_key[source]

Retrieves the SSL client certificate key used for authentication.

Returns:The key path
ssl_ca[source]

Retrieves the SSL Certificate Authority certificate used for authentication.

Returns:The CA path
open(baudrate=None, no_reader_thread=False)[source]

Opens the device.

Parameters:
  • baudrate (int) – The baudrate to use
  • no_reader_thread (bool) – Whether or not to automatically open the reader thread.
Raises :

NoDeviceError, CommError

close()[source]

Closes the device.

write(data)[source]

Writes data to the device.

Parameters:data (str) – The data to write.
Returns:The number of bytes sent.
Raises :CommError
read()[source]

Reads a single character from the device.

Returns:The character read from the device.
Raises :CommError
read_line(timeout=0.0, purge_buffer=False)[source]

Reads a line from the device.

Parameters:
  • timeout (float) – The read timeout.
  • purge_buffer (bool) – Indicates whether to purge the buffer prior to reading.
Returns:

The line read from the device.

Raises :

CommError, TimeoutError

util Module

Provides utility classes for the AD2 devices.

exception pyad2.util.NoDeviceError[source]

Bases: exceptions.Exception

No devices found.

exception pyad2.util.CommError[source]

Bases: exceptions.Exception

There was an error communicating with the device.

exception pyad2.util.TimeoutError[source]

Bases: exceptions.Exception

There was a timeout while trying to communicate with the device.

exception pyad2.util.InvalidMessageError[source]

Bases: exceptions.Exception

The format of the panel message was invalid.

class pyad2.util.Firmware[source]

Bases: object

Represents firmware for the AD2 devices.

STAGE_START = 0
STAGE_WAITING = 1
STAGE_BOOT = 2
STAGE_LOAD = 3
STAGE_UPLOADING = 4
STAGE_DONE = 5
static upload(dev, filename, progress_callback=None)[source]

Uploads firmware to an AD2 device.

Parameters:
  • filename (str) – The firmware filename
  • progress_callback (function) – Callback function used to report progress.
Raises :

util.NoDeviceError, util.TimeoutError

zonetracking Module

Provides zone tracking functionality for the AD2 device family.

class pyad2.zonetracking.Zone(zone=0, name='', status=0)[source]

Bases: object

Representation of a panel zone.

CLEAR = 0

Status indicating that the zone is cleared.

FAULT = 1

Status indicating that the zone is faulted.

CHECK = 2

Status indicating that there is a wiring issue with the zone.

STATUS = {0: 'CLEAR', 1: 'FAULT', 2: 'CHECK'}
class pyad2.zonetracking.Zonetracker[source]

Bases: object

Handles tracking of zone and their statuses.

on_fault

Called when the device detects a zone fault.

on_restore

Called when the device detects that a fault is restored.

EXPIRE = 30

Zone expiration timeout.

update(message)[source]

Update zone statuses based on the current message.

Parameters:message (Message or ExpanderMessage) – Message to use to update the zone tracking.

panels Module

Representations of Panels and their templates.

messages Module

Message representations received from the panel through the AD2 devices.

class pyad2.messages.BaseMessage[source]

Bases: object

Base class for messages.

raw = None

The raw message text

class pyad2.messages.Message(data=None)[source]

Bases: pyad2.messages.BaseMessage

Represents a message from the alarm panel.

ready = False

Indicates whether or not the panel is in a ready state

armed_away = False

Indicates whether or not the panel is armed away

armed_home = False

Indicates whether or not the panel is armed home

backlight_on = False

Indicates whether or not the keypad backlight is on

programming_mode = False

Indicates whether or not we’re in programming mode

beeps = -1

Number of beeps associated with a message

zone_bypassed = False

Indicates whether or not a zone is bypassed

ac_power = False

Indicates whether or not the panel is on AC power

chime_on = False

Indicates whether or not the chime is enabled

alarm_event_occurred = False

Indicates whether or not an alarm event has occurred

alarm_sounding = False

Indicates whether or not an alarm is sounding

battery_low = False

Indicates whether or not there is a low battery

entry_delay_off = False

Indicates whether or not the entry delay is enabled

fire_alarm = False

Indicates whether or not a fire alarm is sounding

check_zone = False

Indicates whether or not there are zones that require attention.

perimeter_only = False

Indicates whether or not the perimeter is armed

numeric_code = None

The numeric code associated with the message

text = None

The human-readable text to be displayed on the panel LCD

cursor_location = -1

Current cursor location on the keypad

mask = None

Address mask this message is intended for

bitfield = None

The bitfield associated with this message

panel_data = None

The panel data field associated with this message

class pyad2.messages.ExpanderMessage(data=None)[source]

Bases: pyad2.messages.BaseMessage

Represents a message from a zone or relay expansion module.

ZONE = 0

Flag indicating that the expander message relates to a Zone Expander.

RELAY = 1

Flag indicating that the expander message relates to a Relay Expander.

type = None

Expander message type: ExpanderMessage.ZONE or ExpanderMessage.RELAY

address = -1

Address of expander

channel = -1

Channel on the expander

value = -1

Value associated with the message

class pyad2.messages.RFMessage(data=None)[source]

Bases: pyad2.messages.BaseMessage

Represents a message from an RF receiver.

x = 3
serial_number = None

Serial number of the RF device

value = -1

Value associated with this message

battery = False

Battery low indication

supervision = False

Supervision required indication

loop = [False, False, False, False]

Loop indicators

class pyad2.messages.LRRMessage(data=None)[source]

Bases: pyad2.messages.BaseMessage

Represent a message from a Long Range Radio.

event_data = None

Data associated with the LRR message. Usually user ID or zone.

partition = -1

The partition that this message applies to

event_type = None

The type of the event that occurred

Table Of Contents

Previous topic

Welcome to pyad2’s documentation!

Next topic

event Package

This Page