第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > AIR724 4G模块云平台接入教程(2)- 阿里云物联网平台

AIR724 4G模块云平台接入教程(2)- 阿里云物联网平台

时间:2019-05-07 21:33:38

相关推荐

AIR724 4G模块云平台接入教程(2)- 阿里云物联网平台

AIR724 4G模块云平台接入教程(2)- 阿里云物联网平台 Aliyun IOT

设备配置和接入自动注册一型一密一机一密 消息通信通信主题通信流程 使用实战属性上报异步服务调用同步服务调用 高级使用方法数据流模板,自定义发布主题数据流模板,修改下发数据内容远程脚本拦截数据,任意组包淘宝

阿里云物联网平台支持三种接入认证方式,分别是

自动注册: 无需提前注册设备,新设备即插即用。一型一密: 需要提前注册设备,同一个产品使用相同认证信息。一机一密: 需要提前注册设备,每个设备都有不用的认证信息。

设备配置和接入

下面分别介绍三种认证方式的配置,配置页面如下图

通用属性包含:

MQTT 回话标志位(reatin):消息QOSL绑定的串口通道订阅主题

默认配置:

/sys/${productid}/${deviceName}/thing/event/property/post_reply;0; /sys/${productid}/${deviceName}/thing/service/property/set;0;发布主题:

默认配置:

/sys/${productid}/${deviceName}/thing/event/property/post

自动注册

注意事项:需要在产品详情里面打开动态注册

自动注册需要填写三个参数

ProductKey: 产品ID

来源:阿里云物联网后台,产品信息

AccessKey ID

Access Key Secret

AccessKey 来源:

点击阿里云后台右上角用户图标,选择用户AccessKey 管理;如果提示是否使用子账户AccessKey 请选择是,使用子账户AccessKey 可以隔离账户权限,更加安全;进入子账户管理后选择创建用户,点击对应用户选择添加权限,如图所示,为新建用户添加物联网平台管理权限,更多复杂策略参考阿里云子账户配置。

分配好权限后点击该用户详情,选择新建AccessKey 即可。

一型一密

注意事项:需要提前注册设备,设备名称必须为设备IMEI号码

一型一密方式适合对一种产品的全部设备进行配置,需要配置的参数有:

ProductKey: 产品ID,阿里云后台产品详情点击查看获取ProductSecret: 产品密钥,阿里云后台产品详情点击查看获取

一机一密

注意事项:需要提前注册设备,设备名称必须为设备IMEI号码

一机一密需要给每个设备单独配置密钥,需要配置的参数有

ProductKey: 产品密钥DeviceSecret: 设备密钥DeviceName: 设备名称(必须是设备IMEI码)

获取方式为点击阿里云物联网后台对应设备详情,点击查看获取

消息通信

通信主题

主题的配置格式为{topic};qos

每条订阅包含topic名称和qos,用分号隔离;多条主题之前也用分号隔离;最后一条主题可以不需要写qos,则默认是0。主题最后不要加多余的分号如下:

/sys/${productid}/${deviceName}/thing/event/property/post_reply;0 /sys/${productid}/${deviceName}/thing/service/property/set主题里面的 ${productid} 和 ${deviceName} 会自动替换成设备对应配置的产品ID和设备IMEI码

阿里云物联网物模型支持的主题:

DTU默认配置订阅主题为

/sys/${productid}/${deviceName}/thing/event/property/post_reply;0;/sys/${productid}/${deviceName}/thing/service/property/set;0

登录上阿里云后平台会自动订阅所有service的主题这里订阅了属性设置主题和属性上报响应主题,可以替换成自己的主题;默认没有订阅服务主题,使用服务需要订阅对应主题,注意不能使用通配符订阅service主题

原因:如果订阅了

/sys/a12rinVjYRa/${deviceName}/thing/service/#

当你响应服务的时候,发布的主题为

/sys/a12rinVjYRa/${deviceName}/thing/service/${tsl.service.identifier}_reply

这样会出现你发出去的数据又发给设备,如果你觉得没问题,那可以忽略,继续使用。正常的服务主题订阅, 可以多条订阅:

