excloud_test.lua 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. --[[
  2. @module excloud_test
  3. @summary excloud测试文件
  4. @version 1.0
  5. @date 2025.09.22
  6. @author 孟伟
  7. @usage
  8. 本demo演示的功能为:
  9. 演示excloud扩展库的使用。
  10. ]]
  11. -- 导入excloud库
  12. local excloud = require("excloud")
  13. -- 注册回调函数
  14. excloud.on(function(event, data)
  15. log.info("用户回调函数", event, json.encode(data))
  16. if event == "connect_result" then
  17. if data.success then
  18. log.info("连接成功")
  19. else
  20. log.info("连接失败: " .. (data.error or "未知错误"))
  21. end
  22. elseif event == "auth_result" then
  23. if data.success then
  24. log.info("认证成功")
  25. else
  26. log.info("认证失败: " .. data.message)
  27. end
  28. elseif event == "message" then
  29. log.info("收到消息, 流水号: " .. data.header.sequence_num)
  30. -- 处理服务器下发的消息
  31. for _, tlv in ipairs(data.tlvs) do
  32. if tlv.field == excloud.FIELD_MEANINGS.CONTROL_COMMAND then
  33. log.info("收到控制命令: " .. tostring(tlv.value))
  34. -- 处理控制命令并发送响应
  35. local response_ok, err_msg = excloud.send({
  36. {
  37. field_meaning = excloud.FIELD_MEANINGS.CONTROL_RESPONSE,
  38. data_type = excloud.DATA_TYPES.ASCII,
  39. value = "命令执行成功"
  40. }
  41. }, false)
  42. if not response_ok then
  43. log.info("发送控制响应失败: " .. err_msg)
  44. end
  45. end
  46. end
  47. elseif event == "disconnect" then
  48. log.warn("与服务器断开连接")
  49. elseif event == "reconnect_failed" then
  50. log.info("重连失败,已尝试 " .. data.count .. " 次")
  51. elseif event == "send_result" then
  52. if data.success then
  53. log.info("发送成功,流水号: " .. data.sequence_num)
  54. else
  55. log.info("发送失败: " .. data.error_msg)
  56. end
  57. end
  58. end)
  59. sys.taskInit(function()
  60. -- 如果当前时间点设置的默认网卡还没有连接成功,一直在这里循环等待
  61. while not socket.adapter(socket.dft()) do
  62. log.warn("tcp_client_main_task_func", "wait IP_READY", socket.dft())
  63. -- 在此处阻塞等待默认网卡连接成功的消息"IP_READY"
  64. -- 或者等待1秒超时退出阻塞等待状态;
  65. -- 注意:此处的1000毫秒超时不要修改的更长;
  66. -- 因为当使用exnetif.set_priority_order配置多个网卡连接外网的优先级时,会隐式的修改默认使用的网卡
  67. -- 当exnetif.set_priority_order的调用时序和此处的socket.adapter(socket.dft())判断时序有可能不匹配
  68. -- 此处的1秒,能够保证,即使时序不匹配,也能1秒钟退出阻塞状态,再去判断socket.adapter(socket.dft())
  69. sys.waitUntil("IP_READY", 1000)
  70. end
  71. sys.wait(1000)
  72. -- 配置excloud参数
  73. local ok, err_msg = excloud.setup({
  74. -- device_id = "862419074073247", -- 设备ID (IMEI前14位)
  75. device_type = 1, -- 设备类型: 4G
  76. host = "124.71.128.165", -- 服务器地址
  77. port = 9108, -- 服务器端口
  78. auth_key = "VmhtOb81EgZau6YyuuZJzwF6oUNGCbXi", -- 鉴权密钥
  79. transport = "tcp", -- 使用TCP传输
  80. auto_reconnect = true, -- 自动重连
  81. reconnect_interval = 10, -- 重连间隔(秒)
  82. max_reconnect = 5, -- 最大重连次数
  83. timeout = 30, -- 超时时间(秒)
  84. })
  85. -- 配置MQTT连接参数
  86. -- local ok, err_msg = excloud.setup({
  87. -- device_type = 1, -- 设备类型: 4G设备
  88. -- transport = "mqtt", -- 使用MQTT传输协议
  89. -- host = "airtest.openluat.com", -- MQTT服务器地址
  90. -- port = 1883, -- MQTT服务器端口
  91. -- auth_key = "VmhtOb81EgZau6YyuuZJzwF6oUNGCbXi", -- 鉴权密钥(请替换为实际密钥)
  92. -- username = "root", -- MQTT用户名(可选)
  93. -- password = "Luat123456", -- MQTT密码(可选)
  94. -- keepalive = 300, -- 心跳间隔(秒)
  95. -- -- auto_reconnect = true, -- 自动重连
  96. -- reconnect_interval = 10, -- 重连间隔(秒)
  97. -- max_reconnect = 5, -- 最大重连次数
  98. -- timeout = 30, -- 超时时间(秒)
  99. -- qos = 1, -- MQTT QoS等级(0/1/2)
  100. -- -- retain = false, -- MQTT retain标志
  101. -- -- clean_session = true, -- MQTT clean session
  102. -- ssl = false -- 不使用SSL
  103. -- })
  104. if not ok then
  105. log.info("初始化失败: " .. err_msg)
  106. return
  107. end
  108. log.info("excloud初始化成功")
  109. -- 开启excloud服务
  110. local ok, err_msg = excloud.open()
  111. if not ok then
  112. log.info("开启excloud服务失败: " .. err_msg)
  113. return
  114. end
  115. log.info("excloud服务已开启")
  116. -- 在主循环中定期上报数据
  117. while true do
  118. -- 每30秒上报一次数据
  119. sys.wait(30000)
  120. -- 检查连接状态
  121. local status = excloud.status()
  122. -- if not status.is_connected or not status.is_authenticated then
  123. -- log.info("设备未连接或未认证,跳过数据上报")
  124. -- else
  125. local ok, err_msg = excloud.send({
  126. {
  127. field_meaning = excloud.FIELD_MEANINGS.TEMPERATURE,
  128. data_type = excloud.DATA_TYPES.INTEGER,
  129. value = 22 -- 随机温度值
  130. },
  131. {
  132. field_meaning = excloud.FIELD_MEANINGS.HUMIDITY,
  133. data_type = excloud.DATA_TYPES.FLOAT,
  134. value = 33.2543 -- 随机湿度值
  135. }
  136. }, false) -- 不需要服务器回复
  137. if not ok then
  138. log.info("发送数据失败: " .. err_msg)
  139. else
  140. log.info("数据发送成功")
  141. end
  142. -- end
  143. end
  144. end)