Beispiel #1
0
    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))
Beispiel #2
0
                    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
Beispiel #3
0
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:
Beispiel #4
0
    )

    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)