From 94ce47a4fe807b138a8b99e74647ea282134894b Mon Sep 17 00:00:00 2001 From: "MATRIX\\29620" <2962004889@qq.com> Date: Thu, 20 Feb 2025 16:33:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8D=A2=E7=94=B5=E7=AB=99=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- battery_swap_station/main.py | 104 +++++++++++++++++++++++++++++++++++ battery_swap_station/readme | 41 ++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 battery_swap_station/main.py create mode 100644 battery_swap_station/readme diff --git a/battery_swap_station/main.py b/battery_swap_station/main.py new file mode 100644 index 0000000..43ecd13 --- /dev/null +++ b/battery_swap_station/main.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +主程序入口,负责初始化各个组件并启动MQTT客户端 +""" + +import os +import sys +import signal +import time +import argparse + +from config.config_manager import ConfigManager +from utils.logger import setup_logger +from mqtt.mqtt_client import MQTTClient +from message.message_router import MessageRouter +from handlers.state_handler import StateHandler +from handlers.event_handler import EventHandler +from handlers.request_handler import RequestHandler +from handlers.response_handler import ResponseHandler +from handlers.keepalive_handler import KeepaliveHandler + + +def parse_arguments(): + """解析命令行参数""" + parser = argparse.ArgumentParser(description='玖行充换电云平台与站控系统通信程序') + parser.add_argument('-c', '--config', default='config/config.yaml', + help='配置文件路径') + parser.add_argument('-l', '--log-level', default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='日志级别') + return parser.parse_args() + + +def setup_signal_handlers(mqtt_client): + """设置信号处理器,优雅地关闭程序""" + + def signal_handler(sig, frame): + print("\n正在关闭MQTT客户端...") + mqtt_client.disconnect() + sys.exit(0) + + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) + + +def main(): + """主函数""" + args = parse_arguments() + + # 初始化日志 + logger = setup_logger('main', args.log_level) + logger.info("启动玖行充换电云平台与站控系统通信程序") + + # 加载配置 + config_manager = ConfigManager(args.config) + config = config_manager.get_config() + + # 初始化消息路由器 + message_router = MessageRouter() + + # 初始化各类处理器 + state_handler = StateHandler(config) + event_handler = EventHandler(config) + request_handler = RequestHandler(config) + response_handler = ResponseHandler(config) + keepalive_handler = KeepaliveHandler(config) + + # 注册处理器到路由器 + message_router.register_handler('state', state_handler) + message_router.register_handler('event', event_handler) + message_router.register_handler('request', request_handler) + message_router.register_handler('response', response_handler) + message_router.register_handler('keepalive', keepalive_handler) + + # 初始化MQTT客户端 + mqtt_client = MQTTClient( + broker=config['mqtt']['broker'], + port=config['mqtt']['port'], + client_id=config['mqtt']['client_id'], + username=config['mqtt']['username'], + password=config['mqtt']['password'], + use_tls=config['mqtt']['use_tls'], + message_router=message_router + ) + + # 设置信号处理器 + setup_signal_handlers(mqtt_client) + + # 连接MQTT服务器 + mqtt_client.connect() + + # 主循环 + try: + while True: + time.sleep(1) + except KeyboardInterrupt: + logger.info("接收到退出信号,正在关闭程序...") + mqtt_client.disconnect() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/battery_swap_station/readme b/battery_swap_station/readme new file mode 100644 index 0000000..5161bed --- /dev/null +++ b/battery_swap_station/readme @@ -0,0 +1,41 @@ +# 文件结构 +# ----------------- +# main.py # 主程序入口 +# config/ +# __init__.py +# config_manager.py # 配置管理器 +# config.yaml # 配置文件 +# mqtt/ +# __init__.py +# mqtt_client.py # MQTT客户端 +# encryption/ +# __init__.py +# encryption.py # 加密/解密模块 +# message/ +# __init__.py +# message_parser.py # 消息解析器 +# message_router.py # 消息路由器 +# handlers/ +# __init__.py +# base_handler.py # 基础处理器类 +# state_handler.py # 状态类处理器 +# event_handler.py # 事件类处理器 +# request_handler.py # 请求类处理器 +# response_handler.py # 响应类处理器 +# keepalive_handler.py # 心跳处理器 +# models/ +# __init__.py +# base_model.py # 基础数据模型 +# station_model.py # 站控相关数据模型 +# battery_model.py # 电池相关数据模型 +# charging_model.py # 充电相关数据模型 +# swapping_model.py # 换电相关数据模型 +# utils/ +# __init__.py +# logger.py # 日志工具 +# helpers.py # 辅助函数 +# tests/ # 单元测试 +# __init__.py +# test_mqtt_client.py +# test_encryption.py +# test_message_parser.py \ No newline at end of file