智慧停车(四) IOT选型-阿里云物联网

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012898231/article/details/96149577

其实用电信物联网平台软硬件这边核心通讯协议已经打通,考虑到平台后期要在全国投放车位,这中间除了用到电信卡外,肯定也会用到移动,联动的,为了避免电信物联网平台的不兼容,决定使用阿里云物联网平台。

之前做摇摇车项目就用到过阿里云的MQTT用来做物联网通讯,当时我们用的MQTT属于消息队列的提供初级的数据过滤转换能,支持对设备数据进行过滤并转换,然后再流转到其他的业务。我记得当时的阿里云产品消息中间件这块就一个产品叫消息队列 MQ,然后在这个里面选择使用MQ的类别,比如RocketMQ,Kafka,AMQP,MQTT这些,这个里面一开始我们就用到MQTT(当时的MQTT还在公测阶段,不收费),以及后来摇摇车项目2.0平台我们用到RocketMQ用来做分布式事务。现在的阿里云产品消息中间件产品这块外面已经分的几个版块了。

MQTT对于我们的使用场景简单来说就是软件和硬件这边通过中间消息层的发布和订阅方式来进行通讯,所以软件和硬件两端都通过MQTT提供的SDK来操作即可,使用起来还是比较简单的,阿里云MQTT也有简单的后台可视化界面,可用监控设备的运营状态,如在线,离线以及统计报表。

 硬件陈工找到我,说以前的朋友介绍推荐使用阿里云的物联网平台,最开始我一直以为他说的就是我之前用的消息队列MQ里面的MQTT(现在叫:微消息队列for IoT),但是事实上不是同一个产品。说实话,第一次进入到阿里云物联网平台里面的时候有点懵比,一直半会没搞清楚这个物联网平台和之前用的MQTT有啥区别?

 

 

看起来貌似功能有点强悍,最关键的是可能配置一大堆。我知道,这又将是一个漫长的学习过程了。中间断断续续花了一天的时候,将产品文档从头到位看了篇,中间又看不懂的,有重点关注的,也有一拖而过的,最后总结下。

阿里云物联网平台为设备提供安全可靠的连接通信能力,向下连接海量设备,支撑设备数据采集上云;向上提供云端API,指令数据通过API调用下发至设备端,实现远程控制。物联网平台也提供了其他增值能力,如设备管理、规则引擎、数据分析、边缘计算等,为各类IoT场景和行业开发者赋能。简单来讲:设备接入方面,有提供设备端SDK,快速连接设备上云,效率高。同时支持全球设备接入、异构网络设备接入、多环境下设备接入、多协议设备接入。另外还有使用性能,可以支持具有亿级设备的长连接能力、百万级并发的能力,架构支撑水平性扩展。安全方面,提供多重防护保障设备云端安全,设备认证保障设备安全等等。

具体的东西要在后面使用过程中慢慢体会了,硬件连接那边(设备端开发)陈工在弄,我重点关注下软件这边(云端开发),找到java sdk相关使用文档和demo,基本一会就能跑起来,还是算简单。云端提供的API非常丰富,少说也有60个左右。

 不要慌,后面用到什么再来查相关API使用即可,前期我比较关注的API有两个,一个是下发指令,一个是上报数据,讲白了就是发送数据和接收数据。

1.发送数据

 

重点关注下RRpc这个API。之前我们用MQTT采用的是发布和订阅模式,也就是说软件发指令给硬件,都是走的异步的模式,发完指定后,订阅消息,然后通过消息来判断并做下步业务,这个RRpc从名字来看就是RPC调用,使用起来简化了很多。

public static void rrpcTest(String productKey, String deviceName, String msg) {
        RRpcRequest request = new RRpcRequest();
        request.setProductKey(productKey);
        request.setDeviceName(deviceName);
        request.setRequestBase64Byte(Base64.encodeBase64String(msg.getBytes()));
        request.setTimeout(5000);
        RRpcResponse response = (RRpcResponse)executeTest(request);
        if (response != null && response.getSuccess() != false) {
            LogUtil.print("rrpc消息发送成功!messageId:" + response.getMessageId() + ",payloadBase64Byte:" + new String(
                Base64.decodeBase64(response.getPayloadBase64Byte())));
        } else {
            LogUtil.error("rrpc消息发送失败!requestId:" + response.getRequestId() + "原因:" + response.getErrorMessage());

        }

    }

2.接收数据

 

在工程启动的时候初始化连接并开始监听消息。

  @PostConstruct  
    public void recvMsg(){
		subscribe();
    }
private void subscribe(){
        try {
            String accessKey = accessKeyID;//阿里云accessKey
            String accessSecret = accessKeySecret;//阿里云accessSecret
            String regionId = itoRegionId;//regionId
            String uid = userUID;//阿里云uid          
            String endPoint = "https://" + uid + ".iot-as-http2." + regionId + ".aliyuncs.com";//endPoint:https://${uid}.iot-as-http2.${region}.aliyuncs.com
            
 
 
            Profile profile = Profile.getAccessKeyProfile(endPoint, regionId, accessKey, accessSecret); //连接配置
            MessageClient client = MessageClientFactory.messageClient(profile);//构造客户端

            // 数据接收
            client.connect(messageToken -> {
                Message m = messageToken.getMessage();
                System.out.println("receive message from " + m);
                return MessageCallback.Action.CommitSuccess;
            });
        	
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

 

 

展开阅读全文

没有更多推荐了,返回首页