- Advertisement -
首頁 技術頻道 藍牙Mesh技術解析(上) 了解藍牙特點實現智慧應用

藍牙Mesh技術解析(上) 了解藍牙特點實現智慧應用

- Advertisement -

2010年,低功耗藍牙的誕生讓藍牙技術又向前邁進一大步。其影響力既深且廣,應用範圍涵蓋智慧型手機和平板、醫療和健身、智慧家庭,以及穿戴式裝置市場。以Mesh網路拓撲建立的無線通訊系統,已證實能夠有效提供大範圍的涵蓋率,不僅能延伸涵蓋範圍,而且相當穩定可靠。然而,在此之前這類網路都是建構在特殊技術之上,無法與大多數消費者的電腦、智慧型手機與周邊配件相容,亦不適用於企業端。

此次藍牙Mesh技術規格的制定是120家藍牙技術聯盟企業會員共同努力的成果,遠遠超越了一般正常的規模,也因此才能滿足全球對於藍牙網狀網路產業標準的要求。對藍牙技術而言,Mesh規格的制定,象徵著型態的轉變,而其影響層面之龐大,也讓它成為一項典範轉移。本文章共分上下篇,上篇敘述藍牙Mesh應用與特點,下篇則描述藍牙Mesh技術與設計架構。

藍牙Mesh實現智慧建築

想像一下,在一個天還未亮的冬日清晨,您開車去上班,經過公司保全系統之後,系統自動分配一個車位給您(圖1)。車位上方的編號自動亮起,引導您輕鬆將車停好。接著,車位分配系統立即將這個車位標記為已占用。

圖1 藍牙Mesh網狀網路涵蓋整個辦公室和停車場。

走進大樓,人員感應器偵測到您的存在,立即透過您的穿戴式裝置辨認您的身分。您走進電梯,搭到二樓,然後走出電梯。一如往常,您又是第一個進辦公室。當電梯門開啟,從電梯口到您辦公室及廚房的沿路,燈光自動亮起,咖啡是您公司不可或缺的要素,為了節能,其他區域依然保持在黑暗中。

您走進辦公室,身後的門自動關上。天花板及您桌上的檯燈都已經為您開啟,並且調整在您覺得最舒適的亮度。您注意到室內的溫度似乎比整個辦公室稍微溫暖一點,這正好是您個人最愛的溫度。您一坐下,您的電腦就自動將您登入。

您的一天就此順利展開,大樓自動回應了您的需求,甚至貼心地配合您的喜好。所有系統都很有效率地運作,而這一切是如何辦到的?

幾個月前,公司安裝了一套藍牙Mesh網狀網路,一開始先安裝的是Mesh照明系統;後來人員感應器、環境感應器、無線暖氣空調及停車管理系統也陸續加入Mesh網路當中。公司因此省下了不少的電費和暖氣費,而且工作環境也變得更有人性,大幅提升了個人的工作效率。不僅如此,維護成本也因而降低,因為公司再也不必為了增加新的照明開關而大費周章地布線,既省下昂貴的成本,又不會干擾正常營運。

與此同時,大樓管理團隊也能透過各種資料來了解整個大樓及各項服務的狀況,同時掌握人們的使用情況,然後再利用這些資料將系統調整至最佳狀況。

藍牙Mesh網狀網路讓您輕鬆、經濟地掌握整棟建築的各項服務,並透過無線方式來操控並設定自動化行為。回想起來,您還真不知道以前沒有這套先進系統時是怎麼過活的。

藍牙Mesh技術基本概念

要了解藍牙Mesh網狀網路拓撲,首先要先對一些藍牙以外的最新科技名詞和概念有所認識。本章節將介紹一些最基本的名詞和概念。

「網狀網路」與「點對點」

