2016-10-30 4 views
2

J'utilise le module bluetooth pour python import bluetooth que je crois être le paquet PyBluez. Je peux me connecter, envoyer et recevoir très bien de la classe bluetooth.BluetoothSocket mais mon application est complètement aveugle quand il s'agit de l'état de la connexion.python bluetooth - vérifier l'état de la connexion

Je souhaite que mon application désactive certaines fonctionnalités lorsque l'appareil est déconnecté mais qu'il ne semble pas y avoir de méthodes BluetoothSocket.is_connected() de quelque nature que ce soit. Je voudrais qu'il détecte les changements dans l'état bluetooth dès qu'ils se produisent.

Habituellement, il y a plusieurs sujets à propos de quelque chose d'aussi simple que cela, alors excuses s'il s'agit d'un doublon. J'ai cherché plusieurs fois sur ce site pour trouver une réponse mais je n'ai trouvé rien de spécifique à python.

Répondre

1

Si votre SO est Linux, vous pouvez utiliser le hcitool, qui vous indiquera l'état de vos périphériques Bluetooth.

Veuillez trouver ci-dessous un petit extrait de Python qui peut répondre à vos besoins. Vous aurez besoin de connaître votre appareil Bluetooth MAC:

import subprocess as sp 

stdoutdata = sp.getoutput("hcitool con") 

if "XX:XX:XX:XX:XX:XX" in stdoutdata.split(): 
    print("Bluetooth device is connected") 

Hope this helps!

1

Si vous utilisez Linux, il est également possible de vérifier si l'appareil est toujours disponible en utilisant la méthode getpeername() de BluetoothSocket. Cette méthode (héritée de la classe socket de python) renvoie l'adresse distante à laquelle le socket est connecté.

Si l'appareil est toujours disponible:

>>>sock.getpeername() 
('98:C3:32:81:64:DE', 1) 

Si l'appareil n'est pas connecté:

>>>sock.getpeername() 
Traceback (most recent call last): 
    File "<string>", line 3, in getpeername 
_bluetooth.error: (107, 'Transport endpoint is not connected') 

Par conséquent, pour tester si une prise est toujours connecté à un périphérique réel, vous pouvez utiliser :

try: 
    sock.getpeername() 
    still_connected = True 
except: 
    still_connected = False