mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-17 13:01:12 +00:00
Update README and MQTTClient for installation instructions and code improvements
This commit is contained in:
@@ -53,6 +53,10 @@ mamba activate unilab
|
|||||||
|
|
||||||
# 或更新现有环境
|
# 或更新现有环境
|
||||||
conda env update --file unilabos-[YOUR_OS].yml -n 环境名
|
conda env update --file unilabos-[YOUR_OS].yml -n 环境名
|
||||||
|
|
||||||
|
# 现阶段,需要安装 `unilabos_msgs` 包
|
||||||
|
# 可以前往 Release 页面下载系统对应的包进行安装
|
||||||
|
conda install ros-humble-unilabos-msgs-0.8.0-xxxxx.tar.bz2
|
||||||
```
|
```
|
||||||
|
|
||||||
其中 `[YOUR_OS]` 可以是 `win64`, `linux-64`, `osx-64`, 或 `osx-arm64`。
|
其中 `[YOUR_OS]` 可以是 `win64`, `linux-64`, `osx-64`, 或 `osx-arm64`。
|
||||||
|
|||||||
@@ -3,17 +3,21 @@ import time
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
import ssl, base64, hmac
|
import ssl
|
||||||
|
import base64
|
||||||
|
import hmac
|
||||||
from hashlib import sha1
|
from hashlib import sha1
|
||||||
import tempfile
|
import tempfile
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from unilabos.config.config import MQConfig
|
from unilabos.config.config import MQConfig
|
||||||
from unilabos.app.controler import devices, job_add
|
from unilabos.app.controler import devices, job_add
|
||||||
from unilabos.app.model import JobAddReq, JobAddResp
|
from unilabos.app.model import JobAddReq
|
||||||
from unilabos.utils import logger
|
from unilabos.utils import logger
|
||||||
from unilabos.utils.type_check import TypeEncoder
|
from unilabos.utils.type_check import TypeEncoder
|
||||||
|
|
||||||
|
from paho.mqtt.enums import CallbackAPIVersion
|
||||||
|
|
||||||
|
|
||||||
class MQTTClient:
|
class MQTTClient:
|
||||||
mqtt_disable = True
|
mqtt_disable = True
|
||||||
@@ -21,7 +25,7 @@ class MQTTClient:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.mqtt_disable = not MQConfig.lab_id
|
self.mqtt_disable = not MQConfig.lab_id
|
||||||
self.client_id = f"{MQConfig.group_id}@@@{MQConfig.lab_id}{uuid.uuid4()}"
|
self.client_id = f"{MQConfig.group_id}@@@{MQConfig.lab_id}{uuid.uuid4()}"
|
||||||
self.client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=self.client_id, protocol=mqtt.MQTTv5)
|
self.client = mqtt.Client(CallbackAPIVersion.VERSION2, client_id=self.client_id, protocol=mqtt.MQTTv5)
|
||||||
self._setup_callbacks()
|
self._setup_callbacks()
|
||||||
|
|
||||||
def _setup_callbacks(self):
|
def _setup_callbacks(self):
|
||||||
@@ -41,7 +45,7 @@ class MQTTClient:
|
|||||||
logger.error("[MQTT] on_connect ErrorHostNotInit")
|
logger.error("[MQTT] on_connect ErrorHostNotInit")
|
||||||
return
|
return
|
||||||
|
|
||||||
def _on_message(self, client, userdata, msg):
|
def _on_message(self, client, userdata, msg) -> None:
|
||||||
logger.info("[MQTT] on_message<<<< " + msg.topic + " " + str(msg.payload))
|
logger.info("[MQTT] on_message<<<< " + msg.topic + " " + str(msg.payload))
|
||||||
try:
|
try:
|
||||||
payload_str = msg.payload.decode("utf-8")
|
payload_str = msg.payload.decode("utf-8")
|
||||||
@@ -52,7 +56,7 @@ class MQTTClient:
|
|||||||
logger.debug("job_add", type(payload_json), payload_json)
|
logger.debug("job_add", type(payload_json), payload_json)
|
||||||
job_req = JobAddReq.model_validate(payload_json)
|
job_req = JobAddReq.model_validate(payload_json)
|
||||||
data = job_add(job_req)
|
data = job_add(job_req)
|
||||||
return JobAddResp(data=data)
|
return
|
||||||
|
|
||||||
except json.JSONDecodeError as e:
|
except json.JSONDecodeError as e:
|
||||||
logger.error(f"[MQTT] JSON 解析错误: {e}")
|
logger.error(f"[MQTT] JSON 解析错误: {e}")
|
||||||
@@ -87,7 +91,7 @@ class MQTTClient:
|
|||||||
for temp_file in temp_files:
|
for temp_file in temp_files:
|
||||||
try:
|
try:
|
||||||
os.unlink(temp_file)
|
os.unlink(temp_file)
|
||||||
except:
|
except Exception as e:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
@@ -156,7 +160,7 @@ class MQTTClient:
|
|||||||
if self.mqtt_disable:
|
if self.mqtt_disable:
|
||||||
return
|
return
|
||||||
address = f"labs/{MQConfig.lab_id}/registry/"
|
address = f"labs/{MQConfig.lab_id}/registry/"
|
||||||
registry_data = json.dumps({device_id: device_info}, ensure_ascii = False, cls = TypeEncoder)
|
registry_data = json.dumps({device_id: device_info}, ensure_ascii=False, cls=TypeEncoder)
|
||||||
self.client.publish(address, registry_data, qos=2)
|
self.client.publish(address, registry_data, qos=2)
|
||||||
logger.debug(f"Registry data published: address: {address}, {registry_data}")
|
logger.debug(f"Registry data published: address: {address}, {registry_data}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user