<div dir="ltr"><div dir="ltr">Ciao a tutti sto provando ad integrare asyncio ed mqtt ma con scarsi risultati, attualmente ho un programma che in un while True legge ogni secondo lo stato di un sensore con la funzione get del modulo requests, se questo sensore cambia stato vado avanti col programma, il mio scopo sarebbe quello di leggere lo stato del sensore tramite la sottoscrizione di un topic mqtt e usando asyncio.Event settare l'evento in modo che con un'altra funzione sempre fatta con asyncio che resta in attesa dell'evento farla partire solo in quel caso.<div><br></div><div>questo è il codice di prova che sto usando per capire come fare</div><div><br></div><div><div>import asyncio</div><div>import paho.mqtt.client as mqtt</div><div><br></div><div>msg_test = ""</div><div>event = asyncio.Event()</div><div><br></div><div>def event_set():</div><div>    event.set()</div><div><br></div><div><br></div><div>def on_message(client, userdata, msg):</div><div>    global msg_test</div><div>    print("on_message",event)</div><div>    print(msg.topic+" "+str(msg.payload.decode()))</div><div>    event_set()</div><div>    msg_test = str(msg.payload.decode())</div><div><br></div><div>def on_connect(client, userdata, flags, rc):</div><div>    if rc==0:</div><div>        client.connected_flag=True #set flag</div><div>        print("connected OK Returned code=",rc)</div><div>        client.subscribe("acquario/input_boolean/manutenzione/status")</div><div>    else:</div><div>        print("Bad connection Returned code= ",rc)</div><div><br></div><div>async def print_msg():</div><div>    print("sono in async")</div><div>    global msg_test</div><div>    while True:</div><div>        print("print_msg",event)</div><div>        await event.wait()</div><div>        print("async def", msg_test)</div><div>        await asyncio.sleep(5)</div><div>        event.clear()</div><div><br></div><div>async def print_msg_2():</div><div>    print("sono in async")</div><div>    global msg_test</div><div>    while True:</div><div>        print("print_msg_2",event)</div><div>        await event.wait()</div><div>        print("async def", msg_test)</div><div>        await asyncio.sleep(5)</div><div>        event.clear()</div><div><br></div><div>async def mqtt_connect():</div><div>    client = mqtt.Client()</div><div>    client.on_connect= on_connect</div><div>    client.on_message = on_message</div><div>    client.username_pw_set("testuser", password="testuser")</div><div>    client.connect_async("localhost", 1883)</div><div>    await asyncio.sleep(2)</div><div>    client.loop_start()</div><div><br></div><div><br></div><div>if __name__ == "__main__":</div><div>    loop = asyncio.get_event_loop()</div><div>    coro = asyncio.gather(mqtt_connect(), print_msg(), print_msg_2())</div><div>    event.set()</div><div>    loop.run_forever()</div></div><div><br></div><div>logicamente non è questo lo script che mi servirà lo sto solo usando per comprendere il modo giusto di come integrare asyncio ed mqtt.</div><div><br></div><div>Spero di essermi spiegato e che qualcuno possa aiutarmi.</div><div>Grazie</div></div></div>