Smart Cities - Python MQTT class library

From Sensors in Schools
Revision as of 08:53, 29 September 2024 by EdmondLascaris (talk | contribs)
Jump to navigation Jump to search

MQTT Class library

This Python program implements an MQTT client using the Paho MQTT library. It creates a simple class called Mqtt that can subscribe to and publish messages on MQTT topics, typically used in home automation systems. Let’s break down the program step by step.

#Home automation system MQTT class library
#Copyright (c) 2024, Julie VK3FOWL and Joe VK3YSP.
#For The School Amater Radio Club Network (r) VK3SRC.
#This program:
#   Implements a Message Queuing Telemetry Transport (MQTT) client
#   Subscribes to MQTT topics
#   Publishes MQTT messages

import paho.mqtt.client as mqtt

class Mqtt(object):
    def __init__(self, host, port, callback):
        #Constructor
        self.client = mqtt.Client()                                 #Create an mqtt client
        self.client.on_message = callback                           #Assign a message handler
        if (self.client.connect(host, port, 60) == 0):              #Connect to the mqtt broker
            print('Connected to MQTT broker')
            self.client.loop_start()                                #Start handling mqtt messages
            print('MQTT client started')

    def subscribe(self, topic):
        #Subscribe to an mqtt topic
        self.client.subscribe(topic)

    def publish(self, topic, message):
        #Subscribe to an mqtt topic
        self.client.publish(topic, message)

if __name__ == '__main__':                                          #Run this code stand-alone
    #Test script - This script creates a MQTT object and demonstrates subscribing and publishing messages
    def mqttCallback(client, userdata, message):
        #This function handles received MQTT messages
        print(f'MQTT: {message.topic}: {message.payload.decode()}') #Print the topic and message
    mqttIP = 'localhost'                                            #Assume the MQTT broker is running on this machine
    mqttPort = 1883                                                 #The standard MQTT port
    mqtt = Mqtt(mqttIP, mqttPort, mqttCallback)                     #Create an MQTT object
    mqtt.subscribe('Test1')                                         #Subscribe to the Test1 topic
    mqtt.subscribe('Test2')                                         #Subscribe to the Test2 topic
    mqtt.publish('Test1','Message1')                                #Publish a message to the Test1 topic
    mqtt.publish('Test2','message2')                                #Publish a message to the Test2 topic