guard-service/src/mqtt_helper.py

82 lines
2.3 KiB
Python
Raw Permalink Normal View History

2020-07-18 14:39:29 +02:00
#!/usr/bin/env python3
2020-08-06 17:18:03 +02:00
import logging
2020-07-18 14:39:29 +02:00
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,
2020-10-06 02:18:51 +02:00
retain=False, username=config.MQTT_USERNAME, password=config.MQTT_PASSWORD):
2020-07-18 14:39:29 +02:00
"""
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
2020-08-06 17:02:35 +02:00
self._topic = None
2020-07-18 14:39:29 +02:00
self.qos = qos
self.retain = retain
2020-10-03 13:59:24 +02:00
self.username = username
self.password = password
2020-07-18 14:39:29 +02:00
def get_topic(self) -> str:
"""
Set topic
:return:
"""
2020-08-06 17:02:35 +02:00
return self._topic
2020-07-18 14:39:29 +02:00
2020-08-06 17:02:35 +02:00
def set_topic(self, value: str) -> None:
2020-07-18 14:39:29 +02:00
"""
Get current topic
2020-08-06 17:02:35 +02:00
:param value:
2020-07-18 14:39:29 +02:00
:return:
"""
2020-08-06 17:02:35 +02:00
self._topic = value
2020-07-18 14:39:29 +02:00
topic = property(get_topic, set_topic)
def connect(self) -> None:
"""
Setup client and connect to broker
:return:
"""
2020-08-06 17:48:06 +02:00
logging.info("Connecting to MQTT")
2020-07-18 14:39:29 +02:00
self.client = mqtt.Client(client_id=self.client_id, clean_session=True, userdata=None, protocol=mqtt.MQTTv311,
transport="tcp")
2020-10-03 13:59:24 +02:00
self.client.username_pw_set(username=self.username,password=self.password)
2020-08-06 17:18:03 +02:00
self.port = int(self.port)
2020-07-18 14:39:29 +02:00
self.client.connect(host=self.host, port=self.port, keepalive=60)
2020-07-26 19:38:10 +02:00
def publish(self, message: str, subtopic: str = "") -> None:
2020-07-18 14:39:29 +02:00
"""
Publish a message
:param message:
2020-07-26 19:38:10 +02:00
:param subtopic:
2020-07-18 14:39:29 +02:00
:return:
"""
2020-08-06 17:48:06 +02:00
logging.debug(f"MQTT Topic: {self.topic}/{subtopic} Message: {message} QOS: {self.qos} Retain: {self.retain}")
2020-07-26 19:38:10 +02:00
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)