Es posible que este código para ser modificado para incluir Bluetooth de Baja Energía de los dispositivos así? https://code.google.com/p/pybluez/source/browse/trunk/examples/advanced/inquiry-with-rssi.py?r=1

Puedo encontrar dispositivos como mi teléfono y bluetooth 4.0 dispositivos, pero no de cualquier manera POSIBLE. Si esto no puede ser modificado, es posible ejecutar el hcitool lescan y extraer los datos de hci volcado dentro de python? Puedo utilizar las herramientas para ver los dispositivos que estoy buscando y le da un RSSI en hcidump, que es lo que mi objetivo final es. Para obtener la dirección MAC y la RSSI de la BLE dispositivo.

Gracias!

Que el código no tiene soporte para BLE funcionalidad… se necesitaría una GRAN cantidad de cambios para apoyar BLE.
¿Sabes de algún funcional BLE de escaneado de código? He buscado bastante pero no he encontrado uno. Gracias!

OriginalEl autor user3582887 | 2014-05-21

2 Comentarios

  1. 21

    Como dije en el comentario, de que la biblioteca no funciona con BLE.

    He aquí un ejemplo de código para hacer una simple BLE de escaneo:

    import sys
    import os
    import struct
    from ctypes import (CDLL, get_errno)
    from ctypes.util import find_library
    from socket import (
    socket,
    AF_BLUETOOTH,
    SOCK_RAW,
    BTPROTO_HCI,
    SOL_HCI,
    HCI_FILTER,
    )
    if not os.geteuid() == 0:
    sys.exit("script only works as root")
    btlib = find_library("bluetooth")
    if not btlib:
    raise Exception(
    "Can't find required bluetooth libraries"
    " (need to install bluez)"
    )
    bluez = CDLL(btlib, use_errno=True)
    dev_id = bluez.hci_get_route(None)
    sock = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)
    sock.bind((dev_id,))
    err = bluez.hci_le_set_scan_parameters(sock.fileno(), 0, 0x10, 0x10, 0, 0, 1000);
    if err < 0:
    raise Exception("Set scan parameters failed")
    # occurs when scanning is still enabled from previous call
    # allows LE advertising events
    hci_filter = struct.pack(
    "<IQH", 
    0x00000010, 
    0x4000000000000000, 
    0
    )
    sock.setsockopt(SOL_HCI, HCI_FILTER, hci_filter)
    err = bluez.hci_le_set_scan_enable(
    sock.fileno(),
    1,  # 1 - turn on;  0 - turn off
    0, # 0-filtering disabled, 1-filter out duplicates
    1000  # timeout
    )
    if err < 0:
    errnum = get_errno()
    raise Exception("{} {}".format(
    errno.errorcode[errnum],
    os.strerror(errnum)
    ))
    while True:
    data = sock.recv(1024)
    # print bluetooth address from LE Advert. packet
    print(':'.join("{0:02x}".format(x) for x in data[12:6:-1]))

    Tuve a la pieza en su totalidad por mirar el hcitool y gatttool código fuente que viene con Bluez. El código es completamente dependiente de libbluetooth-dev por lo que tendrá que asegurarse de que usted tiene que instalar primero.

    Una mejor manera sería utilizar dbus para realizar llamadas a bluetoothd, pero no he tenido oportunidad de investigación que todavía. Además, la interfaz dbus es limitado en lo que puede hacer con un BLE de conexión después de realizar uno.

    EDICIÓN:

    Martin Tramšak señaló que en Python 2, usted necesita cambiar la última línea para print(':'.join("{0:02x}".format(ord(x)) for x in data[12:6:-1]))

    Muchas gracias!
    También, no estoy tratando de hacer una conexión, sólo recibir dispositivos de archivos a mi alrededor y encontrar el RSSI y la dirección MAC de los dispositivos de archivos. Así que espero que voy a ser capaz de averiguar…. gracias de nuevo.
    k.. el valor RSSI es en ese paquete… no recuerdo qué bytes, aunque.
    Tim probé tu código, perdóname, yo soy bastante nuevo en esto, ¿tengo que modificar algo? Archivo “scanner.py”, línea 61, en <módulo> print(‘:’.join(“{0:02x}”.formato(x) para x en los datos[12:6:-1])) Archivo “scanner.py” la línea 61, en <genexpr> print(‘:’.join(“{0:02x}”.formato(x) para x en los datos[12:6:-1])) Valueerror: Desconocido formato de código ” x ” para el objeto de tipo ‘str’ Gracias por la ayuda.
    Para python 2.7 cambiar la última línea: print(‘:’.join(“{0:02x}”.formato(ord(x)) para x en los datos[12:6:-1]))

    OriginalEl autor Tim Tisdall

  2. 4

    También se podría tratar de pygattlib. Puede ser utilizado para descubrir dispositivos, y (actualmente) no es un soporte básico para la lectura/escritura de características. No RSSI por ahora.

    Usted puede descubrir mediante el siguiente fragmento de código:

    from gattlib import DiscoveryService
    service = DiscoveryService("hci0")
    devices = service.discover(2)

    DiscoveryService acepta el nombre del dispositivo y el método discover acepta un tiempo de espera (en segundos) de espera de las respuestas. devices es un diccionario, con BL dirección como claves, y nombres como los valores.

    pygattlib está empaquetado para Debian (o Ubuntu), y en la sección de Descargas hay una .deb.

    Existe un soporte para OSX en pygattlib?
    Lo siento, pero no tengo un OSX para probarlo. Usted puede obtener el código fuente y tratar de compilarlo por ti mismo… y compartir los resultados! 😉

    OriginalEl autor oscarah

Dejar respuesta

Please enter your comment!
Please enter your name here