获取设备状态的API接口有哪些 您所在的位置:网站首页 mu5801实时查询 获取设备状态的API接口有哪些

获取设备状态的API接口有哪些

2023-11-10 17:09| 来源: 网络整理| 查看: 265

实现

本文示例使用Java SDK,需准备Java开发环境。

在Maven项目中,需添加如下pom依赖,安装阿里云IoT SDK。

com.aliyun aliyun-java-sdk-core 3.5.1 com.aliyun aliyun-java-sdk-iot 6.11.0 commons-codec commons-codec 1.13

Config.*参数值中,需传入您的阿里云账号AccessKey信息和设备信息。

// 地域ID,根据您的物联网平台服务地域获取对应ID,https://help.aliyun.com/document_detail/40654.html private static String regionId = "cn-shanghai"; // 您的阿里云账号AccessKey ID private static String accessKeyID = "Config.accessKey"; // 您的阿里云账号AccesseKey Secret private static String accessKeySecret = "Config.accessKeySecret"; // 要查询的设备所属产品的ProductKey private static String productKey = "Config.productKey"; // 要查询的设备的名称DeviceName private static String deviceName = "Config.deviceName";

完整代码示例如下:

/* * Copyright © 2019 Alibaba. All rights reserved. */ package com.aliyun.iot.demo.checkstatus; import java.util.ArrayList; import java.util.List; import org.apache.commons.codec.binary.Base64; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.iot.model.v20180120.BatchGetDeviceStateRequest; import com.aliyuncs.iot.model.v20180120.BatchGetDeviceStateResponse; import com.aliyuncs.iot.model.v20180120.BatchGetDeviceStateResponse.DeviceStatus; import com.aliyuncs.iot.model.v20180120.BatchQueryDeviceDetailRequest; import com.aliyuncs.iot.model.v20180120.BatchQueryDeviceDetailResponse; import com.aliyuncs.iot.model.v20180120.BatchQueryDeviceDetailResponse.DataItem; import com.aliyuncs.iot.model.v20180120.GetDeviceStatusRequest; import com.aliyuncs.iot.model.v20180120.GetDeviceStatusResponse; import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailRequest; import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse; import com.aliyuncs.iot.model.v20180120.RRpcRequest; import com.aliyuncs.iot.model.v20180120.RRpcResponse; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; public class GetDeviceStatusByApi { // ===================需要用户填写的参数开始=========================== // 修改Config.*的参数为您的实际信息 // 地域ID,根据您的物联网平台服务地域获取对应ID,https://help.aliyun.com/document_detail/40654.html private static String regionId = "cn-shanghai"; // 用户账号AccessKey ID private static String accessKeyID = "Config.accessKey"; // 用户账号AccesseKey Secret private static String accessKeySecret = "Config.accessKeySecret"; // 要查询的设备所属的产品ProductKey private static String productKey = "Config.productKey"; // 要查询的设备名称deviceName private static String deviceName = "Config.deviceName"; // ===================需要用户填写的参数结束=========================== private static DefaultAcsClient client = null; private static DefaultAcsClient getClient(String accessKeyID, String accessKeySecret) { if (client != null) { return client; } try { IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyID, accessKeySecret); DefaultProfile.addEndpoint(regionId, regionId, "Iot", "iot." + regionId + ".aliyuncs.com"); client = new DefaultAcsClient(profile); } catch (Exception e) { System.out.println("create OpenAPI Client failed !! exception:" + e.getMessage()); } return client; } /** * 设备状态获取 * 方法一、二、三、四是基于状态查询的,获取的状态值可能会因为网络和心跳包延迟而延时更新; * 方法五是基于同步通信的,结果比较精准 * * @param args * @throws ServerException * @throws ClientException */ public static void main(String[] args) throws ServerException, ClientException { // 获取服务端请求客户端 DefaultAcsClient client = getClient(accessKeyID, accessKeySecret); GetDeviceStatusByApi api = new GetDeviceStatusByApi(); // 方法一 api.ByGetDeviceStatus(client); // 方法二 api.ByBatchGetDeviceState(client); // 方法三 api.ByQueryDeviceDetail(client); // 方法四 api.ByBatchQueryDeviceDetail(client); // 方法五 api.ByRRpc(client); } /** * 查询单设备运行状态 * GetDeviceStatus https://help.aliyun.com/document_detail/69617.html * * @param client 服务端请求客户端 * @throws ServerException * @throws ClientException */ public void ByGetDeviceStatus(DefaultAcsClient client) throws ServerException, ClientException { // 填充请求 GetDeviceStatusRequest request = new GetDeviceStatusRequest(); request.setProductKey(productKey); // 目标设备产品key request.setDeviceName(deviceName); // 目标设备名 // 获取结果 GetDeviceStatusResponse response = (GetDeviceStatusResponse) client.getAcsResponse(request); if (response != null && response.getSuccess()) { GetDeviceStatusResponse.Data data = response.getData(); // ONLINE:设备在线。 // OFFLINE:设备离线。 // UNACTIVE:设备未激活。 // DISABLE:设备已禁用。 if ("ONLINE".equals(data.getStatus())) { System.out.println("GetDeviceStatus 检测:" + deviceName + " 设备在线"); } else { // 其他状态归结为设备不在线,也可以根据业务情况自行区分处理 System.out.println("GetDeviceStatus 检测:" + deviceName + " 设备不在线"); } } else { System.out.println("GetDeviceStatus 检测:" + "接口调用不成功,可能设备 " + deviceName + " 不存在"); } } /** * 批量查询设备运行状态 * BatchGetDeviceState https://help.aliyun.com/document_detail/69906.html * * @param client 服务端请求客户端 * @throws ServerException * @throws ClientException */ public void ByBatchGetDeviceState(DefaultAcsClient client) throws ServerException, ClientException { // 填充请求 BatchGetDeviceStateRequest request = new BatchGetDeviceStateRequest(); request.setProductKey(productKey); // 目标设备产品key List deviceNames = new ArrayList(); // 目标设备名列表 deviceNames.add(deviceName); request.setDeviceNames(deviceNames); // 获取结果 BatchGetDeviceStateResponse response = (BatchGetDeviceStateResponse) client.getAcsResponse(request); if (response != null && response.getSuccess()) { List dsList = response.getDeviceStatusList(); for (DeviceStatus ds : dsList) { // ONLINE:设备在线。 // OFFLINE:设备离线。 // UNACTIVE:设备未激活。 // DISABLE:设备已禁用。 if ("ONLINE".equals(ds.getStatus())) { System.out.println("BatchGetDeviceState 检测:" + ds.getDeviceName() + " 设备在线"); } else { // 其他状态归结为设备不在线,也可以根据业务情况自行区分处理 System.out.println("BatchGetDeviceState 检测:" + ds.getDeviceName() + " 设备不在线"); } } } else { System.out.println("BatchGetDeviceState 检测:" + "接口调用不成功,可能设备 " + deviceName + " 不存在"); } } /** * 查询单设备详细信息 * QueryDeviceDetail https://help.aliyun.com/document_detail/69594.html * * @param client 服务端请求客户端 * @throws ServerException * @throws ClientException */ public void ByQueryDeviceDetail(DefaultAcsClient client) throws ServerException, ClientException { // 填充请求 QueryDeviceDetailRequest request = new QueryDeviceDetailRequest(); request.setProductKey(productKey); // 目标设备产品key request.setDeviceName(deviceName); // 目标设备名 // 获取结果 QueryDeviceDetailResponse response = (QueryDeviceDetailResponse) client.getAcsResponse(request); if (response != null && response.getSuccess()) { QueryDeviceDetailResponse.Data data = response.getData(); // ONLINE:设备在线。 // OFFLINE:设备离线。 // UNACTIVE:设备未激活。 // DISABLE:设备已禁用。 if ("ONLINE".equals(data.getStatus())) { System.out.println("QueryDeviceDetail 检测:" + deviceName + " 设备在线"); } else { // 其他状态归结为设备不在线,也可以根据业务情况自行区分处理 System.out.println("QueryDeviceDetail 检测:" + deviceName + " 设备不在线"); } } else { System.out.println("QueryDeviceDetail 检测:" + "接口调用不成功,可能设备 " + deviceName + " 不存在"); } } /** * 批量查询设备详细信息 * BatchQueryDeviceDetai https://help.aliyun.com/document_detail/123470.html * * @param client 服务端请求客户端 * @throws ServerException * @throws ClientException */ public void ByBatchQueryDeviceDetail(DefaultAcsClient client) throws ServerException, ClientException { // 填充请求 BatchQueryDeviceDetailRequest request = new BatchQueryDeviceDetailRequest(); request.setProductKey(productKey); // 目标设备产品key List deviceNames = new ArrayList(); // 目标设备名列表 deviceNames.add(deviceName); request.setDeviceNames(deviceNames); // 获取结果 BatchQueryDeviceDetailResponse response = (BatchQueryDeviceDetailResponse) client.getAcsResponse(request); if (response != null && response.getSuccess()) { List diList = response.getData(); for (DataItem di : diList) { // ONLINE:设备在线。 // OFFLINE:设备离线。 // UNACTIVE:设备未激活。 // DISABLE:设备已禁用。 if ("ONLINE".equals(di.getStatus())) { System.out.println("BatchQueryDeviceDetail 检测:" + di.getDeviceName() + " 设备在线"); } else { // 其他状态归结为设备不在线,也可以根据业务情况自行区分处理 System.out.println("BatchQueryDeviceDetail 检测:" + di.getDeviceName() + " 设备不在线"); } } } else { System.out.println("BatchQueryDeviceDetail 检测:" + "接口调用不成功,可能设备 " + deviceName + " 不存在"); } } /** * RRPC 检测设备状态 * RRpc https://help.aliyun.com/document_detail/69797.html * * @param client 服务端请求客户端 * @throws ServerException * @throws ClientException */ public void ByRRpc(DefaultAcsClient client) throws ServerException, ClientException { // 填充请求 RRpcRequest request = new RRpcRequest(); request.setProductKey(productKey);// 目标设备产品key request.setDeviceName(deviceName);// 目标设备名 request.setRequestBase64Byte(Base64.encodeBase64String("Hello World".getBytes())); // 消息内容,必须base64编码字符串 request.setTimeout(5000); // 响应超时设置,可根据实际需要填写数值 // 获取结果 RRpcResponse response = (RRpcResponse) client.getAcsResponse(request); if (response != null) { // 不要使用response.getSuccess()判断,非SUCCESS都是false;直接使用RrpcCode判断即可 // UNKNOWN:系统异常 // SUCCESS:成功 // TIMEOUT:设备响应超时 // OFFLINE:设备离线 // HALFCONN:设备离线(设备连接断开,但是断开时间未超过一个心跳周期) if ("SUCCESS".equals(response.getRrpcCode())) { System.out.println("RRPC 检测:" + deviceName + " 设备在线"); } else if (response.getRrpcCode() == null) { System.out.println("RRPC 检测:" + deviceName + " 设备可能不存在"); } else { // 其他状态归结为设备不在线,也可以根据业务情况自行区分处理 System.out.println("RRPC 检测:" + deviceName + " 设备不在线:"); } // RRPC 还可以实现更复杂的设备状态检测方法 // 请参考 https://help.aliyun.com/document_detail/101133.html } else { System.out.println("RRPC 检测:" + "接口调用不成功"); } } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有