國內物聯網平臺(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)模式的協議, |
endpoint |
IoT Hub 的服務例項,代表一個完整的IoT Hub 服務。 |
thing |
表示IoT Hub 裝置, |
principal |
principal是一個抽象概念,表示裝置(thing)的身份。 |
policy |
為身份principal設定對應的策略policy,一個principal對應一個policy。 |
permission |
為每一個policy設定一組許可權permission,其中包括主題topic,和對該主題的操作許可權operation。 |
topic |
每一個policy都需要指定一個主題專案(topic),在進行使用IoT Hub 服務之前, |
operation |
對topic的操作許可權。目前基於MQTT協議,IoT Hub 支援建立釋出PUBLISH和訂閱SUBSCRIBE兩種許可權。 |
MQTT協議
MQTT(Message Queuing Telemetry Transport)是一個客戶端服務端架構的釋出/訂閱模式的訊息傳輸協議。它的設計思想是輕巧、開放、簡單、規範,易於實現。這些特點使得它對很多場景來說都是很好的選擇,特別是對於受限的環境如機器與機器的通訊(M2M)以及物聯網環境(IoT)。
客戶端
- 釋出應用訊息給其它相關的客戶端。
- 訂閱以請求接受相關的應用訊息
- 取消訂閱以移除接受應用訊息的請求。
- 從服務端斷開連線。
服務端
- 接受來自客戶端的網路連線
- 接受客戶端釋出的應用訊息
- 處理客戶端的訂閱和取消訂閱請求。
- 轉發應用訊息給符合條件的客戶端訂閱。
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
希望對你有幫助。