美文网首页蓝牙mesh技术
蓝牙mesh访问层(订阅、发布和状态)

蓝牙mesh访问层(订阅、发布和状态)

作者: 轰天裂天罗三炮 | 来源:发表于2021-01-29 15:25 被阅读0次

    两种类型的消息

    不需要应答的消息

    当一个节点需要把自身的状态变化通知其他节点时,会发送一条状态消息。这个状态消息可以是一个不需要应答的消息(Unacknowledged Message),目标地址是这个模型要发布的组播地址或者单播地址。由于状态消息不需要应答,因此消息的发送端无法知道消息是否被成功传达接收端。

    需要应答的消息

    当发送端发送一条需要应答的消息时,接收端需要回复响应消息作为应答,通常情况下这个响应消息是状态消息。发送端发出需要应答的消息(Acknowledged Message)后,在超时时间内没有收到接收端的应答,会重新发送消息,超时时间数值应由应用层控制。

    当一条消息的目标地址不是单播地址时,比如发送到组播地址,发送端无法知道有多少个节点会收到该消息并做应答,因此不建议发送需要应答的消息到组播地址。

    如果需要应答的消息的TTL被设置为0,则应答消息的TTL也需要被设置为0。

    订阅和发布

    与订阅和发布强关联的是目标地址。若一个模型所在的元素订阅了目标地址,则该元素可以收到任何发送到目标地址的消息。若一个模型配置了状态发布,则该元素需要把模型状态变化的消息发布到对应的目标地址。

    发布

    发布,即一个模型主动发送未经请求的消息到目标地址的行为。这里的目标地址即发布地址。目标地址可以是单播地址、组播地址、虚拟地址三者之一。一个模型有且只有一个发布地址。

    (1)状态转换

    模型的状态转换有两种方式:无渐变效果和有渐变效果,主要有三种状态:初始状态(Initial State)、当前状态(Present State)、和目标状态(Target State)。从初始状态到目标状态的转换耗时称为渐变时间(Transition Time)。从当前状态到目标状态的转换耗时称为剩余时间(Remaining Time)。


    模型的状态转换.jpg

    当节点收到一条设置状态值的消息时,新的状态值不会被立刻更新,而是先把这个值更新为目标状态,然后按照渐变参数从初始状态过度到目标状态。从收到消息到状态转变结束中的任意时间点,节点都可以发布状态消息,包含从当前状态到目标状态的剩余时间。

    (2)状态发布

    通过配置节点模型的发布状态,使得模型每一次状态改变时都会把自己的状态消息发布到目标地址。如果渐变时间超过2秒,建议每1秒更新一次状态过度消息和当前状态到最终状态的剩余时间。

    通过配置节点模型状态的发布周期(Publish Period),即使节点状态没有变化,也可以周期性的发布当前的状态。如果发布周期时间不等于0,则每个发布周期内都需要发布一次模型当前的状态;如果发布周期时间等于0,则在模型状态改变时发布一次状态。

    订阅

    每个模型可以有一个或者多个订阅列表,每个列表中包含1个或多个目标地址,这个目标地址决定了当前节点模型可以处理的消息范围。这里的订阅地址可以是组播地址或者虚拟地址的一种。

    消息序列

    需要应答的状态读取消息

    模型的Client端发送状态读取消息,模型的Server端回应状态消息作为应答。


    需要应答的状态读取消息.jpg

    需要应答的状态设置消息

    模型的Client端发送需要应答的状态设置消息,模型的Server端收到消息后,回复状态消息作为应答消息,再发布状态消息到配置过的组播地址,订阅了这个组播地址的节点可收到这条状态消息。如果Client也订阅了这个组播地址,那么Client会收到两条状态消息。


    需要应答的状态设置消息.jpg

    不需要应答的状态设置消息

    模型的Client端发送了不需要应答的设置状态消息,模型的Server端收到消息后做状态转换,状态转换结束后把状态消息发布到组播地址,订阅该组播地址的节点可以收到状态消息。


    不需要应答的状态设置消息.jpg

    需要应答的状态设置消息和周期性发布消息

    Server端按照配置的发布参数周期性的向目标地址发送状态消息,当收到Client端发送的需要应答的状态设置消息时,立刻回复状态消息作为应答,再发布状态变化消息到组播状态。

    需要应答的状态设置消息和周期性发布消息.jpg

    相关文章

      网友评论

        本文标题:蓝牙mesh访问层(订阅、发布和状态)

        本文链接:https://www.haomeiwen.com/subject/gewqtltx.html