import time from alarmdecoder import AlarmDecoder from alarmdecoder.devices import SerialDevice # Configuration values TARGET_ZONE = 41 WAIT_TIME = 10 SERIAL_DEVICE = '/dev/ttyUSB0' BAUDRATE = 115200 def main(): """ Example application that periodically faults a virtual zone and then restores it. This is an advanced feature that allows you to emulate a virtual zone. When the AlarmDecoder is configured to emulate a zone expander we can fault and restore those zones programmatically at will. These events can also be seen by others, such as home automation platforms which allows you to connect other devices or services and monitor them as you would any physical zone. For example, you could connect a ZigBee device and receiver and fault or restore it's zone(s) based on the data received. In order for this to happen you need to perform a couple configuration steps: 1. Enable zone expander emulation on your AlarmDecoder device by hitting '!' in a terminal and going through the prompts. 2. Enable the zone expander in your panel programming. """ try: # Retrieve the first USB device device = AlarmDecoder(SerialDevice(interface=SERIAL_DEVICE)) # Set up an event handlers and open the device device.on_zone_fault += handle_zone_fault device.on_zone_restore += handle_zone_restore with device.open(baudrate=BAUDRATE): last_update = time.time() while True: if time.time() - last_update > WAIT_TIME: last_update = time.time() device.fault_zone(TARGET_ZONE) time.sleep(1) except Exception as ex: print('Exception:', ex) def handle_zone_fault(sender, zone): """ Handles zone fault messages. """ print('zone faulted', zone) # Restore the zone sender.clear_zone(zone) def handle_zone_restore(sender, zone): """ Handles zone restore messages. """ print('zone cleared', zone) if __name__ == '__main__': main()