mqttTask.lua 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. --- 模块功能:MQTT客户端处理框架
  2. -- @author openLuat
  3. -- @module mqtt.mqttTask
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.28
  7. module(...,package.seeall)
  8. require"misc"
  9. require"mqtt"
  10. require"mqttOutMsg"
  11. require"mqttInMsg"
  12. local ready = false
  13. --- MQTT连接是否处于激活状态
  14. -- @return 激活状态返回true,非激活状态返回false
  15. -- @usage mqttTask.isReady()
  16. function isReady()
  17. return ready
  18. end
  19. --启动MQTT客户端任务
  20. sys.taskInit(
  21. function()
  22. local retryConnectCnt = 0
  23. while true do
  24. if not socket.isReady() then
  25. retryConnectCnt = 0
  26. --等待网络环境准备就绪,超时时间是5分钟
  27. sys.waitUntil("IP_READY_IND",300000)
  28. end
  29. if socket.isReady() then
  30. local imei = misc.getImei()
  31. --创建一个MQTT客户端
  32. local mqttClient = mqtt.client(imei,600,"user","password")
  33. --阻塞执行MQTT CONNECT动作,直至成功
  34. --如果使用ssl连接,打开mqttClient:connect("lbsmqtt.airm2m.com",1884,"tcp_ssl",{caCert="ca.crt"}),根据自己的需求配置
  35. --mqttClient:connect("lbsmqtt.airm2m.com",1884,"tcp_ssl",{caCert="ca.crt"})
  36. if mqttClient:connect("14.103.101.132",1883,"tcp") then
  37. retryConnectCnt = 0
  38. ready = true
  39. --订阅主题
  40. if mqttClient:subscribe({["/event0"]=0, ["/中文event1"]=1}) then
  41. mqttOutMsg.init()
  42. --循环处理接收和发送的数据
  43. while true do
  44. if not mqttInMsg.proc(mqttClient) then log.error("mqttTask.mqttInMsg.proc error") break end
  45. if not mqttOutMsg.proc(mqttClient) then log.error("mqttTask.mqttOutMsg proc error") break end
  46. end
  47. mqttOutMsg.unInit()
  48. end
  49. ready = false
  50. else
  51. retryConnectCnt = retryConnectCnt+1
  52. end
  53. --断开MQTT连接
  54. mqttClient:disconnect()
  55. if retryConnectCnt>=5 then link.shut() retryConnectCnt=0 end
  56. sys.wait(5000)
  57. else
  58. --进入飞行模式,20秒之后,退出飞行模式
  59. net.switchFly(true)
  60. sys.wait(20000)
  61. net.switchFly(false)
  62. end
  63. end
  64. end
  65. )