架构描述了驱动对 Weave 系统中的逻辑设备或物理设备发出的数据的表示和解释的底层数据模型。
架构是:
- 标准化 - 包含正式批准的功能定义,可提供一致的接口,无论实现方式如何。例如,架构中代表的灯泡将始终具有核心功能,例如开启/关闭状态以及操作或调暗级别。
- 可组合项 - 用户可以创建由少量明确定义的功能组成的复杂资源。例如,Nest Detect 包含两种类型的传感器:移动传感器和打开/关闭传感器。这些传感器类型的功能在架构中进行了标准化,并可在各种设备上重复使用。
- 可扩展 - 用户可以创建标准功能的自定义扩展。例如,您可能希望通过特定安全应用的额外功能来扩展架构的标准移动传感器功能。
- 已进行版本控制 - 架构中的所有更改都会进行版本控制,以实现向前和向后兼容。
架构定义了三个元素:特征、接口和资源。Nest 生态系统中几乎所有针对日常操作的功能都在架构中定义。我们来深入了解每个元素。
特征
特征
是基本功能的单位。它们可能是常规设备状态或功能,也可能是描述其行为的配置。单个特征可能属于许多设备,或特定于一种类型的设备。例如,在该架构中,您可以定义以下特征以用于 Nest 设备:
接口
我们可以将特征组合在一起,从而扩展特征的可组合性,尤其是在多个特征表示新的特定函数的情况下。此类特征组称为“接口”
。例如,Intercom 接口可能包含扬声器和麦克风特征:
资源
资源
表示架构中的逻辑或物理内容。例如,Nest Protect 是一种资源。Nest 守护者也是如此。用户或结构(例如用户的住宅)。资源包含一组封装其配置、状态和功能的特性。
资源、接口和特征之间的关系如下所示:
如您所见,某些特征(如运动特征)是不同资源的共同特征。某些接口(如 Intercom 接口)也是不同资源的通用接口。特征、接口和资源在架构中进行一次定义,并在 Weave 系统中的不同资源和设备中重复使用。
特征元素
特征进一步分为三个主要元素:属性、命令和事件。我们来看一下每个特征元素的示例。
属性
属性
表示特征的状态。属性是读写属性或只读属性。例如:
- 软件版本是设备身份特征的一个属性。大多数设备都具有这种特征。Nest Thermostat、Cameras 和 Protects 都有自己的专属软件版本。
- Bolt 状态是 Bolt Lock 特征的属性,但仅适用于 Yale x Nest Lock 等设备。例如,您不会在 Nest 温控器上找到螺栓锁。
命令
命令
是特征的专属自定义操作请求,具有预期响应。它们通常称为“自定义命令”,可以扩展到属性的特定状态更改。例如:- Bolt Lock Change 是一个自定义命令,用于更改 Bolt Lock 特征的 Bolt State 属性。
- “设置用户 PIN 码”是一个自定义命令,用于创建新的用户 PIN 码设置特征的现有用户 PIN 码属性或更新现有属性。
活动
事件
是特征的发生记录。它们会通知订阅者特征属性或正在进行的其他类型的更改(例如系统重置)。例如,Bolt Lock 特征的 Bolt Actuator State Change 事件会向订阅者通知多个 Bolt Lock 属性的当前状态,以及最后导致 Bolt Actuator 状态属性发生更改的执行者。这些信息将作为单个事件传递。
Weave 架构描述语言
Weave 中的架构特征、接口和资源使用针对特定网域的语言 (DSL) 进行定义和描述,该语言利用 Google 协议缓冲区 v3 的语法。这种语言称为 Weave 架构描述语言 (WDL)
。WDL 通过可生成不同平台专用实现和编码的编译器运行。生成的代码类型取决于资源:
- Objective-C、Swift、Java、Scala — 移动应用和云服务
- 采用 Weave TLV 编码的 C++ - 嵌入式设备和移动应用
我们稍后会更深入地了解 WDL 示例。
要点总结
您学到的内容:
- 架构描述了 Weave 系统的基础数据模型。
- 架构定义了三个元素:
- 特征 基本功能单元
- 接口 代表一组特定新功能的特征
- 资源 逻辑或物理事物
- 特征由属性、命令和事件组成:
- 属性 :资源特征的状态
- 命令 自定义特征操作请求
- 事件 特征的发生记录
- 架构是使用 Weave Schema Description Language (WDL) 定义的,后者基于 Google 协议缓冲区 v3
如需了解详情,请参阅: