DJOneHub:把大疆一代 4G 模块变成本地 SIM 终端

研究 DJOneHub 如何在 macOS 上管理 QDC507 的短信、4G、GPS、eSIM 与通话,并拆清 v1.2.9 稳定版、v1.2.10 网络唤醒预发布、单设备限制和高风险模块写入边界。

内容更新 2026-08-31

先看结论

它能把闲置 QDC507 变成很有价值的本地通信终端,但上游默认是单设备且会主动修复网络、修改模块状态;先按用途选版本和隔离方案,再谈安装。

截至 2026-08-31 的项目状态

  • 仓库主线提交为 5b15eae;GitHub 默认 Latest 仍是 v1.2.9,v1.2.10 于 2026-08-30 作为 Pre-release 发布。
  • v1.2.9 是当前稳定下载基线,提供 macOS Universal DMG/ZIP 和 Windows amd64 ZIP;Windows 仍没有真实模块全功能验收。
  • v1.2.10 只新增移动设备网络唤醒路径,不改变短信、通话语音、4G 开关和 USB 自动切换的既有设计。
  • 公开 issue 仍有 v1.2.9 通话无声、通话支持启动失败和设备标识变化后的识别问题,不能把功能列表等同于所有硬件已验证。

它把哪些能力放在本机

  • Go 后台负责 USB/AT、短信 PDU、网络、GPS、eSIM/APDU、通话状态和本机 HTTP API。
  • SwiftUI App 负责拨号、接听、短信会话、通讯录、通知、设置、录音入口和状态展示。
  • 本机服务默认只监听 127.0.0.1:7575;SIM、短信、联系人和录音不应暴露到局域网或公网。
  • 公开仓库不包含两个缺少可核源码或明确再分发依据的模块内核文件;首次通话运行时从固定上游下载并逐文件核对 SHA-256。
  • 模块侧语音运行时、USB Audio、运营商 IMS/VoLTE 和 SIM 状态共同决定双向通话,任何单项健康都不能证明真实语音可用。

v1.2.10 网络唤醒到底做了什么

  1. 在模块仍以带 ADB 的 Mac 模式连接时,程序先要求 ADB root,再上传公开 shell 脚本。
  2. 它在 /data/djonehub 保存二进制、日志、开关和备份,在 /etc/init.d 与 rc5.d 建立持久启动项。
  3. 移动模式的 USB ECM 已连接且没有 USB Audio 时,脚本持有 wake lock,并每 15 秒 ping 手机侧地址和 1.1.1.1。
  4. 移动设备断开或恢复带 USB Audio 的 Mac 模式后,脚本释放 wake lock并进入空闲;切回 Mac 模式还会请求停用服务。
  5. Release 明确写明构建机没有连接模块,也没有完成 iPhone/iPad 锁屏 20—30 分钟验收,因此当前只能视为有源码和测试的实验候选。

默认自动化为什么需要先审

  • USB AT 与 ADB 当前按支持的 VID/PID 打开首个设备;两台同型号模块不能靠默认安装器安全区分。
  • 信号连续异常时会依次执行 PS attach、自动选网、射频循环,最终可触发模块重启;这会改变真实网络状态。
  • 后台会检查、创建或启用 macOS 模块网络服务并续租 DHCP;只做短信的人不一定需要这些动作。
  • 短信自动清理 ME 在新实例中默认开启;需要保留模块原始短信时应先确认并关闭,不要等清理后再补救。
  • 首次通话启用会备份后写 USB/IMS 配置并重启模块;虽然代码有回读与回滚,仍属于必须由人确认的持久化硬件变更。

按场景选路线

  • 单台 Mac + 短信/来电:以 v1.2.9 为研究起点,但先关闭不需要的网络修复和自动清理。
  • 单台 Mac + 4G/GPS/eSIM:可评估上游完整 App,逐项验证当前固件和卡片,不假定 eSIM 或通话通用。
  • iPhone/iPad 网络:v1.2.10 仅作预发布候选,先保留 v1.2.9 回滚,再做目标设备锁屏、拔插和恢复 Mac 模式测试。
  • 双设备或短信生产用途:需要按物理 USB location 隔离的定制架构、独立进程和明确回滚,不能直接使用单实例默认安装。
  • 商业用途:先取得合适许可。仓库使用 PolyForm Noncommercial 1.0.0,只允许许可覆盖的非商业用途,不是可任意商用的 MIT/Apache 项目。

