| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- --- 模块功能:780E连接到ctwing平台
- -- @module ctwing_iot
- -- @author 翟科研
- -- @license MIT
- -- @copyright OpenLuat.com
- -- @release 2023.4.13
- local sys = require "sys"
- --[[特别注意, 使用http库需要下列语句]]
- _G.sysplus = require("sysplus")
- --------------需更改的信息-------------------------
- -- 设备ID
- local device_id ="15601013001"
- -- 账号名
- local user_name="001"
- -- 特征串
- local password ="8Jtoo3rc9RRYgtaWv5QXxvF15-tzlmgNzk2O6cQeg_o"
- -- 主题
- local ctwing_iot_subscribetopic = {
- ["signal_report"]=0 ,["test"]=0,["z1223"]=1 --本demo以z1223为例
- }
- --------------以上根据个人注册信息修改-------------
- local mqtt_client
- -- MQTT连接状态
- local mqtt_connected = false
- local function ctwing_iot()
- local mobile_signal
- sys.waitUntil("IP_READY_IND",30000)
- mobile_signal=mobile.status()
- log.info("SIM SIGNAL",mobile_signal)
- --创建一个MQTT客户端
- log.info("MQTT CONNECTTING...")
- mqtt_client = mqtt.create( nil ,"mqtt.ctwing.cn", 1883)
- mqtt_client:auth(device_id,user_name,password)--三元组配置
- mqtt_client:keepalive(240)--设置心跳包间隔
- mqtt_client:autoreconn(true, 3000) -- 自动重连机制
- mqtt_client:on(function(mqtt_client, event, data, payload) --[[
- event可能出现的值有
- conack -- 服务器鉴权完成,mqtt连接已经建立, 可以订阅和发布数据了,没有附加数据
- recv -- 接收到数据,由服务器下发, data为topic值(string), payload为业务数据(string).metas是元数据(table), 一般不处理.
- -- metas包含以下内容
- -- qos 取值范围0,1,2
- -- retain 取值范围 0,1
- -- dup 取值范围 0,1
- sent -- 发送完成, qos0会马上通知, qos1/qos2会在服务器应答会回调, data为消息id
- disconnect -- 服务器断开连接,网络问题或服务器踢了客户端,例如clientId重复,超时未上报业务数据
- ]]
- -- 用户自定义代码
- log.info("mqtt", "event", event, mqtt_client, data, payload)
- if event == "conack" then--
- log.info("MQTT CONNECTTED")
- sys.publish("mqtt_conack")
- mqtt_client:subscribe(ctwing_iot_subscribetopic)--主题订阅
- log.info("Successfully subscribed to mqtt")
- elseif event == "recv" then
- log.info("mqtt", "downlink", "topic", data, "payload", payload)
- sys.publish("mqtt_payload", data, payload)
- elseif event == "sent" then --异步发送成功信号
- log.info("mqtt", "sent", "pkgid", data)
- end
- end)
- -- 自动处理重连, 除非自行关闭
- mqtt_client:connect()
- sys.waitUntil("mqtt_conack")
- while true do
- --演示等待其他task发送过来的上报信息
- local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 300000)
- local date="test date"--测试数据
- local qos=1
- if ret then
- -- 提供关闭本while循环的途径, 不需要可以注释掉
- if topic == "close" then break end
- mqtt_client:publish("z1223",date,qos)-- QOS0不带puback, QOS1是带puback的
- log.info("发送成功")
- end
- -- 如果没有其他task上报, 可以写个空等待
- --sys.wait(60000000)
- end
- mqtt_client:close()
- mqtt_client = nil
- end
- sys.taskInit(ctwing_iot)
- sys.taskInit(function()
- while true do
- sys.wait(60000)
- if mqtt_client and mqtt_client:ready() then
- sys.publish("mqtt_pub",ctwing_iot_subscribetopic.z1223,1)
- end
- end
- end)
- -- return ctwing
|