/sys/${productid}/${deviceName}/thing/event/property/post_reply;0; /sys/${productid}/${deviceName}/thing/service/property/set;0; /sys/${productid}/${deviceName}/thing/service/test1;0; /sys/${productid}/${deviceName}/thing/service/test2;0另外,阿里云物联网的同步服务调用RRPC支持会默认订阅

/sys/${YourProductKey}/${YourDeviceName}/rrpc/request/+

关于RRPC信息请参考:阿里云

DTU默认发布主题为属性上报

/sys/${productid}/${deviceName}/thing/event/property/post

通信流程

属性上报

DTU默认订阅了属性上报主题;MCU通过串口上传Alink Json格式数据:上行(Alink JSON):

请求Topic: /sys/{productKey}/{deviceName}/thing/event/property/post

响应Topic: /sys/{productKey}/{deviceName}/thing/event/property/post_replyAlink请求数据格式:

{"id": "123","version": "1.0","params": {"Power": {"value": "on","time": 1524448722000},"WF": {"value": 23.6,"time": 1524448722000}},"method": "thing.event.property.post"}

属性设置

下行(Alink JSON):

请求Topic:/sys/{productKey}/{deviceName}/thing/service/property/set

响应Topic:/sys/{productKey}/{deviceName}/thing/service/property/set_reply (无需回复,没有内置此发布主题)Alink请求数据格式:

{"id": "123","version": "1.0","params": {"temperature": "30.5"},"method": "thing.service.property.set"}

设备服务调用(异步调用)

下行(Alink JSON):

请求Topic:/sys/{productKey}/{deviceName}/thing/service/{tsl.service.identifier}

响应Topic:/sys/{productKey}/{deviceName}/thing/service/{tsl.service.identifier}_replyAlink请求数据格式:

{"id": "123","version": "1.0","params": {"Power": "on","WF": "2"},"method": "thing.service.{tsl.service.identifier}"}

注意:响应数据的id必须和下发指令一致,平台才能识别重要,服务调用的逻辑: 正常运行中,平台下发了一条调用指令透传给MCU,MCU收到数据后响应指令,回复json中需要包含下发的指令id。DTU端会自动检测收到的消息的主题,如果是服务调用会进行标记,并记录service的identifier和消息id;每当收到一条服务调用指令后,DTU会进行响应模式,此时收到MCU上发的数据后会自动发送到/{tsl.service.identifier}_reply响应主题,发送后会把服务标记置0,此时若MCU继续上传数据,会上传到属性上报主题;即使服务标记置0后,DTU仍会保存上一次收到的服务调用主题和消息id, 若在上传服务调用响应消息,DTU会检测回复的消息id, 若id和保存的前一次服务下发id一致,依然会发布到对应的服务响应主题;结论: 若MCU上传服务调用响应,id必须和下发的一致;若MCU上传属性上报,消息id必须独特不能和之前任何消息重复。 如何发布消息到任意注意,参考后文使用实战。

设备服务调用(同步调用)

RRPC通信相关Topic格式如下:

RRPC请求消息Topic:/sys/${YourProductKey}/${YourDeviceName}/rrpc/request/${messageId}

RRPC响应消息Topic:/sys/${YourProductKey}/${YourDeviceName}/rrpc/response/${messageId}

RRPC订阅Topic:sys/${YourProductKey}/${YourDeviceName}/rrpc/request/+该主题是默认订阅的同步调用平台响应时间为8秒,超过8s未返回平台会认为调用失败此调用使用方式和异步完全一致,除了有响应时间限制。

使用实战

首先在阿里云物联网平台新建了以下产品

主题订阅配置:

/sys/${productid}/${deviceName}/thing/event/property/post_reply;0;/sys/${productid}/${deviceName}/thing/service/property/set;0;/sys/${productid}/${deviceName}/thing/service/test;0

主题发布配置:

/sys/${productid}/${deviceName}/thing/event/property/post

属性上报

针对继电器触点属性NO进行调试,MCU上传数据, id建议使用时间戳或者随机数:

{"id": "123","version": "1.0","params": {"NO": {"value": 1,"time": 1524448722000}},"method": "thing.event.property.post"}

收到服务器响应:

{"code":200,"data":{},"id":"123","message":"success","method":"thing.event.property.post","version":"1.0"}

