# air780e-forwarder **Repository Path**: caraba/air780e-forwarder ## Basic Information - **Project Name**: air780e-forwarder - **Description**: air780e 相关转发设置 - **Primary Language**: Lua - **License**: MIT - **Default Branch**: air780e - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-07-13 - **Last Updated**: 2026-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Air780E 单卡短信转发 + MQTT 远程发信 基于 [0wQ/air780e-forwarder](https://github.com/0wQ/air780e-forwarder)(MIT)二次开发。 **分支:** `air780e` — 单卡槽 + 巴法云 MQTT 远程发信(支持 V1/V2 指令)。 双卡 Air780EPV 版本见 [`air780epv`](https://gitee.com/a-jie/air780e-forwarder/tree/air780epv) 分支。 ## 固件 | 文件 | 型号 | |------|------| | `firmware/LuatOS-SoC_V1113_EC618.soc` | Air780E (EC618) | ## 流程概览 ```mermaid flowchart LR subgraph 设备 Air780E A[收到短信] --> B[util_notify] C[MQTT 收指令] --> D[sms_send] D --> E[sms.send 发信] B --> F[钉钉 / SMTP] end subgraph 云端 G[钉钉/企微/飞书] --> H[cloud/work.js] H --> I[巴法云 MQTT] end I --> C J[Luatools 刷机] --> 设备 ``` ## 如何使用 配置写在本地 `script/config.lua`(从 `config.example.lua` 复制)。`config.lua` 已在 `.gitignore` 中排除,不会被提交。 ### 模式一:仅短信转发 **作用:** 模块收到短信 → 推送到钉钉 / 邮箱。不需要从外部远程发短信。 1. `git checkout air780e` 2. `copy script\config.example.lua script\config.lua` 3. 填写通知相关字段: | 字段 | 说明 | |------|------| | `NOTIFY_TYPE` | 如 `{ "dingtalk", "smtp" }` | | `DINGTALK_WEBHOOK` / `DINGTALK_SECRET` | 钉钉机器人 | | `SMTP_HOST` / `SMTP_USERNAME` / `SMTP_PASSWORD` 等 | 邮件通知 | 4. `BEMFA_CONFIG.PASSWORD` 留空即可(不连接 MQTT,转发功能仍正常) 5. Luatools 烧录(ini 中列出的是 `config.lua`,不是 `config.example.lua`) --- ### 模式二:远程发短信(直连巴法云) **作用:** 通过 HTTP 向巴法云推送 JSON,设备订阅 MQTT 后执行发信。适合脚本、服务器等**固定格式**调用。 **设备端额外配置:** | 字段 | 示例占位 | 说明 | |------|----------|------| | `BEMFA_CONFIG.TOPIC` | `mysms001` | 巴法云主题名 | | `BEMFA_CONFIG.PASSWORD` | `your-bemfa-private-uid` | 巴法云控制台私钥 | | `BEMFA_CONFIG.HOST` | `bemfa.com` | 默认即可 | | `BEMFA_CONFIG.PORT` | `9501` | 默认即可 | 烧录联网后,日志出现 `巴法云连接成功` 表示 MQTT 已就绪。 **HTTP 推送地址:** ```http GET http://api.bemfa.com/api/device/v1/data/3/push/get/ ``` **Query 参数(必填):** | 参数 | 占位示例 | 说明 | |------|----------|------| | `uid` | `your-bemfa-private-uid` | 巴法云私钥,与 `BEMFA_CONFIG.PASSWORD` 相同 | | `topic` | `mysms001` | 主题,与 `BEMFA_CONFIG.TOPIC` 相同 | | `msg` | 见下方 JSON(需 URL 编码) | 发信指令正文 | **`msg` 内 JSON 字段:** | 字段 | V1 | V2(推荐) | 说明 | |------|----|----|------| | `target` | 必填 | 可选 | 本机号码或 IMEI,用于识别目标设备 | | `fromPhone` | — | 必填 | 本机 11 位号码(支持 `+86` 归一化) | | `ver` | — | 填 `2` | V2 格式标识 | | `sendTarget` | 必填 | 必填 | 要发送到的号码,如 `10086` | | `msg` | 必填 | 必填 | 短信内容 | **V1 示例:** ```json { "target": "13800001111", "sendTarget": "10086", "msg": "CXLL" } ``` **V2 示例:** ```json { "ver": 2, "fromPhone": "13800001111", "sendTarget": "10086", "msg": "CXLL" } ``` **curl 示例(占位符请替换):** ```bash MSG='{"ver":2,"fromPhone":"13800001111","sendTarget":"10086","msg":"CXLL"}' curl -G "http://api.bemfa.com/api/device/v1/data/3/push/get/" \ --data-urlencode "uid=your-bemfa-private-uid" \ --data-urlencode "topic=mysms001" \ --data-urlencode "msg=$MSG" ``` 设备匹配本机号码后调用 `sms.send`;若已配置钉钉/SMTP,执行结果会推送通知。 --- ### 模式三:动态调用(钉钉 / 企微 / 飞书 → 自然语言) **作用:** 在 IM 群里用自然语言发指令,无需手写 JSON。例如: ```text 13800001111 10086 查询流量 ``` **链路:** IM 机器人 / 工作台助手 → **Cloudflare Worker**(`cloud/work.js`)→ 巴法云 → 设备 **步骤:** 1. 完成模式二的设备端 `BEMFA_CONFIG` 配置并烧录 2. 将 `cloud/work.js` 部署到 [Cloudflare Workers](https://workers.cloudflare.com) 3. Worker 环境变量: | 变量 | 值 | |------|-----| | `BEMFA_UID` | = `BEMFA_CONFIG.PASSWORD` | | `BEMFA_TOPIC` | = `BEMFA_CONFIG.TOPIC` | 4. 钉钉 / 企业微信 / 飞书 自定义机器人或工作台助手,Outgoing Webhook 指向 Worker URL(POST JSON) **IM 侧 POST 示例(钉钉格式,内容与模式三示例一致):** ```json { "msgtype": "text", "text": { "content": "13800001111 10086 查询流量" } } ``` 企业微信、飞书等同理,只要 POST 到 Worker 且 body 中能取到文本内容即可。Worker 解析后转为 V2 JSON 推送巴法云。 **本地测试解析:** ```bash npm run test:work ``` --- ## 刷机 1. 克隆仓库:`git clone https://gitee.com/a-jie/air780e-forwarder.git` 2. `git checkout air780e` 3. 准备 `script/config.lua`(见上文) 4. Luatools 打开 `luatool/project.ini`,将 `{REPO}` 换成本仓库绝对路径 5. 下载固件 + 脚本 ## License MIT(见 [LICENSE](LICENSE))