version: v0.0.1

This commit is contained in:
2026-02-25 15:05:58 +09:00
parent 1f8e1e3c04
commit 0b446eed54
26 changed files with 3129 additions and 0 deletions

124
mqtt.py Normal file
View 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()