I can't get a realtime value back to the GUI. I'm using Bleak and I want to return my device's RSSI in real time, and not after the scan end. I tryed to insert a thread, I have the same problem. Thanks for your help
# définition du thread
class MonThread (threading.Thread) :
def __init__ (self, win) :
threading.Thread.__init__ (self)
self.win = win
async def callback(self,device: BLEDevice, advertisement_data: AdvertisementData):
# Filtering by Macaddress
if device.address=="AB:7E:48:E7:EE:1F":
splitstr1=advertisement_data
print('Name : ',splitstr1[0]) # NAME
print('Signal : ',splitstr1[5]) # RSSI
self.win.event_generate ("<<thread_fini>>", x = splitstr1[5])
async def run (self):
scanner= BleakScanner(self.callback)
#while True :
await scanner.start()
await asyncio.sleep(20)
await scanner.stop()
Here the GUI
def lance_thread () :
m = MonThread (root)
m.start ()
def thread_fini_fonction (e) :
message2.config(text = str (e.x))
import tkinter as tk
root = tk.Tk ()
root.title("Analyzer")
root.geometry('600x400+100+100')
root.resizable(True,True)
root.config(relief=tk.RAISED, bd=3)
b = tk.Button(text="Scan", command=lance_thread)
b.pack()
frameH = tk.Frame(root,width=200, height=80, background="bisque",relief=tk.GROOVE, bd=6,padx=20,pady=20)
frameH.pack(anchor="nw",padx=10,pady=10,fill="x")
message = tk.Label(frameH, text="RSSI : ", height=2,padx=50,background="bisque")
message.grid(row=0, column=1)
message2 = tk.Label(frameH, text="---", height=2)
message2.grid(row=0, column=9)
root.bind ("<<thread_fini>>", thread_fini_fonction)
root.mainloop ()