阿里云物联网管理SDK使用示例

简介: 下面演示使用目前最新版本:6.5.0关于产品的创建及删除操作,新建Topic间的消息路由关系、查询向指定Topic订阅消息的目标Topic操作,其它操作类似。

作者:俏巴


概述


目前阿里云的绝大部分服务都提供了管理资源的Rest API,针对相应的API也做了SDK的封装,且版本也在不断的迭代更新。管理API SDK的统一GitHub地址链接。关于IoT SDK的使用,之前官方也给出了示例参考,但是该示例使用的SDK版本为5.0.0,且这个版本的SDK中没有DeleteProductRequest类的实现,下面演示使用目前最新版本:6.5.0关于产品的创建及删除操作,新建Topic间的消息路由关系、查询向指定Topic订阅消息的目标Topic操作,其它操作类似。


pom依赖


        <!--核心依赖-->
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>com.aliyun<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>aliyun-java-sdk-core<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>3.5.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span></span>

    &lt;!--管理API SDK调用问题--&gt;
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>com.aliyun<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>aliyun-java-sdk-iot<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>6.5.0<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span></span></code></pre>

Java示例代码


import com.aliyuncs.AcsResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.RpcAcsRequest;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.iot.model.v20180120.CreateProductRequest;
import com.aliyuncs.iot.model.v20180120.CreateProductResponse;
import com.aliyuncs.iot.model.v20180120.DeleteProductRequest;
import com.aliyuncs.iot.model.v20180120.DeleteProductResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

public class IoTDemo {

public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> main(<span class="hljs-built_in">String</span>[] args) {

    <span class="hljs-built_in">String</span> productName = <span class="hljs-string">"iottestdemo123456"</span>;
    <span class="hljs-built_in">String</span> productKey = <span class="hljs-string">"******"</span>;
    Integer nodeType = <span class="hljs-number">0</span>;

// createProductTest(productName,nodeType);

    deleteProductTest(productKey);
    System.out.println(<span class="hljs-string">"删除成功"</span>);
}
<span class="hljs-comment">/**
 * 创建产品
 * @param productName 产品名称
 * @param nodeType 产品描述
 * @return 产品的PK
 */</span>
public <span class="hljs-keyword">static</span> <span class="hljs-built_in">String</span> createProductTest(<span class="hljs-built_in">String</span> productName, Integer nodeType) {
    CreateProductRequest request = <span class="hljs-keyword">new</span> CreateProductRequest();
    request.setProductName(productName);

    request.setNodeType(nodeType);<span class="hljs-comment">//节点的类型,0标识设备,1标识网关</span>
    CreateProductResponse response = (CreateProductResponse)executeTest1(request);
    <span class="hljs-keyword">if</span> (response != <span class="hljs-literal">null</span> &amp;&amp; response.getSuccess() != <span class="hljs-literal">false</span>) {
        System.out.println(<span class="hljs-string">"创建产品成功!productKey:"</span> + response.getProductKey());
        <span class="hljs-keyword">return</span> response.getProductKey();
    } <span class="hljs-keyword">else</span> {
        System.out.println(<span class="hljs-string">"创建产品失败!requestId:"</span> + response.getRequestId() + <span class="hljs-string">"原因:"</span> + response.getErrorMessage());
    }
    <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
}

<span class="hljs-comment">/**
 * 删除产品
 * @param productKey 产品key
 * @return 产品的PK,可以在管理门户获取
 */</span>
public <span class="hljs-keyword">static</span> <span class="hljs-built_in">Boolean</span> deleteProductTest(<span class="hljs-built_in">String</span> productKey) {
    DeleteProductRequest request = <span class="hljs-keyword">new</span> DeleteProductRequest();
    request.setProductKey(productKey);
    DeleteProductResponse response = (DeleteProductResponse)executeTest1(request);
    <span class="hljs-keyword">if</span> (response != <span class="hljs-literal">null</span> &amp;&amp; response.getSuccess() != <span class="hljs-literal">false</span>) {
        System.out.println(<span class="hljs-string">"删除产品成功!productKey:"</span> + response.getSuccess());
        <span class="hljs-keyword">return</span> response.getSuccess();
    } <span class="hljs-keyword">else</span> {
        System.out.println(<span class="hljs-string">"创建产品失败!requestId:"</span> + response.getRequestId() + <span class="hljs-string">"原因:"</span> + response.getErrorMessage());
    }
    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
}

public <span class="hljs-keyword">static</span> AcsResponse executeTest1(RpcAcsRequest request) {

    DefaultAcsClient client = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">String</span> regionId = <span class="hljs-string">"cn-shanghai"</span>;
    <span class="hljs-built_in">String</span> accessKeyID = <span class="hljs-string">"********"</span>;
    <span class="hljs-built_in">String</span> accessKeySecret = <span class="hljs-string">"********"</span>;
    <span class="hljs-built_in">String</span> productCode = <span class="hljs-string">"Iot"</span>;
    <span class="hljs-built_in">String</span> domain = <span class="hljs-string">"iot.cn-shanghai.aliyuncs.com"</span>;
    IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyID, accessKeySecret);
    <span class="hljs-keyword">try</span> {
        DefaultProfile.addEndpoint(regionId, regionId, productCode, domain);
    } <span class="hljs-keyword">catch</span> (ClientException e) {
        e.printStackTrace();
    }
    <span class="hljs-comment">// 初始化client</span>
    client = <span class="hljs-keyword">new</span> DefaultAcsClient(profile);

