version: v0.0.1
This commit is contained in:
124
mqtt.py
Normal file
124
mqtt.py
Normal file
@@ -0,0 +1,124 @@
|
||||
import threading
|
||||
import os, sys
|
||||
import paho.mqtt.client as mqtt
|
||||
|
||||
"""
|
||||
todo
|
||||
|
||||
log 설정 별도 필요
|
||||
상수값 설정 필요
|
||||
"""
|
||||
|
||||
MQTT_USER_ID = "a2d2admin"
|
||||
MQTT_USER_PW = "a2d24992!"
|
||||
MQTT_HOST = "localhost"
|
||||
MQTT_PORT = 52002
|
||||
|
||||
class MQTTManager:
|
||||
"""
|
||||
MQTT manager
|
||||
subscribe 사용시 set_onmessage 함수 이용하여 on_message세팅
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
name="MQTT",
|
||||
id=MQTT_USER_ID,
|
||||
pw=MQTT_USER_PW,
|
||||
host=MQTT_HOST,
|
||||
port=MQTT_PORT) -> None:
|
||||
self.name = name
|
||||
self.id = id
|
||||
self.pw = pw
|
||||
self.host = host
|
||||
self.port = port
|
||||
|
||||
self.status = False
|
||||
self.status_subscribe = False
|
||||
|
||||
self.client = mqtt.Client()
|
||||
|
||||
self.client.username_pw_set(self.id, self.pw)
|
||||
self.client.on_connect = self.on_connect
|
||||
self.client.on_disconnect = self.on_disconnect
|
||||
self.client.on_subscribe = self.on_subscribe
|
||||
self.client.on_unsubscribe = self.on_unsubscribe
|
||||
self.client.on_message = self.on_message
|
||||
|
||||
self.mqtt_lock = threading.Lock()
|
||||
|
||||
def __del__(self):
|
||||
self.end()
|
||||
|
||||
def set_onmessage(self, function):
|
||||
self.client.on_message = function
|
||||
|
||||
def get_status(self):
|
||||
return self.status
|
||||
|
||||
def mqtt_connect(self):
|
||||
try:
|
||||
if self.status:
|
||||
pass #log.warning('Already connected to mqtt')
|
||||
else:
|
||||
self.client.connect(self.host, self.port)
|
||||
except Exception as e:
|
||||
pass #log.error((f"{self.name} connect fail"))
|
||||
raise ConnectionError(f"{self.name} connect fail")
|
||||
|
||||
def on_connect(self, client, userdata, flags, rc):
|
||||
"""
|
||||
mqtt 연결 확인 함수
|
||||
연결이 정상적으로 되었다면 rc = 0
|
||||
"""
|
||||
if rc == 0:
|
||||
self.mqtt_lock.acquire()
|
||||
self.status = True
|
||||
pass #log.info(f"{self.name} connected OK")
|
||||
self.mqtt_lock.release()
|
||||
else:
|
||||
pass #log.warning("Bad connection Returned code=", rc)
|
||||
|
||||
def on_disconnect(self, client, userdata, flags, rc=0):
|
||||
pass #log.info(f"{self.name} disconnected")
|
||||
self.mqtt_lock.acquire()
|
||||
self.status = False
|
||||
self.mqtt_lock.release()
|
||||
|
||||
def on_subscribe(self, client, userdata, mid, granted_qos):
|
||||
self.status_subscribe = True
|
||||
pass #log.info("subscribed: " + str(mid) + " " + str(granted_qos))
|
||||
|
||||
def on_unsubscribe(self, client, userdata, mid):
|
||||
self.status_subscribe = False
|
||||
pass #log.info("unsubscribed: " + str(mid))
|
||||
|
||||
def on_message(self, client, userdata, msg):
|
||||
"""
|
||||
구독중인 상태에서 메세지가 들어왔을때 처리 함수
|
||||
set_onmessage 에서 set 하여 사용
|
||||
"""
|
||||
pass
|
||||
|
||||
def start_pub(self):
|
||||
self.client.loop_start()
|
||||
|
||||
def start_sub(self, topic):
|
||||
self.client.subscribe(topic)
|
||||
self.client.loop_start()
|
||||
|
||||
def end_sub(self, topic):
|
||||
self.client.unsubscribe(topic)
|
||||
# self.client.loop_stop()
|
||||
|
||||
def end(self):
|
||||
self.client.loop_stop()
|
||||
self.client.disconnect()
|
||||
pass #log.info(f"{self.name} Ending Connection")
|
||||
|
||||
|
||||
mqtt_publisher = None
|
||||
|
||||
if mqtt_publisher is None:
|
||||
mqtt_publisher = MQTTManager()
|
||||
mqtt_publisher.mqtt_connect()
|
||||
mqtt_publisher.start_pub()
|
||||
Reference in New Issue
Block a user