excloud_test.lua 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. --[[
  2. @module excloud_test
  3. @summary excloud测试文件
  4. @version 1.0
  5. @date 2025.09.25
  6. @author 王城钧
  7. @usage
  8. 本demo演示的功能为:
  9. 演示excloud扩展库的使用。
  10. ]]
  11. -- 导入excloud库
  12. local excloud = require("excloud")
  13. --加载AirSHT30_1000驱动文件
  14. local air_sht30 = require "AirSHT30_1000"
  15. --加载lbsLoc2库
  16. local lbsLoc2 = require("lbsLoc2")
  17. -- 注册回调函数
  18. excloud.on(function(event, data)
  19. log.info("用户回调函数", event, json.encode(data))
  20. if event == "connect_result" then
  21. if data.success then
  22. log.info("连接成功")
  23. else
  24. log.info("连接失败: " .. (data.error or "未知错误"))
  25. end
  26. elseif event == "auth_result" then
  27. if data.success then
  28. log.info("认证成功")
  29. else
  30. log.info("认证失败: " .. data.message)
  31. end
  32. elseif event == "message" then
  33. log.info("收到消息, 流水号: " .. data.header.sequence_num)
  34. -- 处理服务器下发的消息
  35. for _, tlv in ipairs(data.tlvs) do
  36. if tlv.field == excloud.FIELD_MEANINGS.CONTROL_COMMAND then
  37. log.info("收到控制命令: " .. tostring(tlv.value))
  38. -- 处理控制命令并发送响应
  39. local response_ok, err_msg = excloud.send({
  40. {
  41. field_meaning = excloud.FIELD_MEANINGS.CONTROL_RESPONSE,
  42. data_type = excloud.DATA_TYPES.ASCII,
  43. value = "命令执行成功"
  44. }
  45. }, false)
  46. if not response_ok then
  47. log.info("发送控制响应失败: " .. err_msg)
  48. end
  49. end
  50. end
  51. elseif event == "disconnect" then
  52. log.warn("与服务器断开连接")
  53. elseif event == "reconnect_failed" then
  54. log.info("重连失败,已尝试 " .. data.count .. " 次")
  55. elseif event == "send_result" then
  56. if data.success then
  57. log.info("发送成功,流水号: " .. data.sequence_num)
  58. else
  59. log.info("发送失败: " .. data.error_msg)
  60. end
  61. end
  62. end)
  63. local getCellInfo1
  64. local band1
  65. local lat, lng
  66. -- 定期轮训式
  67. sys.taskInit(function()
  68. sys.wait(3000)
  69. while 1 do
  70. mobile.reqCellInfo(15)
  71. sys.waitUntil("CELL_INFO_UPDATE", 30000)
  72. getCellInfo1 = mobile.getCellInfo()
  73. band1 = getCellInfo1[1].band
  74. log.info("驻留频段", band1, json.encode(getCellInfo1))
  75. lat, lng, t = lbsLoc2.request(5000, nil, nil, true) --需要经纬度和当前时间
  76. --(时间格式{"year":2024,"min":56,"month":11,"day":12,"sec":44,"hour":14})
  77. log.info("lbsLoc2", lat, lng, (json.encode(t or {}))) --打印经纬度和时间
  78. sys.wait(60000)
  79. end
  80. end)
  81. local temprature, humidity
  82. sys.taskInit(function()
  83. -- 如果当前时间点设置的默认网卡还没有连接成功,一直在这里循环等待
  84. while not socket.adapter(socket.dft()) do
  85. log.warn("tcp_client_main_task_func", "wait IP_READY", socket.dft())
  86. -- 在此处阻塞等待默认网卡连接成功的消息"IP_READY"
  87. -- 或者等待1秒超时退出阻塞等待状态;
  88. -- 注意:此处的1000毫秒超时不要修改的更长;
  89. -- 因为当使用exnetif.set_priority_order配置多个网卡连接外网的优先级时,会隐式的修改默认使用的网卡
  90. -- 当exnetif.set_priority_order的调用时序和此处的socket.adapter(socket.dft())判断时序有可能不匹配
  91. -- 此处的1秒,能够保证,即使时序不匹配,也能1秒钟退出阻塞状态,再去判断socket.adapter(socket.dft())
  92. sys.waitUntil("IP_READY", 1000)
  93. end
  94. sys.wait(1000)
  95. -- 配置excloud参数
  96. local ok, err_msg = excloud.setup({
  97. -- device_id = "862419074073247", -- 设备ID (IMEI前14位)
  98. device_type = 1, -- 设备类型: 4G
  99. host = "124.71.128.165", -- 服务器地址
  100. port = 9108, -- 服务器端口
  101. auth_key = "SIsRml1ImTsP6XR4lvRAQVuksbZZuUpO", -- 鉴权密钥
  102. transport = "tcp", -- 使用TCP传输
  103. auto_reconnect = true, -- 自动重连
  104. reconnect_interval = 10, -- 重连间隔(秒)
  105. max_reconnect = 5, -- 最大重连次数
  106. timeout = 30, -- 超时时间(秒)
  107. })
  108. -- 配置MQTT连接参数
  109. -- local ok, err_msg = excloud.setup({
  110. -- device_type = 1, -- 设备类型: 4G设备
  111. -- transport = "mqtt", -- 使用MQTT传输协议
  112. -- host = "airtest.openluat.com", -- MQTT服务器地址
  113. -- port = 1883, -- MQTT服务器端口
  114. -- auth_key = "VmhtOb81EgZau6YyuuZJzwF6oUNGCbXi", -- 鉴权密钥(请替换为实际密钥)
  115. -- username = "root", -- MQTT用户名(可选)
  116. -- password = "Luat123456", -- MQTT密码(可选)
  117. -- keepalive = 300, -- 心跳间隔(秒)
  118. -- -- auto_reconnect = true, -- 自动重连
  119. -- reconnect_interval = 10, -- 重连间隔(秒)
  120. -- max_reconnect = 5, -- 最大重连次数
  121. -- timeout = 30, -- 超时时间(秒)
  122. -- qos = 1, -- MQTT QoS等级(0/1/2)
  123. -- -- retain = false, -- MQTT retain标志
  124. -- -- clean_session = true, -- MQTT clean session
  125. -- ssl = false -- 不使用SSL
  126. -- })
  127. if not ok then
  128. log.info("初始化失败: " .. err_msg)
  129. return
  130. end
  131. log.info("excloud初始化成功")
  132. -- 开启excloud服务
  133. local ok, err_msg = excloud.open()
  134. if not ok then
  135. log.info("开启excloud服务失败: " .. err_msg)
  136. return
  137. end
  138. log.info("excloud服务已开启")
  139. -- 在主循环中定期上报数据
  140. while true do
  141. -- 每60秒上报一次数据
  142. sys.wait(60000)
  143. -- 检查连接状态
  144. -- local status = excloud.status()
  145. -- if not status.is_connected or not status.is_authenticated then
  146. -- log.info("设备未连接或未认证,跳过数据上报")
  147. -- else
  148. -- 获取信号强度
  149. local rssi = mobile.csq()
  150. log.info("信号强度", rssi)
  151. -- 获取sim卡的iccid
  152. local iccid = mobile.iccid()
  153. log.info("iccid", iccid)
  154. -- 获取驻留频段
  155. local buff = zbuff.create(40)
  156. -- 获取驻留小区
  157. local cell_info = mobile.scell()
  158. local cell_id = cell_info.cid
  159. log.info("小区ID", cell_id)
  160. -- 获取环境温度
  161. --打开sht30硬件
  162. air_sht30.open(1)
  163. --读取温湿度数据
  164. temprature, humidity = air_sht30.read()
  165. log.info("温度", temprature, humidity)
  166. -- 获取cpu温度
  167. adc.open(adc.CH_CPU) --打开adc.CH_CPU通道
  168. local data5 = adc.get(adc.CH_CPU) --获取adc.CH_CPU计算值,将获取到的值赋给data5
  169. -- adc.close(adc.CH_CPU)--关闭adc.CH_CPU通道
  170. log.info("CPU温度", data5)
  171. if not lat then
  172. lat = 0
  173. end
  174. if not lng then
  175. lng = 0
  176. end
  177. if not rssi then
  178. rssi = 0
  179. end
  180. if not cell_id then
  181. cell_id = 0
  182. end
  183. if not temprature then
  184. temprature = 0
  185. end
  186. if not humidity then
  187. humidity = 0
  188. end
  189. if not band1 then
  190. band1 = 0
  191. end
  192. if not iccid then
  193. iccid = ""
  194. end
  195. if not data5 then
  196. data5 = 0
  197. end
  198. local ok, err_msg = excloud.send({
  199. {
  200. --信号强度
  201. field_meaning = excloud.FIELD_MEANINGS.SIGNAL_STRENGTH_4G,
  202. data_type = excloud.DATA_TYPES.INTEGER,
  203. value = rssi -- 信号强度
  204. },
  205. {
  206. --iccid
  207. field_meaning = excloud.FIELD_MEANINGS.SIM_ICCID,
  208. data_type = excloud.DATA_TYPES.ASCII,
  209. value = iccid -- sim卡iccid
  210. },
  211. {
  212. --驻留频段
  213. field_meaning = excloud.FIELD_MEANINGS.SERVING_CELL,
  214. data_type = excloud.DATA_TYPES.INTEGER,
  215. value = band1 -- 驻留频段
  216. },
  217. {
  218. --驻留小区
  219. field_meaning = excloud.FIELD_MEANINGS.CELL_INFO,
  220. data_type = excloud.DATA_TYPES.INTEGER,
  221. value = cell_id -- 驻留小区
  222. },
  223. {
  224. --环境温度
  225. field_meaning = excloud.FIELD_MEANINGS.TEMPERATURE,
  226. data_type = excloud.DATA_TYPES.FLOAT,
  227. value = temprature -- 环境温度
  228. },
  229. {
  230. --环境湿度
  231. field_meaning = excloud.FIELD_MEANINGS.HUMIDITY,
  232. data_type = excloud.DATA_TYPES.FLOAT,
  233. value = humidity -- 环境湿度
  234. },
  235. {
  236. --cpu温度
  237. field_meaning = excloud.FIELD_MEANINGS.ENV_TEMPERATURE,
  238. data_type = excloud.DATA_TYPES.INTEGER,
  239. value = data5 -- cpu温度
  240. },
  241. {
  242. --经度
  243. field_meaning = excloud.FIELD_MEANINGS.GNSS_LONGITUDE,
  244. data_type = excloud.DATA_TYPES.ASCII,
  245. value = lng
  246. },
  247. {
  248. --纬度
  249. field_meaning = excloud.FIELD_MEANINGS.GNSS_LATITUDE,
  250. data_type = excloud.DATA_TYPES.ASCII,
  251. value = lat
  252. }
  253. }, false) -- 不需要服务器回复
  254. if not ok then
  255. log.info("发送数据失败: " .. err_msg)
  256. else
  257. log.info("数据发送成功")
  258. end
  259. -- end
  260. end
  261. end)