commit 3ab7a198741e2b2ec77336d9ae47f720686a793a Author: wuxu Date: Tue Jun 23 17:46:56 2026 +0800 feat: 初始化Node.js 4G短信网关项目 - 实现AT指令通信和4G模组管理 - 支持PDU模式短信接收和发送 - 长短信自动合并功能 - 多通道推送支持(钉钉/飞书/Telegram等) - 管理员短信远程控制 - RESTful API接口 - 完整的日志系统 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,,