智慧停車(四) IOT選型-阿里雲物聯網

其實用電信物聯網平臺軟硬件這邊核心通訊協議已經打通,考慮到平臺後期要在全國投放車位,這中間除了用到電信卡外,肯定也會用到移動,聯動的,爲了避免電信物聯網平臺的不兼容,決定使用阿里雲物聯網平臺。

之前做搖搖車項目就用到過阿里雲的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();
		}
	}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章