Fipy, umqtt.simple library: check_msg() is blocking



  • I'm using the umqtt.simple library to connect to the Azure IoT Hub and can successfully send messages to the topic, but when I call client.check_msg() to check if a message has been sent to the device, it's blocking my code when no message is sent instead of just returning if a message is in the queue or not.

    So when it get stucked at client.check_msg() and then I send a message to the device the message is printed and the code is continued.

    This is my code:

    .
    .
    .
    client = MQTTClient(device_id, hostname, user=username, password=password, ssl=True, port=8883)
    
    topic = "devices/{device_id}/messages/events/".format(device_id=device_id)
    sub_topic = "devices/{device_id}/messages/devicebound/#".format(device_id=device_id)
    
    client.set_callback(sub_cb)
    
    client.connect()
    
    client.subscribe(sub_topic)
    
    print("subscribed")
    
    time.sleep(1)
    
    print("Start sending...")
    cntr = 0
    
    while (True):
        client.publish(topic, "message", qos=1)
        print("message sent\n")
        print("check messages\n")
        client.check_msg()      #At this point it get stucked when no message has been sent to the device
        cntr+=1
        time.sleep(20)
    
    

    Hardware: Fipy, Pytrack, NB-IoT is used to connect to the Azure IoT Hub



  • Someone found a workaround - check out this github here: https://github.com/pycom/pycom-micropython-sigfox/issues/424



  • @MarcosC I've had the same issue. The only workaround for me was to use non-SSL that's the only one that appears to work non-blocking.



  • @Mirox , how have you fix this? I have exactly the same issue and cannot fix it. The chec_msg() method get stucked. Thanks!



Pycom on Twitter