
在您初次进行交易之前,请点击上面的黄色横条阅读关于交易安全的提示。 为了提高 V2EX 的有效信息质量,在发布交易信息时,除了遵守安全提示中的说明外,也请注意下面的规则:
拼车信息请发到 /go/cosub 节点。
如果没有发送到 /go/cosub,那么会被移动到 /go/pointless。如果持续触发这样的移动,会导致账号被禁用。
原文经常打不开 这边做个备份 原文地址: https://web.archive.org/web/20221026074816/https://blog.okwlan.com/article/air724ug.html
正文 需求 我有一个 0 月租的电信手机卡,一直都是当做备用机进行注册账号,收发垃圾短信使用,之前的方案是: 树莓派+ec20 + 卡托 + gammu-smsd 进行处理转发,但是不知道是树莓派问题还是 ec20 多问题,不是很稳定,所以寻找替代方案。无意中看到了 4G LTE DTU 模块,可以用来尝试一波。
硬件 air724ug 开发板。淘宝上有很多,价格不到 50 元,非常合适,支持 LuatOS 进行二次开发 软件 LuatOS 链接: 地址 下载工具 Luatools: 调试下载固件工具: 地址 驱动:调试下载固件使用的驱动: 地址 LuatOS 固件:使用 LuatOS-Air 固件 地址 烧录固件 固件选择:Luat_RDA8910_TTS_NOLVGL_FLOAT 这个版本,支持 TTS ,不支持蓝牙 使用 Luatools 将固件和上层的 lib 烧录进入 air724ug 二次开发短信转发 Lua 脚本
PROJECT = "SMS_Forwarder" VERSION = "1.0.0" BARK_URL = "https://api.day.app/M8xxxxxxxx/" require "sys" require "http" require "sms" require "common" require "cc" require "audio" require "net" -- HTTP 回调,显示调试信息用 function httpCallback(result, prompt, head, body) if result then print("HTTP", prompt, body) else print("HTTP Request Failed. ", prompt) end end -- 推送信息到 BARK function notifyToBark(msg) http.request( "GET", -- BARK_URL..string.urlEncode(msg), BARK_URL..string.rawurlEncode(msg), -- 对内容中文进行编码 nil, -- 不指定证书 nil, nil, 30000, -- 发送超时,ms httpCallback, -- 回调 nil ) end --[[ num:短信号码,ASCII 码字符串格式 data:短信内容,字符串格式 datetime:短信日期和时间,ASCII 码字符串格式 ]] function smsCallback(num, data, datetime) print("SMS FROM ", num, " IN ", datetime) print(data) data = common.ToUtf8(data) -- 短信编码要转换为目标平台支持的 UTF-8 -- data = string.gsub(data, "*", "\\*") -- Telegram 特殊字符转义 -- data = string.gsub(data, "_", "\\_") -- Telegram 特殊字符转义 notifyToBark(data.."。from:"..num) end call_in = false -- 电话拨入回调,在这里发送通知并接通电话 function call_incoming(num) print("CALL FROM ", num) if not call_in then call_in = true notifyToBark(num.." 给您来电") cc.accept(num) end end -- 电话接通回调,这里播放 TTS 通知对方 function call_connected(num) print("CALL CONNECTED") call_in = false --通话中向对方播放 TTS audio.play(7,"TTS","您好,机主无法接听您的来电,请使用短信联系机主。",7,nil,true,2000) --30 秒之后主动结束通话 sys.timerStart(cc.hangUp,30000,num) end -- 电话挂断回调,停止 TTS function call_disconnected(discReason) print("CALL DISCONNECTED") call_in = false sys.timerStopAll(cc.hangUp) audio.stop() end -- 定时任务:每天发送短信到 10001 查询流量 sys.timerLoopStart( function() sms.send("10001", "108", nil, nil) end , 24*60*60*1000 ) --加载网络指示灯和 LTE 指示灯功能模块 --根据自己的项目需求和硬件配置决定:1 、是否加载此功能模块; 2 、配置指示灯引脚 --合宙官方出售的 Air720U 开发板上的网络指示灯引脚为 pio.P0_1 ,LTE 指示灯引脚为 pio.P0_4 require "netLed" pmd.ldoset(2,pmd.LDO_VLCD) netLed.setup(true,pio.P0_1,pio.P0_4) --设置短信回调 sms.setNewSmsCb(smsCallback) --禁用 RNDIS ,防止跑流量 ril.request("AT+RNDISCALL=0,1") --注册电话回调 sys.subscribe("CALL_INCOMING", call_incoming) sys.subscribe("CALL_CONNECTED", call_connected) sys.subscribe("CALL_DISCONNECTED", call_disconnected) --每 1 分钟查询一次 GSM 信号强度 --每 1 分钟查询一次基站信息 net.startQueryAll(60000, 60000) -- 系统初始化 sys.init(0, 0) sys.run() 将 BARK_URL 改成自己对应的 bark app 推送地址 如果使用其他推送,修改 notifyToBark 函数,实现相关逻辑 默认开启了来电提醒,会将来电号码推送给手机,如果不需要 将 notifyToBark(num.." 给您来电")注释掉 默认开启了来电自动接听,并且播放 TTS 语音提醒,如果不需要,注释掉电话相关的回调注册 后记 使用两天后,效果非常好,几乎收到短信 2s 左右就会推送到手机,相比之前的方案,实时性提高了。但是由于不能使用 WIFI 网络,需要消耗一定的流量,同样带来的好处是,不依赖外部网络,在线率更高。
1 sometimesna1ve 2022-10-29 09:31:00 +08:00 为啥最近这个模块还有 luatOS 在 V 站这么火 XD |
3 ggbond2233 OP |
4 sometimesna1ve 2022-10-29 09:46:10 +08:00 @nexo 这是有什么推广吧。 按理说能联网的树莓派,或者移动魔百盒装 armbian 跑 docker ,都能实现网络消息的发送,没必要非得插 sim 卡发短信通知吧 |
5 nanjingwuyanzu 2022-10-29 09:50:36 +08:00 @rockivy 理解下什么叫短信转发。 |
6 nexo 2022-10-29 10:24:25 +08:00 @ggbond2233 嗯 我说的是流水 |
7 sometimesna1ve 2022-10-29 14:56:33 +08:00 @nanjingwuyanzu 是我想岔了 : ) |
8 14v45mJPBYJW8dT7 2022-10-30 12:30:41 +08:00 air780e 目前只能 AT ? |