def __init__(self, hass, host, port, model, hkid, config_num, config): """Initialise a generic HomeKit device.""" # pylint: disable=import-error import homekit _LOGGER.info("Setting up Homekit device %s", model) self.hass = hass self.host = host self.port = port self.model = model self.hkid = hkid self.config_num = config_num self.config = config self.configurator = hass.components.configurator data_dir = os.path.join(hass.config.path(), HOMEKIT_DIR) if not os.path.isdir(data_dir): os.mkdir(data_dir) self.pairing_file = os.path.join(data_dir, 'hk-{}'.format(hkid)) self.pairing_data = homekit.load_pairing(self.pairing_file) # Monkey patch httpclient for increased compatibility # pylint: disable=protected-access http.client.HTTPConnection._send_output = homekit_http_send self.conn = http.client.HTTPConnection(self.host, port=self.port) if self.pairing_data is not None: self.accessory_setup() else: self.configure()
parser = argparse.ArgumentParser(description='HomeKit perform app - performs operations on paired devices') parser.add_argument('-f', action='store', required=True, dest='file', help='File with the pairing data') parser.add_argument('-c', action='store', required=True, dest='characteristics', help='Read characteristics, multiple characteristcs can be given as comma separated list') parser.add_argument('-m', action='store_true', required=False, dest='meta', help='') parser.add_argument('-p', action='store_true', required=False, dest='perms', help='') parser.add_argument('-t', action='store_true', required=False, dest='type', help='') parser.add_argument('-e', action='store_true', required=False, dest='events', help='') return parser if __name__ == '__main__': parser = setup_args_parser() args = parser.parse_args() pairing_data = load_pairing(args.file) if pairing_data is None: print('File {file} not found!'.format(file=args.file)) sys.exit(-1) deviceId = pairing_data['AccessoryPairingID'] connection_data = find_device_ip_and_port(deviceId) if connection_data is None: print('Device {id} not found'.format(id=deviceId)) sys.exit(-1) conn = http.client.HTTPConnection(connection_data['ip'], port=connection_data['port']) controllerToAccessoryKey, accessoryToControllerKey = get_session_keys(conn, pairing_data)