[feat] add auto_upload_mqtt_start function

This commit is contained in:
zhji 2026-01-12 23:15:42 +08:00
parent 5e1923a895
commit d78533cb37

View File

@ -111,11 +111,8 @@ class ModbusGasAnalyzer:
self.test_time_entry = tk.Entry(left_frame, font=('Arial', 12), width=20)
self.test_time_entry.grid(row=1, column=1, sticky='ew', pady=10)
# 自动填入当前时间,但如果已有信息则保留
if self.user_info["测试时间"]:
self.test_time_entry.insert(0, self.user_info["测试时间"])
else:
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.test_time_entry.insert(0, current_time)
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.test_time_entry.insert(0, current_time)
# 样品信息
tk.Label(left_frame, text="样品信息:", font=('Arial', 12), bg=self.custom_blue).grid(row=2, column=0, sticky='w', pady=10, padx=(30, 20))
@ -329,6 +326,8 @@ class ModbusGasAnalyzer:
tk.Button(button_frame, text="退出", font=('Arial', 12),
command=self.root.quit, bg='red', fg='white').pack(side='right', padx=20)
# 自动通过MQTT上传到云
self.auto_upload_mqtt_start()
# 自动保存报告
self.save_report()
@ -796,6 +795,66 @@ class ModbusGasAnalyzer:
print(f"MQTT断开错误: {e}")
return
def auto_upload_mqtt_start(self):
# 将数据通过MQTT上传到服务器
print(f"自动开始上传到MQTT");
"""连接MQTT服务器"""
try:
self.mqtt_client = mqtt.Client()
self.mqtt_client.username_pw_set(
self.mqtt_info["用户名"],
self.mqtt_info["密码"]
)
def on_connect(client, userdata, flags, rc):
if rc == 0:
print(f"自动上传MQTT连接成功: {rc}")
else:
print(f"自动上传MQTT连接失败: {rc}")
return
self.mqtt_client.on_connect = on_connect
self.mqtt_client.connect(
self.mqtt_info["服务器地址"],
int(self.mqtt_info["端口号"]),
1
)
self.mqtt_client.loop_start()
except ValueError as e:
# 处理端口号转换错误
print(f"自动上传的端口号必须是数字: {str(e)}")
return
except Exception as e:
print(f"自动上传MQTT连接错误: {str(e)}")
return
"""整理MQTT数据"""
mqtt_payload = []
for key, value in self.user_info.items():
mqtt_payload.append(f"{key}: {value}")
mqtt_payload.append(f"浓度: {max(0.0, min(self.show_concentration, 99.990)):.3f}%")
"""上传数据到MQTT"""
try:
if self.mqtt_client:
result = self.mqtt_client.publish(
self.mqtt_info["主题"],
"\r\n".join(mqtt_payload),
qos=1 #服务质量等级
)
if result.rc == mqtt.MQTT_ERR_SUCCESS:
print(f"自动MQTT上传成功")
else:
print(f"自动MQTT上传失败: {result}")
return
except Exception as e:
print(f"自动MQTT上传错误: {str(e)}")
return
"""断开MQTT连接"""
try:
self.mqtt_client.loop_stop()
self.mqtt_client.disconnect()
self.mqtt_client = None
except Exception as e:
print(f"自动MQTT断开错误: {e}")
return
def get_windows_serial_number():
"""
获取Windows系统的唯一序列号