1. 程式人生 > >國內物聯網平臺(1)——百度物接入IoT Hub

國內物聯網平臺(1)——百度物接入IoT Hub

                 國內物聯網平臺(1)——百度物接入IoT Hub

 

作者:馬智

物接入IoT Hub - 架構

  • 全託管的雲服務,幫助建立裝置與雲端之間安全可靠的雙向連線
  • 支撐海量裝置的資料收集、監控、故障預測等各種物聯網場景

 

物接入IoT Hub - 功能

  • 通訊協議:支援MQTT
  • 資料安全:裝置級認證、策略授權;雙向安全連線、SSL傳輸
  • 開發語言:支援多種開發語言、相容主流硬體裝置

    • 支援C、C#、Python、Java、PHP等
    • 支援CLI命令列工具(Python)
  • 分析服務:對接百度大資料服務

 

物接入IoT Hub – 概念

概念

描述

MQTT

MQTT是基於二進位制訊息的釋出/訂閱(Publish/Subscribe)模式的協議,
最早由IBM提出的,如今已經成為OASIS規範,
更符合M2M大規模溝通。

endpoint

IoT Hub 的服務例項,代表一個完整的IoT Hub 服務。

thing

表示IoT Hub 裝置,
使用者可以在每個endpoint中建立一個或多個thing。

principal

principal是一個抽象概念,表示裝置(thing)的身份。
每個thing可以繫結一個principal,
每個principal擁有一個policy許可權。

policy

為身份principal設定對應的策略policy,一個principal對應一個policy。

permission

為每一個policy設定一組許可權permission,其中包括主題topic,和對該主題的操作許可權operation。

topic

每一個policy都需要指定一個主題專案(topic),在進行使用IoT Hub 服務之前,
需要先為我們即將開展的訂閱釋出資訊建立一個主題名稱,
該主題應用於MQTT客戶端。topic規則允許字串可以帶一個萬用字元"#",
例如"temperature/#"就是匹配字首是temperature的所有topic;單獨的"#"表示匹配所有topic。

operation

對topic的操作許可權。目前基於MQTT協議,IoT Hub 支援建立釋出PUBLISH和訂閱SUBSCRIBE兩種許可權。

 

MQTT協議

MQTT(Message Queuing Telemetry Transport)是一個客戶端服務端架構的釋出/訂閱模式的訊息傳輸協議。它的設計思想是輕巧、開放、簡單、規範,易於實現。這些特點使得它對很多場景來說都是很好的選擇,特別是對於受限的環境如機器與機器的通訊(M2M)以及物聯網環境(IoT)。

客戶端

  1. 釋出應用訊息給其它相關的客戶端。
  2. 訂閱以請求接受相關的應用訊息
  3. 取消訂閱以移除接受應用訊息的請求。
  4. 從服務端斷開連線。

服務端

  1. 接受來自客戶端的網路連線
  2. 接受客戶端釋出的應用訊息
  3. 處理客戶端的訂閱和取消訂閱請求。
  4. 轉發應用訊息給符合條件的客戶端訂閱。

 

MQTT vs HTTPS:

  • 吞吐量:93倍
  • 傳送資料電量消耗: 1/11
  • 接收資料電量消耗:1/170
  • 連線保持電量消耗:1/2
  • 網路開銷:1/8

 

物接入IoT Hub – 操作流程

目前每個賬戶只能建立2個endpoint,100個things,100個principal。

 

物接入IoT Hub – 連線型別

  • IoT Hub為每個例項提供3種預設連線方式

    • TCP:埠1883,不支援傳輸資料加密,可以通過MQTT.fx客戶端連線。
    • SSL:埠1884,支援SSL/TLS加密傳輸,MQTT.fx客戶端連線
    • WSS:埠8884,支援WebSocket瀏覽器方式連線,同樣包含SSL加密

 

tcp://yourendpoint.mqtt.iot.gz.baiduce.com:1883

ssl://yourendpoint.mqtt.iot.gz.baiduce.com:1884

wss://yourendpoint.mqtt.iot.gz.baidubce.com:8884

 

物接入IoT Hub – 運維介面

建立裝置

建立身份

建立策略

生成祕鑰

 

物接入IoT Hub – MQTT客戶端型別

  • Websockets Client:百度開放雲基於瀏覽器開發的mqtt客戶端
  • MQTT.fx:目前主流的mqtt客戶端,可以快速驗證是否可以與IoT Hub 服務交流釋出或訂閱訊息
  • Paho:Eclipse基金會提供的開源MQTT客戶端實現,可以很好的支援百度開放雲物接入IoT Hub 服務以實現裝置互聯和物聯網應用。
package com.baidu.iot; 
import java.io.InputStream; 
import java.security.KeyStore; 
import java.security.cert.Certificate; 
import java.security.cert.CertificateFactory; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.TrustManager; 
import javax.net.ssl.TrustManagerFactory; 
import org.eclipse.paho.client.mqttv3.MqttClient; 
import org.eclipse.paho.client.mqttv3.MqttConnectOptions; 
import org.eclipse.paho.client.mqttv3.MqttMessage; 
public class Thermometer { 
public static void main(String[] args) throws Exception { 
String endpoint = "hostname"; //輸入建立例項endpoint返回的hostname 
String username = "yourendpoint/yourthing"; //輸入建立thing返回的username 
String password = "Dm3yyvOHb7zt/uRWsPgsfsgbnj7CxuVMc+uDbf4j960="; //輸入建立principal返回的password 
String topic = "building-b/floor-5/temperature-1"; //訂閱的訊息主題,本例是指訂閱b號樓第五層的溫度 
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); 
tmf.init((KeyStore)null); 
TrustManager[] trustManagers = tmf.getTrustManagers(); 
 
SSLContext ctx = SSLContext.getInstance("TLS"); 
ctx.init(null, trustManagers, null); 
MqttConnectOptions options = new MqttConnectOptions(); 
options.setCleanSession(true); 
options.setUserName(username); 
options.setPassword(password.toCharArray()); 
options.setSocketFactory(ctx.getSocketFactory()); 
MqttClient client = new MqttClient(endpoint, "java-client"); 
client.connect(options); 
MqttMessage message = new MqttMessage(); 
message.setPayload("15".getBytes()); 
client.publish(topic, message); 
client.disconnect(); 
} 
} 

 

物接入IoT Hub – Paho客戶端原始碼示例

訂閱一棟辦公樓內第五層的溫度值

通過NetBeans 來展示如何通過程式碼來與物接入服務傳送或者接受訊息。新建一個Java應用程式型別的Maven專案,右擊"依賴關係"選擇新增依賴關係,查詢org.eclipse.paho,並加入對org.eclipse.paho.client.mqttv3的依賴。

 

物接入IoT Hub – 與大資料分析服務對接

原文地址:http://www.cnblogs.com/ibrahim/p/baidu-iot-hub.html

希望對你有幫助。