feat(wits): 添加WITS TCP发送功能和配置重构

- 新增WitsConfig数据类用于WITS配置管理
- 在AppConfig中集成wits配置选项
- 重命名dependencies.py为config.py并重构配置加载逻辑
- 移除db/config.py文件中的TDengine配置相关代码
- 创建新的model.py文件定义MqttConfig、TmsConfig和TdengineConfig模型
- 更新MQTT模块导入路径从config.dependencies到config.config
- 添加WITS发送器脚本wits_sender.py实现TCP数据包发送
- 在README.md中添加WITS发送器使用说明和配置选项
- 添加WITS样本数据文件data/wits_sample.txt
- 添加requirements.md文档说明项目需求
This commit is contained in:
2026-03-12 10:20:35 +08:00
parent d5d1cb0b7d
commit 45870a2f73
14 changed files with 444 additions and 128 deletions

View File

@@ -1,65 +0,0 @@
from dataclasses import dataclass
from urllib.parse import urlparse
from config import get_value
@dataclass(frozen=True)
class TDengineConfig:
url: str = ""
username: str = ""
password: str = ""
database: str = ""
stable: str = "drilling_realtime_st"
device_code: str = "GJ-304-0088"
pool_size: int = 2
timeout: int = 10
@property
def enabled(self):
return bool(self.base_url and self.database and self.username)
@property
def base_url(self):
base_url, _ = parse_taos_url(self.url)
return base_url
def parse_taos_url(jdbc_url):
if not jdbc_url:
return "", ""
raw = str(jdbc_url).strip()
if raw.lower().startswith("jdbc:taos-rs://"):
raw = "http://" + raw[len("jdbc:TAOS-RS://") :]
elif "://" not in raw:
raw = "http://" + raw
parsed = urlparse(raw)
base_url = f"{parsed.scheme or 'http'}://{parsed.hostname or '127.0.0.1'}:{parsed.port or 6041}"
database = (parsed.path or "").strip("/")
return base_url, database
def _resolve_raw_config(cfg_or_app):
raw = getattr(cfg_or_app, "raw", None)
return raw if isinstance(raw, dict) else cfg_or_app
def load_tdengine_config(cfg_or_app, default_device_code="GJ-304-0088"):
cfg = _resolve_raw_config(cfg_or_app)
url = get_value(cfg, ("tdengine", "url"), ("tdengine-url",), default="")
_, database_from_url = parse_taos_url(url)
return TDengineConfig(
url=url,
username=get_value(cfg, ("tdengine", "username"), ("tdengine-username",), default=""),
password=get_value(cfg, ("tdengine", "password"), ("tdengine-password",), default=""),
database=get_value(cfg, ("tdengine", "database"), ("tdengine-database",), default=database_from_url),
stable=get_value(cfg, ("tdengine", "stable"), ("tdengine-stable",), default="drilling_realtime_st"),
device_code=get_value(
cfg,
("tdengine", "device-code"),
("tdengine", "equipment-sn"),
default=default_device_code,
),
pool_size=int(get_value(cfg, ("tdengine", "pool-size"), ("tdengine-pool-size",), default=2)),
timeout=int(get_value(cfg, ("tdengine", "timeout"), ("tdengine-timeout",), default=10)),
)