阿里云物联网管理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
相关文章
|
2月前
|
存储 Java API
【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
|
7天前
|
存储 边缘计算 物联网
阿里云物联网平台:推动万物互联的智能化解决方案
随着物联网技术的快速发展,阿里云物联网平台为企业提供了一体化的解决方案,包括设备接入、数据管理和智能应用等核心功能。平台支持海量设备接入、实时数据采集与存储、边缘计算,并具备大规模设备管理、高安全性和开放生态等优势。广泛应用于智能制造、智慧城市和智能家居等领域,助力企业实现数字化转型。
56 5
|
2月前
|
Java 开发工具
通过Java SDK调用阿里云模型服务
在阿里云平台上,可以通过创建应用并使用模型服务完成特定任务,如生成文章内容。本示例展示了一段简化的Java代码,演示了如何调用阿里云模型服务生成关于“春秋战国经济与文化”的简短文章。示例代码通过设置系统角色为历史学家,并提出文章生成需求,最终处理并输出生成的文章内容。在实际部署前,请确保正确配置环境变量中的密钥和ID,并根据需要调整SDK导入语句及类名。更多详情和示例,请参考相关链接。
|
2月前
|
Java 开发工具
【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID
【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID
|
2月前
|
JSON Java API
【Azure API 管理】通过Java APIM SDK创建一个新的API,如何为Reqeust的Representation设置一个内容示例(Sample)?
【Azure API 管理】通过Java APIM SDK创建一个新的API,如何为Reqeust的Representation设置一个内容示例(Sample)?
|
2月前
|
存储 API 开发工具
【Azure Developer】使用 Python SDK连接Azure Storage Account, 计算Blob大小代码示例
【Azure Developer】使用 Python SDK连接Azure Storage Account, 计算Blob大小代码示例
|
2月前
|
Java 开发工具 Windows
【Azure Developer】调用SDK的runPowerShellScript方法,在Azure VM中执行PowerShell脚本示例
【Azure Developer】调用SDK的runPowerShellScript方法,在Azure VM中执行PowerShell脚本示例
|
3月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
存储 运维 监控
阿里云物联网平台的优势
【7月更文挑战第19天】阿里云物联网平台的优势
66 1
|
4月前
|
算法 小程序 开发工具
视觉智能开放平台操作报错合集之同样的图片路径(上海阿里云),sdk报错code.400,是什么原因
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。

相关产品

  • 物联网平台