# coding: utf-8 import sys import os import time import subprocess import paho.mqtt.client as mqtt from setproctitle import setproctitle from gattlib import DiscoveryService def send_mqtt_message(topic, msg): for i in range(5): try: result, mid = client.publish(topic, msg, 0) #print ('result', result) if result == 0: break except: print ("retrying...") def on_connect(client, obj, flags, rc): client.subscribe("commands", 0) def on_subscribe(client, userdata, mid, granted_qos): print ('Subscribed:', userdata, mid, granted_qos) print ('We are here, waiting for commands...') def on_message(mosq, obj, msg): global abort try: event = msg.payload.decode("utf-8").split('.') #print (event) if event[0] == 'abort': abort = True except: pass cmnd = 'sudo hciconfig hci0 down' os.system(cmnd) cmnd = 'sudo hciconfig hci0 up' os.system(cmnd) p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE) out, err = p.communicate() for line in out.splitlines(): #print (line) if b'gatt_ble_scanner' in line: pid = int(line.split(None, 1)[0]) print ('Killing ', pid) os.kill(pid, signal.SIGKILL) time.sleep(5) nn = 'gatt_ble_scanner' setproctitle (nn) abort = False client = mqtt.Mosquitto() client.on_connect = on_connect client.on_message = on_message client.on_subscribe = on_subscribe client.connect("127.0.0.1", 1883, 60) client.loop_start() if not os.geteuid() == 0: sys.exit("script only works as root") service = DiscoveryService("hci0") while not abort: devices = {} devices = service.discover(1) #print (devices) for address, name in devices.items(): msg = ("name: {}, address: {}".format(name, address)) print (msg) send_mqtt_message('found', msg) client.loop_stop() client.disconnect() del client cmnd = 'sudo hciconfig hci0 down' os.system(cmnd) cmnd = 'sudo hciconfig hci0 up' os.system(cmnd) exit(0)