Contents

Air780e 短信转发

注意

  • 此脚本会消耗流量

  • 在更新日志中有提到:

V1002已支持SMS中英文短信收发, 支持长短信自动合并. 但值得提醒的是, 电信卡不可用

  • 我用联通卡测试成功

准备工作

  1. 请先阅读三遍官方文档: 烧录教程
  2. 刷机工具下载:Luatools

刷机步骤

  1. 先下载固件

  2. 再通过【项目管理测试】下载脚本到设备中

    https://statics.lshell.com//images/image-20230206171544263.png

其实刷机步骤官方的烧录教程已经写得很明白了,我这里提一下需要注意的地方吧:

  1. Luatools 下载下来是个单文件,运行的时候会更新以及自动下载一堆固件,建议新建一个空白目录单独存放它

  2. 固件选择:Luatools 目录下的 resource\618_lua_lod\core_V1103\LuatOS-SoC_V1103_EC618_TTS.soc ,关于区别请查看相应的 readme.md

  3. 下载固件功能页面,点下载后,再按住Boot和电源键,其实点下载后,会有明确的提示,照着操作就行了

    https://statics.lshell.com//images/image-20230206171147686.png

  4. 项目管理测试下面同样有操作提示,建议仔细看

脚本

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "smsdemo"
VERSION = "1.0.0"

log.info("main", PROJECT, VERSION)

-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
require "sysplus" -- http库需要这个sysplus

if wdt then
    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end
log.info("main", "sms demo")

--运营商给的dns经常抽风,手动指定
socket.setDNS(nil, 1, "119.29.29.29")
socket.setDNS(nil, 2, "223.5.5.5")

--缓存消息
local buff = {}
-- bark_url 不支持 https(我不会改,有请大佬), 官方 api 好像强制https,
bark_url = "http://api.day.app/push"
bark_key = "换成你自己的"

-- 辅助发送http请求, 因为http库需要在task里运行
function http_post(url, headers, body)
    sys.taskInit(function()
        for i=1,10 do
            local code, headers, body = http.request("POST", url, headers, body).wait()
            log.info("resp", code)
            log.info("body", body)
            if code == 200 then
                break
            end
            sys.wait(5000)
        end
    end)
end

function sms_handler(num, txt)
    -- num 手机号码
    -- txt 文本内容
    log.info("sms", num, txt, txt:toHex())

    -- http演示1, 发json
    local body = json.encode({
        title=num, 
        body=txt,
        device_key=bark_key
    })
    local headers = {}
    headers["Content-Type"] = "application/json"
    log.info("json", body)
    http_post(bark_url, headers, body)
end


--订阅短信消息
sys.subscribe("SMS_INC",function(phone,data)
    --来新消息了
    log.info("notify","got sms",phone,data)
    table.insert(buff,{phone,data})
    sys.publish("SMS_ADD")--推个事件
end)

--------------------------------------------------------------------
-- 接收短信, 支持多种方式, 选一种就可以了
-- 1. 设置回调函数
--sms.setNewSmsCb(sms_handler)
-- 2. 订阅系统消息
--sys.subscribe("SMS_INC", sms_handler)
-- 3. 在task里等着
sys.taskInit(function()
    while true do
        print("ww",collectgarbage("count"))
        while #buff > 0 do--把消息读完
            collectgarbage("collect")--防止内存不足
            local sms = table.remove(buff,1)
            
            sms_handler(sms[1], sms[2])
        end
        log.info("notify","wait for a new sms~")
        print("zzz",collectgarbage("count"))
        sys.waitUntil("SMS_ADD")
    end
end)

-------------------------------------------------------------------
-- 发送短信, 直接调用sms.send就行, 是不是task无所谓
-- sys.taskInit(function()
--     sys.wait(10000)
--     -- 中移动卡查短信
--     -- sms.send("+8610086", "301")
--     -- 联通卡查话费
--     sms.send("10010", "101")
-- end)


-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

如果有更新,可以在仓库中查看: https://github.com/Ansen/Air780E-SMS

废话

官方教程已经很清楚明白了,其实我也不知道这教程还能写些啥,永远无法超过官方