guard-service/src/mqtt_helper.py

75 lines
1.8 KiB
Python

#!/usr/bin/env python3
import paho.mqtt.client as mqtt
import config
"""
MQTT class
"""
__author__ = "@tormakris"
__copyright__ = "Copyright 2020, Birbnetes Team"
__module_name__ = "mqtt"
__version__text__ = "1"
class MQTT:
"""
MQTT class used to make sending mqtt messages nice and simple
"""
def __init__(self, host=config.MQTT_HOSTNAME, port=config.MQTT_PORT, client_id=config.CLIENT_ID, qos=2,
retain=True):
"""
Init variables
:param host:
:param port:
:param client_id:
:param qos:
:param retain:
"""
self.client = None
self.host = host
self.port = port
self.client_id = client_id
self.topic = None
self.qos = qos
self.retain = retain
def get_topic(self) -> str:
"""
Set topic
:return:
"""
return self.topic
def set_topic(self, _topic: str) -> None:
"""
Get current topic
:param _topic:
:return:
"""
self.topic = _topic
topic = property(get_topic, set_topic)
def connect(self) -> None:
"""
Setup client and connect to broker
:return:
"""
self.client = mqtt.Client(client_id=self.client_id, clean_session=True, userdata=None, protocol=mqtt.MQTTv311,
transport="tcp")
self.client.connect(host=self.host, port=self.port, keepalive=60)
def publish(self, message: str, subtopic: str = "") -> None:
"""
Publish a message
:param message:
:param subtopic:
:return:
"""
if subtopic:
self.client.publish(f"{self.topic}/{subtopic}", message, qos=self.qos, retain=self.retain)
else:
self.client.publish(self.topic, message, qos=self.qos, retain=self.retain)