| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- --[[
- @module excloud_test
- @summary excloud测试文件
- @version 1.0
- @date 2025.09.25
- @author 王城钧
- @usage
- 本demo演示的功能为:
- 演示excloud扩展库的使用。
- ]]
- -- 导入excloud库
- local excloud = require("excloud")
- --加载AirSHT30_1000驱动文件
- local air_sht30 = require "AirSHT30_1000"
- --加载lbsLoc2库
- local lbsLoc2 = require("lbsLoc2")
- -- 注册回调函数
- excloud.on(function(event, data)
- log.info("用户回调函数", event, json.encode(data))
- if event == "connect_result" then
- if data.success then
- log.info("连接成功")
- else
- log.info("连接失败: " .. (data.error or "未知错误"))
- end
- elseif event == "auth_result" then
- if data.success then
- log.info("认证成功")
- else
- log.info("认证失败: " .. data.message)
- end
- elseif event == "message" then
- log.info("收到消息, 流水号: " .. data.header.sequence_num)
- -- 处理服务器下发的消息
- for _, tlv in ipairs(data.tlvs) do
- if tlv.field == excloud.FIELD_MEANINGS.CONTROL_COMMAND then
- log.info("收到控制命令: " .. tostring(tlv.value))
- -- 处理控制命令并发送响应
- local response_ok, err_msg = excloud.send({
- {
- field_meaning = excloud.FIELD_MEANINGS.CONTROL_RESPONSE,
- data_type = excloud.DATA_TYPES.ASCII,
- value = "命令执行成功"
- }
- }, false)
- if not response_ok then
- log.info("发送控制响应失败: " .. err_msg)
- end
- end
- end
- elseif event == "disconnect" then
- log.warn("与服务器断开连接")
- elseif event == "reconnect_failed" then
- log.info("重连失败,已尝试 " .. data.count .. " 次")
- elseif event == "send_result" then
- if data.success then
- log.info("发送成功,流水号: " .. data.sequence_num)
- else
- log.info("发送失败: " .. data.error_msg)
- end
- end
- end)
- local getCellInfo1
- local band1
- local lat, lng
- -- 定期轮训式
- sys.taskInit(function()
- sys.wait(3000)
- while 1 do
- mobile.reqCellInfo(15)
- sys.waitUntil("CELL_INFO_UPDATE", 30000)
- getCellInfo1 = mobile.getCellInfo()
- band1 = getCellInfo1[1].band
- log.info("驻留频段", band1, json.encode(getCellInfo1))
- lat, lng, t = lbsLoc2.request(5000, nil, nil, true) --需要经纬度和当前时间
- --(时间格式{"year":2024,"min":56,"month":11,"day":12,"sec":44,"hour":14})
- log.info("lbsLoc2", lat, lng, (json.encode(t or {}))) --打印经纬度和时间
- sys.wait(60000)
- end
- end)
- local temprature, humidity
- sys.taskInit(function()
- -- 如果当前时间点设置的默认网卡还没有连接成功,一直在这里循环等待
- while not socket.adapter(socket.dft()) do
- log.warn("tcp_client_main_task_func", "wait IP_READY", socket.dft())
- -- 在此处阻塞等待默认网卡连接成功的消息"IP_READY"
- -- 或者等待1秒超时退出阻塞等待状态;
- -- 注意:此处的1000毫秒超时不要修改的更长;
- -- 因为当使用exnetif.set_priority_order配置多个网卡连接外网的优先级时,会隐式的修改默认使用的网卡
- -- 当exnetif.set_priority_order的调用时序和此处的socket.adapter(socket.dft())判断时序有可能不匹配
- -- 此处的1秒,能够保证,即使时序不匹配,也能1秒钟退出阻塞状态,再去判断socket.adapter(socket.dft())
- sys.waitUntil("IP_READY", 1000)
- end
- sys.wait(1000)
- -- 配置excloud参数
- local ok, err_msg = excloud.setup({
- -- device_id = "862419074073247", -- 设备ID (IMEI前14位)
- device_type = 1, -- 设备类型: 4G
- host = "124.71.128.165", -- 服务器地址
- port = 9108, -- 服务器端口
- auth_key = "SIsRml1ImTsP6XR4lvRAQVuksbZZuUpO", -- 鉴权密钥
- transport = "tcp", -- 使用TCP传输
- auto_reconnect = true, -- 自动重连
- reconnect_interval = 10, -- 重连间隔(秒)
- max_reconnect = 5, -- 最大重连次数
- timeout = 30, -- 超时时间(秒)
- })
- -- 配置MQTT连接参数
- -- local ok, err_msg = excloud.setup({
- -- device_type = 1, -- 设备类型: 4G设备
- -- transport = "mqtt", -- 使用MQTT传输协议
- -- host = "airtest.openluat.com", -- MQTT服务器地址
- -- port = 1883, -- MQTT服务器端口
- -- auth_key = "VmhtOb81EgZau6YyuuZJzwF6oUNGCbXi", -- 鉴权密钥(请替换为实际密钥)
- -- username = "root", -- MQTT用户名(可选)
- -- password = "Luat123456", -- MQTT密码(可选)
- -- keepalive = 300, -- 心跳间隔(秒)
- -- -- auto_reconnect = true, -- 自动重连
- -- reconnect_interval = 10, -- 重连间隔(秒)
- -- max_reconnect = 5, -- 最大重连次数
- -- timeout = 30, -- 超时时间(秒)
- -- qos = 1, -- MQTT QoS等级(0/1/2)
- -- -- retain = false, -- MQTT retain标志
- -- -- clean_session = true, -- MQTT clean session
- -- ssl = false -- 不使用SSL
- -- })
- if not ok then
- log.info("初始化失败: " .. err_msg)
- return
- end
- log.info("excloud初始化成功")
- -- 开启excloud服务
- local ok, err_msg = excloud.open()
- if not ok then
- log.info("开启excloud服务失败: " .. err_msg)
- return
- end
- log.info("excloud服务已开启")
- -- 在主循环中定期上报数据
- while true do
- -- 每60秒上报一次数据
- sys.wait(60000)
- -- 检查连接状态
- -- local status = excloud.status()
- -- if not status.is_connected or not status.is_authenticated then
- -- log.info("设备未连接或未认证,跳过数据上报")
- -- else
- -- 获取信号强度
- local rssi = mobile.csq()
- log.info("信号强度", rssi)
- -- 获取sim卡的iccid
- local iccid = mobile.iccid()
- log.info("iccid", iccid)
- -- 获取驻留频段
- local buff = zbuff.create(40)
- -- 获取驻留小区
- local cell_info = mobile.scell()
- local cell_id = cell_info.cid
- log.info("小区ID", cell_id)
- -- 获取环境温度
- --打开sht30硬件
- air_sht30.open(1)
- --读取温湿度数据
- temprature, humidity = air_sht30.read()
- log.info("温度", temprature, humidity)
- -- 获取cpu温度
- adc.open(adc.CH_CPU) --打开adc.CH_CPU通道
- local data5 = adc.get(adc.CH_CPU) --获取adc.CH_CPU计算值,将获取到的值赋给data5
- -- adc.close(adc.CH_CPU)--关闭adc.CH_CPU通道
- log.info("CPU温度", data5)
- if not lat then
- lat = 0
- end
-
- if not lng then
- lng = 0
- end
- if not rssi then
- rssi = 0
- end
- if not cell_id then
- cell_id = 0
- end
- if not temprature then
- temprature = 0
- end
- if not humidity then
- humidity = 0
- end
- if not band1 then
- band1 = 0
- end
- if not iccid then
- iccid = ""
- end
- if not data5 then
- data5 = 0
- end
- local ok, err_msg = excloud.send({
- {
- --信号强度
- field_meaning = excloud.FIELD_MEANINGS.SIGNAL_STRENGTH_4G,
- data_type = excloud.DATA_TYPES.INTEGER,
- value = rssi -- 信号强度
- },
- {
- --iccid
- field_meaning = excloud.FIELD_MEANINGS.SIM_ICCID,
- data_type = excloud.DATA_TYPES.ASCII,
- value = iccid -- sim卡iccid
- },
- {
- --驻留频段
- field_meaning = excloud.FIELD_MEANINGS.SERVING_CELL,
- data_type = excloud.DATA_TYPES.INTEGER,
- value = band1 -- 驻留频段
- },
- {
- --驻留小区
- field_meaning = excloud.FIELD_MEANINGS.CELL_INFO,
- data_type = excloud.DATA_TYPES.INTEGER,
- value = cell_id -- 驻留小区
- },
- {
- --环境温度
- field_meaning = excloud.FIELD_MEANINGS.TEMPERATURE,
- data_type = excloud.DATA_TYPES.FLOAT,
- value = temprature -- 环境温度
- },
- {
- --环境湿度
- field_meaning = excloud.FIELD_MEANINGS.HUMIDITY,
- data_type = excloud.DATA_TYPES.FLOAT,
- value = humidity -- 环境湿度
- },
- {
- --cpu温度
- field_meaning = excloud.FIELD_MEANINGS.ENV_TEMPERATURE,
- data_type = excloud.DATA_TYPES.INTEGER,
- value = data5 -- cpu温度
- },
- {
- --经度
- field_meaning = excloud.FIELD_MEANINGS.GNSS_LONGITUDE,
- data_type = excloud.DATA_TYPES.ASCII,
- value = lng
- },
- {
- --纬度
- field_meaning = excloud.FIELD_MEANINGS.GNSS_LATITUDE,
- data_type = excloud.DATA_TYPES.ASCII,
- value = lat
- }
- }, false) -- 不需要服务器回复
- if not ok then
- log.info("发送数据失败: " .. err_msg)
- else
- log.info("数据发送成功")
- end
- -- end
- end
- end)
|