大多數的低功耗藍牙裝置都是經由簡單的「點對點」網路拓撲來和其他裝置通訊(一對一通訊),在藍牙的核心規格當中,這樣的網路稱為「Piconet」微微網。

 想像一支智慧型手機和一台心率監視器之間建立了點對點連線,並將資料傳輸到手機上。藍牙有一項不錯的特性就是裝置可以建立多個連線,因此這支智慧型手機還可和另一個活動紀錄器建立點對點連線。儘管這支智慧型手機可以同時和兩個外部裝置直接通訊,但外部裝置彼此之間卻無法直接通訊。

反觀網狀網路則是一種「多對多」的網路拓撲(圖2),網狀網路中的每個裝置都能與其他任一裝置通訊,這一點會在後續的文章當中詳細說明。裝置之間通訊的方式是透過訊息,而且每一裝置都可以轉發訊息,因此從兩端的通訊距離可以超越個別節點無線射頻功率所及的範圍。

圖2 採用訊息轉發架構的多對多網路拓撲。

裝置與節點

網狀網路中的每一個裝置就是一個節點,而尚未加入的裝置則稱為「未啟動配置裝置」(Unprovisioned Device)。因此,一個未啟動配置裝置轉變成網路節點的過程就叫做「啟動配置」(Provisioning)。想像一個情境,使用者新買了一個支援藍牙Mesh技術的燈具帶回家安裝,而為了將它加入藍牙Mesh網路,必須先啟動配置燈具以便能夠透過現有的藍牙照明開關或調光器來操作。

啟動配置是一個安全的程序,經過此一程序,未啟動配置的裝置會獲得一連串的加密金鑰,並且向「啟動配置器」(Provisioner)裝置(通常是平板或智慧型手機)註冊,其中一把金鑰是「網路金鑰」,簡稱NetKey。

Mesh網路中的所有節點至少都會有一把網路金鑰,也正因為擁有此一金鑰,裝置才可算是該網路的成員,並稱為一個節點。不過,節點在能發揮作用之前,還要滿足幾項條件;首先最基本的就是透過一個安全的配置程序取得一把網路金鑰。

元素

有些節點會有多個組成單元,每一個單元都能夠獨立被操控。在藍牙Mesh技術的術語中,這些組成單元叫做「元素」(Element)。圖3顯示一個LED燈具,當它加入藍牙Mesh網狀網路時,會變成一個擁有三個元素的單一節點,每一元素則分別對應至不同的LED燈。

圖3 包含三個「元素」的照明節點。

訊息

當一節點須要查詢其他節點的狀態,或者操控其他節點時,就要傳送某種類型的訊息;若節點需要向其他節點通報自己的狀態,也是藉由發送訊息通報。

網狀網路中的所有通訊都是透過「訊息」來達成,藍牙Mesh技術已定義了許多訊息類型,每一類都有自己獨特的代碼(Opcode)。

訊息主要分成兩大類:「須確認」(Acknowledged)和「不須確認」(Unacknowledged)兩種。須確認訊息的接收端節點必須做出回應,回應有兩項目的:第一,確認訊息已收到;第二,將接收端的資料傳回發送端。

須確認訊息的發送端若未收到預期的回應,可重新發送訊息,因此須確認訊息必須具備等冪(Idempotent)特質。換句話說,當某個節點收到多次相同的須確認訊息,效果和收到一次是一樣的,不須確認訊息則不須回應。

位址

訊息的傳遞必須從某一位址到另一位址,藍牙Mesh技術定義了三種位址。單點傳播(Unicast)位址用來對應單一元素定址,在配置程序中,單點傳播位址會被指派至裝置。

群組位址是一種群播(Multicast)位址,可用來對應一個或多個元素定址。群組位址可由藍牙技術聯盟定義或動態指派,前者就是所謂的「SIG固定群組位址」(SIG Fixed Group Addresses)。目前共定義了四個SIG固定群組位址,包括All-proxies、All-friends、All-relays及All-nodes。本文後續會對代理(Proxy)、好友(Friend)和轉發(Relay)等名詞的意義做進一步解釋。

動態群組位址的用意是要讓使用者透過一個組態設定程式,建立並對應一棟建築的實體組態。

