本文以夜灯开关为例,介绍如何快速地使用Java Link SDK,模拟设备采用MQTT协议接入物联网平台,并通过自定义Topic上报数据至物联网平台的完整操作。
前提条件
开通物联网平台服务。
免费开通后,您可先试用物联网平台服务,试用流程,请参见阿里云免费试用的物联网平台产品。物联网平台服务的计费标准,请参见计费概述。
创建产品和设备
准备开发环境
本示例的开发环境为Java 15,开发工具为IntelliJ IDEA社区版2020.1。关于环境的更多说明,请参见环境说明。
安装Java开发环境。
更多信息,请参见Java官方网站。
安装开发工具IntelliJ IDEA。
更多信息,请参见IntelliJ IDEA。
配置设备端SDK
下载Demo文件至开发环境并解压。
说明下载本Demo将默认您同意本软件许可协议。
打开IntelliJ IDEA,选择 ,找到相应的工程文件后,单击OK。
配置项目中以下文件代码中的参数。
在
./device_id.json
文件中配置设备接入信息,使设备接入物联网平台。参数
示例
说明
productKey
a18wP******
设备认证信息。即完成添加设备后,您保存至本地的设备证书。
您也可以在物联网平台的设备详情页查看设备的认证信息。更多信息,请参见获取设备认证信息。
deviceName
LightSwitch
deviceSecret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
region
cn-shanghai
设备接入的地域ID。更多信息,请参见地域和可用区。
instanceId
iot-w2******
实例ID。您可在物联网平台控制台的实例概览页签,查看实例ID。
如果没有ID值,此处无需配置。
配置设备用于发送信息的Topic,例如
/a18wP******/LightSwitch/user/update
,并设置要发送的信息内容。示例代码如下:public void publish() { MqttPublishRequest request = new MqttPublishRequest(); request.topic = "/" + productKey + "/" + deviceName + "/user/update"; request.qos = 0; request.payloadObj = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}"; LinkKit.getInstance().publish(request, new IConnectSendListener() { @Override public void onResponse(ARequest aRequest, AResponse aResponse) { // 发布结果 ALog.d(TAG, "onResponse " + (aResponse == null ? "" : aResponse.data)); } @Override public void onFailure(ARequest aRequest, AError aError) { // 发布失败 ALog.d(TAG, "onFailure " + (aError == null ? "" : (aError.getCode() + aError.getMsg()))); } }); }
文件
参数
示例
说明
./src/main/java/com/aliyun/alink/devicesdk/demo/MqttSample.java
topic
"/" + productKey + "/" + deviceName + "/user/update"
具有发布权限的Topic,设备通过该Topic向物联网平台发送消息。
您可以在物联网平台的产品详情页的Topic类列表下的自定义Topic页签下,查看您的自定义Topic。更多信息,请参见什么是Topic。
示例值中的
user/update
为Topic的后缀,将其修改为指定值后,可向对应的Topic发送消息。本示例要发送消息的Topic为
/a18wP******/LightSwitch/user/update
。a18wP******
为设备的ProductKey。LightSwitch
为设备的DeviceName。
payloadObj
{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}
上报至物联网平台的消息内容。
本示例使用自定义Topic,您可自定义消息的数据格式。
配置设备订阅Topic,例如
/a18wP******/LightSwitch/user/get
,以接收来自物联网平台的消息。示例代码如下:public void subscribe() { MqttSubscribeRequest request = new MqttSubscribeRequest(); request.topic = "/" + productKey + "/" + deviceName + "/user/get"; request.isSubscribe = true; LinkKit.getInstance().subscribe(request, new IConnectSubscribeListener() { @Override public void onSuccess() { // 订阅成功 ALog.d(TAG, "onSuccess "); } @Override public void onFailure(AError aError) { // 订阅失败 ALog.d(TAG, "onFailure " + getError(aError)); } }); }
文件
参数
示例
说明
./src/main/java/com/aliyun/alink/devicesdk/demo/MqttSample.java
topic
"/" + productKey + "/" + deviceName + "/user/get"
具有订阅权限的Topic,设备通过该Topic,可接收物联网平台的消息。
您可以在物联网平台的产品详情页的Topic类列表下的自定义Topic页签下,查看您的自定义Topic。更多信息,请参见什么是Topic。
示例值中的
user/get
为Topic的后缀,将其修改为指定值后,可订阅对应的Topic。本示例订阅的Topic为
/a18wP******/LightSwitch/user/get
。a18wP******
为设备的ProductKey。LightSwitch
为设备的DeviceName。
运行结果
项目文件配置完成后,单击Run运行Demo可执行文件./demo/HelloWorld.java。您可以在设备端查看运行结果。
以下日志显示设备
LightSwitch
与物联网平台连接成功。2021-05-07 06:32:05.360 - 20/? D/ConnectManager:CommonNofity, onConnectStateChange(),state = CONNECTED
以下日志显示设备
LightSwitch
订阅了Topic/a18wP******/LightSwitch/user/get
。2021-05-07 06:32:05.493 - null[MqttSendExecutor.java] - asyncSend(162):MqttSendExecutor:subscribe: topic: [ /a18wP******/LightSwitch/user/get ]
Topic订阅成功后,您可以返回物联网平台,在设备详情页面的Topic列表页签,单击订阅的Topic操作栏的发布消息,然后在发布消息对话框的消息输入栏中,输入一条消息,例如:This is a test message from Alibaba Iot Platform.,模拟从物联网平台向设备发送消息。
以下日志显示设备
LightSwitch
通过Topic/a18wP******/LightSwitch/user/update
,向物联网平台上报了一条消息。2021-05-07 06:32:05.488 - null[MqttSendExecutor.java] - asyncSend(129):MqttSendExecutor:publish: topic: [ /a18wP******/LightSwitch/user/update ] 2021-05-07 06:32:05.489 - null[MqttSendExecutor.java] - asyncSend(130):MqttSendExecutor:publish: payload: [ {\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}} ]
您可以在物联网平台控制台,查看设备的状态和运行日志。
左侧导航栏,选择
,找到设备,查看设备状态。设备状态显示为在线,则表示设备与物联网平台成功连接。在左侧导航栏,选择
,选择夜灯开关产品后,查看设备上线、订阅Topic和上报消息的日志。说明您可以忽略日志中有关OTA升级、物模型、子设备等日志信息。这些信息关于SDK自带的高级功能,不会影响您的体验。
如果在调试过程中出现错误,请参见设备端接收的错误码,根据提示解决问题。
后续步骤
设备接入物联网平台后,您可以管理设备并对其进行监控运维。关于物联网平台的更多功能,请参见物联网平台产品功能。
使用Java Link SDK配置相关高级功能,请参见Java Link SDK概述。