蓝牙mesh模型

蓝牙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在相应的列表中应有唯一的索引号,该索引号用于标识??橹卸杂Φ腒ey。

每个索引长度为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.

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容