    System.out.println(<span class="hljs-string">"client 初始化完成!"</span>);

    AcsResponse response = <span class="hljs-literal">null</span>;
    <span class="hljs-keyword">try</span> {
        response = client.getAcsResponse(request);
    } <span class="hljs-keyword">catch</span> (Exception e) {
        System.out.println(<span class="hljs-string">"执行失败:e:"</span> + e.getMessage());
    }
    <span class="hljs-keyword">return</span> response;
}

<span class="hljs-comment">/**
 * 新建Topic间的消息路由关系
 */</span>
public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> CreateTopicRouteTable() {
    CreateTopicRouteTableRequest request = <span class="hljs-keyword">new</span> CreateTopicRouteTableRequest();
    request.setSrcTopic(<span class="hljs-string">"/a1D8NwXCe56/device1/user/TopicToTopicDemo"</span>); <span class="hljs-comment">// 源Topic,即被订阅的Topic。</span>
    List&lt;<span class="hljs-built_in">String</span>&gt; dstTopics = <span class="hljs-keyword">new</span> ArrayList&lt;<span class="hljs-built_in">String</span>&gt;();
    dstTopics.add(<span class="hljs-string">"/a1D8NwXCe56/ceshi/user/TopicToTopicDemo"</span>); <span class="hljs-comment">// 目标Topic列表,即从SrcTopic订阅消息的Topic列表。</span>
    request.setDstTopics(dstTopics);
    CreateTopicRouteTableResponse response = (CreateTopicRouteTableResponse)executeTest1(request);
    <span class="hljs-keyword">if</span> (response != <span class="hljs-literal">null</span> &amp;&amp; response.getSuccess() != <span class="hljs-literal">false</span>) {
        System.out.println(<span class="hljs-string">"CreateTopicRouteTable 成功:"</span> + response.getSuccess());
    } <span class="hljs-keyword">else</span> {
        System.out.println(<span class="hljs-string">"CreateTopicRouteTable, requestId:"</span> + response.getRequestId() + <span class="hljs-string">"原因:"</span> + response.getErrorMessage());
    }
}

<span class="hljs-comment">/**
 *  查询向指定Topic订阅消息的目标Topic
 */</span>
public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> QueryTopicRouteTable() {
    QueryTopicRouteTableRequest request = <span class="hljs-keyword">new</span> QueryTopicRouteTableRequest();
    request.setActionName(<span class="hljs-string">"QueryTopicRouteTable"</span>);
    request.setTopic(<span class="hljs-string">"/a1D8NwXCe56/device1/user/TopicToTopicDemo"</span>); <span class="hljs-comment">// 要查询的源Topic,即发布消息的Topic。</span>
    QueryTopicRouteTableResponse response = (QueryTopicRouteTableResponse)executeTest1(request);
    <span class="hljs-keyword">if</span> (response != <span class="hljs-literal">null</span> &amp;&amp; response.getSuccess() != <span class="hljs-literal">false</span>) {
        System.out.println(<span class="hljs-string">"QueryTopicRouteTable 成功:"</span> + response.getSuccess());
        System.out.println(response.getDstTopics());
    } <span class="hljs-keyword">else</span> {
        System.out.println(<span class="hljs-string">"CreateTopicRouteTable, requestId:"</span> + response.getRequestId() + <span class="hljs-string">"原因:"</span> + response.getErrorMessage());
    }
}

}


注意


当前阶段国内只有上海地区支持IoT服务,用户只需要根据需求替换AK及IoT的信息即可。删除产品的前提是产品中没有设备,管理门户目前删除产品需要短信验证码,直接使用SDK调用不需要验证码。


参考链接


IoT SDK Demo


API列表


相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
1月前
|
SQL 安全 数据管理
在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
【2月更文挑战第33天】在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
37 7
|
1月前
|
存储 运维 网络协议
【开源物联网平台】物联网设备上云提供开箱即用接入SDK
IOTDeviceSDK是物联网平台提供的设备端软件开发工具包,可简化开发过程,实现设备快速接入各大物联网平台。设备厂商获取SDK后,根据需要选择相应功能进行移植,即可快速集成IOTDeviceSDK,实现设备的接入。
121 0
|
2月前
|
弹性计算 网络安全
阿里云OpenAPI提供了多种接口来管理ECS实例
【2月更文挑战第1天】阿里云OpenAPI提供了多种接口来管理ECS实例
32 0
|
2月前
|
弹性计算 安全 API
带你读《从基础到应用云上安全航行指南》——干货长文快收藏!阿里云专家教你如何安全访问和管理ECS资源(1)
带你读《从基础到应用云上安全航行指南》——干货长文快收藏!阿里云专家教你如何安全访问和管理ECS资源(1)
574 2
|
2月前
|
弹性计算 运维 监控
带你读《从基础到应用云上安全航行指南》——干货长文快收藏!阿里云专家教你如何安全访问和管理ECS资源(2)
带你读《从基础到应用云上安全航行指南》——干货长文快收藏!阿里云专家教你如何安全访问和管理ECS资源(2)
561 0
|
2月前
|
弹性计算 安全 开发工具
带你读《从基础到应用云上安全航行指南》——干货长文快收藏!阿里云专家教你如何安全访问和管理ECS资源(3)
带你读《从基础到应用云上安全航行指南》——干货长文快收藏!阿里云专家教你如何安全访问和管理ECS资源(3)
565 2
|
2月前
|
人工智能 Java 开发工具
阿里云视觉智能开放平台提供了多种SDK供开发者使用
阿里云视觉智能开放平台提供了多种SDK供开发者使用
32 6
|
2月前
|
对象存储
阿里云oss-cloud-sdk-springboot3兼容问题
阿里云oss-cloud-sdk-springboot3兼容问题
76 0
|
5天前
|
存储 供应链 物联网
未来技术纵横谈:区块链、物联网与虚拟现实的融合革新
【4月更文挑战第21天】 随着科技不断进步,新兴技术正在重塑我们的世界。本文将深入探讨三种引人注目的技术——区块链、物联网(IoT)和虚拟现实(VR)——它们各自的发展趋势及其在不同领域的应用前景。区块链技术以其不可篡改的数据记录特性,在金融安全、供应链管理等领域展现出巨大潜力;物联网通过智能设备互联,推动智能家居、智慧城市的发展;而虚拟现实则以其沉浸式体验,改变教育、娱乐等多个行业的面貌。这些技术的交叉融合预示着一个更加智能、互联和虚拟的未来。
18 5

相关产品

  • 物联网平台