例如,建築中的每一個房間都有對應的群組位址,虛擬位址則用來對應一個或多個元素定址的位址,並可涵蓋多個節點。其格式是一個128位元的通用唯一識別碼(UUID),可對應任何元素,就如同標籤的作用。

發布/訂閱

「發布」就是傳送訊息的動作,而設定讓節點從特定位址接收某些訊息的動作,就是「訂閱」。一般來說,訊息會發送至群組位址或虛擬位址。群組和虛擬位址的名稱,通常會讓使用者一看就知道用意,因此在使用上既方便又直覺。

如圖4,我們看到「開關1」節點會發布訊息到「廚房」群組位址。「燈泡1」、「燈泡2」、「燈泡3」這三個節點,則訂閱了「廚房」這個位址, 因此會接收及處理發布至該位址的訊息。換句話說,「燈泡1」、「燈泡2」和「燈泡3」即可透過「開關1」來操控。

圖4 發布/訂閱情境示意圖

「開關2」會發布訊息到「餐廳」這個位址。而圖中只有「燈泡3」訂閱了該位址的訊息,因此「開關2」只能控制此一燈泡。請特別留意,此範例也示範了節點可訂閱不只一個位址的訊息,這樣的設計既強大又彈性。

同樣地,請特別留意「開關5」和「開關 6」兩個節點皆可發布訊息至「花園」這個位址。採用群組和虛擬位址並搭配「發布/訂閱」的通訊機制的另一絕佳優點,就是當網路中移除、更換或新增節點時,不須重新設定其他節點。

想像一下,如果餐廳需要新增安裝一盞燈會需要哪些流程。首先,新的裝置必須經過配置程序加入網路,並且設定訂閱「餐廳」的位址訊息;而其他的節點完全不會因改變而受到影響。「開關2」就像之前一樣,依然將訊息發布至「餐廳」,但現在「燈泡3」,以及新的燈泡都會做出回應。

狀態與屬性

元素可以有多種狀態,在藍牙Mesh技術當中,這樣的概念是透過狀態值來表示。「狀態」為一元素當中某種類型的數值(請參閱文後的「伺服器」模型章節)。除了數值以外,狀態還有一些對應的行為,且無法重複應用在其他情境。

例如一顆簡單的燈泡,其狀態不是「開」就是「關」。藍牙Mesh技術定義了一個叫做「通用開關」(Generic OnOff) 的狀態。燈泡即含有這樣的狀態,因此,數值「On」對應的就是燈泡開啟的狀態,或者讓燈泡點亮。

反觀一個數值為「Off」的Generic OnOff狀態,對應的就是燈泡關閉的狀態,或者讓燈泡熄滅。

稍後我們會再談到Generic通用定義的重要性。屬性與狀態一樣,都含有關於某元素的數值,這方面兩者類似,但在其他方面卻截然不同。對於熟悉低功耗藍牙的讀者可能會聯想到特性(Characteristic),這是一種沒有對應行為定義的資料類型,因此可應用至各種不同情境,屬性提供解讀某個特性的情境。

為了示範情境對於屬性的重要性及使用方式,本文舉「Temperature 8」為例,這是一個8位元的溫度狀態類型,並且有一些對應的屬性,包括當前室內周遭溫度(Present Indoor Ambient Temperature)與當前室外周遭溫度(Present Outdoor Ambient Temperature)。

這兩個屬性可讓感應器發布感應器讀值,供接收訊息的裝置可以根據溫度的情境,更正確地解讀溫度數值。屬性主要分成兩大類:製造商(Manufacturer)屬性是一種唯讀屬性,系統管理員(Admin)屬性則是讀寫兩用屬性。

訊息/狀態/屬性

訊息是用來觸發Mesh網路裝置運作的機制。形式上,訊息類型代表著一種針對個別或一群狀態數值的操作。所有訊息都可歸為三大類型,各自反映藍牙 Mesh技術所支援的操作類型,這三大類分別為,讀取(GET)、設定(SET)和狀態(STATUS)。

