Как я могу заставить pybluez возвращать список обнаруженных устройств каждые X секунд, а затем повторять?

Я пытался выяснить, как я могу использовать pybluez для мониторинга ближайших устройств. .

Я хочу иметь возможность запускать свою программу и искать устройства каждые 20 секунд. Проблема в том, как мне заставить pybluez красиво разместиться? :/

Используя свой пример кода http://code.google.com/p/pybluez/source/browse/trunk/examples/simple/inquiry.py, достаточно просто заставить его обнаруживать устройства. Вы запускаете этот код, и он выдает MAC-адрес и, если хотите, имена устройств.

Как я могу поместить это в цикл? Я играл со следующим кодом, но он терпит неудачу >.‹

import bluetooth

def search():
   while True:
      devices = bluetooth.discover_devices(lookup_names = True)

      yield devices

for addr, name in search():
   print "{0} - {1}".format(addr, name)

person dave    schedule 27.07.2010    source источник


Ответы (2)


Этот код работал для меня:

'''
Created on Nov 16, 2011    
@author: Radu
'''
import time
import bluetooth

def search():         
    devices = bluetooth.discover_devices(duration=20, lookup_names = True)
    return devices

if __name__=="__main__":
    while True:        
        results = search()
        if (results!=None):
            for addr, name in results:
                print "{0} - {1}".format(addr, name)
            #endfor
        #endif
        time.sleep(60)
    #endwhile

Он ищет устройство в течение 20 секунд, а затем засыпает на 1 минуту, и все это в бесконечном цикле. Я работаю в Windows с драйверами Windows по умолчанию на ключе Serioux BT.

Надеюсь, поможет.

person Radu    schedule 16.11.2011

Я не знаю pybluez, но сам bluetooth.discover_devices(lookup_names = True) уже возвращает итерируемый объект, поэтому вы должны зациклить его для получения.

def search():
   while True:
      devices = bluetooth.discover_devices(lookup_names = True)
      for x in devices: # <--
         yield x        # <-- 
person kennytm    schedule 27.07.2010
comment
Это прекрасно работает, но... Похоже, устройства кэшируются? Я хотел бы получать уведомление, если устройства Bluetooth нет поблизости, но даже если я его отключу, оно все равно появляется при сканировании... - person Pitto; 27.10.2015
comment
Лол, в это маловероятно. Я пришел сюда с мыслью «Удивительно, это та же проблема, что и у меня!» это я два года назад :'( - person Pitto; 13.07.2017
comment
@Pitto github.com/pybluez/pybluez/blob/ - person Levi; 06.01.2019