前些天跟风上车了 AIR780E ,到手发现不支持电信短信转发,再加上官方二次开发也没放出来(官网显示 11 月 13 号放出),直接吃灰,立马入了个 AIR724 (外接电源工业应用铁盒那种),724 支持电信 VoLTE 状态下的短信收发,最好选择带 USB 接口调试这种,方便固件和脚本的刷写。 参考了几位大佬的脚本,谢谢大佬们的示范,我做了点微不足道的复制粘贴工作
使用 Air724ug 开发板进行短信转发 https://web.archive.org/web/20221026074816/https://blog.okwlan.com/article/air724ug.html
使用 Air724UG 作为短信转发器 https://www.lotlab.org/2021/10/17/air724ug-sms-forwarder/
air724UG + Luat 玩转物联网(一) 环境搭建及固件烧录 https://www.jianshu.com/p/1f7043fff6de
准备工作:
1 、724 模块+天线+电源+数据线+驱动+luatoolsV2 调试软件 2 、电信卡(带流量,利用自身流量转发到 bark ) 3 、已部署好的 bark 服务器地址
实际操作( WIN7 驱动支持不好,工具显示不正常,建议 WIN10 操作):
1 、装好驱动打开 luatools 对模块进行刷机 选择 luatools\resource\8910_lua_lod\core_V4018\LuatOS-Air_V4018_RDA8910_TTS_NOLVGL_FLOAT.pac 进行下载,重启后进行下一步
2 、烧写脚本 进入项目管理测试里新建一个项目名称( SMS 之类的) 底层 core 选择 luatools\resource\8910_lua_lod\core_V4018\LuatOS-Air_V4018_RDA8910_TTS_NOLVGL_FLOAT.pac 脚本文件选择 luatools\resource\8910_script\script_LuaTask_V2.4.3\demo\sms 下面的 main.lua 和 testSms.lua 并对 testSms.lua 脚本文件做以下编辑,并把第三行的 BARK_URL 替换成自己的:
PROJECT = "SMS_Forwarder"
VERSION = "1.0.0"
BARK_URL = "http://XXX.XXX.XXX.XXX:8080/ABCDEFGHIJK/" -- 替换成自己的 bark 推送地址
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
-- 将消息发送到你的平台 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.gb2312ToUtf8(data) -- 短信编码要转换为目标平台支持的 UTF-8
data = string.gsub(data, "*", "\\*") -- Telegram 特殊字符转义
data = string.gsub(data, "_", "\\_") -- Telegram 特殊字符转义
notifyToBark(num.." ("..datetime.."):\r\n"..data)
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 , 246060*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()
勾选 usb 打印 trace 、添加默认 lib 、升级文件包含脚本 选择下载脚本,7-8S 和显示成功,会自动重启,等个半分钟左右就可以发短信和打电话测试了
1
nirvanahh OP 代码贴出来段七八糟的,搞不懂了,有需要的密我发脚本
|
2
lucifer9 2022-11-10 16:38:36 +08:00
724 支持 VoLTE ,那它接打电话,语音是能通过程序处理吗?还是必须接 Mic 和 Speaker
|
3
nirvanahh OP @lucifer9 我只需要实现短信转发功能,其它的我不太会;这个脚本利用了固件 TTS 文字转语音功能,直接打电话会播报语音,内容和代码里的中文一样。
|
4
EngAPI 2022-11-10 19:35:36 +08:00
我全电信卡,看来买的 9.9 是吃灰了
|
5
FanError 2022-11-10 19:49:13 +08:00
楼主的代码支持双卡吗?前段时间也在看这开发板。
|
6
fenghuang 2022-11-11 13:04:04 +08:00 via Android
724 和 780 价格差不少呢,最便宜也要 50+
|