讀取訊息用以取得一個或多個節點的狀態數值。狀態訊息則是用來回應讀取訊息,內含對應狀態的數值。設定訊息用來改變某狀態的數值。須確認的設定訊息最後會產生一個狀態訊息,以回應設定訊息;不須確認的設定訊息則不須回應。狀態訊息則用來回應讀取訊息、須確認的設定訊息,或者單獨使用無關的其他訊息,例如某個元素上的計時器所觸發的狀態訊息。

訊息所參照到的個別狀態,必須從訊息的代碼導出其意義;屬性則不然,在通用屬性相關訊息當中,它是直接以一個16位元屬性識別碼(ID)來表示。

狀態轉換

從某一狀態變成另一個狀態就叫做「狀態轉換」。狀態轉換可以是瞬間的,或者持續一段時間才完成,這段時間就叫做「轉換時間」。狀態的轉換很可能會對節點在應用層的行為產生影響。

狀態綁定

狀態之間彼此可能會存在著某種關係,因此改變一個狀態,可能會連帶影響另一個狀態。這樣的關係就是「狀態綁定」(State Binding)。一個狀態可以跟其他多個狀態綁定。例如某個透過調光器控制的燈泡有兩個狀態:通用開關通用高低(Generic Level),彼此互相關聯。假使將亮度調整至通用高低的數值「零」(也就是全暗狀態),就會使得通用開關的狀態從「On」轉換至「Off」。

模型

模型則將前面所介紹的概念都集合起來,用來定義一個元素在網狀網路當中的部分或所有功能,模型基本上分成三種。

第一種是「伺服器」模型,此模型定義了一些狀態、狀態轉換、狀態綁定,以及包含此模型的元素可能發送或接收的訊息。此外,伺服器模型也定義了訊息、狀態、狀態轉換對應的行為。

第二種是「用戶端」模型,此模型未定義任狀態,但定義了其可能發送或接收的訊息,以便「讀取」、「設定」狀態或接收其對應伺服器模型中所定義的「狀態」訊息。第三種是「控制」模型,此模型同時結合了「伺服器」模型(可與其他用戶端模型通訊)以及「用戶端」模型(可與伺服器模型通訊)。

當然,也可以透過延伸其他模型來建立模型,未延伸過的模型稱為根模型(Root Model)。模型一旦定義就永遠不能改變,換句話說,不能透過新增或移除行為來改變模型,要滿足新的需求,唯一正確且允許的方式就是延伸既有的模型。

Generic通用定義

有許多不同類型的裝置,其基本上都有一些意義相同的狀態。最簡單的就是「開」和「關」兩種狀態,例如燈泡、風扇、插座,全部都可切換成「開」或「關」。

因此,藍牙Mesh模型規格定義了一系列可重複使用且通用的狀態,例如通用開關和通用高低。同樣地,也定義了一系列作用於通用狀態的通用訊息,例如:通用開關讀取「Generic OnOff Get」和通用高低設定「Generic Level Set」。

通用狀態和通用訊息基本上用於通用模型,例如:通用伺服器模型「Generic OnOff Server」和通用用戶端模型「Generic Level Client」(圖5)。這些通用定義可以讓許多類型的裝置不須自行建立模型就能輕鬆支援藍牙Mesh技術,也可以藉由延伸其他模型來建立模型,因此,當有新型的裝置須要支援時,就延伸通用模型來快速建立模型。

圖5 Generic模型

場景

所謂「場景」(Scene)是指一組狀態,可在接收到某種類型的訊息,或者在指定的時間內套用成當下的狀態。場景是以一個在網狀Mesh中獨一無二的16位元場景編號(Scene Number)表示。

有了場景,就能統一地將一群節點設定成先前儲存且互相搭配的狀態。想像一下當夜晚來臨,您可能希望家中的客廳溫度維持在攝氏20度左右,並將天花板上的六顆LED燈泡維持在特定亮度,房間角落桌上的檯燈設定成舒適溫暖的黃色。當將各裝置都手動設定成想要的狀態,就能透過一個設定應用程式將這些狀態儲存成場景,等未來有需要時即可發送一個場景Mesh訊息,或者在排定的時間,自動將這組設定調出來套用。

