diff --git a/python/hfc/hfc.py b/python/hfc/hfc.py index a63bf70..7e03cc6 100644 --- a/python/hfc/hfc.py +++ b/python/hfc/hfc.py @@ -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系统的唯一序列号