Bloqueo de la computadora cuando el dispositivo Bluetooth no está dentro del alcance usando Python

Python proporciona la accesibilidad de usar la dirección UUID de Bluetooth del teléfono como token de seguridad física para cualquier sistema. Esto se puede hacer con la ayuda de un paquete de Python llamado PyBluez . Pybluez se puede instalar en Linux, Windows y macOS y es compatible con Python 2.7 y 3.x.

Instalaciones requeridas:

Los módulos necesarios son:

  • Pybluez: este módulo permite utilizar los recursos Bluetooth del sistema. Para instalarlo, escriba el siguiente comando en la terminal.
    python3 -m pip install pybluez
  • Horario: la biblioteca de horarios se utiliza para programar una tarea a una hora particular todos los días o un día particular de la semana. Para instalarlo, escriba el siguiente comando en la terminal.
    python3 -m pip install schedule

Acercarse:

PyBluez es un paquete con recursos Bluetooth que permite a los desarrolladores de Python crear fácilmente aplicaciones Bluetooth. Al principio, los paquetes necesarios se han importado al programa. PyBluezse importa como Bluetooth, se scheduleimporta para programar el programa, timeel paquete se importa para manejar tareas relacionadas con el tiempo y ctypesse importa para usar las bibliotecas existentes en otros idiomas, escribiendo envoltorios simples en Python. Los siguientes son los pasos.

  • job()Se define una función en la que se declara la dirección bluetooth de tu móvil en la variable inputBdaddr. La variable passedse inicializa en False para realizar un seguimiento de si la dirección de bluetooth dada se encuentra en los dispositivos descubiertos. bluetooth.discover_devices()Se utiliza para buscar los dispositivos bluetooth disponibles en las cercanías . Los resultados se guardan en la variable scandentro del bloque try-except. Si el dispositivo requerido se encuentra en scan, la variable passedse establece en verdadero, de lo contrario, falso.
  • Si passedse encuentra como falso, lo que significa que no se encuentra el dispositivo requerido, la estación de trabajo está bloqueada.
  • Ahora programe los pasos anteriores llamando a la función job()cada 30 segundos. Se utiliza un bucle while para comprobar si alguna tarea programada está pendiente de ejecución o no.

A continuación se muestra la implementación:

# Import required packages
import schedule
import time
import bluetooth
import ctypes
   
  
def job():
    # Find your bluetooth uuid in your
    # mobile and give set it in the 
    # variable
    inputBdaddr = "XX:XX:XX:XX:XX:XX"
       
    # Variable to find whether the
    # given bluetooth uuid is 
    # present in the discovered devices
    passed = False
       
    # Try to search for the nearby 
    # visible devices
    try:
        # Get the list of discovered devices
        scan = bluetooth.discover_devices()
           
        # Search for your bluetooth uuid 
        # in the scanned devices If found
        # set the variable to true else 
        # set the variable to false
        if inputBdaddr in scan:
            passed = True
              
        else:
            passed = False
              
    except:
        passed = False
           
    # When bluetooth device 
    # is not found, lock the
    # workstation
    if not passed:
        ctypes.windll.user32.LockWorkStation()
           
# Schedule the process 
# to run every 30 seconds
schedule.every(30).seconds.do(job)
   
# Check whether a scheduled 
# task is pending to run or not
while 1:
    schedule.run_pending()
    time.sleep(1)

Limitaciones:

Dado que PyBluez no está en desarrollo activo, la detección de Bluetooth es probabilística. Discover_devices() a veces no podrá detectar los dispositivos que están dentro del alcance. En este caso, puede ser una buena idea volver a intentarlo una o dos veces antes de darse por vencido.

Publicación traducida automáticamente

Artículo escrito por AnandhJagadeesan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *