國內物聯網平台(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 服務以實現設備互聯和物聯網應用。

 

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

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

通過NetBeans 來展示如何通過代碼來與物接入服務發送或者接受消息。新建一個Java應用程序類型的Maven項目,右擊"依賴關系"選擇添加依賴關系,查詢org.eclipse.paho,並加入對org.eclipse.paho.client.mqttv3的依賴。

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 – 與大數據分析服務對接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM