#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