查看响应

异步服务调用

针对异步服务调用test进行调试,打开平台设备在线调试:

下发参数为:{"a":1},点击下发,查看MCU从串口1收到的消息

{"method":"thing.service.test","id":"41137","params":{"a":1},"version":"1.0.0"}

查看luatool打印的DTU日志:

[-11-29 18:07:32.546] [I]-[订阅的消息:] /sys/a12rinVjYRa/867435056834997/thing/service/test

MCU回复信息:

{"id": "41137","code": 200,"data": {"b": 4},"method": "thing.service.test_reply"}

查看luatool的DTU日志

[-11-29 18:10:20.240] [I]-[-----发布的主题:] /sys/a12rinVjYRa/867435056834997/thing/service/test_reply

查看平台反馈

接下来继续上传,此时MCU上传一条属性上报消息:

{"id": "12345","version": "1.0","params": {"NO": {"value": 10}},"method": "thing.event.property.post"}

查看luatools打印日志

[-11-29 18:13:09.816] [I]-[-----发布的主题:] /sys/a12rinVjYRa/867435056834997/thing/event/property/post

可以看到此时上传的主题已经自动发生了变化,注意上面的属性消息id要变化。接下来接续上传,此时再重复回复前一次的服务调用(因为DTU记录了上一次的服务调用消息id),MCU上传信息:

{"id": "41137","code": 200,"data": {"b": 8},"method": "thing.service.test_reply"}

回复的参数变成了8,消息id还是前一次服务调用的id。查看luatool日志:

[-11-29 18:18:12.469] [I]-[-----发布的主题:] /sys/a12rinVjYRa/867435056834997/thing/service/test_reply

查看平台反馈,可以看到前一次的调用结果已经被覆盖了。

同步服务调用

同步服务调用和异步使用完全一致,只是有了8S的响应时间限制。

点击下发同步服务指令

MCU收到信息:

{"method":"thing.service.ttt","id":"1701854858","params":{},"version":"1.0.0"}

查看luatools打印日志

[-11-29 18:23:16.516] [I]-[订阅的消息:] /sys/a12rinVjYRa/867435056834997/rrpc/request/1332993514417689600

此时需要在超时前响应数据, MCU响应:

{"id": "1701854858",![在这里插入图片描述](https://img-/2029182640375.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMTM3NDc1NTUw,size_16,color_FFFFFF,t_70#pic_center)"code": 200,"data": {"c": 8},"method": "thing.service.ttt_reply"}

查看DTU日志:

[-11-29 18:23:19.667] [I]-[-----发布的主题:] /sys/a12rinVjYRa/867435056834997/rrpc/response/1332993514417689600

查看平台响应

高级使用方法

数据流模板,自定义发布主题

-- 数据流模板的代码片段local res, msg, index = pcall(upprotFnc, param)if not res or not msg thenlog.error("数据流模版错误:", msg)elseindex = tonumber(index) or 1local pub_topic = (pub[index]:sub(-1, -1) == "+" and messageId) andpub[index]:sub(1, -2) .. messageId or pub[index]log.info("-----发布的主题:", pub_topic)if not mqttc:publish(pub_topic, res and msg or param, tonumber(pub[index + 1]) or qos, retain) then if passon then sys.publish("UART_SENT_RDY_" .. uid, uid, "SEND_ERROR\r\n") endbreak end

可以看出是根据传入的数据param内容,可以得到两个值msg, index

msg是处理后的数据类型,index可以作为topic的索引

自定义发送topic有两个步骤:

提前定义好多个发布topic使用数据流模板,返回要发布的topic index

示例代码,通过发送数据的字段修改发送主题

-- 提前定义发布主题 /pub1;0;/pub2;0;/pub3-- 发布数据内容{“data”:123,"tt":1},根据tt字段取出主题index-- 数据流脚本functionlocal msg= ...local dat, res = json.decode(msg)if res and dat and dat.tt thenreturn msg,dat.ttelsereturn msg,nilendend

数据流模板,修改下发数据内容

远程脚本拦截数据,任意组包

淘宝

对我们产品感兴趣请查看淘宝,免费定制项目

DEVELOPLINK ______ Air724核心板

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。