#!/usr/local/bin/python import argparse import pprint import prettytable from concord232 import client def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('command') parser.add_argument('--zone', default=None, type=int, help='Zone number for zone-related commands') parser.add_argument('--partition', default=None, type=int, help='Partition number for partition-related commands') parser.add_argument('--user', default=None, type=int, help='User number for user-related commands') parser.add_argument('--master', default=None, help='Master PIN for commands that require it') parser.add_argument('--host', default='localhost:5007', help='Host and port (localhost:5007)') parser.add_argument('--keys', default='', help='Key Presses to Send') parser.add_argument('--group', default='False', help='Group the Key Input as One Command ') args = parser.parse_args() return args def do_list(clnt, args): for zone in clnt.list_zones(): pprint.pprint(zone) def do_list_partitions(clnt, args): for part in clnt.list_partitions(): pprint.pprint(part) def do_arm(clnt, level, option = None): clnt.arm(level, option) def do_disarm(clnt, args): if not args.master: print('Master pin required') return clnt.disarm(args.master) def do_keys(clnt, args): if args.group: group = True if not args.keys: print('Keys required') return clnt.send_keys(args.keys, group) def do_summary(clnt, args): t = prettytable.PrettyTable(['Zone', 'Name', 'Bypass', 'Status','Type']) for zone in sorted(clnt.list_zones(), key=lambda k: k['number']) : t.add_row(['%i' % zone['number'], zone['name'], zone['state'] , '%s' % (zone['state'] or False), zone['type']]) print(t) t = prettytable.PrettyTable(['Partition', 'Zones', 'Status','Level']) for i, part in enumerate(clnt.list_partitions()): if part['zones'] > 0: status = "Disarmed" if part['arming_level'] == "Off" else "Armed" t.add_row(['%i' % part['number'], part['zones'],status,part['arming_level']]) print(t) def do_show(clnt, args): if args.zone: for zone in clnt.list_zones(): if zone['number'] == args.zone: pprint.pprint(zone) return print('No such zone `%s\'' % args.zone) elif args.partition: for part in clnt.list_partitions(): if part['number'] == args.partition: pprint.pprint(part) return print('No such partition `%s\'' % args.partition) else: print('Zone or Partition required') def do_events(clnt, args): while True: events = clnt.get_events() if events: for event in events: print(event) def do_version(clnt, args): print(clnt.get_version()) def main(): args = parse_args() url = 'http://%s:%s' % tuple(args.host.split(':', 1)) clnt = client.Client(url) if args.command == 'list': do_list(clnt, args) elif args.command[0:3] == 'arm': if args.command.count('-') == 2: cmd, level, option = args.command.split('-') do_arm(clnt, level, option) else: cmd, level = args.command.split('-') do_arm(clnt, level) elif args.command == 'disarm': do_disarm(clnt, args) elif args.command == 'keys': do_keys(clnt, args) elif args.command == 'partitions': do_list_partitions(clnt, args) elif args.command == 'summary': do_summary(clnt, args) elif args.command == 'show': do_show(clnt, args) elif args.command == 'version': do_version(clnt, args) if __name__ == '__main__': main()