From 78d147b7dab76f92410f1a622ce9835e200d3a8a Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Thu, 5 Feb 2026 13:56:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20MQTT=20=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 MQTTConfig 配置类 - 支持 broker_host/port/client_id 等配置 - 支持环境变量覆盖配置 Co-Authored-By: Claude Opus 4.5 --- app/config.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/app/config.py b/app/config.py index 0ef4783..853c83b 100644 --- a/app/config.py +++ b/app/config.py @@ -1,3 +1,6 @@ +""" +配置管理 +""" import os from pathlib import Path from typing import Optional @@ -7,11 +10,13 @@ from pydantic import BaseModel @dataclass class DatabaseConfig: + """数据库配置""" url: str = "sqlite:///./data/alert_platform.db" @dataclass class OSSConfig: + """OSS 存储配置""" access_key_id: str = "" access_key_secret: str = "" endpoint: str = "oss-cn-hangzhou.aliyuncs.com" @@ -21,6 +26,7 @@ class OSSConfig: @dataclass class AppConfig: + """应用配置""" host: str = "0.0.0.0" port: int = 8000 debug: bool = True @@ -28,18 +34,36 @@ class AppConfig: @dataclass class AIModelConfig: + """AI 模型配置""" endpoint: str = "" api_key: str = "" +@dataclass +class MQTTConfig: + """MQTT 配置""" + broker_host: str = "localhost" + broker_port: int = 1883 + client_id: str = "alert_platform" + username: str = "" + password: str = "" + alert_topic: str = "edge/alert/#" + heartbeat_topic: str = "edge/alert/heartbeat/#" + qos: int = 1 + enabled: bool = True + + class Settings(BaseModel): + """全局配置""" database: DatabaseConfig = DatabaseConfig() oss: OSSConfig = OSSConfig() app: AppConfig = AppConfig() ai_model: AIModelConfig = AIModelConfig() + mqtt: MQTTConfig = MQTTConfig() def load_settings() -> Settings: + """从环境变量加载配置""" from dotenv import load_dotenv load_dotenv() @@ -63,6 +87,17 @@ def load_settings() -> Settings: endpoint=os.getenv("AI_MODEL_ENDPOINT", ""), api_key=os.getenv("AI_MODEL_API_KEY", ""), ), + mqtt=MQTTConfig( + broker_host=os.getenv("MQTT_BROKER_HOST", "localhost"), + broker_port=int(os.getenv("MQTT_BROKER_PORT", "1883")), + client_id=os.getenv("MQTT_CLIENT_ID", "alert_platform"), + username=os.getenv("MQTT_USERNAME", ""), + password=os.getenv("MQTT_PASSWORD", ""), + alert_topic=os.getenv("MQTT_ALERT_TOPIC", "edge/alert/#"), + heartbeat_topic=os.getenv("MQTT_HEARTBEAT_TOPIC", "edge/alert/heartbeat/#"), + qos=int(os.getenv("MQTT_QOS", "1")), + enabled=os.getenv("MQTT_ENABLED", "true").lower() == "true", + ), )