藍牙mesh spec之Heartbeat

3.6.7 Heartbeat

3.6.7.1 Functional overview

3.6.7.2 Publishing Heartbeat messages

3.6.7.3 Receiving Heartbeat messages

在3.6.5.10中有講述:節點發送心跳消息(Heartbeat Meaasge)來讓其他節點決定子網的拓撲結構。心跳消息的參數包含InitTTL、Features,其中InitTTL指定發送心跳消息的初始化的TTL值,Features指定節點當前使用的feature情況(比如Realy中繼、Proxy代理Friend好友、Lower Power低功耗)。Heartbeat Message(心跳消息)是同 Friend request、Friend offer、Friend Pool等一樣的Transport Control message,opcode爲0x0A。

3.6.7 Heartbeat

心跳是用於監控網絡中的一個節點、發現節點之間相隔多遠(以TTL值標識)。

3.6.7.1 Functional overview

爲了確定一個節點在mesh網絡中是否仍然出現和存活,有必要從這個節點接收消息 (能接收到消息至少說明此節點是工作狀態)。發送一個消息到mesh網絡中每個節點來得到響應將會是很浪費能量的,因此,每個節點可以被配置來週期性地發送一個消息,這個消息被稱作心跳消息(Heartbeat message)。

心跳消息可以用於兩個功能:第一,確定mesh網絡中的某個節點是否還活着;第二,確定節點距離多遠。

心跳消息被週期性地發送,由Configuration Server Model來配置。心跳消息可以被髮送有限的次數,活着無限次。

心跳消息被髮送到配置好的目的地,推薦使用組播地址來發送心跳消息。心跳消息也可以配置爲只有特定的TTL。

當心跳消息被接收時,它們被計數。接收到的心跳消息的數量可以幫助決定mesh網絡的可靠性。

每個心跳消息包含初始化的TTL值,這允許接收到此消息的設備來決定這個消息被重傳的次數,也稱爲跳數(Hop)。使用最大跳數和最小跳數,可以確定mesh網絡有多麼可靠。因此,心跳消息可以用來確定尋址一個給定節點時指定的最優的TTL。

心跳消息中也包含了節點當前使用的Features。節點可以被配置在不同的Features被enable/desable時發送心跳消息。

3.6.7.2 Publishing Heartbeat messages

心跳消息的發佈受控於心跳發佈狀態(包含Heartbeat Publication Destination、Heartbeat Publication Count等狀態)。

當Heartbeat Publication Destination地址被設置爲unassigned 地址,或者Heartbeat Publication Count的值被設置爲0時,心跳消息不應當被髮布。

當DST域被設置爲Heartbeat Publication Destination狀態的值、TTL域被設置爲Heartbeat Publication TTL狀態的值時,心跳消息應該被髮布。

心跳消息的週期性發佈被Publishing Heartbeat Count狀態使能。在發佈完一個心跳消息之後,如果Publishing Heartbeat Count計數器小於0xFFFF,Publishing Heartbeat Count計數器應該自減1。計數器應該在爲0x0000時停止。在Publishing Heartbeat Period狀態被配置爲週期性發佈之後,第一個心跳消息應該被儘快發佈。下一個心跳消息應該在Publishing Heartbeat Period狀態定義秒數之後發佈。

Publishing Heartbeat Feature狀態(的改變)觸發心跳消息的發佈:

若Relay位被設置爲1,則當節點的Relay狀態改變時,心跳消息應該被髮布;

若Proxy,位被設置爲1,則當節點的GATT Proxy狀態改變時,心跳消息應該被髮布;

若Friend位被設置爲1,則當節點的Friend狀態改變時,心跳消息應該被髮布;

若Low power位被設置爲1,則當節點建立或刪除Friendship關係時,心跳消息應該被髮布;

3.6.7.3 Receiving Heartbeat messages

心跳消息的接收受控於Heartbeat Subscription狀態(包含Heartbeat Subscription Period等狀態)。

Heartbeat Subscription Period狀態 是一個向下計數的定時器,標識剩餘的秒數當接收到一個心跳消息時。當計數器值達到爲0x0000時,就禁止接收心跳消息。

當到來的心跳消息,其SRC域的值不是Heartbeat Subscription Source狀態的值,或者DST域的值不是Heartbeat Subscription Destination狀態的值,那麼此心跳消息不該被處理。

一旦接收到心跳消息,Heartbeat Subscription Count狀態值應該自減。

一旦接收到心跳消息,跳數(Hops)值可以使用心跳消息中的InitTTL值以及Network PDU中TTL域計算出來,如下:

hops = InitTTL - RxTTL + 1

如果hops值小於Heartbeat Subscription Min Hops狀態值,則此hops值應該作爲新的Heartbeat Subscription Min Hops狀態的值;如果hops值大於Heartbeat Subscription Max Hops狀態值,則此hops值應該作爲新的Heartbeat Subscription Max Hops狀態的值;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章