#通讯#4G DTU设备通过MQTT协议连接阿里云实现数据传输
前言该实例中以4G DTU作为参考设备,理论上支持MQTT的设备均可参考使用。
首先创建阿里云账号并登录登录(如果已有阿里云账号则无需注册直接登录即可)
登录阿里云后点击“控制台”->通过搜索“物联网平台”进入到物联网平台
进入到物联网平台后点击“立即开通”进入物联网平台管理界面。(如果已经开通过了的则会接直接进入到物联网平台的管理界面)
然后选择“公共实例”
选择“设备管理”->“产品”->“创建产品”
根据下图或自身理解创建一个产品
创建完产品后,推荐先执行“添加设备”;在设备成功连上阿里云后再来根据自身需求“定义物模型”。
通过上一步骤直接跳转到设备添加界面;或通过“设备管理”->“设备”->“选择刚创建的产品”->“添加设备”跳转到设备添加界面。
设置DeviceName,该参数为“一机一密”连接方式的重要参数之一,2/4G设备推荐使用设备的IMEI号作为识别码,可以通过AT+GSN指令查询设备的IMEI。
直接点击“前往查看”;或点击“完成”后再点击“查看”前往设备的详细信息界面。
进入设备详情界面后,可以点击DeviceSecret旁的“查看”来打开设备证书,其中包含了“一机一密”连接方式所需要用到的3个重要参数,后面简称“三元组”。
DTU参数配置(此文档以TAS_LTE_363为例其余支持MQTT的设备可供参考)
方式一:MQTT透传
我司提供“阿里云物联平台配置_32.exe”参数生成工具,如果没有可以联系销售或技术获取。首先打开参数生成工具,将1.4章节中复制得到的“三元组”直接粘贴到工具中,或者3条分别填入对应位置均可;再分别填入TimeStamp和ClientID,完成后点击“生成”即可。
经过上一步后,我们得到了DTU所需的通用MQTT连接参数,先将连接参数配置进DTU。
配置完连接参数,如需测试数据透传,还需要配置订阅和推送的主题。可以从设备的“Topic列表”->“自定义Topic”中找,一般使用update和get这两个主题。
注意:如果从产品的Topic类列表中得到的主题会带有${deviceName},需要替换成具体设备的deviceName之后才能使用,例如本例中的866262044292042。
如下图,得到订阅和推送的主题后,就可以完成DTU的所有基本配置了。在工具上填完所有参数后,点击“一键配置参数”将参数配置进DTU,当配置完成后点击“重启设备”即可。
方式二:阿里云直链
TAS_LTE_363系列提供了阿里云直连功能,方便阿里云的直接配置接入。在工具中选择“阿里云直连”模式,将“三元组”配置到相应的位置即可,主题选用了get和update主题。填写完参数后点击“一键配置参数”,提示配置完成后点击“重启设备”即可。
数据收发测试
正常情况下,如果设备已插卡插天线,那么重启之后设备会自行连接服务器。当连上服务器时,Link灯常亮,默认开启连接状态上报,串口还会收到连接状态信息“+STATUS: 1,MQTT CONNECTED”。
连上服务器之后在右下角窗口发送数据,就可在平台的“运维监控”->“日志服务”->“上行消息分析”中看到。
如果需要查看详细内容可以点“查看”查看详情。
平台上数据下发可以通过get主题下发,点击设备的“Topic列表”->“自定义Topic”->“发布消息”即可打开发布消息界面,输入相应内容(仅支持ASCII)后确认即可。
设备端会收到相应的数据。
物模型测试
在建立连接并成功透传数据之后,如何进一步满足客户需求并应用到真实的监控环境中,阿里云已经提供了物模型的功能来方便用户实现监控功能。本例中,我们实现了一个485接口、MODBUS协议的温湿度传感器的远程监控。(注意:该示例涉及一定的编程)
MODBUS传感器数据寄存器
定义物模型
本例中,我们创建的是自定义项目,所以是一个空的物模型,所有属性可以根据自身需要添加。通过“产品”->“查看”->“功能定义”->“编辑草稿”打开物模型管理界面。
通过“添加自定义功能”打开编辑界面,根据自身开发需要,填入相应的内容,例如本例中我们需要监控的是温度和湿度这两个属性,逐个添加即可。
创建完属性后,点击“发布更新”即可完成物模型的定义,相当于给该产品下的设备添加了两个属性,用于平台端监控。
数据点上传
在完成上一步“定义物模型”后,我们已经可以在相应设备的运行状态界面看到自己所添加的2个属性了。接下来关于物模型数据点的上传(属性上报),这边主要介绍透传/自定义以及ALink协议两种方式。
方式一:ALink JSON格式
该方式需要设备具有主动上报及数据组包能力,采用ICA 标准数据格式 (Alink JSON):设备按照物联网平台定义的标准数据格式生成数据,然后上报数据。数据格式类型及通讯主题如下:
首先需要更改DTU的主题配置,如下图所示(注意:上图中{productKey}和{deviceName}需要替换成自身设备对应的参数,例如:/sys/a1PHcbsgASq/866262044292042/thing/event/property/post)
完成DTU的配置更改并重启后,我们即可来上传数据进行测试,我在配置工具右下角输入框输入如下内容并发送,就可以在平台上的“设备”->“运行状态”中看到数据的实时变化。
{
"method": "thing.event.property.post",
"id": "4",
"params": {
"Temperature": 45.1,
"Humidity": 60.3
},
"version": "1.0"
}
注意:目前该ALink JSON格式数据需要由客户设备自行生成后传给DTU,若设备无法实现可以参考方式二。
方式二:透传/自定义
设备上报原始数据如二进制数据流,阿里云物联网平台会运行您在控制台提交的数据解析脚本,将原始数据转成标准数据格式后,再进行业务处理。通过这种方式通讯的话,我们需要将主题配置为物模型通讯Topic,如下图所示。
这里我们只测试透传上行,DTU配置如下图所示,修改推送和订阅的主题,点击“一键配置参数”来保存配置。
由于传感器并不会主动上报数据,所以需要DTU去轮询采集,我们可以使用自定义轮询这个功能来完成采集的工作,配置完保存重启。如下图所示:
配置完DTU之后,我们就需要根据自己设备透传至云端的数据来编写“数据解析脚本”,本例以JavaScript脚本为例。
注意:必须了解清楚自己上传数据的形式再来编写脚本。
本例中我们已经配置了DTU每10秒向温湿度传感器发送一条查询指令,正常情况下,温湿度传感器在收到指令后会恢复数据,这里我以其中一次返回举例,传感器返回HEX格式的数据 01 04 04 00 EB 01 E2 0A 69 共9字节。
如果不了解MODBUS RTU协议也不要紧,只要清楚这里我要用到数据中的第4/5/6/7这4个字节即可。其中4,5字节合起来是一个整型数int16,00 EB转换成10进制之后为235,根据本章之前提到的图1中描述,235/10=23.5℃即为真实温度值;同理,6,7两个字节表示的是湿度,转换后为482/10=48.2,则此时的实际湿度为48.2%。了解了自己所需要的数据后,我们可以看如下脚本:
脚本编写完成后,可以将脚本复制到此处
脚本可以进行模拟测试,在下图模拟输入框中填入设备上报的原始数据,点击“执行”
点击“执行”后如果脚本正确即可解析得到相应的ALink JSON格式的数据,确认解析正确后点击“提交”或“保存”即可。
提交脚本之后,我们就可以将DTU接传感器测试或用串口助手模拟测试了,为了直观表现,我们这边采用了modbus slave模拟测试。
并可以在“监控运维”->“日志服务”->“上行消息分析”->“MessageID”中查看原始数据。
以及“物模型数据分析”中查看经过脚本解析的数据。
以上内容便是使用4G DTU设备通过MQTT协议连接阿里云实现数据传输的全部过程!
塔石物联网塔石物联网科技有限公司定位于物联网通信架构专家,以做物联网产品开发的润滑剂为使命,长期专注于工业联网通讯设备和模组的研发、生产及销售,是业内领先的物联网通信技术服务商