设备成功上报消息后,您可以尝试从物联网平台的云端下发指令到设备端。
前提条件
已接入设备到物联网平台。具体操作,请参见设备接入和上报数据。- 在IntelliJ IDEA中的Amqp工程的pom.xml文件中,添加Maven项目依赖。
- 新版IoT Java SDK的Maven依赖坐标:
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-iot --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>7.41.0</version> </dependency>
- 阿里云Java SDK公共包Maven依赖坐标:
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.6</version> </dependency>
- 程序的Maven依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.1</version> </dependency>
- 新版IoT Java SDK的Maven依赖坐标:
- 在Amqp工程的路径Amqp\src\main\java下,创建Java类。例如InstancePubClient,输入以下代码。
Pub API调⽤的参考代码如下所示:
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.iot.model.v20180120.PubRequest; import com.aliyuncs.iot.model.v20180120.PubResponse; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.google.gson.Gson; import org.apache.commons.codec.binary.Base64; public class InstancePubClient { private static String accessKey = "LTAI***"; //您阿里云账号的AccessKey。 private static String accessKeySecret = "iMS8***"; //您阿里云账号的AccessKey Secret。 private static String iotInstanceId = "iothub-unit-***"; //您企业版实例的实例ID。 public static void main(String[] args) { IClientProfile profile = DefaultProfile.getProfile("cn-shenzhen", accessKey, accessKeySecret); //cn-shenzhen为实例所属地域,需修改为您实例的所属地域。 DefaultAcsClient client = new DefaultAcsClient(profile); PubRequest request = new PubRequest(); request.setSysEndpoint("iot.cn-shenzhen.aliyuncs.com"); //您实例所属地域的API服务端地址。 request.setTopicFullName("/g0d***/tracker0001/user/config"); //发布消息的Topic。 request.setMessageContent(Base64.encodeBase64String("CMD,82923,ad322".getBytes()));//原始报文 : CMD,82923,ad322。 request.setProductKey("g0***"); //产品的ProductKey。 request.setIotInstanceId(iotInstanceId); request.setQos(1); try { PubResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }
参数 示例 说明 accessKey LTAI*** 您的阿里云账号的AccessKey ID。 登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。
说明 如果使用RAM用户,您需授予该RAM用户管理物联网平台的权限(AliyunIOTFullAccess),否则将连接失败。授权方法请参见授权RAM用户访问物联网平台。accessKeySecret iMS8*** iotInstanceId iothub-unit-*** 已创建企业版实例的实例ID,请参见创建企业版实例。 SysEndpoint iot.cn-shenzhen.aliyuncs.com Endpoint是阿里云服务的API服务端地址。Endpoint中,地域需与物联网平台产品地域保持一致。本示例中,地域为华南1(shenzhen),EndpointAPI服务端地址为: https://iot.cn-shenzhen.aliyuncs.com
。TopicFullName /g0d***/tracker0001/user/config 要发布消息的自定义Topic,请参见创建产品和设备的步骤5。 MessageContent Base64.encodeBase64String("CMD,82923,ad322".getBytes()) 要发送的消息主体。 您需要将消息原文转换成二进制数据,并进行Base64编码,从而生成消息主体。本示例消息原文为:
CMD,82923,ad322
。ProductKey g0*** 设备所属产品ProductKey,请参见创建产品和设备的步骤9。 - 运行InstancePubClient程序,从云端下发指令到设备端。
执行结果如下图所示。
- 在启动设备的CMD窗口,显示接收到的云端指令。
- 在左侧导航栏,单击云端运行日志页签,查看设备API调用的⽇志。 ,进入
序号 描述 ① 调用物联网平台云端API,向设备下发指令。 ② 物联网平台向设备发送指令。 ③ 设备成功响应物联网平台的指令。