发行包与源码验证结果

  • 本轮下载并核对了 v1.2.10 的 macOS DMG、macOS ZIP 与 Windows ZIP,三个配套 SHA-256 文件均验证通过。
  • macOS App 为 arm64 + x86_64 Universal,使用 ad-hoc 签名,没有 TeamIdentifier;Gatekeeper 的 spctl 验证拒绝,不应描述成已公证发行。
  • 当前 main 的 go vet、Swift build 与网络唤醒目标测试通过;这些检查在隔离源码副本中完成,没有连接或操作真实模块。
  • 仓库当前没有可见的 GitHub Actions 工作流;本轮没有执行完整全仓 Go 测试,也没有把本地目标测试描述成维护者 CI 或硬件验收。
  • 源码测试、哈希和本机 API 都不能替代真实 SIM、运营商短信、锁屏网络或双向语音验收。

下载后先核对发行包

mkdir -p /tmp/djonehub-release-check && cd /tmp/djonehub-release-check
gh release download v1.2.9 \
  -R rogerbush007-a11y/DJOneHub-mac-enhanced \
  --pattern 'DJOneHub-macOS-universal-v1.2.9.dmg' \
  --pattern 'DJOneHub-macOS-universal-v1.2.9.dmg.sha256'
shasum -a 256 -c DJOneHub-macOS-universal-v1.2.9.dmg.sha256

参考来源

适合谁看

  • 想在 Mac 上本地收发实体 SIM 短信、查看验证码和来电提醒
  • 想研究大疆一代 4G 模块的 USB 网络、GPS、eUICC/eSIM 或通话控制
  • 已经有一台或多台 QDC507,想判断 v1.2.9、v1.2.10 或定制双实例方案怎么选

操作步骤

  1. 先写清唯一目标:只收发短信、给 Mac 上网、给 iPhone/iPad 用、管理 eSIM,还是需要通话;不同目标不能共用同一套默认配置
  2. 只读核对模块身份、实际 USB 组合、SIM 注册和当前 usbnet;不要先刷固件、改 USBCFG、APN、MBN、VID/PID 或 SIM 文件
  3. 单设备日常使用优先评估 v1.2.9;v1.2.10 只适合明确需要移动设备网络保活、接受模块 root 持久化写入并能做长时间真机验收的人
  4. 只从项目 Release 下载,核对配套 SHA-256;macOS 包是 ad-hoc 签名且没有 Developer ID Team,系统拦截时不要对来源不明的副本移除隔离属性
  5. 先在独立候选环境验证 localhost API、短信轮询、usbnet、网络注册和进程稳定,再由人分别验收真实入站/出站短信、移动设备锁屏网络或双向通话

需要解决的问题

  • Mac 能识别模块,但短信、4G 网卡、USB Audio 或 ADB 只出现一部分
  • 页面能看到来电或通话状态,实际双向语音却没有声音
  • 同时连接两台同 VID/PID 模块后,程序可能控制到错误设备
  • 切到 iPhone/iPad 模式后,锁屏一段时间网络仍可能断开

先理解这些

  • QDC507 的能力取决于实际 USB 组合、固件、SIM、IMS/VoLTE、运营商和 eUICC 卡片,不是看到 2ca3:4006 就代表全部功能可用
  • 上游当前默认只监听 127.0.0.1:7575,USB AT 与 ADB 打开首个匹配的 2ca3:4006 或 2c7c:0125,没有内建按 USB location 的双设备路由
  • v1.2.10 会通过 root ADB 把持久化保活脚本装进模块,并用 wake lock 与周期 ping 维持 USB/蜂窝链路;作者仍将它标为预发布
  • 通话还依赖外置模块语音运行时和真实音频链路;控制命令成功不能替代真机收发声验收

遇到困难时

  • 只想收发短信时,保持 usbnet=0,并关闭自动 DHCP、信号恢复、短信自动清理等不需要的写入;不要直接照搬上游上网优先配置
  • 需要两台模块时,为每台设备绑定 USB location、独立端口和独立状态目录;不要让两个进程都选择第一个匹配设备
  • 通话无声或首次初始化失败时先回到可用短信基线,核对公开 issue 与真实 USB Audio/IMS 状态,不反复写配置或重启模块
  • v1.2.10 保活没有通过目标手机与目标固件的 20—30 分钟锁屏验收时,继续使用 v1.2.9,或切回 Mac 模式让保活服务停止