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

2019-05-31 10:53:01

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

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

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

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

2019071213.png
2019071214.png
2019071215.png

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

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

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

2019071216.png

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

1.发送数据

2019071217.png重点关注下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.接收数据

2019071218.png

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


  @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();
		}
	}


(微信打赏)

(支付宝打赏)
原创不易,谢谢赞赏。你的支持就是我的动力,我会更加努力。
  1. 2019-07-13 21:47:22

    会继续关注这个系列

  2. 2019-06-04 15:57:59

    大牛

在经过反复讨论后,初版流程确定如下: 1.车主通过微信公众号地图查看空位并导航到目的地,车位空闲状态下挡板默认下降,车主可自由驶入车位。

1核2G1M40G盘,89元/1年,2核4G3M40G盘,799元/3年,2核8G5M40G盘,1399元/3年,新老用户都支持。

阿里云产品1888元服务器代金券大礼包免费领取。

阿里云服务器低门槛上云捷径,普惠上云,云服务器1核1G仅需293元/年。

企业级高性能实例,限时2-5折,限首次购买ECS用户参与,限购4台。

腾讯云代金券新用户满200减150 满500减375 满1000减750 满2000减1500。

腾讯云服务器,数据库热卖云产品3折起,爆品低至1折。

腾讯云业界领先的性价比,0.57元/天起,关注最新活动,免费体验产品。