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) sec_http = SecureHttp(conn.sock, accessoryToControllerKey, controllerToAccessoryKey) # create URL url = '/characteristics?id=' + args.characteristics if args.meta: url += '&meta=1' if args.perms: url += '&perms=1' if args.type: url += '&type=1' if args.events: url += '&ev=1' response = sec_http.get(url) data = json.loads(response.read().decode()) print(json.dumps(data, indent=4))
if 'iid' in c and c['iid'] == iid: format = c['format'] return format if __name__ == '__main__': parser = setup_args_parser() args = parser.parse_args() if 'characteristics' not in args or not args.characteristics: parser.print_help() sys.exit(-1) conn, controllerToAccessoryKey, accessoryToControllerKey = create_session( args.file) sec_http = SecureHttp(conn.sock, accessoryToControllerKey, controllerToAccessoryKey) pairing_data = load_pairing(args.file) # args.characteristics contains a list of lists like [['1.10', 'on'], ['1.11', '50']] characteristics_set = set() characteristics = [] for characteristic in args.characteristics: # extract aid, iid and value from cli params tmp = characteristic[0].split('.') aid = int(tmp[0]) iid = int(tmp[1]) value = characteristic[1] # first check if the accessories data is in the paring data characteristic_type = None
from homekit import create_session, SecureHttp, load_pairing from homekit.tlv import TLV def setup_args_parser(): parser = argparse.ArgumentParser(description='HomeKit list pairings app') parser.add_argument('-f', action='store', required=True, dest='file', help='File with the pairing data') parser.add_argument('-d', action='store_true', dest='delete', help='Delete file with the pairing data') return parser.parse_args() if __name__ == '__main__': args = setup_args_parser() conn, controllerToAccessoryKey, accessoryToControllerKey = create_session(args.file) sec_http = SecureHttp(conn.sock, accessoryToControllerKey, controllerToAccessoryKey) pairing_data = load_pairing(args.file) pairingId = pairing_data['iOSPairingId'] request_tlv = TLV.encode_dict({ TLV.kTLVType_State: TLV.M1, TLV.kTLVType_Method: TLV.RemovePairing, TLV.kTLVType_Identifier: pairingId.encode() }) response = sec_http.post('/pairings', request_tlv.decode()) data = response.read() data = TLV.decode_bytes_to_list(data) if data[0][0] == TLV.kTLVType_State and data[0][1] == TLV.M2: print('Pairing removed') if args.delete:
) return parser if __name__ == '__main__': parser = setup_args_parser() args = parser.parse_args() if not args.characteristics: parser.print_help() sys.exit(-1) conn, controllerToAccessoryKey, accessoryToControllerKey = create_session( args.file) sec_http = SecureHttp(conn.sock, accessoryToControllerKey, controllerToAccessoryKey) characteristics_set = set() characteristics = [] for characteristic in args.characteristics: tmp = characteristic.split('.') aid = int(tmp[0]) iid = int(tmp[1]) characteristics_set.add('{a}.{i}'.format(a=aid, i=iid)) characteristics.append({'aid': aid, 'iid': iid, 'ev': True}) body = json.dumps({'characteristics': characteristics}) response = sec_http.put('/characteristics', body) data = response.read().decode() if response.code != 204: data = json.loads(data)