啟動配置

「啟動配置」是讓裝置加入網狀網路成為其中一個節點的程序,過程包含了好幾個階段,並且會產生好幾把安全金鑰,而啟動配置本身也是一個安全的程序。啟動配置需要透過裝置(如平板)上的應用程式來完成,此時裝置的角色是引導整個啟動配置程序的進行,因此稱為「啟動配置器」(Provisioner)。

啟動配置程序共有五個步驟,以下分別詳細說明:

.發出訊號

為了支援各種不同的藍牙Mesh功能,包括但不限於配置程序,藍牙在規格中導入了一些新的GAP廣播類型,其中之一就是「Mesh Beacon」廣播類型。

一個未配置的裝置需在廣播封包(Advertising Packet)當中使用「Mesh Beacon」廣播類型,以讓網路知道它的存在。使用者可能需要讓新的裝置啟動並進入此狀態來發送廣播封包,例如同時按下某幾個按鈕,或者按住某個按鈕一段時間。

.邀請

當進入此步驟時,啟動配置器會發送一個邀請給配置中的裝置,也就是「Provisioning Invite PDU」。接著,在前一步驟當中發出訊號的裝置要透過一個「Provisioning Capabilities PDU」來回應一些有關於自己的資訊。

.交換公開金鑰

接下來,啟動配置器及啟動配置中的裝置要互相交換公開金鑰,此金鑰可以是永久或臨時的,交換方式可以是直接交換或透過頻外(OOB)方式。

.認證

在認證步驟中,啟動配置中的裝置需根據自身的能力,透過某種方式發送一個隨機的個位數或多位數號碼給使用者。例如,啟動裝置可以讓某個LED閃幾下。此時,使用者要在啟動配置器上輸入裝置所發送的號碼,兩個裝置之間會利用此隨機號碼進行一連串的加密資料交換,藉此認證對方的裝置。

.發送啟動配置資料

當認證成功之後,雙方裝置都會利用自己的私密金鑰加上對方提供的公開金鑰,來產生一個連線階段金鑰(Session Key)。這個連線階段金鑰將用來保護後續配置程序所需發送的資料,如前面提過的NetKey網路金鑰。

當啟動配置程序完成後,已啟動配置的裝置就會擁有網狀網路的網路金鑰、一個稱為「IV Index」的Mesh安全性參數,以及一個啟動配置器配發的單點傳送位址(Unicast Address),至此,裝置就正式成為一個節點。

選擇性功能

所有節點都能發送及接收網狀網路訊息,但節點還可能有一些選擇性的特殊功能。目前有四種選擇性功能:轉發(Relay)、代理(Proxy)、好友(Friend)以及低功耗(Low Power);一個節點可以自行決定是否支援,或支援多個選擇性功能,此外,任何選擇性功能都可以隨時啟用或停用。

轉發(Relay)節點

凡是支援「轉發」功能的節點即可稱為轉發節點,這類節點可將其收到的訊息再傳送出去。透過轉發的機制,訊息就能穿越整個網狀網路,沿途經過多次轉跳(Hop)。

Mesh網路的協議資料單元(PDU)當中包含了一個欄位叫做TTL(Time To Live)存活時間。這是一個整數值,用來限制訊息在網路中的轉跳次數。比方說,如果將TTL設成「3」,那訊息在途中最多能轉發三次。

假使將它設為「0」,那訊息就無法轉發,必須直接傳送至目的地。Mesh網路中的節點只要稍微了解拓撲的組態,以及網路上有那些成員,就能利用TTL欄位來提升網狀網路的使用效率。

低功耗(Low Power)節點與好友(Friend)節點

某些類型的節點供電能力有限,因此必須盡可能節省電力。此外,這類裝置可能絕大部分時間都在傳送訊息,但偶爾還是需要接收一些訊息。

