蓝牙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状态的值;

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