蓝牙mesh模型

作者: 轰天裂天罗三炮 | 来源:发表于2021-02-03 23:48 被阅读0次

    蓝牙mesh模型(Model)是mesh模型架构中基础业务单元,可以认为每个模型对应一个特定的业务(也有可能多个模型组合对应一个特定的业务)。每个元素(Element)上可以存在多个不同的模型,相同的模型也可以存在与一个设备不同的元素上。例如,一个三孔插座,分别由3个元素代表3个不同的孔,每个元素上都有一个开关模型(Generic Onoff Server Model)。

    模型又分为服务模型(Server Model)和终端模型(Client Model)。我们在IOT设备上配置的模型均为服务模型,表示该设备具有特定的业务能力。蓝牙mesh模型分为3种不同的类型,分别是基础模型(Foundation Model)、通用模型(Generic Model)、以及厂商自定义模型(Vendor Model)。

    基础模型

    基础模型定义了用于配置和管理蓝牙mesh网络的消息,分为配置模型(Confirmation Model)和健康模型(Health Model)两个部分。其中配置模型仅存在于设备的主元素(Primary Element)上,其他元素不需要添加该模型;健康模型必须存在于该设备的主元素上,其他元素则可以根据需要选择是否添加该模型。

    配置模型

    配置模型在配网阶段使用设备密钥加密应用层数据,在其他阶段使用应用秘钥加密应用层数据。

    多个Key索引的组合

    SIG Mesh定义的NetKey和AppKey长度都为16字节,如果在数据传输过程中加入完整的Key,则会导致mesh网络发包数增加,同时将Key在空中频繁传输会增加泄露的风险。因此SIG Mesh定义了12位的Key索引(Key Index)来表示特定的Key,Key与Key索引一般为一一对应关系(在Key刷新过程中,一个Key索引对应新旧两个Key)。在数据传输过程中,一般使用Key索引来指定对应的Key,以提高消息传递的效率和安全性。将新的密钥传输到节点时,使用通用的消息分割和重组机制将新的密钥传输到节点。

    配置终端(Confirmation Client)维护两个索引:全局NetKey和AppKey列表。每个Key在相应的列表中应有唯一的索引号,该索引号用于标识模块中对应的Key。

    每个索引长度为12位,一个消息可能包含一个、两个或多个Key索引。为了实现更高效率的传输机制,每两个Key索引被组合成3字节。当消息包含的Key索引个数为奇数时,除最后一个Key索引外,所有的Key索引按顺序被两两组合成3字节,最后一个Key索引表示为两字节。如果消息包含的Key索引个数为偶数,则所有的Key索引按顺序被两两组合成3字节。

    在将两个Key索引组合成3字节时,第一个Key索引值的低8位填充至第一个字节中,剩下的高4位填充至第2个字节的低4位中。第二个Key索引的低4位填充到第二字节的高4位中,剩下的高8位填充至第三字节中。

    将一个Key索引表示为两字节时,Key索引值的低8位填充至第一个字节中,剩下的高4位填充到第二个字节的低4位中,第二个字节的高4位应设置为0.

    AppKey

    AppKey包含16字节的AppKey值,以及12位的AppKey索引。AppKey与AppKey索引存储在AppKey列表中,AppKey列表中的每个条目都包含一个AppKey索引、最多两个AppKey值(新的AppKey值与旧的AppKey值)。密钥刷新流程(Key Refresh Procedure)描述了新AppKey值与旧AppKey值的使用过程。

    当元素接收AppKey配置消息并成功执行后,需要在AppKey列表中添加新的AppKey索引,并将AppKey绑定至NetKey对应的索引号,返回AppKey状态消息,消息中的NetKeyIndexAndAppKeyIndex字段定义为接收的消息的内容,并且状态字段被设置为成功。

    添加AppKey

    添加AppKey配置消息(Config AppKey Add)用于向AppKey列表中添加AppKey,被添加的AppKey必须与对应的NetKey共同使用。AppKey用于对接收和发送的消息进行身份验证和加密。当设备接收添加AppKey配置消息时,需要回复AppKey状态消息。

    更新AppKey

    更新AppKey配置消息(Config AppKey Update)用于更新AppKey列表中的AppKey。更新后的AppKey用于对收到和发送的消息进行身份验证和加密。收发消息时是使用更新前还是更新后的AppKey,由密钥刷新流程决定。当设备收到更新AppKey配置消息时,需要回复AppKey状态消息。

    删除AppKey

    删除AppKey配置消息(Config AppKey Delete)用于从AppKey列表中删除AppKey。当设备收到删除AppKey配置消息时,需要回复AppKey状态消息。

    AppKey状态

    AppKey状态配置消息(Config AppKey Status)用于报告请求配置AppKey消息的状态,该消息包含NetKey列表上的NetKey索引,以及AppKey列表上的AppKey索引。

    状态字段表示最后一次对AppKey列表的操作状态。如果接收的请求是冗余的(添加相同的已存在的AppKey、更新已处于更新状态的AppKey或者删除不存在的AppKey),且没有采取进一步措施,则状态字段应设置为成功。

    获取AppKey

    获取AppKey配置消息(Config AppKey Get)用于查询所有绑定至指定NetKey索引的AppKey。

    AppKey列表

    AppKey列表配置消息(Config AppKey List)用于报告所有绑定至指定NetKey索引的AppKey。

    模型与AppKey

    当一个元素收到一个模型与AppKey绑定的消息并成功执行后,它应该将AppKey索引对应的AppKey绑定到特定的模型上,并给模型返回AppKey状态消息。

    模型与AppKey绑定

    模型与AppKey绑定配置消息(Config Model App Bind)用于给特定模型绑定指定的AppKey。当设备接收模型与AppKey绑定配置消息时,需要回复模型与AppKey绑定状态消息。

    模型与AppKey解绑

    模型与AppKey解绑配置消息(Config Model App Unbind)用于解除特定模型与指定AppKey的绑定关系。当设备接收模型与AppKey解绑配置消息时,需要回复模型与AppKey的绑定状态消息。

    模型与AppKey绑定状态

    模型与AppKey绑定状态配置消息(Config Model App Status)用于反馈模型与AppKey绑定/解绑消息的执行结果。该消息包含元素的Unicast地址、在AppKey列表中对应AppKey的索引和模型标识符。

    模型订阅

    设备上的每个元素都管理着本元素的模型订阅(Model Subscription)列表。该列表包含的订阅地址可以是组播地址,也可以是其他设备的地址。

    当设备收到一条消息时,如果判断该消息的目标地址是本设备元素地址,或者模型订阅列表中的一个,并且该消息的Opcode是该元素上的模型支持的Opcode,则设备响应该消息,并做相应的逻辑处理。

    添加模型订阅

    添加模型订阅配置消息(Config Model Subscription Add)用于向模型订阅列表新增一条模型订阅地址。当设备收到添加模型订阅配置消息时,需要回复模型订阅状态消息。

    删除模型订阅

    删除模型订阅配置消息(Config Model Subscription Delete)用于从模型订阅列表中删除特定模型的特定订阅地址。当设备收到删除模型订阅配置消息时,需要回复模型订阅状态消息。

    删除全部模型订阅

    删除全部模型订阅配置消息(Config Model Subscription Delete All)用于从模型订阅列表中删除指定模型的全部订阅地址。当设备收到删除全部模型订阅配置消息时,需要回复模型订阅状态消息。

    模型订阅状态

    模型订阅状态配置消息(Config Model Subscription Status)用于上报设备的模型订阅状态。

    当设备收到模型订阅新增或删除消息,但执行失败时,需要将状态字段设置为对应的错误原因,其他字段(除Opcode和状态字段外)设置为0.

    相关文章

      网友评论

        本文标题:蓝牙mesh模型

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