ctwingdemo.lua 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. --- 模块功能:780E连接到ctwing平台
  2. -- @module ctwing_iot
  3. -- @author 翟科研
  4. -- @license MIT
  5. -- @copyright OpenLuat.com
  6. -- @release 2023.4.13
  7. local sys = require "sys"
  8. --[[特别注意, 使用http库需要下列语句]]
  9. _G.sysplus = require("sysplus")
  10. --------------需更改的信息-------------------------
  11. -- 设备ID
  12. local device_id ="15601013001"
  13. -- 账号名
  14. local user_name="001"
  15. -- 特征串
  16. local password ="8Jtoo3rc9RRYgtaWv5QXxvF15-tzlmgNzk2O6cQeg_o"
  17. -- 主题
  18. local ctwing_iot_subscribetopic = {
  19. ["signal_report"]=0 ,["test"]=0,["z1223"]=1 --本demo以z1223为例
  20. }
  21. --------------以上根据个人注册信息修改-------------
  22. local mqtt_client
  23. -- MQTT连接状态
  24. local mqtt_connected = false
  25. local function ctwing_iot()
  26. local mobile_signal
  27. sys.waitUntil("IP_READY_IND",30000)
  28. mobile_signal=mobile.status()
  29. log.info("SIM SIGNAL",mobile_signal)
  30. --创建一个MQTT客户端
  31. log.info("MQTT CONNECTTING...")
  32. mqtt_client = mqtt.create( nil ,"mqtt.ctwing.cn", 1883)
  33. mqtt_client:auth(device_id,user_name,password)--三元组配置
  34. mqtt_client:keepalive(240)--设置心跳包间隔
  35. mqtt_client:autoreconn(true, 3000) -- 自动重连机制
  36. mqtt_client:on(function(mqtt_client, event, data, payload) --[[
  37. event可能出现的值有
  38. conack -- 服务器鉴权完成,mqtt连接已经建立, 可以订阅和发布数据了,没有附加数据
  39. recv -- 接收到数据,由服务器下发, data为topic值(string), payload为业务数据(string).metas是元数据(table), 一般不处理.
  40. -- metas包含以下内容
  41. -- qos 取值范围0,1,2
  42. -- retain 取值范围 0,1
  43. -- dup 取值范围 0,1
  44. sent -- 发送完成, qos0会马上通知, qos1/qos2会在服务器应答会回调, data为消息id
  45. disconnect -- 服务器断开连接,网络问题或服务器踢了客户端,例如clientId重复,超时未上报业务数据
  46. ]]
  47. -- 用户自定义代码
  48. log.info("mqtt", "event", event, mqtt_client, data, payload)
  49. if event == "conack" then--
  50. log.info("MQTT CONNECTTED")
  51. sys.publish("mqtt_conack")
  52. mqtt_client:subscribe(ctwing_iot_subscribetopic)--主题订阅
  53. log.info("Successfully subscribed to mqtt")
  54. elseif event == "recv" then
  55. log.info("mqtt", "downlink", "topic", data, "payload", payload)
  56. sys.publish("mqtt_payload", data, payload)
  57. elseif event == "sent" then --异步发送成功信号
  58. log.info("mqtt", "sent", "pkgid", data)
  59. end
  60. end)
  61. -- 自动处理重连, 除非自行关闭
  62. mqtt_client:connect()
  63. sys.waitUntil("mqtt_conack")
  64. while true do
  65. --演示等待其他task发送过来的上报信息
  66. local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 300000)
  67. local date="test date"--测试数据
  68. local qos=1
  69. if ret then
  70. -- 提供关闭本while循环的途径, 不需要可以注释掉
  71. if topic == "close" then break end
  72. mqtt_client:publish("z1223",date,qos)-- QOS0不带puback, QOS1是带puback的
  73. log.info("发送成功")
  74. end
  75. -- 如果没有其他task上报, 可以写个空等待
  76. --sys.wait(60000000)
  77. end
  78. mqtt_client:close()
  79. mqtt_client = nil
  80. end
  81. sys.taskInit(ctwing_iot)
  82. sys.taskInit(function()
  83. while true do
  84. sys.wait(60000)
  85. if mqtt_client and mqtt_client:ready() then
  86. sys.publish("mqtt_pub",ctwing_iot_subscribetopic.z1223,1)
  87. end
  88. end
  89. end)
  90. -- return ctwing