阿里云主账号或对应RAM用户的AccessKey ID和AccessKey Secret。
登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。
对服务端进行业务开发,实现接收设备数据和下发控制指令。本文以Java脚本为例,演示接收设备数据和下发控制指令。
准备开发环境
本文使用Java开发环境如下:
操作系统:Windows 10 64位
JDK版本:JDK8
集成开发环境:IntelliJ IDEA社区版
业务服务器接收设备数据
服务器通过AMQP客户端接收消息,需配置AMQP客户端接入物联网平台,监听设备消息,请参见AMQP客户端接入说明、Java SDK接入示例。
示例使用Java开发语言,推荐使用Apache Qpid JMS客户端。您可访问Qpid JMS 0.57.0,查看Qpid JMS客户端使用说明。
参照以下步骤,完成AMQP客户端开发。
下载Demo代码包,并解压。
打开IntelliJ IDEA,导入Demo包中的示例工程amqp-demo。
在pom.xml文件中,已添加Maven依赖,下载Qpid JMS客户端。
在src/main/java/com.aliyun.iotx.demo目录下AmqpClient.java文件中,参照下表,修改JMS客户端接入物联网平台代码中的参数值。
private final static Logger logger = LoggerFactory.getLogger(AmqpClient.class); private static String accessKey = "${YourAccessKey}"; private static String accessSecret = "${YourAccessSecret}"; private static String consumerGroupId = "${YourConsumerGroupId}"; //iotInstanceId:实例ID。 private static String iotInstanceId = "${YourIotInstanceId}"; //控制台服务端订阅中消费组状态页客户端ID一栏会显示clientId参数。 //建议使用机器UUID、MAC地址、IP等唯一标识作为clientId。便于您区分识别不同的客户端。 private static String clientId = "${YourClientId}"; //${YourHost}为接入域名,请参见AMQP客户端接入说明文档。 private static String host = "${YourHost}"; // 指定单个进程启动的连接数 // 单个连接消费速率有限,请参考使用限制,最大128个连接 // 连接数和消费速率及rebalance相关,建议每500QPS增加一个连接 private static int connectionCount = 4;
参数
示例
说明
accessKey
LTAI4GFGQvKuqHJhFa******
阿里云主账号或对应RAM用户的AccessKey ID和AccessKey Secret。
登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。
accessSecret
iMS8ZhCDdfJbCMeA005sieKe******
consumerGroupId
VWhGZ2QnP7kxWpeSSjt******
已创建的充电宝业务数据处理消费组ID,请参见云端配置开发的步骤6。
iotInstanceId
"iot-cn-6ja***"
设备所属实例的ID。
您可在控制台的实例概览页面查看。
若有ID值,必须传入该ID值。
若无ID值,传入空值,即
iotInstanceId = ""
。
clientId
12345
客户端ID,可自定义,长度不可超过64个字符。建议设置为您的AMQP客户端所在服务器UUID、MAC地址、IP等唯一标识,方便您识别区分不同的客户端。
AMQP客户端接入成功后,在控制台的充电宝业务数据处理的消费组详情页面,显示该参数。
connectionCount
4
启动AMQP客户端的连接数,最大不超过128个。用于实时消息推送的扩容。
消费组详情页面会以
${clientId}+"-"+数字
形式,显示连接的客户端。其中数字最小值为0。host
iot-***.amqp.iothub.aliyuncs.com
AMQP接入域名,请参见查看和配置实例终端节点信息(Endpoint)。
业务服务器下发控制指令
服务器通过调用Pub接口下发控制指令:CMD,82923,ad322
。
参照以下步骤,完成服务端开发,其中参数配置,请参见Java SDK使用说明、Pub。
在amqp-demo工程中的pom.xml文件中,添加Maven依赖,然后单击Load Maven Changes图标,完成依赖包下载。
<!-- 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> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.6</version> </dependency>
在工程amqp-demo的路径src/main/java/com.aliyun.iotx.demo下,创建Java类,输入代码。例如PubClient.java,代码内容如下。
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.iot.model.v20180120.*; public class PubClient { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("${RegionId}", "${accessKey}", "${accessSecret}"); IAcsClient client = new DefaultAcsClient(profile); PubRequest request = new PubRequest(); request.setIotInstanceId("${iotInstanceId}"); request.setProductKey("${productKey}"); request.setQos(0); request.setTopicFullName("/${productKey}/${deviceName}/user/cmd/down"); request.setMessageContent(Base64.getEncoder().encodeToString("CMD,82923,ad322".getBytes())); try { PubResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }
配置相关参数,替换以下参数为实际值。
参数
说明
${accessKey}
您账号的AccessKey ID和AccessKey Secret。
您可在阿里云官网控制台AccessKey管理中创建或查看您的AccessKey。
${accessSecret}
${RegionId}
您的物联网平台服务的地域代码。
您可在物联网平台控制台左上方,查看当前服务所在地域。
地域代码的表达方法,请参见地域列表。
${iotInstanceId}
您设备所属实例的ID。您可在物联网平台控制台的实例概览页面,查看当前实例的ID。
若有ID值,必须传入该ID值。
若无ID值,传入空值即可。
${productKey}
您添加设备后,保存的设备证书信息。
您可在物联网平台控制台的设备详情页面查看。
${deviceName}