Python example

Here you can find a python script example that handles communication with a broker.

#!/usr/bin/env python3

import paho.mqtt.client as mqtt
import time

def on_connect(client, userdata, flags, rc):
    global dev_id_enc
    print("rc"+str(rc))
    if rc==0:
        print(dev_id+": connected ok")

def on_message(client, userdata, msg):

    array = msg.payload.decode().split(',')
    global dev_id
    print("<<<<<<<<<<<<< The IoT service RECEIVES something")
    print(str(array))
    print(str(msg.topic))

    if msg.topic == 'admin/provider/'+str(dev_id):
        global password
        password = array[0]
        print("2. "+ dev_id+": password received - " +password)

if __name__ == '__main__':

    password = ''

    # The IoT device knows his own dev_id
    dev_id = "asdfasdf"

    # 0. First connection for credential retrieval
    client = mqtt.Client()
    client.on_connect=on_connect
    client.on_message=on_message
    client.user_data_set('')
    client.connect("broker.airtrace.io",1883,60)
    client.subscribe("admin/provider/" + str(dev_id))

    # 1. We do not have token, so first we need to get one by asking admin/provider topic
    client.loop_start()
    res = client.publish("admin/provider", dev_id)
    print("1. >>>>>>>>>>>>> The IoT service does not have password. Connect to admin/provider topic and request one.")
    time.sleep(10)

    client.loop_stop()
    client.disconnect()

    # 1. Second connection (authenticated) for data submission
    client2 = mqtt.Client()
    client2.on_connect=on_connect
    client2.on_message=on_message

    print(dev_id, password)
    client2.username_pw_set(dev_id, password)
    client2.connect("broker.airtrace.io",1884,60)
    client2.loop_start()

    # Sending data
    i = 0
    while i < 5:

        payload = "200,c8y_Radon,R,16,,2021-11-07T00:30:06Z"
        print(
            "3. >>>>>>>>>>>>> The IoT publishes messages in the topic admin/data")
        res = client2.publish('admin/data/'+dev_id, payload)
        time.sleep(1)
        i = i + 1

    client2.loop_stop()
    client2.disconnect()

Last updated