智能家居资料把一台灯写成Server,又在同一例子里给它安排Client,并不一定前后矛盾。Google Home Developers《The Device Data Model》的“Clients and Servers”一节,使用两台台灯说明这种情况。[1] 角色落在集群及其功能上,整台设备不必只保留一个永久不变的标签。
文档先介绍分工:Server Cluster有状态,保存与功能有关的信息;Client Cluster没有相应状态,其职责是向Server发起交互。于是,在阅读关系图时,“由谁发起”与“哪个功能保存状态并回应”是两个可以分别描述的问题。本文只解释模型,没有对灯具发送读写请求或运行控制程序。
两台灯分别称为节点A和节点B。原文说,它们都实现On/Off Light设备类型,其中包含控制各自物理灯光输出的On/Off Server Cluster。只看这一部分,两者都具有Server角色:A有自己的灯光输出,B也有自己的灯光输出,不是先将其中一台认定为只负责控制的主机。
接下来,文档把两台灯自带的本地开关也放入模型。它们各自还包含On/Off Light Switch设备类型,而这个类型必须有On/Off Client Cluster,才能对Server Cluster发起控制交互。同一台灯因而同时具备灯光功能的Server和开关功能的Client。两个角色对应不同功能,不需要把一个外壳强行拆成两台产品来解释。
例子中的连接关系并不对称:A的Client改变A和B两处Server的属性,B的Client则只改变B自己的Server。这是原文给出的文字示例。它说明同样兼有两种角色,并不意味着两台灯的交互对象必然完全相同;也不表示任何Matter灯出厂后都会照此形成关系。
文档据此区分两个方向:数据模型在一个节点内部有层级,节点之间的关系却不是固定的controller/peripheral或leader/follower上下关系,而是横向联系。这里的横向并不等于“每个节点自动控制所有其他节点”,只是不能从内部层级,直接推出设备之间也必须一台居上、一台居下。
对整理智能家居功能说明的人,两台灯的例子提供了一种具体读法:先说清正在讨论灯光功能还是开关功能,再说相应集群是发起方还是保存状态的一方,最后保留它在该例子中面向哪些对象。仅将整台灯标成“控制器”或“受控设备”,可能不足以表达同时存在的功能关系。
来源页标注2023年4月24日更新,首次发布日期未另核。本文限已读的Client/Server完整段及相邻解释,没有查看示意图或验证产品互通,也不提供配网、权限、门锁、电气和安全配置。这个例子解释的是角色怎样共存,不是对任何家庭系统控制结果的保证。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。