Shahriar.M
Shahriar.M

Reputation: 898

on_subscribe not working - paho python with IBM iot platform

I tried my subscriber which is written using Paho python client with HiveMQ broker and it worked just fine, but it is not working with IBM.

from Subscribing to application status messages, and this question, I implemented suscriber client as following (I got the "a:<ORG-ID>:<App-ID>" from the apps section of my IBM Watson platform):

def on_connect(client, userdata, flags, rc):
    print("CONNACK received with code %d." % (rc))
    (result, mid) = client.subscribe("iot-2/app/MyAppID/sensordata", 2)
    print("result: ", result, ", mid: ", mid)

    if result == paho.MQTT_ERR_SUCCESS:
        print("success in subscribing.")


def on_subscribe(client, userdata, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))


client = paho.Client("a:<ORG-ID>:<App-ID>")

# adding callbacks to client
client.on_connect = on_connect
client.on_subscribe = on_subscribe
client.on_message = on_message
client.username_pw_set("a-<ORG-ID>-<App-ID>","my authentication token")

client.tls_set( ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED,
           tls_version=ssl.PROTOCOL_TLS, ciphers=None)


client.connect("<ORG-ID>.messaging.internetofthings.ibmcloud.com", 8883, 60)
client.loop_start()

When I run the project, I get rc with value of 0 which means successful connection.

and this is the on_connect() callback prints:

CONNACK received with code 0. result: 0 , mid: 2 success in subscribing.

And the on_subscribe() callback is not being called. what am I doing wrong?

Upvotes: 0

Views: 117

Answers (1)

idan
idan

Reputation: 555

If you want to Subscribe to application status messages then

An application can subscribe to monitor status of one or more applications, for example:

Subscribe to topic iot-2/app/appId/mon

Note: To subscribe to updates for all applications, use the MQTT "any" wildcard character (+) for the appId comp

Based on above, the line:

(result, mid) = client.subscribe("iot-2/app/MyAppID/sensordata", 2)

should be

(result, mid) = client.subscribe("iot-2/app/MyAppID/mon", 2)

or

(result, mid) = client.subscribe("iot-2/app/+/mon", 2)

If want to receive sensor data, then use the below line:

Subscribe to topic iot-2/type/device_type/id/device_id/evt/event_id/fmt/format_string

You would need to replace: device_type, device_id, event_id, format_string(could be json, txt)

For every possible event:

(result, mid) = client.subscribe("iot-2/type/+/id/+/evt/+/fmt/+",2)

Upvotes: 1

Related Questions