百度天工服務分為物接入IOT Hub、物解析IOT Parser、物管理IOT Device、時序數據庫TSDB、規則引擎Rule Engine還有物可視IOT Visualization,目前物可視在官方公測階段,需要開發者在物可視界面申請。
一、物接入IOT Hub
1、概述
物接入IoT Hub 是全托管的雲服務,通過主流的物聯網協議(如MQTT)通訊,可以在智能設備與雲端之間建立安全的雙向連接,快速實現物聯網項目。支持億級並發連接和消息數,建立海量設備與雲端安全可靠的雙向連接,無縫對接天工平台和百度雲的各項產品和服務。
物接入資源分為兩類:物接入、物接入(SIM版),本文主要講解物接入方式,SIM版讀者有興趣可以試試。
MQTT概述
MQTT(Message Queuing Telemetry Transport)是一個客戶端服務端架構的發布/訂閱模式的消息傳輸協議。它的設計思想是輕巧、開放、簡單、規范,易於實現。這些特點使得它對很多場景來說都是很好的選擇,特別是對於受限的環境如機器與機器的通信(M2M)以及物聯網環境(IoT)。
支持MQTT底層傳輸協議的相關設備有:
- 客戶端--使用它連接服務端。
- 服務端--全托管的雲服務,幫助建立設備與雲端之間安全可靠的雙向連接,以支撐海量設備的數據收集、監控、故障預測等各種物聯網場景。
MQTT客戶端
使用MQTT的程序或設備,推薦您使用MQTT.fx。客戶端總是通過網絡連接到服務端。它可以
- 發布應用消息給其它相關的客戶端。
- 訂閱以請求接受相關的應用消息
- 取消訂閱以移除接受應用消息的請求。
- 從服務端斷開連接。
MQTT服務端
全托管的雲服務,幫助建立設備與雲端之間安全可靠的雙向連接,以支撐海量設備的數據收集、監控、故障預測等各種物聯網場景。
- 接受來自客戶端的網絡連接
- 接受客戶端發布的應用消息
- 處理客戶端的訂閱和取消訂閱請求。
- 轉發應用消息給符合條件的客戶端訂閱。
更詳細的MQTT協議介紹請參考MQTT官網。
名詞解釋
系統限制
2、快速接入IOT Hub
步驟一:注冊並登錄IoT Hub
在使用IoT Hub服務前,您需要創建一個百度雲賬號,請按照下述步驟進行注冊和登錄。
步驟二:創建計費套餐
注意
對於產品公測期間已開通免費物接入服務的用戶,系統會自收費開始日起(具體日期以公告為准)創建一個3個月的免費配置(可發布、訂閱100萬條消息/月)訂單,請在3個月內登錄控制台升級或續費套餐。
在創建實例之前應先創建計費套餐並設定每個月收發消息的額度,系統將根據額度自動計算每個月的服務費用。每個用戶只能創建一個計費套餐,所有實例將共享該套餐的額度。
-
登錄百度雲官網,點擊右上角的“管理控制台”,快速進入控制台界面。
-
選擇“產品服務>物接入IoT Hub”,進入服務頁面。
-
點擊“實例列表”,選擇一種計費方式,物接入或者物接入(SIM)版,關於產品的定價和費用計算方法,請參看產品定價。
完成配置后,點擊“下一步”進入在線支付頁面進行支付。支付成功后,用戶可進入“實例列表”,創建物接入實例。
步驟三:創建實例
連接IoT Hub服務需要創建一個實例(endpoint),一個endpoint表示一個完整的IoT Hub服務。登錄IoT Hub控制台頁面,點擊“創建實例”,填寫需要創建IoT Hub服務的實例名稱。
說明:
- 目前每個賬戶能創建100個endpoint,且每個實例的名稱是全局唯一的,不能重名。每個endpoint下可創建10000個thing、10000個policy和10000個principal。如果需要更多配額,請提交工單申請。
創建實例時,IoT Hub默認提供三種地址,選擇不同的地址,意味着您可以通過不同的方式連接到百度雲IoT Hub。
-
tcp://yourendpoint.mqtt.iot.gz.baiduce.com:1883,端口1883,不支持傳輸數據加密,可以通過MQTT.fx客戶端連接。
-
ssl://yourendpoint.mqtt.iot.gz.baiduce.com:1884,端口1884,支持SSL/TLS加密傳輸,MQTT.fx客戶端連接,參考配置MQTT客戶端。
-
wss://yourendpoint.mqtt.iot.gz.baidubce.com:8884,端口8884,支持Websockets瀏覽器方式連接,同樣包含ssl加密,參考Websockets Client。
步驟四:配置實例
成功創建IoT Hub實例后,點擊實例名稱,進入配置IoT Hub實例頁面,創建設備、身份和策略。具體操作步驟如下:
1、創建設備:選擇設備列表,點擊“創建設備”,輸入需要連接IoT Hub服務的設備名稱。為了便於靈活連接IoT Hub服務,每一台設備thing都需要綁定相應的身份principal。
2、創建身份:在身份輸入框內點擊“創建”,快速創建身份principal。輸入principal名稱,以及為每個身份授權的策略policy。
3、創建策略:在策略輸入框內點擊“創建”,快速創建策略policy。輸入policy名稱,主題topic,選擇該身份擁有的權限:發布消息(publish)、訂閱消息(subscribe)。
說明:
每個policy可以創建多個主題topic,在創建策略彈框右側,點擊“+”可以綁定更多的主題。
4、成功創建身份principal后,返回密碼,在配置客戶端時會用到,需要復制保存,如下圖所示:
5、至此,成功配置了 IoT Hub 實例中的相關參數。
步驟五:配置MQTT客戶端
配置MQTT的應用客戶端,可以快速驗證是否可以實現與物接入服務交流發送或者接收消息。
前提條件:登錄MQTT.fx官網,找到適合的版本下載並安裝MQTT.fx客戶端。
操作步驟
1、打開MQTT客戶端的設置頁面,點擊“+”按鍵,創建一個新的配置文件。
a、填寫Connection profile相關信息:
參數名稱 | 說明 |
---|---|
profile name | 配置文件名稱 |
Broker Address | 創建endpoint后返回的hostname |
Broker Port | 1884 |
Client ID | 客戶端ID,支持“a-z”,“0-9”,“_”,“-”字符, 且不能大於128bytes,UTF8編碼 |
b、選擇User Credential,輸入創建 IoT Hub 服務返回的username/password,參考配置實例。
c、配置SSL/TLS安全認證,勾選 Enable SSL/TLS
,選擇CA signed server certificate
認證。
d、點擊“Apply”按鍵,完成客戶端配置。
2、返回MQTT客戶端界面,選擇新創建的配置文件,點擊“connect”按鍵連接服務。
3、成功連接后,即可開始訂閱消息。
打開Subscribe標簽,填寫主題topic,創建設備時自己定義的主題,選擇默認的QoS 0,點擊“Subscribe”進行訂閱操作。
4、發布消息。
打開Publish標簽,填寫主題topic,創建設備時自己定義的主題,選擇默認的QoS 0,點擊“Publish”進行發布操作。
5、返回Subscribe界面,即可看到已接收的訂閱消息。
二、規則引擎 Rule Engine
1、概述
規則引擎並不是一個全新的概念,在傳統軟件業中已經有相關的產品。在傳統商業管理軟件中,由於市場要求業務規則變化頻繁,IT系統必須依據業務規則的變化而快速、低成本的更新。為了達到該目的,要求業務人員能夠直接管理IT系統中的規則而不需要開發人員的參與,這就是規則引擎曾經在傳統軟件中的功能。
類似地,在物聯網中,由於數據量巨大,業務規則可能多種多樣,也需要將規則的設置變得簡單和友好以適應業務規則的多樣和變化。大量的數據往往對應着不同的應用分析場景,如監控廠區的溫度濕度監控點,每十分鍾都會有溫度和濕度數據傳往雲端;對於這些數據,我們往往希望它們發揮不同的作用,例如以下應用場景:
-
實時告警異常的數據;
-
兩個小時內的溫度最大最小和均值等;
-
將全部的數據做冷備份以便查詢;
-
對去除異常數據之后的正常數據做數據分析和預測。
規則引擎就是通過靈活的設定規則,將設備傳上雲端的數據,送往不同的數據目的地(如時序數據庫TSDB、Kafka、對象存儲BOS等)以達到不同的業務目標。
優勢:
-
多種服務支持
支持將消息轉發到時序數據庫、Kafka、對象存儲,無縫對接MapReduce、機器學習、雲推送等各種服務。
-
靈活易用
規則設置靈活簡單,一鍵啟停規則,支持各種事件和動作。
-
多場景支持
支持設備與雲端之間的轉發,設備與設備之間的轉發,設備與第三方服務的轉發。
-
強大的API
提供開放標准的API,可通過調用API實現控制台操作,方便第三方應用快速集成雲端服務。
例:城市路燈管理屬於一個典型的物聯網場景,該場景可以復制到很多其它的領域。
傳統情況下,路燈管理基本上靠人力,例如:巡查、維護,甚至是靠人工控制路燈開關;而城市路燈數量巨大,分布復雜,對於管理部門來說可能已經投入了大量的人力成本,但仍然會出現故障發現和搶修不及時的情況。同時在傳統情況下,由於缺少路燈的運行環境(例如:電壓、溫度),使用壽命等數據,很難有針對性改進使用方法,進而延長使用壽命,也很難指定准確的維護策略和備件策略。
路燈接入可以采用多種方式,例如:3G/4G,電力載波,LPWAN等,無論采用哪種方式,用戶只需在接入設備中預裝Edge SDK,都能輕松打通路燈和百度雲之間的雙向安全通道,實現將路燈接入百度雲的物接入服務。路燈可以實時將設備狀態、電壓電流、環境溫度、地理坐標等信息發送至物接入服務。同時在工程師的智能終端上預裝APP對接百度雲,可實時上報工程師的地理位置坐標。
物接入接收到路燈上送的消息后,可將消息分別轉發至物管理和規則引擎服務。用戶可在規則引擎上制定策略,實現以下操作:
-
當路燈下線或電壓電流超過閾值時,檢索距離現場最近的維護工程師,並自動發送告警、路燈坐標等信息給指定的維護工程師。工程師的智能終端可對接百度地圖服務,自動在地圖上顯示待維修路燈的位置。
-
將電壓電流、環境溫度等信息轉發至時序數據庫,並對接天算大數據平台,用於后續的數據挖掘。
2、快速創建規則引擎
操作流程介紹:
2.1、創建數據源:規則引擎需要通過物接入獲取設備端發往雲端的消息,因此在配置規則引擎之前,需先配置物接入IoT Hub打通雲端和設備端之間的雙向通道。物接入主要用於在智能設備與雲端之間建立安全的雙向連接,實現從設備到雲端以及從雲端到設備的消息傳輸。
2.2、創建目的地:規則引擎可根據預先設置的規則將消息轉發至百度雲的其它服務,例如時序數據庫、百度Kafka或物接入主題。在配置規則引擎前,建議您先創建好需要用到的其它服務。
百度Kafka是基於Apache Kafka的分布式、高可擴展、高通量、多分區和多副本的消息托管服務。百度Kafka封裝了Kafka集群細節,並以托管服務形式提供,您可以直接使用百度Kafka創建主題來集成大規模分布式應用,而無需考慮集群運維,僅按照使用量支付處理數據的費用。
TSDB是用於管理時間序列數據的專業化數據庫。區別於傳統的關系型數據庫,TSDB針對時間序列數據的存儲、查詢和展現進行了專門的優化,從而獲得極高的數據壓縮能力、極優的查詢性能,特別適用於物聯網應用場景。
物接入主題
物接入主題是物接入服務與前端設備進行消息傳播的媒介。規則引擎支持將在一個主題中收到的信息,轉發至另一個主題中。如將主題temperature訂閱到的消息,篩選出大於閾值的消息,轉發至主題alarm中,再用其他客戶端訂閱alarm客戶端主題即可。
創建規則:設置篩選規則、消息來源主題、觸發條件和數據目的地。
驗證規則:構建Json格式的Payload,對已經創建的規則的篩選結果進行驗證。
步驟一:創建規則
規則引擎需要通過物接入獲取設備端發往雲端的消息,因此在配置規則引擎之前,需先配置物接入打通雲端和設備端之間的雙向通道。有關物接入的配置操作,請參看物接入IoT Hub。
規則引擎從物接入獲取到的消息的payload應當是Json格式的,因此在創建規則時,需要使用Json表達式引用。在執行以下操作之前,用戶應對Json表達式引用方法有所了解。有關Json表達式的介紹請參看附錄-Json表達式
1、登錄百度雲官網,點擊右上角的“管理控制台”,快速進入控制台界面。
2、選擇“產品服務>規則引擎>規則列表”,進入“規則列表”頁面。
3、點擊“新建規則”,進入規則創建頁面,填寫以下配置信息:
查詢字段:從消息中篩選出來用於后續操作(如:轉發至TSDB或百度Kafka)的數據。如果填寫“*”,則將原樣轉發payload中的所有數據至目的地。
如果將消息轉發至TSDB,需要預先對消息格式進行調整,具體操作請查看將消息轉發至TSDB。
主題:消息來源的物接入主題。
約束條件:后續操作的觸發條件。缺省情況下,轉發每一條消息至目的地。
其中,查詢字段和約束條件中支持的操作符如下:
運算符 | 語義 | 示例 |
---|---|---|
JSON擴展表達式 | JSON的屬性訪問 | info.contact.tel,關於Json表達式的更多內容,請參看附錄 |
= | 相等比較 | age = 9 |
<> | 不等 | name <> 'abc' |
AND | 邏輯與 | age = 9 AND name <> 'abc' |
OR | 邏輯或 | age = 9 OR name <> 'abc' |
() | 括號 | age =9 AND (name <> 'abc' OR score > 60.0) |
+,-,*,/ | 數值的加減乘除 | 2+3, age - 1, score * 100.0, age / 3 |
<, <=, >, >= | 比較操作符 | age < 10, age <= 9, score > 60.0, score >= 60.0 |
in | 集合操作 | WHERE name in ('jack', 'jim') |
SQL函數 | 標准的SQL函數 | 如:ceil, floor等,常見SQL函數,請參看附錄 |
CURRENT_TIMESTAMP | 返回當前時間戳(毫秒),即UTC時間 | SELECT CURRENT_TIMESTAMP AS TS |
LOCALTIMESTAMP() | 返回本地時間戳(毫秒),即UTC+8 | SELECT LOCALTIMESTAMP AS localTS |
NEWID() | 返回一個guid(global unique identifier,全球唯一標識),規則引擎會為每一條消息新增一個guid | SELECT NEWID() AS id from t |
clientid() | 返回消息的發送者id | SELECT clientid() FROM... |
clientip() | 返回消息發送者的IP | SELECT clientip() FROM... |
topic() | 返回消息所在的主題 | SELECT topic() FROM... |
qos() | 返回消息發送所用的QoS | SELECT qos() FROM... |
4、點擊“添加數據目的地”,新增一個數據目的地,此處可添加多個。
規則引擎支持將數據轉發至“時序數據庫TSDB”、“百度Kafka”或“其它物接入主題”。
將數據轉發至“其它物接入主題”是,僅支持將數據轉發至同一個endpoint(即消息來源的物接入主題所在的endpoint)下的其它主題,不支持轉發至其它endpoint。
如果將數據轉發至TSDB,需要對數據格式進行調整,具體操作請參看將消息轉發至TSDB。
返回“規則列表”頁面,查看已經創建的規則。
步驟二:驗證規則
用戶可以自己構建Json格式的Payload,對已經創建的規則的篩選結果進行驗證。在執行以下操作前,用戶應先創建規則。
1、選擇“產品服務>規則引擎>規則列表”,進入“規則列表”頁面,查看已經創建的規則。
2、找到指定的規則,點擊規則名稱,進入規則詳情頁面;點擊“規則驗證”,驗證已經創建的規則。
3、在“輸入數據”中構建Json格式的原始數據,選擇數據目的地並點擊“驗證”,此時系統將根據已經創建的規則自動輸出篩選后的數據。
步驟三:將消息轉發至數據目的地
1、存入TSDB數據庫
通過簡單規則調整數據格式:以下方法僅針對value存放在消息中,如果value存放在數組中,請看下面的通過"_TSDB_META"調整數據格式。
TSDB數據庫要求數據必須包含metric、value和timestamp三個字段,以及額外一個或多個數據作為tag。如果原始消息中不包含這些字段,在將數據轉發至TSDB前,需要對數據格式進行調整,如下所示:
原始數據:
{
"time": 1465376157007,
"name": "cpu_idle",
"score": 51,
"host": "server1",
"rack": "rack1",
"other": "something"
}
原始數據中的"score": 51
為整型,數據沒有放在引號""中。如果原始數據為"score": "51"
,此時該數據為字符串類型。字符串類型數據寫入TSDB后將無法在查看面板中生成圖表。
規則引擎設置
查詢字段:name AS metric, score AS _value, `time` AS _timestamp, host, rack
由於time為SQL的關鍵字,使用時需要加反單引號(重音符)。
主題:消息來源的物接入主題。
約束條件:score > 50
輸出數據:
{
"metric":"cpu_idle",
"_value":51,
"_timestamp":1465376157007,
"host":"server1",
"rack":"rack1"
}
通過"_TSDB_META"調整數據格式:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2、轉發到MQTT主題
規則引擎可以從接收到的消息中自動提取MQTT主題,並將消息轉發至該主題,具體操作如下所示:
原始數據:
{
"msg": "hello",
"info": {
"name": "chiller-2016"
}
}
下圖是規則調試的結果
以下是規則編輯界面,查詢字段和查詢主題是必填項,查詢主題代表需要處理的是哪個主題的消息,也可以寫通配符“#”,代表所有主題消息
添加數據目的地:
以上是兩個數據庫和一個轉發的主題,共3個數據目的地。
規則引擎還有很多東西,我以后實驗過了再補上!!!!!!
三、時序數據庫TSDB
1、概述
在物聯網時代,企業需要處理各種設備產生的帶有時間標簽的數據,即時間序列數據。時間序列數據主要由各類型實時監測、檢查與分析設備所采集或產生,涉及電力行業、化工等行業。這些工業數據的典型特點是:產生頻率快、嚴重依賴於采集時間、測點多信息量大等。普通關系型數據庫無法高效地處理此類數據。
為了更好的處理時間序列數據,時序數據庫(Time Series Database,下簡稱TSDB)應運而生。TSDB是用於管理時間序列數據的專業化數據庫。區別於傳統的關系型數據庫,TSDB針對時間序列數據的存儲、查詢和展現進行了專門的優化,從而獲得極高的數據壓縮能力、極優的查詢性能,特別適用於物聯網應用場景。
產品功能:
-
數據寫入
支持通過REST API方式高並發寫入時間序列數據,可線性擴展。
-
極速查詢
支持海量時序數據的極速查詢,每秒可返回1億數據點的聚合查詢結果。
-
豐富的函數
提供豐富的數據處理能力,支持多達16種聚合函數。
-
Web圖表
查詢的結果可以通過Web圖表方式生動、靈活的展現。
名詞解釋:
TSDB :Time Series Database,時序數據庫,用於保存時間序列(按時間順序變化)的海量數據。
度量(metric):數據指標的類別,如發動機的溫度、發動機轉速、模擬量等。
域(field):在指定度量下數據的子類別。即一個metric支持多個field,如metric為wind,該metric可以有兩個field:direction和speed。
時間戳(timestamp):數據產生的時間點。
數值(value):度量(metric)對應的數值,如56°C、1000r/s等(實際中不帶單位)。如果有多個field,每個field都有相應的value。不同的field支 持不同的數據類型寫入。對於同一個field,如果寫入了某個數據類型的value之后,相同的field不允許寫入其他數據類型。
標簽(tag):一個標簽是一個key-value對,用於提供額外的信息,如"設備號=95D8-7913"、“型號=ABC123”、“出廠編號=1234567890”等。
數據點(data point):“1個metric + 1個field(可選) + 1個timestamp + n個tag(n>=1)”唯一定義了一個數據點。當寫入的metric、field、timestamp、n個tag都相同時,后寫入的value會覆蓋先寫入的value。
時間序列 :“1個metric +1個field + n個tag(n>=1)”定義了一個時間序列。如 metric為wind,field為speed,tag為“型號=ABC123”、“出廠編號=1234567890"的數據點都屬於同一個時間序列。
-
tag的key值和value值都相同才算過同一個tag,即deviceid=1和deviceid=2是兩個標簽。
-
請不要將時間戳作為tag,否則會導致時間序列超過限制,關於時間序列的限制請參考費率表。
分組(group):可以按標簽(tag)對數據點進行分組。
聚合函數(aggregator):可以對一段時間的數據點做聚合,如每10分鍾的和值、平均值、最大值、最小值等。
數據庫(database):一個用戶可以有多個數據庫,一個數據庫可以寫入多個“度量”的“數據點”。
栗子:
單域:
監測溫度的值,把溫度(temperature)作為一個度量(metric),用標簽(tag)來標識每一個數據的額外信息,比如每個數據點都有3個tag,tag是一個key-value對,tag的key分別是deivceID、floor、room。
如圖所示,表示對溫度的時間序列監測值,共4個數據點。在該圖中的4個數據點使用的metric、tag是相同的,所以是同一個時間序列。
多域:
監測風力的值,把風力(wind)作為一個度量(metric),風力(wind)分為兩個域:風向(direction)和速度(speed)。這些監測數據是從不同的傳感器傳輸到雲端的,用標簽(tag)來標識每一個數據的額外信息,比如每個數據點有三個tag,tag是一個key-value對;tag的key分別是sensor、city、province。
為了表示在廣東省深圳市傳感器編號95D8-7913上傳風向(direction)數據,可以將這個數據點的tag為標記為sensor=95D8-7913、city=深圳、province=廣東。
如圖,展示了metric為wind的兩個域(speed和direction)的監測數據。當使用的是metric、field和tag是相同的時,是同一個時間序列。即圖中有2個時間序列,8個數據點。
將數據采用metric+field的方式存儲的優勢在於,可以在同一個時間序列下聯合查詢。以上圖為例,要查詢1467627246000-1467627249000時間內風力(wind)的情況,可以聯合查詢多個field的值,得到下圖的數據。
如果寫入時沒有數據,在查詢時,可以采用插值方案將值補充完整,插值的使用說明見數據庫操作相關文檔。????????
2、快速使用TSDB
步驟一:創建數據庫
1、登錄百度雲,點擊右上角的“管理控制台”,快速進入控制台界面。
2、選擇“產品服務>時序數據庫TSDB”,進入“數據庫列表”頁面。
3、點擊“創建數據庫”,進入創建數據庫頁面,填寫配置信息,包括:
- 數據庫名稱:設置數據庫名稱,由小寫字母和數字組成,6~40個字符。
- 寫入額度:目前支持1~500000百萬點/月。
- 購買時長:TSDB為預付費產品,最少每次購買1個月。
4、完成配置后點擊“確認訂單”,完成TSDB數據庫的創建