阅读1028 返回首页    go 阿里云 go 技术社区[云栖]


JAVA版demo__设备基于CCP接入_设备端接入手册_阿里云物联网套件-阿里云

本文以JAVA版为例,演示如何让设备连接到阿里云IoT,并通过PUB/SUB实现一个简单的M2M通信。

第一步

登录IoT控制台获得相关配置信息。

  • 创建产品得到productKey和productSecret;
  • 在产品下添加设备得到deviceID和deviceSecret;
  • 授权设备操作某个Topic

具体请参考控制台使用手册文档中的创建产品添加设备以及设备授权部分。

备注:本文以JAVA版为例 演示如何使设备连接阿里云IoT并实现消息的收发。

第二步

下载JAVA版demo,参考IotClientDemo.java,将第一步获得的信息配置初始化:


  1. ConnectOpts opts = new ConnectOpts();
  2. opts.setDeviceName("xxx");//设备名称
  3. opts.setDeviceSecret("xxx");//设备密钥
  4. opts.setProductAppKey("xxx");//产品证书key
  5. opts.setProductAppSecret("xxx");//产品证书密钥
  6. opts.setAuthUrl("https://iot.channel.aliyun.com");
  7. opts.setAliveSeconds((short) 80);//心跳时间
  8. opts.setSignMethod("md5");// HmacMD5 HmacSh1 Md5
  9. opts.setAutoReconnect(true);//是否自动重连
  10. opts.setAutoReconnectDelay(5000);//重连间隔时间

备注:本demo使用 eclipse - IDE 运行,可以通过 mvn eclipse:eclipse 命令初始化 然后导入工程。

第三步

运行IotClientDemo.java

  1. //创建ccp客户端
  2. CcpClient ccpClient = new CcpClient(opts);
  3. // 把当前实例增加为监听对象,异步消息会回调到监听对象
  4. ccpClient.attachListener(new CcpMessageListener() {
  5. @Override
  6. public void onMessage(AbstractMessage message) {
  7. LogUtil.print("收到消息:" + message);
  8. //有异步消息到达会回调这里
  9. }
  10. @Override
  11. public void onConnect(ConnectACK message) {
  12. LogUtil.print("连接消息:" + message);
  13. //连接成功会回调这里
  14. }
  15. @Override
  16. public void onOffLine() {
  17. LogUtil.print("会话断开");
  18. }
  19. });
  20. // 连接数据服务器
  21. ccpClient.connect();

demo运行有3个阶段:

(1)调用授权接口初始化设备,服务器返回公钥以及数据通道服务器地址(这个地址是可变的)

(2)设备端生成自己的私钥seedkey,并使用服务器公钥加密发给服务器,成功后得到sessionId(sid)

(3)使用sid连接数据通道建立TCP连接(即第一步返回的服务器地址),进行数据传输

分别对应的日志示例:

  1. 调用设备授权认证接口:
  2. {"servers":"8.8.8.8:8080","pubkey":"-----BEGIN CERTIFICATE--此处省略...----END CERTIFICATE-----","deviceId":"xxxx"}

拿到pubkey后,客户端需要使用pubkey传输自己的私钥seedkey,发起确认授权:

  1. iot/sid 获取会话认证返回结果:
  2. {"sid":"QMAOohO+7vVawxF4eHo2hktfmUa2yyWHeZlNWGcwWTANDstjcUquadlfQD1+oGLq"}
  3. sid=32f3fb1a0a98df3eeaefdd3e07201254

服务器确认后,返回sid即sessionid,设备即可使用此sid tcp方式连接第一步的servers数据通信,通信过程中数据使用seedkey私钥加密,而seedkey仅仅在上一步使用pubkey加密告知服务器,数据是安全可靠的。

  1. from server: FixedHeader{remainLength=48, messageType=2, compress=true, qosLevel=1, hasData=true}
  2. 接收到消息:FixedHeader{remainLength=48, messageType=2, compress=true, qosLevel=1, hasData=true}
  3. ConnectACK{FixedHeader{remainLength=48, messageType=2, compress=true, qosLevel=1, hasData=true}, sequenceID=0};
  4. ConnectACK{statusCode=success, connectionToken='mP2qbVZYOA6GX4BKLHfSiQ==', suggestionIPs='',latestSDKPath:}
  5. 5秒后模拟一个sub、再5秒发送pub、再15秒发送unsub、5秒后再尝试pub
  6. 5秒后 ,模拟发送一个数据sub请求,订阅的队列=xxxxx/test
  7. 消息发送成功:Subscribe[sequenceID:+0,topicFilters:[xxxxx/test]]
  8. from server: FixedHeader{remainLength=16, messageType=28, compress=true, qosLevel=1, hasData=true}
  9. 接收到消息:FixedHeader{remainLength=16, messageType=28, compress=true, qosLevel=1, hasData=true}
  10. SubAck[sequenceID:+0,codes:[0],msgs:[]]
  11. 5秒后 ,模拟发送一个数据pub请求,发布到队列=xxxxx/test
  12. 消息发送成功:Publish[sequenceID:+0,topic:23301499/test,aliveSecond:0,payload.length:19],payload转字符串:你好啊,约吗?
  13. from server: FixedHeader{remainLength=48, messageType=25, compress=true, qosLevel=1, hasData=true}
  14. 接收到消息:FixedHeader{remainLength=48, messageType=25, compress=true, qosLevel=1, hasData=true}
  15. Publish[sequenceID:+4,topic:xxxxx/test,aliveSecond:0,payload.length:19],payload转字符串:你好啊,约吗?
  16. 15秒后 ,模拟发送一个unsub请求,取消队列=xxxxx/test
  17. 消息发送成功:UnSubscribe[sequenceID:+0,topicFilters:[xxxxx/test]]
  18. from server: FixedHeader{remainLength=16, messageType=30, compress=true, qosLevel=1, hasData=true}
  19. 接收到消息:FixedHeader{remainLength=16, messageType=30, compress=true, qosLevel=1, hasData=true}
  20. UnSubAck[sequenceID:+0,codes:[0]]
  21. 5秒后 ,再发送一个pub消息,队列=xxxxx/test
  22. 消息发送成功:Publish[sequenceID:+0,topic:xxxxx/test,
  23. aliveSecond:0,payload.length:19],payload转字符串:你好啊,约吗?

备注:在第三步进行数据通信时需要创建Topic,请在控制台将设备添加授权。如果多个设备使用同一个Topic即可实现M2M通信

最后更新:2016-08-08 11:13:40

  上一篇:go 附录__设备基于CCP接入_设备端接入手册_阿里云物联网套件-阿里云
  下一篇:go 接入详细说明__设备端接入手册_阿里云物联网套件-阿里云