From 3ab7a198741e2b2ec77336d9ae47f720686a793a Mon Sep 17 00:00:00 2001 From: wuxu Date: Tue, 23 Jun 2026 17:46:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=9D=E5=A7=8B=E5=8C=96Node.js=204G?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E7=BD=91=E5=85=B3=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现AT指令通信和4G模组管理 - 支持PDU模式短信接收和发送 - 长短信自动合并功能 - 多通道推送支持(钉钉/飞书/Telegram等) - 管理员短信远程控制 - RESTful API接口 - 完整的日志系统 --- .gitignore | 13 ++ AT_COMMANDS.md | 310 ++++++++++++++++++++++++++++++++ README.md | 211 ++++++++++++++++++++++ config.example.json | 77 ++++++++ ecosystem.config.js | 21 +++ package.json | 35 ++++ src/api.js | 209 ++++++++++++++++++++++ src/concat.js | 165 +++++++++++++++++ src/index.js | 145 +++++++++++++++ src/logger.js | 86 +++++++++ src/modem.js | 424 ++++++++++++++++++++++++++++++++++++++++++++ src/push.js | 283 +++++++++++++++++++++++++++++ src/sms.js | 192 ++++++++++++++++++++ 13 files changed, 2171 insertions(+) create mode 100644 .gitignore create mode 100644 AT_COMMANDS.md create mode 100644 README.md create mode 100644 config.example.json create mode 100644 ecosystem.config.js create mode 100644 package.json create mode 100644 src/api.js create mode 100644 src/concat.js create mode 100644 src/index.js create mode 100644 src/logger.js create mode 100644 src/modem.js create mode 100644 src/push.js create mode 100644 src/sms.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..07098b8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +node_modules/ +logs/ +*.log +config.json +.DS_Store +.env +.vscode/ +.idea/ +*.swp +*.swo +*~ +.npm +.eslintcache diff --git a/AT_COMMANDS.md b/AT_COMMANDS.md new file mode 100644 index 0000000..5454799 --- /dev/null +++ b/AT_COMMANDS.md @@ -0,0 +1,310 @@ +# 4G模块AT指令交互文档 + +## 串口配置 + +- **波特率**: 115200 +- **数据位**: 8 +- **停止位**: 1 +- **校验**: None +- **流控**: None + +## 初始化流程 + +### 1. 基础握手 +``` +AT +响应: OK +作用: 测试模组是否响应 +``` + +### 2. 查询模组信息 +``` +ATI +响应: + 厂商名称 + 型号 + 固件版本 + OK +作用: 获取模组厂商、型号、固件版本 +``` + +### 3. 禁用数据连接(防止流量消耗) +``` +AT+CGACT=0,1 +响应: OK +作用: 关闭4G数据连接,防止自动联网消耗流量 +注意: ML307Y型号此命令有bug,需跳过 +``` + +### 4. 配置短信URC上报 +``` +AT+CNMI=2,2,0,0,0 +响应: OK +作用: 配置短信到达时主动上报(URC模式) +参数说明: + - 第1参数=2: 缓冲URC到TE + - 第2参数=2: 短信直接上报+CMT URC(PDU模式) + - 其余参数=0: 禁用状态报告、广播消息等 +``` + +### 5. 设置PDU模式 +``` +AT+CMGF=0 +响应: OK +作用: 设置短信为PDU模式(支持中文、长短信) +``` + +### 6. 等待网络注册 +``` +AT+CEREG? +响应: +CEREG: , + OK +作用: 查询LTE网络注册状态 +值: + - 0: 未注册,未搜索 + - 1: 已注册,本地网络 + - 2: 未注册,正在搜索 + - 3: 注册被拒绝 + - 4: 未知状态 + - 5: 已注册,漫游网络 +成功条件: =1 或 5 +``` + +## 短信接收(URC自动上报) + +当收到短信时,模组会主动发送: + +``` ++CMT: , + +``` + +**示例**: +``` ++CMT: ,26 +0891683108200005F0040D91683158148764F30000222151114270802C4F60597D +``` + +### PDU解析 + +PDU是十六进制字符串,需要使用PDU解析库(如 `node-pdu`)解析: +- **发送者号码** +- **时间戳**(YYMMDDHHMMSS格式,带时区) +- **短信内容**(支持中文UCS2编码) +- **长短信信息**(参考号、当前段号、总段数) + +### 长短信处理 + +长短信PDU包含额外头部(UDH): +- **参考号** (Reference Number): 用于标识同一条长短信的不同分段 +- **总段数** (Total Parts): 该长短信分为几段 +- **当前段号** (Part Number): 当前是第几段(从1开始) + +**合并逻辑**: +1. 检测到长短信(总段数 > 1)时,创建缓存槽位 +2. 使用 `(参考号 + 发送者号码)` 作为唯一标识 +3. 收到每一段后,存入对应位置 +4. 收齐所有分段后,按段号顺序拼接内容 +5. 30秒超时保护:未收齐也强制转发已收到的部分 + +## 短信发送(PDU模式) + +### 1. 编码PDU +使用PDU编码库将目标号码和短信内容编码为PDU十六进制字符串。 + +### 2. 发送AT+CMGS命令 +``` +AT+CMGS= +响应: > (提示符) +作用: 准备发送短信,为PDU数据长度(字节数,不含SMSC) +``` + +### 3. 发送PDU数据 +``` + +响应: +CMGS: + OK +作用: 发送PDU数据,以Ctrl+Z(0x1A)结束 +: 消息参考号 +``` + +**完整流程示例**: +``` +-> AT+CMGS=23 +<- > +-> 0011000D91683158148764F30000AA05E4BDA0E5A5BD1A +<- +CMGS: 123 + OK +``` + +## 其他常用命令 + +### 查询信号强度 +``` +AT+CSQ +响应: +CSQ: , + OK +: 信号强度 (0-31, 99=未知) + - 0-9: 弱 + - 10-14: 一般 + - 15-19: 好 + - 20-31: 很好 + - 99: 未知或不可检测 +``` + +### 查询SIM卡状态 +``` +AT+CPIN? +响应: +CPIN: READY (或其他状态) + OK +状态: + - READY: SIM卡已就绪 + - SIM PIN: 需要PIN码 + - SIM PUK: 需要PUK码 +``` + +### 查询ICCID +``` +AT+CCID +响应: +CCID: + OK +作用: 获取SIM卡ICCID(集成电路卡识别码) +``` + +### 查询IMEI +``` +AT+GSN +响应: + OK +作用: 获取模组IMEI号 +``` + +### 查询运营商 +``` +AT+COPS? +响应: +COPS: ,, + OK +示例: +COPS: 0,0,"CHINA MOBILE" +``` + +### 临时激活数据连接(用于Ping) +``` +AT+CGACT=1,1 +响应: OK +作用: 激活数据连接(用于网络测试后需关闭) +``` + +### Ping测试 +``` +AT+CPING="www.baidu.com",1,4,64,1000,10000,0 +响应: +CPING: 1,,