Air780e 短信转发
Contents
注意
-
此脚本会消耗流量
-
在更新日志中有提到:
V1002已支持SMS中英文短信收发, 支持长短信自动合并. 但值得提醒的是, 电信卡不可用
- 我用联通卡测试成功
准备工作
刷机步骤
-
先下载固件
-
再通过【项目管理测试】下载脚本到设备中
其实刷机步骤官方的烧录教程已经写得很明白了,我这里提一下需要注意的地方吧:
-
Luatools 下载下来是个单文件,运行的时候会更新以及自动下载一堆固件,建议新建一个空白目录单独存放它
-
固件选择:Luatools 目录下的
resource\618_lua_lod\core_V1103\LuatOS-SoC_V1103_EC618_TTS.soc
,关于区别请查看相应的 readme.md -
下载固件功能页面,点下载后,再按住Boot和电源键,其实点下载后,会有明确的提示,照着操作就行了
-
项目管理测试下面同样有操作提示,建议仔细看
脚本
-- 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
废话
官方教程已经很清楚明白了,其实我也不知道这教程还能写些啥,永远无法超过官方