您好,能麻烦指导下air720D luat开发如何上报EVENT事件消息到阿里云平台吗?我基于demo testALiYun.lua改了下程序尝试上报EVENT事件消息到阿里云平台,但是从本地打印日志看模块并没有上报数据,使用阿里云平台的在线调试功能也没有收到模块的event数据,不知道问题出在哪里,烦请指导下吧,感谢!程序截图和阿里云平台的物模型配置详见图片
问题已解决,谢谢关注。
解决问题的过程比较曲折,但思路方法很简单,当然也很低效啦;因为一开始并没有搞明白上报event的编写规则,程序运行过程中缺乏足够的提示信息,采取盲试的方式不断的试错,所以折腾了很长时间;真正的转机是使用了阿里云平台提供的在线调试功能,可以抛开硬件在阿里云平台上可以快速修改代码,立即验证,如果代码格式不对会立即报错,大大提高了试错效率;对比上报属性信息的代码很快找到了原因。下面讲一下要点:
1、配置阿里云的事件信息,如下图所示:
2、编写物联网终端程序:
--根据阿里云的文档我们需要构造一个json用于上传数据
--首先我们创建一个table,params里是我们要上传的参数
local warningdata =
{
method = "thing.event.TempWarning.post",
id = "2",
params = {AlarmInfo={DeviceID="610030001",AlarmData=65.23}},--此处代码是之前调试不通的关键所在,之前数据结构不对
--params = {"abnormal_temp":45.67, "deviceID":1234567890}
version = "1.1.1",
}
--[[
函数名:publishWarningCb
功能 :发布1条qos为1的消息后收到PUBACK的回调函数
参数 :
usertag:调用mqttclient:publish时传入的usertag
result:true表示发布成功,false或者nil表示失败
返回值:无
]]
local function publishWarningCb(result,para)
log.info("testALiYun.publishWarningCb",result,para)
--sys.timerStart(publishWarning,35000)--开启一个循环定时器,周期为35秒
publishWaringCnt = publishWaringCnt+1
end
--发布一条QOS为1的消息
function publishWarning()
local warning_jsondata
local i
if sConnected then
--注意:在此处自己去控制payload的内容编码,aLiYun库中不会对payload的内容做任何编码转换--TempWarning
aLiYun.publish("/sys/"..PRODUCT_KEY.."/"..getDeviceName().."/thing/event/TempWarning/post",warning_jsondata,1,publishWarningCb,"publishWarning_"..publishWaringCnt)
end
end