V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
关于交易安全的提示
在您初次进行交易之前,请点击上面的黄色横条阅读关于交易安全的提示。
为了提高 V2EX 的有效信息质量,在发布交易信息时,除了遵守安全提示中的说明外,也请注意下面的规则:
ggbond2233
V2EX  ›  二手交易

使用 Air724ug 开发板进行短信转发(转发)

  •  
  •   ggbond2233 · 2022-10-29 09:22:21 +08:00 · 1472 次点击
    这是一个创建于 550 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文经常打不开 这边做个备份 原文地址: 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.gb2312ToUtf8(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 网络,需要消耗一定的流量,同样带来的好处是,不依赖外部网络,在线率更高。

    8 条回复    2022-10-30 12:30:41 +08:00
    rockivy
        1
    rockivy  
       2022-10-29 09:31:00 +08:00
    为啥最近这个模块还有 luatOS 在 V 站这么火 XD
    nexo
        2
    nexo  
       2022-10-29 09:35:47 +08:00 via Android
    @rockivy 看了下那家店光靠卖这个这两天赚了 30 个 w 了
    ggbond2233
        3
    ggbond2233  
    OP
       2022-10-29 09:44:37 +08:00
    @rockivy 因为有短信转发这个需求, 而且能跑 lua 脚本,开发容易点
    @nexo 赚 30 应该赚不到, 9.9 包邮也就成本吧,这个主要就是给开发人先发一波体验了
    rockivy
        4
    rockivy  
       2022-10-29 09:46:10 +08:00
    @nexo 这是有什么推广吧。
    按理说能联网的树莓派,或者移动魔百盒装 armbian 跑 docker ,都能实现网络消息的发送,没必要非得插 sim 卡发短信通知吧
    nanjingwuyanzu
        5
    nanjingwuyanzu  
       2022-10-29 09:50:36 +08:00
    @rockivy 理解下什么叫短信转发。
    nexo
        6
    nexo  
       2022-10-29 10:24:25 +08:00
    @ggbond2233 嗯 我说的是流水
    rockivy
        7
    rockivy  
       2022-10-29 14:56:33 +08:00
    @nanjingwuyanzu 是我想岔了 : )
    rimutuyuan
        8
    rimutuyuan  
       2022-10-30 12:30:41 +08:00
    air780e 目前只能 AT ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2259 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:54 · PVG 12:54 · LAX 21:54 · JFK 00:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.