# DbusSmsForward DbusSmsForward 的重构仓库目前已经具备一套可运行的 **Python 版本主链路**: - 配置加载与兼容旧版 `appSettings` - 文件短信源轮询 - ModemManager 短信收取/发送抽象 - 多通知通道分发(含 AutmanPush) - Web 控制台(运行总览 / 最近事件 / 配置中心 / 短信测试台) - CLI 运行、配置校验、环境自检、手工发送、Web 服务启动 - `env-check` 支持 text/json 两种输出,便于人看和自动化集成 - 单元测试与集成测试 仓库里仍保留原始 .NET 版本源码,便于对照迁移;当前建议优先使用 `src/` 下的 Python 实现。 --- ## 当前重构状态 已完成的 Python 能力: - `validate-config`:配置校验 - `env-check`:环境自检(检查 Python / 配置 / DBus / ModemManager 依赖) - `run`:轮询短信源并分发通知 - `send`:手工触发通知分发;`--real-sms` 走真实短信发送 - `serve-web`:启动 Web 控制台 - Web API: - `GET /api/health` - `GET /api/system/status` - `GET /api/dashboard` - `GET /api/events` - `GET/POST /api/settings` - `POST /api/sms/send` 已覆盖的验证: - 47 个自动化测试全部通过 - `appsettings.python.json` 配置校验通过 - 文件短信源手工跑通 --- ## 目录说明 ```text src/dbussmsforward/ Python 重构主实现 tests/ 自动化测试 wwwroot/ Web 控制台静态资源 DbusTest/ 原始 .NET 实现(迁移参考) appsettings.python.json Python 示例配置 ``` --- ## 运行要求 - Python 3.11+ - 当前项目采用 `src/` 布局,直接运行时请带上 `PYTHONPATH=src` 如果要接真实 ModemManager / DBus: - 目标机器需要可访问系统 DBus - 需要存在 `org.freedesktop.ModemManager1` --- ## 快速开始 ### 1)校验配置 ```bash PYTHONPATH=src python3 -m dbussmsforward.cli validate-config --config appsettings.python.json ``` ### 2)环境自检 ```bash PYTHONPATH=src python3 -m dbussmsforward.cli env-check --config appsettings.python.json PYTHONPATH=src python3 -m dbussmsforward.cli env-check --config appsettings.python.json --format json ``` - 文件短信源场景:检查配置文件、Python 运行时、通知通道、短信文件路径 - ModemManager 场景:额外检查 `dbus_next`、`dbus-send` / `dbus-monitor` / `mmcli`、systemd 或 OpenWRT init 脚本提示 - 返回码:`0` 表示全部通过,`2` 表示存在缺项,适合部署脚本或 CI 直接判定 - `--format json`:输出 `results` + `summary`,适合安装器、CI、健康检查脚本消费 ### 3)跑文件短信源示例 ```bash PYTHONPATH=src python3 -m dbussmsforward.cli run --config appsettings.python.json ``` ### 3)手工发送一条测试短信到通知链路 ```bash PYTHONPATH=src python3 -m dbussmsforward.cli send --config appsettings.python.json --to 10086 --text '测试短信' ``` ### 4)真实调用 ModemManager 发送短信 前提:配置中的 `sms_source.kind` 为 `modemmanager`。 ```bash PYTHONPATH=src python3 -m dbussmsforward.cli send --config appsettings.python.json --to 10086 --text '测试短信' --real-sms ``` ### 5)启动 Web 控制台 ```bash PYTHONPATH=src python3 -m dbussmsforward.cli serve-web --config appsettings.python.json --host 0.0.0.0 --port 8080 ``` 打开:`http://127.0.0.1:8080` --- ## 配置示例 项目内置了 `appsettings.python.json`,包含: - `forwarding.device_name` - `notifications.console` - `notifications.autman_push` - `sms_source.kind=file` - `sms_source.path=tests/fixtures/messages.json` 示例里默认启用了 console,AutmanPush 默认关闭,适合本地先验证主链路。 --- ## Web 控制台功能 当前 Web 页面的核心能力: - 运行总览:服务状态、监听地址、设备名、短信源、启用通道 - 最近事件:最近短信转发/发送结果,显示成功失败与通道 - 配置中心:在线修改配置并落盘 - 短信测试台:直接从网页发起手工测试 - 操作结果面板:展示最近一次操作返回 适合 Debian/OpenWRT 场景下作为单机维护后台。 --- ## 开发者工作流 ### 跑完整测试 ```bash PYTHONPATH=src python3 -m unittest discover -s tests -v ``` ### 常用单命令回归 ```bash PYTHONPATH=src python3 -m dbussmsforward.cli validate-config --config appsettings.python.json PYTHONPATH=src python3 -m dbussmsforward.cli run --config appsettings.python.json ``` ### 可编辑安装 ```bash python3 -m pip install -e . ``` 安装后可直接使用: ```bash dbussmsforward validate-config --config appsettings.python.json dbussmsforward serve-web --config appsettings.python.json --port 8080 ``` --- ## 兼容性说明 Python 版本配置加载器兼容两类结构: 1. 新结构:`daemon` / `forwarding` / `notifications` / `sms_source` 2. 旧结构:`.NET appSettings` 包装格式 其中 Autman Push 相关配置需包含: - `ApiUrl` / `api_url` - `AccessToken` / `access_token` - `Method` / `method` --- ## 部署 本仓库已经补了部署模板,见: - `docs/deployment.md` - `deploy/common/appsettings.deploy.json` - `deploy/debian/dbussmsforward.service` - `deploy/debian/install.sh` - `deploy/openwrt/dbussmsforward.init` - `deploy/openwrt/install.sh` 支持两类部署方式: 1. **Debian + systemd** 2. **OpenWRT + procd** 服务文件默认使用: - 配置路径:`/etc/dbussmsforward/appsettings.json` - 程序目录:`/opt/dbussmsforward` - 运行模式:`python3 -m dbussmsforward.cli run --iterations 0` `--iterations 0` 表示持续轮询,适合作为守护进程运行。 --- ## 后续建议 虽然主链路、文档和基础部署模板已经齐了,但如果继续往正式交付推进,可以按这个顺序继续: 1. 增加真实 Debian / OpenWRT 机器上的联调记录 2. 补充打包发布流程(wheel / sdist / release artifact) 3. 基于真实机器反馈继续扩展环境自检项(例如联网探测、服务状态细查) 4. 再决定是否补 Web 登录、权限和更完整的运维页面 --- ## 参考 1. [ModemManager API document](https://www.freedesktop.org/software/ModemManager/api/latest/) 2. [Tmds.DBus](https://github.com/tmds/Tmds.DBus)