以溫度感應器為例,它很可能透過一顆小小的鈕扣型電池來供電。當溫度超過或低於某個預先設定的上、下門檻值時,就會每分鐘傳送一次溫度計讀值。假使溫度維持在上、下門檻值之間,那它就不會發出訊息。這樣的運作方式不難達成,而且不須消耗太多電力。

但問題是,使用者有時必須傳送訊息給感應器來設定新的門檻值。這種情況雖不多,但感應器必須能夠支援。然而,接收訊息的需求會增加裝置的負荷,進而消耗電力,如果裝置隨時處於待命狀態,就可不漏接任何溫度門檻的設定訊息,但卻將因此消耗大量電力;若裝置處於低度待命狀態,固然可以節省電力,但卻可能讓感應器漏接一些設定訊息。

要解決這樣的困境,答案就在「好友」節點以及「友誼」的概念,以前述溫度感應器為例,我們可將感應器設定成「低功耗節點」(LPN),這一點可透過在感應器的設定資料中加入一個功能旗標來達成。

LPN需要另一個節點的配合才能運作,一個沒有供電能力限制的節點(例如隨時連接著插座的節點),此節點就是所謂的「好友」節點。好友節點負責幫忙儲存發送給LPN的訊息,而LPN再透過輪巡(Poll)的方式向好友節點查詢是否有「等待接收的訊息」。

只要LPN向好友節點輪巡的頻率不要太高,就能兼顧省電與適時接收訊息的需求。每當LPN向好友節點輪巡的時候,好友節點就會將其儲存的所有訊息,逐一傳送給LPN,並且透過一個MD(More Data)旗標來讓LPN知道好友節點還有更多的訊息待傳。

LPN與好友節點之間的關係稱為「友誼」(Friendship)。對於電力相當有限卻又必須接收訊息的節點來說,友誼的概念非常重要,如此才能讓它在藍牙Mesh網狀網路當中持續保持運作,卻又能夠發揮能源效率。

代理(Proxy)節點

全世界支援低功耗藍牙的裝置數量非常龐大,大多數的智慧型手機及平板即是一例。

然而,當藍牙Mesh網路正式獲得採納時,市場上的藍牙裝置並不具備藍牙Mesh技術。不過它們卻能支援低功耗藍牙,因此可透過GATT(Generic Attribute Profile)通用屬性設定檔與其他裝置連接並互動。

「代理」(Pxoxy)節點的作用即在此,這類節點會提供一個GATT介面讓低功耗藍牙裝置與Mesh網路互動。藍牙定義了一套「Proxy Protocol」的通訊協定,以供連線導向的載體(Bearer)裝置(如GATT)使用;GATT裝置會從Proxy節點以GATT特性(Characteristic)讀取和寫入Proxy Protocol PDU,Proxy節點會將這些PDU轉換成Mesh PDU,反之亦然(圖6)。

圖6 智慧型手機經由Mesh代理節點進行通訊,P=代理功能開啟。

簡而言之,Proxy節點可讓不具備藍牙Mesh技術的低功耗藍牙裝置能與Mesh網狀網路中的節點互動。

節點組態

每個節點皆支援一套標準的組態狀態,會在組態伺服器模型(Configuration Server Model)當中執行,並且透過組態用戶端模型(Configuration Client Model)來存取。組態狀態資料關乎到節點在Mesh網狀網路內的能力和行為,但與個別應用或裝置類型的行為無關。

舉例來說,一個節點所支援的功能,不論是否為代理節點、轉發節點等,都是透過組態伺服器狀態來標示。一個節點所訂閱的位址,會儲存在Subscription List訂閱清單當中,網路和子網路金鑰會標示節點所屬的網路,並列在組態區塊(Configuration Block)當中,節點所持有的應用金鑰亦然。藍牙Mesh網路定義一系列的組態訊息,以供組態用戶端模型和組態伺服器模型,能夠在組態伺服器模型的狀態下執行讀取、設定和狀態等操作。

(本文作者任職於藍牙技術聯盟)

相關文章

- Advertisement -
- Advertisement -

最新文章

- Advertisement -

熱門文章

- Advertisement -

編輯推薦

- Advertisement -