物联网(WoT)架构 1.1

W3C 推荐标准

关于本文档的更多详细信息
此版本:
https://www.w3.org/TR/2023/REC-wot-architecture11-20231205/
最新发布版本:
https://www.w3.org/TR/wot-architecture11/
最新编辑草案:
https://w3c.github.io/wot-architecture/
历史:
https://www.w3.org/standards/history/wot-architecture11/
提交 历史
实现报告:
https://w3c.github.io/wot-architecture/testing/report11.html
编辑:
Michael LagallyOracle Corp.
Ryuichi MatsukuraFujitsu Ltd.
Michael McCoolIntel Corp.
Kunihiko ToumuraHitachi, Ltd.
前任编辑:
Kazuo Kajimoto(任职于 Panasonic Corp. 时)
Toru KawaguchiPanasonic Corp.
Matthias KovatschHuawei
反馈:
GitHub w3c/wot-architecture拉取 请求 新建议题开放的 议题
public-wot-wg@w3.org,主题行为 [wot-architecture11] … 消息主题 …存档
勘误:
存在 勘误
上一版推荐标准
https://www.w3.org/TR/2020/REC-wot-architecture-20200409/
贡献者
位于 GitHub 仓库中
仓库
我们在 GitHub 上
提交 bug

另请参阅 翻译


摘要

W3C Web of Things(WoT)实现了跨 IoT 平台 和应用领域的互操作性。WoT 的目标是保留并 补充现有的 IoT 标准和解决方案。W3C WoT 架构旨在描述已有内容,并仅在必要时 规定新的机制。

WoT Architecture 规范描述了 W3C Web of Things 的抽象架构。该 抽象架构基于从多个应用领域的用例 推导出的需求。已识别出若干模块化构建块, 其详细规范在其他文档中给出。本文档 描述了这些构建块之间如何关联并 协同工作。WoT 抽象架构定义了一个基本的 概念框架,可映射到多种具体 部署场景,并给出了若干示例。然而,本 规范中描述的抽象架构本身并不定义具体机制, 也不规定任何具体实现。

本文档状态

本节描述本文档在 发布时的状态。当前 W3C 出版物列表以及本技术报告的 最新修订版可在 W3C 技术报告 索引中找到,网址为 https://www.w3.org/TR/。

本文档描述一个抽象架构。不过, 有一份 实现 报告,描述了一组遵循 W3C Web of Things 架构的具体实现。它还引用了各个 WoT 构建块的 其他实现报告。

本规范未来的更新可能纳入 新特性

本文档由 Web of Things 工作 组作为推荐标准,按照 推荐标准 轨道发布。

W3C 建议将本规范作为 Web 标准进行广泛部署。

W3C 推荐标准是一种规范,它在经过广泛的 共识形成后,由 W3C 及其成员认可,并且 获得工作组成员对实现的 免版税许可承诺。

本文档由一个按照 W3C 专利政策运作的组制作。 W3C 维护一份 公开的任何 专利披露列表,其中列出了与该组交付成果 相关的披露;该页面还包括披露专利的说明。 任何实际知悉某项专利且认为该专利包含 必要 权利要求的个人,必须按照 W3C 专利政策第 6 节披露该信息。

本文档受 2023 年 11 月 03 日 W3C 流程 文档管辖。

1. 引言

本节为非规范性内容。

Web of Things(WoT)的目标是提升 物联网(IoT)的互操作性和可用性。 通过许多利益相关者多年来的协作, 已经识别出若干有助于应对这些挑战的构建块。

来自多个行业、面向各种应用领域的利益相关者 贡献了 30 多个 WoT 用例。这些用例已经收集起来, 并发布在 WoT Use Cases and Requirements https://www.w3.org/TR/wot-usecases/ 文档中。

该用例集合分为两类:

这些用例和需求推动了 W3C WoT 规范 家族的创建和进一步演进。

WoT 架构规范聚焦于 W3C WoT 标准化的范围,该范围可以分解为这些构建块, 以及定义它们如何相互关联的抽象架构。

架构文档具有多重用途:

构建块在单独的规范中定义并详细描述。 除了定义抽象架构及其术语和概念框架之外,本 规范还作为 WoT 构建块的引言, 并解释它们之间的协同工作:

本规范还涵盖 WoT 系统部署的非规范性架构 方面和条件。这些指南在示例部署场景的上下文中 描述,尽管本规范并不要求特定的具体实现。

本规范作为 W3C WoT 规范的总括性文档, 定义术语以及 W3C Web of Things 的底层 抽象架构等基础内容。总而言之,本规范的目的是提供:

其他需求、用例、概念性特性和 新构建块会收集到未来版本的 WoT Use Cases and Requirement https://www.w3.org/TR/wot-usecases/ 文档中。

2. 一致性

除标记为非规范性的章节外,本规范中的所有创作 指南、图表、示例和注释均为非规范性内容。 本规范中的其他所有内容均为规范性内容。

本文档中的关键词 MAYMUSTMUST NOTSHOULDSHOULD NOT 应按照 BCP 14 [RFC2119] [RFC8174] 中所述方式解释,且仅当它们以此处所示的全大写形式 出现时才如此。

3. 术语

本节为非规范性内容。

本规范使用以下在此定义的术语。 WoT 前缀用于避免专门为 Web of Things 概念 (重新)定义的术语产生歧义。

如果某一定义与另一 WoT 文档中使用的术语发生冲突, 则以 WoT Architecture 中的定义为准。

Action
一种 Interaction Affordance,允许调用 Thing 的 函数,该函数会操纵状态(例如, 打开或关闭一盏灯)或在 Thing 上触发一个过程 (例如,在一段时间内调暗一盏灯)。
Anonymous TD
没有用户定义标识符 (id 属性)的 Thing Description。
Connected Device
Device 的同义词。
Binding Templates
一组可重用的蓝图集合,使 Thing Description 能够以特定方式结合特定协议、数据载荷 格式或同时结合二者的 IoT 平台使用。 这是通过额外的描述性词汇表、Thing Model 和示例 完成的,旨在指导 Thing 和 Consumer 的实现者。
Consumed Thing
一种软件抽象,表示本地应用使用的远程 Thing。 该抽象可以由原生 WoT Runtime 创建, 或通过 WoT Scripting API 实例化为对象。
Content Type
消息体格式的标识符。也称为 媒体类型和 MIME 类型 [RFC2046]。
Consuming a Thing
解析并处理 TD 文档,并从中创建 Consumed Thing 软件抽象,作为本地运行时环境中应用的接口。
Consumer
能够处理 WoT Thing Description (包括其基于 JSON 的表示格式)并与 Thing 交互(即消费 Thing)的实体。
Data Schema
数据模式描述在交互期间于 ThingConsumer 之间传递的信息模型、 相关载荷结构以及相应的数据项。
Device
Device 是具有网络接口的物理实体。 Device 可以由 Thing Description 描述,并且 是一种 ThingConnected Device 的同义词。 与 Service 比较。
Digital Twin
数字孪生是一种 Virtual Thing, 位于云端或边缘节点上。Digital Twin 可用于 表示现实世界设备并为其提供网络接口,这些设备 可能并非持续在线(另见 Shadow), 可能能够在新应用和服务部署到真实设备之前 运行其模拟,可能能够维护过去状态或行为的历史, 并可能能够预测未来状态或行为。Digital Twin 通常比简单的 Shadow 具有更多功能。
Directory
一种 Service, 它维护一组描述其他 ServiceThing 的数据 或元数据。示例是 WoT Thing Description Directory
Discovery
WoT 定义的机制,用于在网络上本地或远程 分发和访问 WoT Thing Description
Discoverer
一个实体,它作为 WoT Discovery 过程的客户端, 用于发现并获取 Thing Description, 例如通过被引入到 Thing Description Directory 探索服务并对其进行搜索, 或通过直接从 Thing 上的 well-known 端点获取 Thing Description
Domain-specific Vocabulary
可在 WoT Thing Description 中使用、但并非由 W3C WoT 定义的 链接数据词汇表。
Edge Device
一种为企业或服务提供商核心网络提供入口点的设备。 示例包括集线器、网关、路由器、交换机、多路复用器 以及各种其他接入设备。
Enriched TD
嵌入了用于记录和发现的额外属性的 Thing Description。
Event
一种 Interaction Affordance,用于描述事件源, 该事件源会异步向 Consumer 推送事件数据 (例如,过热警报)。
Exploration
一种发现机制,它以一个或多个 Thing Description 的形式提供对详细元数据的访问。 Exploration 机制通常受到安全机制保护, 仅授权用户可访问。
Exposed Thing
一种软件抽象,表示本地托管的 Thing, 该 Thing 可由远程 Consumer 通过网络访问。 该抽象可以由原生 WoT Runtime 创建, 或通过 WoT Scripting API 实例化为对象。
Exposing a Thing
在本地运行时环境中创建 Exposed Thing 软件抽象,以管理 Thing 的状态并与行为实现进行交互。
Hypermedia Control
Protocol Binding 在超媒体中的序列化, 即用于导航的 Web 链接 [RFC8288],或用于执行其他操作的 Web 表单。表单可视为由 Thing 提供、供 Consumer 补全并发送的请求模板。
Interaction Affordance
Thing 的元数据,用于向 Consumer 显示并描述可能的 选择,从而提示 Consumer 如何与 Thing 交互。 存在多种潜在的可供性,但 W3C WoT 定义了三种 Interaction Affordance:Property、Action 和 Event。第四种 Interaction Affordance 是导航, 它已经通过链接在 Web 上可用。
Interaction Model
一种中间抽象,它形式化并缩小从应用意图到具体协议 操作的映射。在 W3C WoT 中,定义的一组 Interaction Affordance 构成了 Interaction Model。
Intermediary
位于 Consumer 和 Thing 之间的实体,能够代理、 增强或组合 Thing,并重新发布一个 WoT Thing Description,使其指向中介上的 WoT Interface, 而不是原始 Thing。对于 Consumer 而言, 遵循 REST 的分层系统约束时,Intermediary 可能与 Thing 无法区分。
Introduction
一种“首次接触”发现机制,其结果是引用 Exploration 机制的 URL。Introduction 机制本身 不应直接提供元数据,并且通常被设计为开放。
IoT Platform
特定的 IoT 生态系统,例如 OCF、oneM2M 或 Mozilla Project Things,它拥有自己的面向应用的 API、 数据模型以及协议或协议配置规范。
Metadata
提供实体抽象特征描述的数据。例如,Thing DescriptionThing 的 Metadata。
Personally Identifiable Information (PII)
任何可用于识别其所涉及的自然人,或者直接或间接 链接到某一自然人,或可能如此链接的信息。 我们使用与 [ISO-IEC-29100] 相同的定义。
Orchestration
一组 Thing 行为的自动化。Orchestration 是将各个 Thing 与规则或服务组合成新的服务或虚拟 Thing
Partial TD
Partial TD 是一个遵循 TD 信息模型相同层级结构的对象, 但不要求包含所有必需元素。

注:Partial TD 的一个用法示例位于 WoT Scripting API 中, 它在其中被用作创建 Exposed Thing 的输入。

Privacy
当对个人相关数据进行不当或非法的收集和使用而导致 对个人私人生活或事务的侵扰时,不受这种侵扰的自由。 我们使用与 [ISO-IEC-2382] 相同的定义。另见 Personally Identifiable InformationSecurity,以及 [ISO-IEC-29100] 中的其他相关定义。
Private Security Data
Private Security Data 是 Thing 的 Security Configuration 中的组成部分,它被保密, 不与其他设备或用户共享。一个示例是 PKI 系统中的 私钥。理想情况下,此类数据存储在应用无法访问的 单独内存中,并且只能通过抽象操作使用,例如签名, 这些操作即便对使用它的应用也不会泄露秘密信息。
Producer
能够为特定 Thing 创建 WoT Thing Description 的实体。
Profile
一种技术规范,它提供一组断言,使得任何符合 这些断言的 Consumer 都能够开箱即用地 与任何同样符合这些断言的 Thing 互操作。
Property
一种 Interaction Affordance,用于暴露 Thing 的状态。 随后可以检索(读取)并可选地更新(写入) 该状态。Thing 还可以选择使 Property 可观察, 即通过向 Consumer 通知状态 变化。
Protocol Binding
从 Interaction Affordance 到某一特定协议的具体消息的 映射,从而告知 Consumer 如何激活 Interaction AffordanceW3C WoT 将 Protocol Binding 序列化为 超媒体控件
Public Security Metadata
Public Security Metadata 是 Thing 的 Security Configuration 中的组成部分,用于描述访问 Thing 所需的安全机制 和访问权限。它不包含任何秘密信息或具体数据 (包括公钥),并且其本身不提供对 Thing 的访问。 相反,它描述了授权用户可获得访问权限的机制, 包括他们必须如何进行身份验证。
Registrant
Thing Description 注册到 Thing Description Directory 的实体。该实体可以是也可以不是 所注册的 Thing, 即该注册的 Thing Description 所描述的 Thing。
Security
对信息的机密性、完整性和可用性的保持。 也可能涉及真实性、可问责性、不可否认性和可靠性等属性。 该定义改编自 [ISO-IEC-27000] 中 Information Security 的定义, 该文档还包括所提及各项更具体属性的额外定义。 请参考该文档获取其他相关定义。我们还指出, 希望这些属性在正常运行以及系统遭受攻击时均能得到保持。
Security Configuration
Public Security Metadata、Private Security Data 以及任何其他配置安全机制运行所需的 配置信息(例如公钥)的组合。
Service
Service 是具有网络接口的软件实体。 Service 可以由 Thing Description 描述, 并且是一种 Thing。 另见 Virtual Thing。与 Device 比较。
Servient
一种实现 WoT 构建块的软件栈。 Servient 可以托管并暴露 Thing,和/或托管 消费 Thing 的 Consumer。Servient 可以支持多个 Protocol Binding,以支持与不同 IoT 平台交互。
Shadow
Shadow 是一种 Virtual Thing, 它维护状态副本,并调解与另一个 Thing 的交互。 Shadow 旨在与其所表示的 Thing 的状态实现最终一致性。 如果 Shadow 具有超出单纯镜像状态的更多功能, 则将其称为 Digital Twin 可能更合适。
Subprotocol
传输协议的一种扩展机制,必须了解它才能成功交互。 一个示例是 HTTP 的长轮询。
System
由多个相互交互的组件组成的实体。
TD
WoT Thing Description 的缩写。
TDD
WoT Thing Description Directory 的缩写。
TD Vocabulary
W3C WoT 控制的链接数据词汇表, 用于标记 WoT Thing Description 中 Thing 的元数据, 包括 WoT Binding Template 的通信元数据。
TD Context Extension
一种机制,用于通过 JSON-LD[JSON-LD11] 中规定的 @context,使用额外的 Vocabulary Term 扩展 Thing Description。 它是语义注释以及 Protocol Binding、Security Scheme 和 Data Schema 等核心机制扩展的基础。
TD Server
Thing Description Server 的缩写。
ThingWeb Thing
物理实体或虚拟实体的抽象,其元数据和接口由 WoT Thing Description 描述;而虚拟实体是一个或多个 Thing 的组合。
Thing Description Directory
一种用于 TD 的目录服务,它提供 Web 接口来注册 TD 并查找它们(例如,使用 JSONPath 或 SPARQL 查询)。 推荐的 API 和特性集定义在 [WOT-DISCOVERY] 中, 并作为 WoT Discovery 过程的可选部分使用。
TD Fragment
TD Fragment 是 TD 数据模型的一个子结构。 它是一种有效的对象结构,可以根据 Thing Description规范第 5 章中定义的 TD 信息模型的一部分 进行语法验证,但是该片段可能省略某些允许完整验证的上下文。
Thing Description Server
Thing Description Server 是一种 Web 资源, 由 URL 定址,并且在被访问时可以提供 Thing Description。其需求定义在 [WOT-DISCOVERY] 中, 并作为 WoT Discovery 过程的可选部分使用。
Thing Model
Thing Model 是对具有相同 能力的一类 Thing 的描述。它描述 PropertyActionEvent,以及 整个一组 Thing 所共享的通用元数据。 与 Thing Description 相比,Thing Model 不包含足以识别 或与某个 Thing 实例交互的信息。
Transport Protocol
底层的、标准化的应用层协议,不带有针对选项或 子协议机制的应用特定需求或约束。示例包括 HTTP、 CoAP 或 MQTT。
Trusted Environment
一组设备,它们在无需证明的情况下假定彼此的身份声明 真实可信,并允许通过共同的受保护网络彼此之间进行 相对不受限制的访问。
Virtual Thing
一种 Service, 它表示、增强一个或多个其他 Thing 的功能, 为其提供改进的接口,或替代其位置。 Virtual Thing 通常会充当 Intermediary。 示例包括 ShadowDigital Twin
Vocabulary
由命名空间 IRI 标识的一组 Vocabulary Term
TermVocabulary Term
一个字符串。当 TermVocabulary 的一部分,即 由命名空间 IRI[RFC3987] 作为前缀时,它被称为 Vocabulary Term。为 了可读性,本文档中出现的 Vocabulary Term 总是以紧凑形式书写,而不是完整 IRI。
WoT Interface
Thing 的面向网络的接口,由 WoT Thing Description 描述。
WoT Profile
Profile 的同义词
WoT Runtime
一种运行时系统,它维护应用的执行环境,并能够暴露 和/或消费 Thing、处理 WoT Thing Description、 维护 Security Configuration,以及与 Protocol Binding 实现交互。WoT Runtime 可以有自定义 API, 也可以使用可选的 WoT Scripting API。
WoT Scripting API
Servient 提供的面向应用的编程接口, 用于简化在 WoT Runtime 中运行的行为或应用的实现。 它可与 Web 浏览器 API 相比较。WoT Scripting API 是 W3C WoT 的可选 构建块。
WoT Servient
Servient 的同义词。
WoT Thing DescriptionThing Description
描述 Thing 的结构化数据。WoT Thing Description 包括通用元数据、领域特定元数据、 Interaction Affordance(其中包括受支持的 Protocol Binding),以及指向相关 Thing 的链接。 WoT Thing Description 格式是 W3C WoT 的核心构建块。

3.1 设备类别

在符合 WoT 抽象架构的 WoT 部署中,我们会看到多种不同的 设备类型。它们的范围(按占用空间和能力排序) 从小型嵌入式 node 设备, 到 gatewayhub, 再到功能强大的 edge 设备和 cloud 服务器。 这些设备之间的互操作性意味着一组核心 特性和功能可在 所有这些设备上使用。

以下设备类别描述了这些类别中典型代表的占用空间和 特征。这用于识别这些设备类别可能具备的特性和用例。

这些类别与 IETF [RFC7228] 为受限设备定义的类别保持一致,不过这些类别已扩展到 更大的设备,并提供了 RAM 和 Flash/ROM 的典型大小边界。 内存和存储大小都比性能更容易量化,也更具限制性, 因此这是此分类的基础。这不是严格分类。 各类别可能重叠,并且并非所有内存都可供用户应用使用。

类别 数据大小(RAM) 代码大小(Flash、ROM,...) 典型代表 备注,典型应用场景
Class-0, C0 << 10 KiB << 100 KiB 小占用空间微控制器 不具备安全通信的传感器节点
Class-1, C1 ~ 10 KiB ~ 100 KiB 微控制器 通常支持 TLS、DTLS 等安全 通信协议的传感器
Class-2, C2 ~ 64 KiB ~ 256 KiB 联网受限设备 小型嵌入式设备,例如 M2M 通信 节点、智能电表、传感器节点和其他嵌入式 电器、家用电器、低端电视机顶盒 以及销售点终端等。
Class-3, C3 ~ 64-256 KiB ~ 256 KiB - several MBs ISP 网关 小型家庭和工业网关
Class-4, C4 ~ 256 KiB - several MB ~ 1 MB - several MB 网关/集线器 大型家庭和工业网关
Class-5, C5 ~ 1 - 8 GB ~ 1 - 16 GB edge 小型边缘服务器
Class-6, C6 ~ several GB ~ several GB edge 大型边缘服务器
Class-7, C7 ~ several GB ~ several GB cloud 具有多个计算节点的云系统
:类别 边界

类别边界是软边界, 各类别并非互斥,也就是说,存在一些应用 场景可以由来自多个类别的设备实现。 对于安全通信,我们考虑支持 TLS/HTTP、DTLS/CoAP 以及类似安全协议的设备。

4. 应用领域

本节为非规范性内容。

本节介绍 W3C WoT 所面向的应用领域,并用这些领域推导 7. WoT 构建块中讨论的 抽象架构。

这些应用领域由 [WOT-USE-CASES-REQUIREMENTS] 中 描述的用例所驱动。

Web of Things 架构不对用例和应用领域 设置任何限制。已经考虑了各种应用 领域,以收集抽象架构必须满足的 共同模式。

以下各节并非穷尽列举。它们只是作为 示例,说明联网的 Thing 可以提供额外 收益或支持新的场景。

4.1 消费者

在消费者空间中,有多种资产会因联网而 受益。灯和空调可以根据房间占用情况 关闭。窗帘可以根据天气条件和 是否有人自动关闭。能源和其他资源消耗可以 根据使用模式和预测进行优化。

本节中的消费者场景描述的是智能 家居用例。

1 展示了 智能家居的一个示例。在此情况下,网关通过相应的 本地通信协议(如 KNX、ECHONET、ZigBee、DECT ULE 和 Wi-SUN)连接到传感器、摄像头和家用电器等 边缘设备。一个家庭中可以存在多个网关, 而每个网关可以支持多个本地协议。

网关可以通过互联网连接到云端,而某些 电器也可以直接连接到云端。在云端运行的服务从 边缘设备收集数据并分析数据,然后通过 边缘设备和其他 UX 设备向用户提供价值。

智能家居用例
1 智能家居

智能家居提供远程访问和控制、语音控制以及 家庭自动化等消费者收益。智能家居还使设备制造商 能够远程监测和维护设备。智能家居可以实现 能源管理和安全监控等增值服务。

4.2 工业

本节中的工业用例适用于 不同的行业垂直领域。
由于应用场景存在重叠的性质, 不同垂直领域具有相似的用例。

4.2.1 示例:智能工厂

2 展示了 智能工厂的一个 示例。在此情况下,现场级、单元级 和生产线控制器基于 PROFINET、Modbus、OPC UA TSN、 EtherCAT 或 CAN 等工业通信协议,对不同工厂设备 进行自动化控制。工业边缘设备从各种 控制器收集选定数据,并使其可供云后端 服务使用,例如用于通过仪表板进行远程监控, 或对其进行分析以实现预防性维护。

智能工厂用例
2 智能工厂

智能工厂需要对联网制造设备以及制造出的 产品进行高级监测。它们受益于对机器故障的预测 和对异常的早期发现,从而避免代价高昂的停机时间 和维护工作。

此外,对联网制造设备以及生产设施环境中 有毒气体、过度噪声或热量的存在进行监测, 可提高工人的安全性,并降低事件或事故的风险。

对生产设备进行实时监控和 KPI 计算有助于 发现生产率问题并优化供应链。

4.3 运输与物流

对车辆、燃料成本、维护需求和任务分配进行 监测,有助于优化车队的充分利用。

可以跟踪在途货运,以确保运输货物的 质量和状态保持一致。这对于确认从仓库到 冷藏卡车再到交付的冷链完整性尤其有用。

对仓库和堆场中的库存进行集中监测和管理, 可以防止缺货和库存过多的情况。

4.4 公用事业

住宅以及 C&I(商业和工业)计量表的自动读数 和计费,为资源消耗和潜在瓶颈提供 持续洞察。

监测分布式可再生能源发电设备的状态和输出, 能够优化分布式能源资源。

对配电设备进行监测和远程控制, 有助于自动化配电过程。

对发电和配电基础设施进行持续监测, 正在提升现场公用事业工作人员的安全性。

4.5 石油和 天然气

海上平台监测、管道泄漏检测和预测, 以及对储罐和蓄存设施液位的监测与控制, 有助于提高对劳动力以及环境的工业安全。

通过各种储罐和输送管道/卡车对分布式库存 进行自动计算,可以改进规划和资源优化。

4.6 保险

对联网结构、车队车辆等高价值资产进行主动 资产监测,可通过预测和对事件的早期检测 减轻严重损坏和高昂成本的风险。

可以通过使用情况跟踪和定制保险政策提供 基于使用情况的保险。

预测性天气监测以及将车队车辆重新调度到 有遮蔽的车库,可以限制冰雹损害、树木损害 造成的损失。

4.7 工程和 建筑

面向工业安全的监测降低了安全危害的风险。 对施工现场资产的监测可以防止损坏和丢失。

4.8 农业

土壤状况监测、为浇水和施肥制定最佳计划, 以及监测农产品状态,可优化农产品的 质量和产量。

4.9 医疗保健

临床试验数据的收集和分析有助于 获得对新领域的洞察。

远程患者监测降低了老年人和住院后患者 关键情况未被发现的风险。

4.10 环境监测

环境监测通常依赖大量分布式传感器, 这些传感器将其测量数据发送到公共网关、 边缘设备和云服务。

监测空气污染、水污染以及细尘、臭氧、挥发性 有机化合物、放射性、温度、湿度等其他环境风险因素, 以检测关键环境状况,可以防止不可恢复的健康 或环境损害。

4.11 智慧 城市

对桥梁、水坝、堤坝、运河的材料状态、 劣化和振动进行监测,可发现维护修复工作并 防止重大损坏。监测高速公路并提供适当的标志, 可确保优化交通流。

智慧停车正在优化和跟踪停车位的使用情况和 可用性,并自动化计费/预订。

根据存在检测、天气预测等对路灯进行智能控制, 可降低成本。

可以监测垃圾容器,以优化废弃物管理和垃圾 收集路线。

4.12 智能 建筑

监测整个建筑的能源使用有助于 优化资源消耗并减少浪费。

监测建筑中的设备,例如 HVAC、 电梯等,并及早修复问题,可提升 使用者的满意度。

4.13 联网汽车

对运行状态进行监测、对服务需求进行预测, 可优化维护需求和成本。通过针对关键道路和 交通状况的早期预警系统通知,可增强驾驶员安全。

4.13.1 联网汽车示例

3 展示了 联网汽车的一个 示例。在此情况下,网关通过 CAN 连接到汽车组件, 并通过专有接口连接到汽车导航系统。在云端 运行的服务收集从汽车组件推送的数据,并分析 多辆汽车的数据以确定交通模式。网关也可以消费 云服务;在此情况下,它获取交通数据并通过 汽车导航系统向驾驶员显示。

联网汽车用例
3 联网汽车

5. 常见部署模式

本节为非规范性内容。

本节介绍常见部署模式,说明设备/Thing 如何与 控制器、其他设备、代理和服务器交互。在本节中, 我们使用术语 client role 表示传输协议的发起方, 使用术语 server role 表示传输协议的被动组件。 这并不意味着为任何系统组件规定特定角色。 一个设备可以同时处于 clientserver 角色。

这种双重角色的一个示例是传感器,它向云服务 注册自身,并定期向云端发送传感器读数。 在响应消息中,云端可以调整传感器消息的 传输速率,或选择未来消息中要传输的特定 传感器属性。由于传感器向云端注册自身并 发起连接,因此它处于“client”角色。不过, 由于它也会响应在响应消息中传输的请求, 因此它也履行“server”角色。

以下各节以逐渐增加的复杂度说明角色、任务和 用例模式。它们并非穷尽列举,而是用于说明 本规范后续章节所定义的 WoT 架构和构建块的动机。

本节还使用了 Trusted Environment 的概念,它是一组允许彼此之间 相对不受限制访问的设备。这是一种常见方法, 但也带来一些风险;这些风险及其缓解措施在第 10.4 可信 环境风险中讨论。

5.1 遥测

遥测是对远程设备的监测,这意味着将测量值 和其他数据自动传输到 Consumer 并在其上处理。 数据可以通过各种通信通道传输,包括无线和有线。 示例包括 GSM 网络、Bluetooth、WiFi、Ethernet 以及其他有线标准。

远程计量设备包括一个或多个传感器, 在某些情况下还包含执行器。在许多情况下, 传感器数据会按固定间隔、在状态变化时, 或作为对 Consumer 请求的响应进行传输。

远程计量设备通常是资源非常有限的小型嵌入式 系统,即 Class-2 或以下。它们可能由电池供电, 并必须通过各种措施(例如睡眠模式)尽量降低 功耗。这些设备大部分时间会处于睡眠状态, 不会传输任何数据以节省能源。它们只会在特定事件 (例如开关切换)发生时唤醒。当设备状态改变时, 会向 Consumer 发送事件。之后设备会再次进入 睡眠模式。

典型用户场景是对各种资产进行监测,示例包括 智慧城市、工厂、车队、环境监测和健康监测。 一些部署可能需要监测大量地理上分散的资产, 另一些部署则只包含少量设备,例如智能家居。 一种常见模式是单个 Consumer 与多个设备 (Thing) 之间的一对多关系。

5.2 设备控制器

一种常见部署模式是由用户操作的远程控制器控制 本地设备,如 4 所示。

远程控制器可以通过本地家庭网络直接访问 电子电器。在这种情况下,远程控制器可以由浏览器 或原生应用实现。

在此模式中,至少一个设备(如电子电器)具有 server 角色,可以接受来自其他设备的请求并 对其进行响应,有时还会发起机械动作。另一个设备 (如远程控制器)具有 client 角色,可以发送包含请求的 消息,例如读取传感器值或打开设备。此外, 为了发出设备的当前状态或事件通知,设备可能具有 client 角色,可以向另一个具有 server 角色的设备 发送消息。

智能家居设备用例
4 设备控制

5.3 Thing 到 Thing

5 展示了 直接 Thing 到 Thing 交互的一个示例。场景如下: 传感器检测到房间状态变化,例如温度超过阈值, 并向电子电器发出类似“turn on”的控制消息。 传感器单元可以向其他设备发出一些触发消息。

在此情况下,当两个具有 server 角色的设备 连接时,至少一个设备还必须具有 client 角色, 以向另一个设备发出消息来执行动作或通知。

智能家居 t2t 部署场景
5 控制代理

5.4 远程访问

此部署场景包含移动远程控制器 (例如在智能手机上),如 6 所示。远程控制器可以在 不同的网络连接和协议之间切换,例如在蜂窝网络 与使用 Wi-Fi 和 Bluetooth 等协议的家庭网络之间切换。 当控制器处于家庭网络中时,它是一个可信设备, 不需要额外的安全或访问控制。当它位于可信网络 之外时,必须应用额外的访问控制和安全机制, 以确保可信关系。请注意,在此场景中,网络连接可能 因在不同网络接入点或蜂窝基站之间切换而发生变化。

在此模式中,远程控制器和电子电器具有 client 和 server 角色,如 4 中的相关场景。

具有多个网络接口的智能家居
6 多个网络接口

5.5 智能家居网关

7 展示了 智能家居网关 的部署场景。网关位于家庭网络和 互联网之间。它管理屋内的电子电器,并可以通过 互联网接收来自远程控制器的命令,例如来自前一场景中 的智能手机。它也是设备的虚拟表示。 智能家居网关通常提供代理和防火墙 功能。

在此模式中,家庭网关同时具有 client 和 server 角色。当远程控制器驱动电子电器时, 它可以以 client 角色连接到电子电器,并以 server 角色连接到远程控制器。当电子电器向 远程控制器发出消息时,网关充当电子电器的 server 角色,并充当远程控制器的 client 角色。

智能家居网关用例
7 智能家居网关

5.6 边缘设备

Edge DeviceEdge Gateway 类似于智能家居网关。我们使用该术语表示 边缘网关执行的额外任务。 与 8 中主要只是桥接公共网络和 可信网络的家庭网关不同,边缘设备具有本地计算 能力,并且通常在不同协议之间桥接。 边缘设备通常用于工业解决方案,在其中它们可以对 联网设备和传感器提供的数据进行预处理、过滤 和聚合。

边缘设备用例
8 边缘设备

5.7 数字孪生

Digital Twin 是一种虚拟表示, 即位于云服务器或边缘设备上的一个设备或一组设备的 模型。它可用于表示可能并非持续在线的现实世界设备, 或在新的应用和服务部署到真实设备之前 运行其模拟。

数字孪生用例
9 数字孪生

数字孪生可以为单个设备建模,也可以在组合设备的 虚拟表示中聚合多个设备。

多个设备的数字孪生用例
10 多个设备的 数字孪生

数字孪生可以以不同方式实现,具体取决于 设备是否已经连接到云端,或者它是否连接到 自身连接到云端的网关。

5.7.1 云连接设备

11 展示了一个示例,其中 电子电器直接连接到云端。云端镜像这些电器,并作为 数字孪生,可以接收来自远程控制器(例如智能手机)的 命令。授权控制器可以位于任何地方,因为数字孪生 可以全局访问。

智能家居云用例 1
11 云连接 设备的电器孪生

5.7.2 编排

设备和操作流程的编排提供了超出 简单孤立使用某个设备的能力。 一组经过编排的设备可以提供组合操作, 通过一次操作影响多个设备的状态。

这些操作将单独操作组合为一个组合操作流程, 该流程可能具有若干备选路径,这些路径会基于 某些设备状态或属性值来选择。

经过编排的设备可以部署在各种拓扑中, 并可通过不同网络连接。由这些设备构建的系统 可以提供组合并超越单个设备能力的功能。

一个典型的编排示例是智能家居,其中各种传感器 (温度、占用、湿度、光照、空气质量、门传感器) 协同工作,并为进入或离开房屋、早晨/夜晚例程、 根据是否有人调整灯光和温度等场景提供操作流程。

5.7.3 旧式设备

12 展示了一个示例,其中旧式电子 电器并未直接连接到云端。这里需要一个网关来中继 连接。该网关作为:

  • 在物理视图和逻辑视图中整合各种旧式通信 协议的集成器
  • 面向互联网的防火墙
  • 隐私过滤器,用于替换真实图像和/或 语音,并在本地记录数据
  • 网络连接中断时的本地代理
  • 火警和类似事件发生时在本地运行的 应急服务

云端镜像网关及所有连接的电器,并作为 数字孪生与网关结合在云端管理它们。此外, 云端可以接收来自远程控制器(例如智能手机)的 命令,这些控制器可以位于任何地方。

智能家居云用例 2
12 旧式 设备的数字孪生

5.8 多云

典型 IoT 部署由多个(数千个)设备组成。 如果没有标准化机制,针对特定云管理固件更新 需要大量工作,并会阻碍 IoT 更大规模的采用。

用于描述设备和设备类型的标准化机制的主要收益是, 能够将设备部署到不同云环境,而无需在设备软件/ 固件层面进行定制,即无需在设备上安装云特定代码。 这意味着解决方案足够灵活,能够以允许设备在 多个 IoT 云环境中入网和使用的方式描述设备。

这推动了 Web of Things 设备的采用,因为它 使得在现有部署中轻松使用新设备成为可能, 同时也支持将现有设备从一个云迁移到另一个云。

5.9 虚拟 Thing

Virtual Thing 是一种 Service, 它充当一个或多个其他 Thing 的占位符,并向其 Consumer 提供接口。

在简单情况下,它是一种接口抽象, 为设备定义通用接口,从而可以在不改变 Consumer 的情况下用另一个设备模型替换一个设备模型。

在更复杂的场景中,Virtual Thing 为多个设备提供 单一接口,并向其 Consumer 提供更高层级的操作。 单个设备可以被替换,也可以通过软件升级提供 新操作。

Virtual Thing 通常会充当 Intermediary。示例 包括 ShadowDigital Twin

5.10 跨域协作

13 展示了跨域 协作的一个示例。在此情况下,每个系统都会涉及 其他领域中的其他系统,例如智能工厂与智慧城市、 智慧城市与智能家居。此类系统被称为“共生” 生态系统,如 [IEC-FOTF] 中所示。 存在两种协作模型:直接协作和间接协作。在直接协作模型中, 系统以点对点方式彼此直接交换信息。在间接协作中, 系统通过某种协作平台交换信息。为了维护并继续这种协作, 每个系统都提供其能力和接口的元数据,并使自身适配 其他系统。

跨域直接用例 跨域间接用例
13 跨域协作

5.11 系统集成

上一节描述了各种架构模式。在这些模式中, 某些功能实体(例如包括旧式设备在内的设备、 控制器、网关和云服务器)位于物理位置, 例如建筑内部、建筑外部和数据中心。 14 是一个 概览,展示了这些实体的组合和通信路径。

在传输协议层中,每个实体会任意选择适合通信的 角色。例如,当设备向不定数量的应用提供服务时, 它可以充当 server。另一方面,如果设备具有有限或 间歇性的网络连接,它们可以充当 client,并在网络 可用时主动向应用发送消息。无论如何,在应用层中, 应用看到的是设备提供用于交互的抽象接口, 并且应用可以使用这些抽象接口与设备交互。

系统集成
14 系统集成

6. 抽象 WoT 系统 架构

本节为规范性内容。

为满足 [WOT-USE-CASES-REQUIREMENTS] 中收集的需求和用例,Web of Things(WoT) 建立在 Web Thing 的概念之上——通常 简称为 Thing—— 它们可由所谓的 Consumer 使用。Consumer 可以直接与 Thing 交互, 也可以使用 中介进行 间接通信。

这些概念适用于第 4. 应用 领域中的各种应用领域。

本节提供背景和规范性断言,以定义整体 W3C Web of Things 架构。

由于 Web of Things 面向来自不同领域的 利益相关者,因此会更详细地解释 Web 技术的某些方面, 特别是超媒体的概念。

6.1 基本概念

本节介绍 Web of Things 的基本概念。 它介绍了 Thing 抽象,该抽象由 Thing DescriptionThing Model 描述,随后可由 Consumer 使用。

Thing 是物理 或虚拟实体(例如设备或房间)的抽象, 并由标准化元数据描述。Consumer 是一种实体, 能够读取并解释某个 Thing 的标准化元数据, 以便与该 Thing 通信。

WoT Thing Description(TD)是一种标准化、机器可读的 元数据表示格式,使 Consumer 能够发现并 解释 Thing 的能力(通过语义 注释),并在与 Thing 交互时适配不同的实现(例如 不同协议或数据结构),从而实现不同 IoT 平台之间的互操作性,即 不同生态系统和标准之间的互操作性。WoT Thing Model(TM) 同样是一种标准化、机器可读的元数据 表示格式,用于描述 Thing类别,例如具有共同能力的 产品线设备。

consumer thing
15 Consumer-Thing 交互

Thing 也可以是 虚拟实体的抽象。虚拟实体是一个或多个 Thing 的组合(例如由 多个传感器和执行器组成的房间)。组合的一种选项是 提供单一、整合的 WoT Thing Description,其中包含虚拟实体的能力组合。 在组合较为复杂的情况下,其 TD 可以 链接到组合中的层级子 Thing。 主 TD 作为 入口点,并且只包含通用元数据和可能的 总体能力。这允许对更复杂 Thing 的某些方面进行分组。

6.1.1 元数据

WoT 架构提供了元数据格式,用于描述 Thing 的特定 实例以及 Thing类别。用于 实例的元数据格式称为 Thing Description, 而用于 类别的格式称为 Thing Model

6.1.1.1 Thing Description

Thing 实例由标准化元数据描述。 W3C WoT 中, 某个 Thing 实例的描述元数据 MUST 作为 WoT Thing Description(TD)可用 [WOT-THING-DESCRIPTION]。 该格式可以通过经典 JSON 库或 JSON-LD 处理器处理,因为其底层 信息模型是基于图的,并且其序列化 与 JSON-LD 1.1 [JSON-LD11] 兼容。使用 JSON-LD 处理器处理 TD 还能支持 语义处理,包括转换为 RDF 三元组、语义推理以及基于本体术语完成 给定任务,这会使 Consumer 表现得更加 自主。TD 是 实例特定的(即描述单个 Thing, 而不是 Thing 类型),并且是 Thing 默认的外部文本 (Web)表示。MAY 存在 Thing 的其他表示,例如基于 HTML 的 用户界面、物理实体的图像, 甚至封闭系统中的非 Web 表示。 然而, 要被视为 Thing, 至少一个 TD 表示 MUST 可用。

6.1.1.2 Thing Model

Thing Model 可用于 描述一组 Thing 可用的共同能力, 例如产品线中的大量设备。在这种情况下, Thing Model 定义 产品线中所有设备的共同能力, 但省略特定设备专有的信息。

当某个实例的完整信息不可用或不必要时, 也可以使用 Thing Model。 例如,某些 IoT 生态系统会隐式地单独处理通信。 在这种情况下,完全详细的 Thing Description (例如带有通信元数据)并不是必要的。 在 Thing 生命周期阶段的开始,通信元数据也可能 不可用,因为新的实体尚未部署 (例如 IP 地址尚未知晓)。

Thing Model 用于 定义 Thing 的基本信息模型, 以应对此类场景。Thing Model 可以 视为 Thing Description 的模板,但其限制少于 [WOT-THING-DESCRIPTION] 中“TD Information Model”和 “Representation Format”各节所定义的限制。 通常 Thing Model 示例 不包含任何实例特定信息,例如 IP 地址等 协议特定数据。然而,与其使用具体 URL 等, Thing Model 允许 使用 URL 模板。

Thing Model
16 Thing Model 及其与 Thing Description 的关系

Thing Model 支持:

  • 多个 Thing 模型的入网和管理,例如由 云服务完成。
  • 尚未开发的设备/Thing 的仿真。
  • 跨不同制造商设备开发共同应用,这些设备共享共同的 Thing Model
  • 将多个模型组合成一个 Thing
  • 支持某个具体 Thing 的实现。

Thing Model 是对接口以及与 ThingPropertyActionEvent 的可能交互的 逻辑描述,但它不包含 Thing 实例特定信息,例如具体协议使用情况 (例如 IP 地址),甚至序列号和 GPS 位置。不过,Thing Model 允许包含例如 安全方案,如果这些方案适用于该模型所描述的 整个实例类别。它们可能有 URL (例如令牌服务器之类的 URL),这些 URL 可能需要被省略或参数化(使用模板), 尽管在许多情况下也可能给出这些 URL。

Thing Model 可以 以与 Thing Description 相同的基于 JSON 的格式 序列化,该格式也允许 JSON-LD 处理。请注意, Thing Model 不能像 Thing Description 实例那样被验证,因为并非 Thing Description 的所有必需术语都要求出现在 Thing Model 中。缺少 必需术语。

链接可以表示 Thing 之间、Thing 与 Thing Model 之间, 以及 Thing Model 之间的关系。链接不仅适用于层级化的 Thing,也适用于 Thing 与一般其他资源之间的关系。链接关系 类型表达 Thing 如何关联,例如开关控制灯, 或房间由运动传感器监测。与 Thing 相关的其他资源可以是 文档手册、备件目录、CAD 文件、图形 UI, 或 Web 上的任何其他文档。总体而言, Thing 之间的 Web 链接使 Web of Things 对人类和机器都可导航。通过提供 Thing Description Directory 可以进一步促进这一点, 该目录管理 Thing 目录,通常通过缓存它们的 TD 表示来实现。

总之,WoT Thing DescriptionWoT Thing Model MAY 链接到其他 ThingWoT Thing Model 以及 Web 上的其他资源,以形成 Web of Things。

linked things
17 链接的 Thing

Thing MUST 托管在带有软件栈的联网系统 组件上,以通过面向网络的接口实现交互, 即某个 ThingWoT Interface 一个示例 是运行在嵌入式设备上的 HTTP 服务器, 该设备带有与 Thing 抽象背后的物理实体交互的传感器和执行器。 不过,W3C WoT 并不强制规定 Thing 托管在何处;它可以直接位于 IoT 设备上、网关等 边缘设备上, 或位于云端。

一个典型的部署挑战是本地网络无法从互联网 访问的场景,通常是因为 IPv4 网络地址转换(NAT) 或防火墙设备。为解决这种情况, W3C WoT 允许在 ThingConsumer 之间使用 中介

6.1.3 中介

Intermediary 可以充当 Thing 的代理, 其中 Intermediary 具有与原始 Thing 类似的 WoT Thing Description,但它指向 Intermediary 提供的 WoT InterfaceIntermediary 也可以 为现有 Thing 增添额外能力,或由多个可用 Thing 组合出新的 Thing, 从而形成 Virtual Thing。对于 Consumer 而言,Intermediary 只是 另一种 Thing,因为 它们拥有 WoT Thing Description 并提供 WoT Interface。在像 Web 这样的分层系统 架构中 [REST], 它们可能与直接表示物理设备的 Thing 无法区分。

intermediary
18 中介

受限本地网络的另一种补救方法,是将 WoT Interface 绑定到一种协议,该协议从本地网络内的 Thing 建立到可公开访问的 Consumer 的连接。

W3C WoT 的概念适用于 IoT 应用相关的所有层级:设备层、 边缘层和云层。这促进了不同层级之间的 共同接口和 API,并支持各种集成模式, 如 Thing 到 Thing、Thing 到网关、Thing 到云、 网关到云,甚至云联合,即两个或多个服务提供商的 云计算环境面向 IoT 应用互连。19 概览了如何应用并组合上述 WoT 概念,以应对 WoT Use Cases and Requirements 文档中描述的用例 [WOT-USE-CASES-REQUIREMENTS]。

architecture overview
19 W3C WoT 的抽象架构

6.2 可供性

W3C WoT 的一个核心方面是提供 机器可读的元数据(即 WoT Thing Description)。理想情况下,此类元数据是 自描述的,使 Consumer 能够识别 Thing 提供了什么能力,以及 如何使用所提供的能力。这种 自描述性的关键在于 可供性概念。

可供性一词源于生态心理学, 但已被人机交互领域 [HCI] 采用,基于 Donald Norman 的定义:“‘Affordance’ 指事物的感知属性和实际属性, 主要是那些决定该事物可能如何使用的基本属性。” [NORMAN]

一个示例是带把手的门。门把手是一种 可供性,暗示门可以被打开。对于人类而言, 门把手通常也暗示门如何被打开; 美式旋钮暗示旋转,欧式杠杆把手暗示向下按压。

超媒体原则是 REST 架构风格的核心基础之一 [REST], 它要求 Web 上任何可用的信息片段都链接到其他 信息片段,使信息的消费者明确知道如何导航 Web 并控制 Web 应用。在这里,信息和控制的同时呈现 (以超链接形式提供)是一种机制, 它向 Web 客户端提供驱动 Web 应用的手段。 在此上下文中,可供性是对超链接的描述 (例如通过链接关系类型和链接目标属性), 用于提示 Web 客户端如何导航,以及可能如何对 所链接资源采取行动。因此,链接提供导航可供性。

从该超媒体原则出发,Web of Things 将 Interaction Affordance 定义为 Thing 的元数据,它向 Consumer 展示并描述可能的选择, 从而提示 Consumer 可以如何与 Thing 交互。一种通用的 Interaction Affordance 是导航,它通过跟随链接来激活, 从而使 Consumer 能够浏览 Web of Things。6.5 交互 模型W3C WoT 定义了另外三种 Interaction Affordance: PropertyActionEvent

总体而言,W3C WoT 的该定义 与 HCI 和交互设计师保持一致,他们创建物理 Thing;也与 REST 和微服务社区保持一致, 后者通常从事 Web 服务工作。

6.3 Web Thing

Web Thing 有四个值得关注的架构方面:其 行为、其 Interaction Affordance、其 安全 配置,以及其 Protocol Binding,如 20 所示。 Thing 的行为方面 包括自主行为以及 Interaction Affordance 的处理程序。Interaction Affordance 提供了一个模型,说明 Consumer 如何通过抽象操作与 Thing 交互,但不引用特定的网络 协议或数据编码。协议绑定 添加了所需的额外细节,用于将每个 Interaction Affordance 映射到某种协议的具体消息。一般来说, 可以使用不同的具体协议来支持 Interaction Affordance 的不同子集,即使是在单个 Thing 内也是如此。Thing 的 安全 配置方面表示用于控制对 Interaction Affordance 的访问以及相关 Public Security MetadataPrivate Security Data 管理的机制。

web thing
20 Thing 的架构方面

6.4 生命周期

在应用 WoT 架构原则的部署中, 不同实体相互交互,并在它们之间交换信息。 WoT 部署的元素包括 设备中介consumer目录。每个元素都有自己的(内在) Thing 生命周期。这些元素 构成一个系统,其中整个系统具有一个 系统生命周期,即系统具有若干状态, 并通过某些状态转换而进入可运行状态。 这意味着设备会经历其生命周期以进入 可运行状态,并且设备必须在使用之前被其他实体知晓。

以下各节描述系统生命周期Thing 生命周期。它们包含示例流程,用于说明 部署中 Thing 的不同状态和阶段。本节的目的之一 是澄清术语,并确保 Web Thing 的实现者考虑共同生命周期模型的概念。

这些图左侧的参与者可以理解为设备所有者 或制造商。右侧的参与者是最终用户, 他在应用中使用该设备。

6.4.1 简单系统生命周期

以下时序图展示了一个由两个直接通信 设备组成的系统的流程示例。

在此场景中,设备可被使用之前,必须先 引导并入网到 consumer。在入网操作中, consumer 和设备相互认识——这既可以通过 发现过程完成,也可以通过注册操作完成, 在注册操作中 consumer 注册到设备, 或反之亦然。

在激活步骤之后(该步骤可能由若干 操作组成,例如配置供给、配置等), 设备consumer 处于常规 运行模式。当该设备在此场景中不再需要时, 它将从 consumer 下线。在此操作之后, 它可以被退役并销毁。

简单系统生命周期
21 简单 系统生命周期

6.4.2 带注册的系统生命周期

以下时序图展示了一个包含三个实体的 系统的流程示例:一个设备、一个 consumer 和一个目录。

该流程与上一节中的流程非常相似, 但额外包含一个 目录 实体,该实体维护设备目录。在 WoT 中, 该目录是一组 thing description。 设备像前一场景一样完成引导之后, 会注册到目录。

目录充当左侧参与者和 consumer 侧参与者之间的 信息代理。这将设备所有者与 consumer 解耦, 其中发现过程充当中间人,以支持 consumer 进行发现。

简单系统生命周期
22 带 注册的系统生命周期

6.4.3 Thing 生命周期

设备的引导和配置供给是所有 IoT 协议 套件中设置设备的重要组成部分。

使用 WoT 对设备进行配置供给的主要场景如下:

  • 设备已经在给定部署中完成配置供给并运行。 使其能够与 WoT 配合工作。
  • 设备已经在给定部署中完成配置供给并运行。 出于管理目的,在 Thing Description描述设备生命周期阶段。
  • 直接使用 WoT 引导并配置供给设备, 以使其能够为 WoT 运行。

IoT 协议套件中使用了各种配置供给方案。 本节文本基于 提案和研究, 比较各种配置供给方案,例如 OCF、 OneM2M、Lightweight OneM2M、Thing to Thing Research Group (T2TRG)、OPC-UA/Anima 等。

本节呈现的配置供给模型类似于 T2TRG 配置供给模型。

跨各种 IoT 协议套件的设备引导和配置供给的 共同元素如下:

  • 建立信任链,例如安全存储、 密钥、证书。这可能涉及各种解决方案, 例如制造商证书、带外密钥 配置供给、连接到配置供给服务器等。
  • 使用配置供给工具或服务建立设备所有权。 例如,设备可以由网络实体、网络服务、 服务提供商或最终用户拥有。
  • 为设备配置供给租户或不同级别用户的 访问控制列表。
  • 为设备配置供给其所使用服务的访问权限。
  • 使用已用服务和所暴露服务配置设备。
  • 在设备中配置供给并配置 WoT runtime。
  • 更新配置或配置供给数据。
  • 退役用户、应用、服务或配置供给。
  • 将设备恢复到配置供给之前的初始状态 (例如恢复出厂设置)。
  • 退役并不可逆地销毁设备。

考虑这些配置供给流程,一般来说, 设备可以处于以下状态之一:

  • Manufactured:设备已刷入 软件映像。如果它针对某个协议套件获得认证, 则可能被允许或能够只执行有限操作, 例如某种引导过程。
  • Bootstrapped:设备已建立 身份和所有权,准备好进行下一步配置供给, 例如配置、服务配置供给等。该状态在 各种协议套件中有不同名称,例如在 OCF 中称为 onboarded,在 T2TRG、OPC-UA、Anima、LwM2M 中称为 bootstrapped,在 OneM2M 中称为 initial provisioning 等。
  • Operational:设备已完成 配置供给和配置,并在正常模式下工作。在不离开该状态的情况下 可以进行某些配置。这可能包括安装和卸载 应用、重新配置设置等。请注意,设备可以在其自身的 原生协议套件中运行并由 WoT 网关管理, 也可以为 WoT 运行(这可能是设备上的一个应用), 或者可以为 Wot 运行并直接为 WoT 完成配置供给。
  • Maintenance:设备运行 状态被中断,以更新其软件和/或配置。
  • Destroyed:设备已擦除 所有数据和软件。硬件销毁功能可能已被激活。 设备可能被物理销毁,并且不再使用。 该状态与设备管理目的相关。它在 OneM2M、LwM2M、 OCF、T2TRG 中不存在,在 OPC-UA 和 Anima 中称为 End-of-life
设备生命周期
23 设备 生命周期

生命周期状态之间的典型转换如下:

  • Bootstrapping(或 onboarding): 为设备配置供给身份,建立信任链, 例如安全存储、密钥、证书。这可能涉及 各种解决方案,例如制造商证书、带外密钥 配置供给、连接到配置供给服务器 (相当常见的场景)。当直接配置供给到 WoT 时,设备可能在此阶段注册到 Thing Description Directory。在此过程期间或之后, 某些协议套件中可能还需要以不同运行模式重启。
  • Provisioning、configuration、 commissioning:为设备配置供给其运行所需的 所有资源(服务、应用、访问控制、数据库等), 并将这些资源配置为可运行状态。此外, 设备还可能在给定环境中进行 commissioning。 这些过程可能涉及与服务器通信,例如 Thing Description DirectoryDiscovery 服务。
  • Settings:设备保持在 Operational 状态,但可以更新系统、 服务或应用设置。在某些情况下,这可能包括 安装和移除应用。
  • Update:设备停止正常 运行,以在 Maintenance 状态中进行更新, 类似于配置供给期间的更新。这可能包括安装新软件, 或移除、安装或更新资源及其配置。 也可能包括重新 commissioning。返回到 Operational 状态可以通过使用更新后的资源恢复 运行来实现,也可能需要重启服务或重启 设备。
  • Re-bootstrapping:设备 身份、所有者和相关资源可以按照 Bootstrapping 过程中所述方式进行更改。
  • Factory Reset:设备 恢复到出厂默认状态。
  • Destroy:设备被擦除 所有数据、软件,并可能被物理销毁。

6.5 交互模型

最初,Web 资源通常表示万维网上的一个文档, 可由 Web 客户端简单获取。随着 Web 服务的引入, 资源成为更通用的交互实体,能够实现 任何类型的行为。这种非常高层次的抽象 使得由于多样的交互可能性而难以在 应用和资源之间提供松耦合。因此,在撰写本文时, 典型 API 描述由从应用意图到资源地址、方法、 请求载荷结构、响应载荷结构以及预期错误的 静态映射组成。这会在 Web 客户端和 Web 服务之间施加强耦合。

W3C WoT 的 Interaction Model 引入了一种中间抽象,用于形式化 从应用意图到具体协议操作的映射,并且也缩小了 Interaction Affordance 可以如何建模的可能性。

除 导航可供性(即 Web 链接)之外, Thing MAY 提供由本规范定义的另外三种 Interaction AffordancePropertyActionEvent 这种窄腰结构 允许解耦 ConsumerThing, 同时这四种 Interaction Affordance 仍能够对 IoT 设备和服务中几乎所有 交互类型进行建模。

6.5.1 Property

Property 是一种 Interaction Affordance,用于暴露 Thing 的状态。 由 Property 暴露的状态可以 被检索(读取)。可选地,Property 暴露的状态可以被 更新(写入)。Thing 可以选择通过在 变化之后推送新状态,使 Property 可观察 (参见 Observing Resources [RFC7641])。 在只读状态的情况下,可以使用 Action 来更新状态。

如果数据格式未由所用 Protocol Binding 完全指定(例如通过 媒体类型),Property MAY 包含一个用于暴露状态的 数据 模式

Property 的示例包括传感器值(只读)、 有状态执行器(读写)、配置参数 (读写)、Thing 状态(只读或读写), 或计算结果(只读)。

6.5.2 Action

Action 是一种 Interaction Affordance,允许调用 Thing 的函数。 Action MAY 操纵未直接暴露的状态 (参见 Property)、一次操纵多个 Property,或基于内部逻辑(例如切换) 操纵 Property。 调用 Action MAY 还会在 Thing 上触发一个过程, 该过程会随时间操纵状态(包括通过执行器操纵 物理状态)。

如果数据格式未由所用 Protocol Binding 完全指定(例如通过 媒体类型),Action MAY 包含 用于输入参数和输出结果的 数据 模式

Action 的一些示例包括同时设置多个 Property、随时间改变 Property (例如使灯的亮度渐变(调光)),或通过 不应披露的过程(例如专有控制循环算法)进行改变, 或调用持续时间较长的过程,例如打印文档。

6.5.3 Event

Event 是一种 Interaction Affordance,它描述一个事件源,该事件源将 数据从 Thing 异步推送到 Consumer。这里传达的不是状态, 而是状态转换(即事件)。 Event MAY 由未作为 Property 暴露的条件触发。

如果数据未由所用 Protocol Binding 完全指定(例如通过媒体类型), Event MAY 包含用于 事件数据和订阅控制消息(例如用于通过 Webhook 订阅的回调 URI)的 数据模式

Event 的示例包括离散事件(例如警报),或定期发送的 时间序列样本。

6.6 超媒体控件

在 Web 上,可供性是信息和控件的同时呈现, 使得信息成为用户获得选择的可供性。 对人类而言,信息通常是描述或装饰超链接的 文本或图像。控件是 Web 链接,至少包括 目标资源的 URI,Web 浏览器可解引用它 (即可以跟随该链接)。但是,当 Web 链接进一步由 关系类型和一组目标属性描述时,机器也可以以 有意义的方式跟随链接。超媒体 控件是对如何激活可供性的机器可读描述。 超媒体 控件通常源自 Web 服务器,并在 Web 客户端与 服务器交互时以带内方式被发现。通过这种方式, Web 服务器可以根据客户端的当前状态以及授权等 其他因素,动态地引导客户端通过 Web 应用。 这与需要预先安装或硬编码到客户端中的带外接口描述 (例如 RPC、WS-* Web 服务、具有固定 URI-方法-响应 定义的 HTTP 服务)相对。

W3C WoT 使用两类 超媒体控件Web 链接 [RFC8288],即用于导航 Web 的成熟 控件;以及作为更强大控件的 Web 表单, 用于支持任何类型的操作。链接已经在其他 IoT 标准和 IoT 平台中使用,例如 CoRE Link Format [RFC6690]、 OMA LWM2M [LWM2M]、 和 OCF [OCF]。Form 是一个 新概念,除 W3C WoT 外,也由 IETF 定义的 Constrained RESTful Application Language (CoRAL) [CoRAL] 引入。

6.6.2 表单

表单使 Consumer(或更广义的 Web 客户端) 能够执行超出解引用 URI 的操作 (例如操纵 Thing 的状态)。 Consumer 通过 填写表单并将其提交到 提交目标来做到这一点。这通常需要比链接所能提供的 更详细的(请求)消息内容信息 (例如方法、头字段或其他协议选项)。 表单可视为请求模板,其中提供者根据 其自身接口和状态预先填充部分信息, 并留下部分空白供 Consumer(或一般 Web 客户端) 填写。

W3C WoT 将表单定义为新的 超媒体控件。 请注意,CoRAL 中的定义实际上相同, 因而兼容 [CoRAL]。 在 CoRAL 中,表单由以下部分组成:

  • 表单上下文,
  • 操作类型,
  • 提交目标,
  • 请求方法,以及
  • 可选的表单字段。

表单可视为这样一条语句:“要对 form context 执行 operation type 操作,请向 submission target 发出 request method 请求”,其中 可选的表单字段可以进一步描述所需的 请求。

表单 上下文和提交目标 MUST 都是 Internationalized Resource Identifier(IRI)[RFC3987]。 不过,在常见情况下,它们也将是 URI [RFC3986], 因为许多协议(如 HTTP)不支持 IRI。

表单上下文和提交目标 MAY 指向同一资源或 不同资源,其中提交目标资源为该上下文实现 操作。

操作类型标识操作的语义。 操作类型以类似于链接关系类型的方式表示。

请求方法 MUST 标识由提交目标 URI 方案所识别协议的标准方法集合中的一种方法。

表单字段是可选的,并且 MAY 进一步指定给定操作的预期 请求消息。 请注意,这并不限于载荷, 也可能影响协议头。表单字段 MAY 取决于提交目标所用的协议, 如 URI 方案中所指定。 示例包括 HTTP 头字段、CoAP 选项、 协议无关的媒体类型 [RFC2046] 及其参数(即完整内容类型),用于 请求载荷,或关于预期响应的信息。

截至本规范,众所周知的 操作类型是由 WoT Interaction Model 产生的一组固定集合。 其他规范可以定义更多众所周知的 操作类型,这些类型对其各自的 文档格式或表单序列化有效。该规范的后续版本 或另一规范未来可能建立 IANA 注册表, 以支持扩展以及可应用于 WoT 规范之外的 更通用 Web 表单模型。

6.7 协议绑定

Protocol Binding 是 从 Interaction Affordance 到某一特定协议的具体消息的映射, 例如 HTTP [RFC7231]、 CoAP [RFC7252]、 或 MQTT [MQTT]。它告知 Consumer 如何通过 面向网络的接口激活 Interaction AffordanceProtocol Binding 遵循 REST 的统一接口约束 [REST] 以支持互操作性。因此,并非所有通信协议都适合 为 W3C WoT 实现 Protocol Binding; 相关需求在以下断言中给出。

6.2 可供性中给出的门示例中, Protocol Binding 对应于旋钮与杠杆层级上的门把手, 它提示门可以如何被打开。

6.7.1 超媒体驱动

Interaction Affordance MUST 包含一个或多个 Protocol Binding。 Protocol Binding MUST 序列化为 超媒体 控件,以便对如何激活 Interaction Affordance 进行自描述。 超媒体 控件的权威来源可以是 Thing 本身,即在运行时生成 TD 文档 (基于其当前状态,并包含其 IP 地址等网络参数), 或从内存中提供该文档,仅插入当前网络参数。 权威来源也可以是外部实体,该实体对 Thing 具有完整且最新的知识, 包括其网络参数和内部结构(例如软件栈)。 这使得 ThingConsumer 之间可以松耦合, 从而允许独立的生命周期和演进。如果有缓存元数据可用于确定 新鲜度,则 超媒体控件 MAY 缓存在 Thing 之外并用于离线 处理。

6.7.2 URI

超媒体控件依赖 URI [RFC3986] 来识别链接和提交目标。由此,URI 方案(直到“:”的第一个组成部分)标识用于与 Thing 的 Interaction Affordance 交互的通信协议。 W3C WoT 将这些 协议称为 传输 协议

6.8 媒体类型

激活 Interaction Affordance 时交换的所有数据(又称内容) MUST 在 Protocol Binding 中由 媒体类型 [RFC2046] 标识。 媒体类型是用于标识表示格式的标签, 例如用于 JSON 的 application/json [RFC8259] 或用于 CBOR 的 application/cbor [RFC7049]。 它们由 IANA 管理。

某些媒体类型可能需要额外参数,以完整指定所使用的 表示格式。示例包括 text/plain; charset=utf-8application/ld+json; profile="http://www.w3.org/ns/json-ld#compacted"。在描述要发送到 Thing 的数据时, 尤其需要考虑这一点。数据上也可能存在 标准化转换,例如内容编码 [RFC7231]。 Protocol Binding MAY 具有额外信息,用于比单独的媒体类型 更详细地指定表示格式。

请注意,许多媒体类型只标识一种通用 序列化格式,而不会为其元素提供进一步语义 (例如 XML、JSON、CBOR)。因此, 结构化数据类型的 Interaction Affordance SHOULD数据模式关联, 以便为交换的数据提供更详细的语法元数据。 更多细节在 WoT Thing Description 规范中进一步描述 [WOT-THING-DESCRIPTION]。

6.9 国际化

Web of Things 支持可互操作的国际化, 并允许使用和处理多语言数据,例如用于 用户界面的数据。多语言 Web of Things 实现的设计和实现由 Thing Description [WOT-THING-DESCRIPTION] 规范指导。它描述了如何基于 [JSON-LD] 和 [BCP47] 等既有标准, 应用不同语言的人类可读文本。

6.10 WoT 系统组件及其 互连性

6.1 基本 概念以抽象 WoT 架构组件的形式描述了 WoT 架构, 例如 ThingConsumerIntermediary。当这些 组件被实现为软件栈以在 WoT 架构中承担 特定角色时,这些软件栈称为 Servient。基于 WoT 架构的系统 涉及 Servient,它们 相互通信以实现系统目标。

本节使用系统配置图来说明 Servient 如何协同工作, 以构建基于 WoT 架构的系统。

Thing 可以由 Servient 实现。在 Thing 中,Servient 软件栈 包含一个称为 Exposed ThingThing 表示,并使其 WoT Interface 可供该 ThingConsumer 使用。该 Exposed Thing 可以 由 Servient 上的其他软件组件 (例如应用)使用,以实现该 Thing 的行为。

servient as a thing
24 作为 Thing 的 Servient

另一方面,Consumer 总是 由 Servient 实现,因为它们必须能够 处理 Thing Description(TD) 格式,并且必须具有可通过 TD 中所含 Protocol Binding 信息配置的协议栈。

Consumer 中,Servient 软件栈提供 一个称为 Consumed ThingThing 表示, 并使其可供运行在 Servient 上且需要 处理 TD 以与 Thing 交互的应用使用。

servient as a consumer
25 作为 Consumer 的 Servient

Servient 软件栈中的 Consumed Thing 实例 用于将协议层复杂性与应用分离。 它代表应用与 Exposed Thing 通信。

类似地,Intermediary 也是由 Servient 实现的另一种 WoT 架构组件。Intermediary 位于某个 Thing 与 其 Consumer 之间,同时承担 Consumer(相对于 Thing)和 Thing (相对于 Consumer)的角色。在 Intermediary 中,Servient 软件栈 同时包含 ConsumerConsumed Thing) 和 ThingExposed Thing)的表示。

servient as an intermediary
26 作为 Intermediary 的 Servient

6.10.1 直接通信

27 展示了 ThingConsumer 之间的直接通信; 前者通过 Thing Description 暴露 Interaction Affordance, 后者借助 Interaction Affordance 使用该 Thing。 当两个 Servient 使用 相同的网络协议,并且彼此可访问时,适用直接通信。

high-level architecture of consumer and thing
27 Consumer 和 Thing 的 高层架构

Exposed ThingThing 抽象的软件表示,用于提供 由该 Thing 提供的 Interaction AffordanceWoT Interface

Consumed Thing 是 被 Consumer 消费的远程 Thing 的软件表示, 作为应用访问远程 Thing 的接口。 Consumer 可以通过解析并处理 TD 文档来生成 Consumed Thing 实例。 ConsumerThing 之间的交互由 Consumed ThingExposed Thing 通过它们之间的直接网络连接 交换消息来执行。

6.10.2 间接通信

28 中,ConsumerThing 通过 Intermediary 相互连接。如果 Servient 使用不同 协议,或者它们位于需要身份验证并提供访问控制的 不同网络(例如防火墙)上,则需要 Intermediary

high-level architecture with intermediary
28 带 Intermediary 的高层架构

Intermediary 结合了 Exposed ThingConsumed Thing 功能。Intermediary 的功能包括在 ConsumerThing 之间中继 Interaction Affordance 的消息,可选地缓存该 Thing 的 数据以加快响应,并在 Thing 的功能由 Intermediary 扩展时转换通信。在 Intermediary 中,Consumed Thing 创建某个 ThingExposed Thing 的代理对象, 而 Consumer 可以通过其自身的 Consumed Thing 访问该 代理对象(即 IntermediaryExposed Thing)。

ConsumerIntermediary 可以 使用不同于 IntermediaryThing 之间的协议进行通信。例如, Intermediary 可以在使用 CoAP 的 Thing 与使用 HTTP 的 Consumer 应用之间提供桥接。

即使 IntermediaryThing 之间使用多个不同协议, Consumer 仍可以 通过 Intermediary 使用单一协议与这些 Thing 间接通信。身份验证也是如此。 Consumed Thing of a Consumer 只需要使用单一 安全机制与 IntermediaryExposed Thing 进行身份验证,而 Intermediary 可能需要多个安全机制来与不同 Thing 进行身份验证。

通常,Intermediary 会 基于来源 ThingThing Description, 为其代理对象生成 Thing Description。 根据用例的需求,代理对象的 TD 可以使用与 原始 Thing 的 TD 相同的标识符, 也可以分配一个新的标识符。如有必要,由 Intermediary 生成的 TD MAY 包含用于其他 通信协议的接口。

7. WoT 构建块

本节为非规范性内容。

Web of Things(WoT)构建块允许实现 符合抽象 WoT 架构的系统。这些构建块的具体细节 在单独的规范中定义;本节提供 概述和摘要。

WoT 构建块支持 Thing 的每个架构方面,这些方面在 6.3 Web Thing 中 讨论,并在 20 中描绘。各个构建块在 29 中以抽象 Thing 的上下文展示。这是一个抽象视图, 并不表示任何特定实现;相反,它说明了构建块和 Thing 的主要架构方面之间的关系。在该图中,WoT 构建块以黑色轮廓突出显示。 WoT Thing Description 是一个关键构建块,它提供描述 Thing 及其网络接口的元数据。 安全作为横切关注点,被分离为公共组件和受保护的 私有组件。 WoT Scripting API 是可选的,而 Binding Templates 是 资料性的。WoT Discovery 构建块 定义了分发 Thing Description 的机制;Thing 可以 直接提供 Thing Description, 或者由 Thing Description Directory 服务提供。

wot 构建块
29 WoT 构建块与 Thing 架构方面的关系。

在以下各节中,我们将提供关于每个 WoT 构建块的 额外信息:WoT Thing DescriptionWoT Discovery 机制、 WoT Binding Templates,以及 WoT Scripting API。 虽然安全是一个横切关注点,但也可以被视为 一个额外构建块。

7.1 WoT Thing Description

WoT Thing Description(TD)规范 [WOT-THING-DESCRIPTION] 定义了一个基于语义词汇表的信息模型,以及一个 基于 JSON 的序列化表示TD 以既可供人类阅读又可供机器读取的方式,为 Thing 提供 丰富的元数据。TD 的信息模型和表示格式都与 Linked Data [LINKED-DATA] 对齐,因此 除了原始 JSON 处理之外,实现还可以选择 使用 JSON-LD [JSON-LD11] 和图数据库,以 支持对元数据进行强大的语义处理。

Thing Description 使用名称、ID、描述等通用元数据描述 Thing 实例,并且还可以通过指向相关 Thing 或 其他文档的链接提供关系元数据。 TD 还包含基于 6.5 交互 模型中定义的交互模型的 Interaction Affordance 元数据; Public Security Metadata;以及定义 Protocol Binding 的通信元数据。 TD 可以被视为 Thing 的 index.html,因为它提供了 一个入口点,用于了解由 Thing 提供的服务和相关资源, 二者都使用 超媒体 控件进行描述。

为了实现语义互操作性,TD 可以使用 领域特定 词汇表,并为此提供了明确的扩展点。 不过,开发任何特定的 领域特定 词汇表 目前超出了 W3C WoT 标准化活动的范围。

三个可能有用的外部 IoT 词汇表示例是 SAREF [SAREF]、 Schema Extensions for IoT [IOT-SCHEMA-ORG]、 以及 W3C Semantic Sensor Network ontology [VOCAB-SSN]。 在 TD 中使用此类外部词汇表是可选的。未来 可能会开发并与 TD 一起使用更多 领域特定 词汇表

总体而言,WoT Thing Description 构建块通过两种方式促进互操作性: 第一,TD 支持 Web of Things 中的机器到机器通信。 第二,TD 可以作为一种通用、 统一的格式,供开发者记录和检索创建应用所需的 全部细节,这些应用能够访问 IoT 设备并使用其数据。

TD 必须被其他系统和设备知晓或可访问,才会有用。 下文将更详细描述的 WoT Discovery 构建块定义了一些机制,可以针对 自描述设备,以及那些由单独服务提供 TD 更为合适的情况 (棕地设备、受限设备、使用专用协议的设备、 睡眠设备等)实现这一点。

7.2 Thing Model

Thing ModelThing Description 实例定义了基于模板的模型。Thing Model 不含 实例特定信息,并且只包含部分基于通信和 安全的信息。这类信息会通过创建 Thing Description 实例化来补充。

Thing Model 主要描述 PropertyActionEvent 以及通用元数据, 这些内容随后会在所有已实例化的 Thing Description 中可用。这一范式可与 面向对象编程中的抽象类或接口定义(~Thing Model) 用于创建对象(~Thing Description)相比较。此类 Thing Model 与例如 IoT 设备的大规模生产、 云服务中的入网场景,或仿真尚未开发的 Device 相关。

7.3 Profile

目前,WoT Profile 规范 仅作为工作草案发布。

WoT Profile 规范 [WOT-PROFILE] 定义了 支持 Thing 与设备之间开箱即用互操作性的 Profile。开箱即用互操作性意味着设备可以集成到 各种应用场景中,而无需深层适配。 通常只需要少量配置操作 (例如输入网络密钥或 IP 地址),即可在 某个场景中使用设备。这些操作可以由 任何人完成,而无需专门培训。

7.3.1 Profile 编写方法

Profile 是一组约束和规则, 它们提供应用于 WoT Thing Description 规范的额外语义保证。这些约束通过对 WoT Thing Description 的各个方面定义附加规则, 定义了有效 WoT Thing Description 的一个子集。

约束对象 理由 示例
Thing Description 类的词汇表 有保证的元数据字段集合 使特定词汇术语成为必需项,移除 其他项
类关系 无歧义的结构 有限基数,例如每个交互可供性中每个 操作只允许一个 form。
词汇术语的值 简化处理 限制每个字符串的字符长度。凡是规范允许字符串或 字符串数组的地方,总是使用数组。
数据模式 简化处理 不允许任意嵌套对象或数组的 数组。
安全 降低实现工作量 仅使用受限的一组安全 机制。
协议绑定 有保证的协议语义 受限的协议和协议特性, 示例:将 http 动词(GET/PUT)预定义映射 到操作动词,其他协议也有类似约束。

这些约束和规则分为两类:

  • 对数据模型的约束。
  • 对协议绑定的约束。

这两个类别彼此正交,即符合 Profile 的 信息模型可以映射到不同协议。每种协议的协议绑定 可以包含额外的(协议特定)约束。

Profile 不是排他的,也就是说,一个 Thing 可以符合 多个 Profile。Profile 可以彼此叠加构建 或重叠,扩展 Profile 可以基于 基线 Profile 构建。

WoT Profile
30 Profile 架构

7.4 WoT Discovery

WoT Discovery 规范 [WOT-DISCOVERY] 定义了通过网络分发和访问 WoT Thing Description 的机制。这些机制旨在 简化对 Thing 和服务的访问,并支持 它们的集成。WoT Discovery 机制 不受局域网边界限制,也可以支持远程发现。 它们还被设计为现有搜索和发现标准的扩展。

WoT Discovery 构建块的 一个主要设计需求,是保护 WoT 数据和元数据的 Consumer 与提供者双方的安全和隐私。特别是, WoT Discovery 机制不仅被设计用于保护和 控制对 WoT Thing Description 的访问,还被设计用于保护关于此类 数据和元数据的查询,并避免直接或可推断元数据的 意外分发。

为了兼容现有发现技术,同时提供强隐私和安全, WoT Discovery 使用一个 两阶段过程。在第一阶段,使用若干首次接触机制之一 进行“引入”。 在第二阶段,即“探索”阶段,实际 TD 会被提供, 但只有在合适的身份验证和授权之后才会提供。

提供了两种探索机制,既支持单个 TD 的 分发,也支持多个 TD 的目录服务:

鼓励使用这些机制,但并非强制。

7.4.1 引入机制

Introduction 机制并不旨在提供强安全或隐私保证, 这允许使用多种现有的、相对弱安全性的 发现机制,只要它们满足以下 要求:

  • 任何用于 WoT Discoveryintroduction 机制不得提供元数据,而应仅产生一个或多个 不透明 URL;当且仅当用户可以进行身份验证并 具有适当授权(访问权限)时,才可在这些 URL 处 访问元数据。
  • Introduction URL 本身不得包含任何元数据,例如人类可读的设备类型 或名称。建议使用随机生成的 URL。

7.4.2 探索机制

在完成合适的身份验证和授权过程 (基于用于保护 Web 服务的现有机制,以及现有的 协议安全协商机制)之后, WoT Discovery 定义了一组第二阶段的 “探索”机制, 用于提供对实际元数据的访问。

第一个也是最简单的 探索机制 定义了如何直接从设备自身获取 TD。 这支持临时的点对点发现。不过,在许多情况下 (包括但不限于管理大量 TD 的集合),另一种 探索 机制,即 WoT Thing Description DirectoryTDD)服务, 更为合适。

TDD 提供 复杂的(但受保护的)查询机制,用于探索和检索 WoT 元数据。TDD 还 提供变更通知机制,以支持向已授权 Consumer 安全分发 TD 更新。 任何 WoT Discovery “探索”实现都必须只在完成适当的最佳实践 身份验证和授权之后提供元数据和 TD。 适用于不同情形的身份验证和授权最佳实践安全机制 在 [WOT-SECURITY] 中讨论。用于管理访问控制和密钥的合适机制 也在 [SOLID] 中讨论。

TDD 不只是 一种便利特性,而是在若干 WoT 用例中必不可少。 当 Thing 具有资源限制(例如有限的内存空间、有限的电力, 参见 设备 类别),使用需要由中介转换的专用协议 (在这种情况下,由 TDD 提供的 TD 将描述中介所支持的 转换后网络接口),或者需要将现有设备 (通常称为“棕地”设备)作为 Web of Things 的一部分使用, 但该设备本身难以修改以自托管 TD 时, 使用 TDD 是合适的。

TD 可以由 设备本身或外部代理注册到 TDD。 对于棕地设备,通常需要使用外部 代理。

[WOT-DISCOVERY] 中定义的 Discovery 机制 不是强制性的,但它们被设计用于满足上述 需求,并且其使用将增强互操作性和可用性。

7.5 WoT Binding Templates

IoT 使用多种协议访问设备, 因为没有一种协议适用于所有上下文。 因此,Web of Things 的一个核心挑战是支持 与众多不同的 IoT 平台 (例如 OMA LWM2M、OPC UA、oneM2M)以及 不遵循任何特定标准、但通过合适网络协议提供合格接口的 设备进行交互。WoT 通过 Protocol Binding 来应对这种多样性,这些绑定必须满足若干约束 (见 6.7 协议绑定)。

Binding Templates 处理这样一个方面:应用客户端(即 Consumer)可以使用 Thing Description 提取协议(例如关于 HTTP、MQTT、 Modbus 等)、载荷格式(二进制、JSON、CBOR、EXI 等)及其 在 IoT 平台上下文中(例如 ECHONET、OPC UA)使用方式的 特定元数据。该元数据可以传递给网络实现接口,以便 建立与 Thing 的交互,并对载荷消息进行 序列化/反序列化。在该上下文中, Binding Templates 包括三类绑定:Protocol binding、Payload format binding 和 Platform binding。

非规范性的 WoT Binding Templates 规范 [WOT-BINDING-TEMPLATES] 提供了一组蓝图集合,用于指导如何与使用不同 传输协议内容 类型,或不同 IoT 平台或标准 (例如 OCF、oneM2M、OMA LWM2M、OPC UA)的 不同 Thing 交互;这些平台或标准使用 传输协议内容 类型的特定组合。在描述特定 IoT 设备或 平台时,可以使用相应的 Binding Template 来查找需要在 Thing Description 中提供的通信元数据, 以支持该平台。

binding templates
31 从 Binding Templates 到 Protocol Binding

31 展示了如何使用 Binding Templates。 基于协议、媒体类型或平台绑定,可以创建 TD。 正在处理 TDConsumer 通过包含相应的 协议栈、媒体类型编码器/解码器或平台栈,并根据 TD 中给出的信息 (例如消息的序列化格式和头选项)配置该栈 (或其消息),来实现 TD 中存在的所需 Binding Template

Binding Templates 跨越三个维度:

7.6 WoT Scripting API

WoT Scripting APIW3C WoT 的一个可选“便利性”构建块, 通过提供基于 ECMAScript 的 API [ECMAScript], 类似于 Web 浏览器 API,从而简化 IoT 应用开发。 通过将脚本运行时系统集成到 WoT Runtime 中, WoT Scripting API 支持使用可移植应用脚本来定义 ThingConsumerIntermediary 的行为。

传统上,IoT 设备逻辑是在固件中实现的, 这会带来类似嵌入式开发的生产力约束, 包括相对复杂的更新过程。相比之下, WoT Scripting API 支持通过在 IoT 应用运行时系统中执行的可复用脚本来实现 设备逻辑。它类似于 Web 浏览器,旨在提高 生产力并降低集成成本。此外,标准化 API 支持 应用模块的可移植性,例如将计算密集型逻辑从设备 移动到本地网关,或将时间关键型逻辑从云端 下移到网关或边缘节点。

非规范性的 WoT Scripting API 规范 [WOT-SCRIPTING-API] 定义了编程接口的结构和算法,使脚本可以发现、 消费并暴露 WoT Thing DescriptionWoT Scripting API 的运行时系统会实例化本地对象,这些对象作为 指向其他 Thing 及其 Interaction AffordancePropertyActionEvent)的接口。 它还允许脚本暴露 Thing, 也就是说,定义并实现 Interaction Affordance,并发布 Thing Description

7.7 WoT 安全与隐私 指南

安全是一个横切关注点,应在系统设计的所有方面 加以考虑。在 WoT 架构中,安全由某些明确特性支持, 例如支持在 TD 中使用 Public Security Metadata,以及在 WoT Scripting API 的设计中进行关注点分离。每个构建块的规范 也包括对该构建块特定安全和隐私考虑的讨论。另一份 非规范性规范,即 WoT Security and Privacy Guidelines [WOT-SECURITY], 提供额外的横切安全和隐私指导。

8. 抽象 Servient 架构

本节为非规范性内容。

6.10 WoT 系统组件 及其互连性中所定义,Servient 是一种实现上一节所述 WoT 构建块的软件栈。Servient 可以托管并暴露 Thing, 和/或消费 Thing (即托管 Consumer)。根据 Protocol BindingServient 可以同时承担 server 和 client 角色,因此采用了这个混成命名。

上一节描述了 WoT 构建块在概念上如何 相互关联,以及它们如何对应于 抽象 WoT 架构(见 6. 抽象 WoT 系统架构)。在 实现这些概念时,需要一个更详细的视图, 将某些技术方面纳入考虑。本节 描述 Servient 实现的详细架构。

32 展示了一个使用(可选的) WoT Scripting API 构建块的 Servient 实现。 在这里,WoT Runtime 同时也是一个 Scripting Runtime 系统,它除了管理 WoT 特定 方面之外,还解释并执行应用脚本。 支持 WoT Scripting APIServient 通常运行在功能较强的设备、边缘节点 或云端(参见 设备 类别)。WoT 架构并不将 WoT Runtime 面向应用的 API 限定为 JavaScript/ECMAScript。其他运行时系统也可以用于 实现 Servient

8.8.1 原生 WoT API 介绍了一种 不使用 WoT Scripting API 构建块的替代 Servient 实现。 WoT Runtime 可以为其面向应用的 API 使用任何 编程语言。通常,它是 Servient 软件栈的原生语言,例如嵌入式 Servient 使用 C/C++,或基于云的 Servient 使用 Java。它也可以是 Lua 等替代脚本语言, 以便将应用脚本的收益与低资源 消耗结合起来。

架构实现
32 使用 WoT Scripting API 的 Servient 实现

32 中所示每个模块的角色和功能 将在以下各节中解释。

8.1 行为实现

行为定义了 Thing 的整体应用逻辑,它具有若干方面:

它包括 Thing自主行为 (例如传感器采样或执行器控制回路)、Interaction Affordance处理程序 (即可供性被激活时采取的具体动作)、 Consumer 行为(例如 控制 Thing 或 实现 mashup),以及 Intermediary 行为 (例如简单代理某个 Thing 或组合虚拟 实体)。Servient 内部的行为实现定义了哪些 ThingConsumerIntermediary 被托管在该组件上。

32 描绘了实现可选 WoT Scripting API 构建块的 Servient,其中由 JavaScript [ECMAScript] 编写的可移植应用脚本定义行为。这些脚本由作为 WoT Runtime 一部分的脚本运行时 系统执行(在提供 WoT Scripting API 或 任何其他基于脚本的 API 时)。它们是可移植的, 因为它们针对通用的 WoT Scripting API 定义编写,因此可以由任何具备该构建块的 Servient 执行。 这使得可以在系统组件之间移动应用逻辑,例如将 Consumer 从云端移动到 边缘节点以满足网络需求,或将 Intermediary 移动到云端, 以满足不断增长的资源需求。可移植应用使得可以在 Servient 部署之后“安装”额外行为。

原则上,只要 Interaction Affordance 通过 WoT Interface 对外呈现,就可以使用任何编程语言和 API 来定义 Thing 的行为。面向应用的 API 与协议栈之间的 适配由 WoT Runtime 处理。关于不使用 WoT Scripting API 构建块的行为实现,见 8.8.1 原生 WoT API

8.2 WoT Runtime

从技术上讲,Thing 抽象及其 Interaction Model 是在运行时系统中实现的。该 WoT Runtime 维护 行为实现的执行环境,并能够暴露和/或消费 Thing,因此必须能够 获取、处理、序列化和服务 WoT Thing Description

每个 WoT Runtime 都为行为实现提供面向应用的接口 (即 API)。32 中所示的可选 WoT Scripting API 构建块定义了这样一种面向应用的 接口,它遵循 Thing 抽象,并支持在运行时 通过应用脚本部署行为实现。关于替代 API,见 8.8.1 原生 WoT API,这些 API 也可以仅在 编译时可用。一般而言,应用逻辑应在沙箱化执行环境中 执行,以防止应用代码未经授权访问 WoT Runtime 的管理方面, 特别是 Private Security Data。在多租户 Servient 中,也应防止 不同租户在未经授权的情况下访问彼此的数据。

WoT Runtime 需要提供某些操作来管理 Thing 的生命周期, 更准确地说,是管理其软件抽象和描述。生命周期管理 (LCM)系统可以在 Servient 内封装这些生命周期操作, 并使用内部接口实现生命周期管理。 此类操作的细节因实现而异。 WoT Scripting API 包含 LCM 功能,因此代表此类系统的一种可能实现。

WoT Runtime 必须与 Servient 的协议栈实现交互,因为它将 行为实现与 Protocol Binding 的细节解耦。 WoT Runtime 通常还会与底层系统交互,例如访问 所连接的传感器和执行器等本地硬件,或访问 存储等系统服务。这两个接口都依赖于实现, 但 WoT Runtime 必须提供到其所实现的 Thing 抽象的必要适配。

8.3 WoT Scripting API

WoT Scripting API 构建块定义了一个 ECMAScript API,它紧密遵循 WoT Thing Description 规范 [WOT-THING-DESCRIPTION]。 它定义了行为实现与基于脚本的 WoT Runtime 之间的接口。 其他更简单的 API 可以在其上实现, 类似于 Web 浏览器 API 之上的 jQuery。

更多细节见 [WOT-SCRIPTING-API]。

8.4 Exposed Thing 与 Consumed Thing 抽象

WoT Runtime 根据 ThingTD 实例化其软件表示。这些软件表示 提供通向行为实现的接口。

Exposed Thing 抽象 表示一个本地托管并可通过 Servient 的协议栈实现 从外部访问的 Thing。 行为实现可以通过定义 Exposed Thing 的元数据和 Interaction Affordance,并提供其自主行为,从而完全控制它们。

Consumed Thing 抽象表示一个远程托管的 Thing,供需要 使用通信协议访问它的 Consumer 使用。 Consumed Thing 是代理对象或桩对象。行为实现仅限于读取其元数据, 并按照对应 TD 中的描述激活其 Interaction AffordanceConsumed Thing 还可以 表示系统特性,例如本地硬件或专有/旧式通信协议 背后的设备。在这种情况下, WoT Runtime 必须提供系统 API 与 Consumed Thing 之间的必要适配。 此外,它还必须提供相应的 TD,并使其可供行为实现使用, 例如通过面向应用的 API(例如 WoT Scripting API [WOT-SCRIPTING-API] 中定义的 discover() 方法),扩展 WoT Runtime 提供的任何 发现机制。

在使用 WoT Scripting API 时, Exposed ThingConsumed Thing 是 JavaScript 对象,可由应用脚本创建、操作 和销毁。不过,访问可以通过安全机制加以限制, 例如在多租户 Servient 中。

8.5 Private Security Data

私有安全数据,例如用于与 Thing 交互的 密钥,在概念上也由 WoT Runtime 管理,但有意不让应用直接 访问。实际上,在最安全的硬件实现中,此类 Private Security Data 存储在单独的隔离内存中 (例如安全处理元件或 TPM 上),并且只提供 一组抽象操作(甚至可能由隔离的处理器和软件栈实现), 这些操作限制攻击面并防止此类数据向外泄露。 Private Security DataProtocol Binding 透明使用, 以授权交互并保护交互的完整性和机密性。

8.6 协议栈 实现

Servient 的协议栈实现 Exposed ThingWoT Interface,并由 Consumer 用于访问远程 ThingWoT Interface(通过 Consumed Thing)。它生成用于通过网络交互的具体协议消息。 Servient 可以实现 多个协议,因此支持多个 Protocol Binding, 以支持与不同 IoT 平台交互。

在许多使用标准协议的情况下, 可以使用通用协议栈来生成平台特定消息 (例如一个用于 HTTP(S) 方言,一个用于 CoAP(S) 方言,一个用于 MQTT 解决方案等)。在这种情况下, 来自 Thing Description 的通信元数据会用于选择并配置正确的 栈(例如带有正确头字段的 HTTP,或带有正确选项的 CoAP)。预期载荷表示格式(JSON、CBOR、XML 等)的 解析器和序列化器也可以跨这些通用协议栈共享, 这些格式由媒体类型 [RFC2046] 标识。

详见 [WOT-BINDING-TEMPLATES]。

8.7 系统 API

WoT Runtime 的实现可以通过 Thing 抽象向行为实现提供本地硬件或系统服务, 就像它们可通过通信协议访问一样。在这种情况下, WoT Runtime 应使 行为实现能够实例化 Consumed Thing, 这些对象内部与系统接口,而不是与协议栈接口。 这可以通过在面向应用的 WoT Runtime API 所提供发现机制的结果中列出此类系统 Thing 来实现,这些 Thing 仅在本地 WoT Runtime 中可用。

设备也可以在物理上位于 Servient 外部,但通过专有协议或 不适合作为 WoT Interface 的协议连接 (见 6.7 协议绑定)。 在这种情况下, WoT Runtime 可以通过专有 API 访问使用此类协议的 旧式设备(例如 ECHONET Lite、BACnet、X10、I2C、 SPI 等),但也可以再次选择通过 Thing 抽象将其暴露给行为实现。 这样,Servient 可以充当 旧式设备的网关。只有当旧式设备无法直接使用 WoT Thing Description 描述时,才应这样做。

行为实现也可以通过专有 API 或其他方式 访问本地硬件或系统服务(例如存储)。 不过,这超出了 W3C WoT 标准化的范围,因为它会妨碍可移植性。

8.8 替代性 Servient 和 WoT 实现

WoT Scripting API 构建块是可选的。替代性 Servient 实现是可能的, 其中 WoT Runtime 为应用逻辑提供 替代 API,而应用逻辑可以用任何编程语言编写。

此外,不知道 W3C WoT 的设备或服务 仍然可以被消费,只要能够为它们提供格式良好的 WoT Thing Description。在这种情况下,TD 描述具有黑盒 实现的 ThingWoT Interface

8.8.1 原生 WoT API

开发者可能出于多种原因选择不使用 WoT Scripting API 来实现 Servient。 这可能是由于内存或计算资源不足, 因而开发者无法使用所需的软件栈或 功能完备的脚本引擎。或者,为了支持其用例 (例如专有通信协议),开发者可能必须使用 只能通过特定编程环境或语言获得的 特定函数或库。

在这种情况下,仍然可以使用 WoT Runtime,但会通过 替代的面向应用接口暴露等价的抽象和功能, 而不是使用 WoT Scripting API。 除后者之外,8. 抽象 Servient 架构中的所有模块描述 同样适用于 33

原生实现
33 使用原生 WoT API 的 Servient 实现

8.8.2 现有设备的 Thing Description

也可以将现有 IoT 设备或服务集成到 W3C Web of Things 中, 并通过为这些设备或服务创建 Thing Description 而将它们用作 Thing。 这种 TD 可以手动创建,也可以通过工具或服务创建。 例如,TD 可以由提供自动翻译另一种依赖生态系统的 机器可读格式所给元数据的服务生成。不过,这只有在 目标设备使用可通过 Protocol Binding 描述的协议时才可行。 相关需求见 6.7 协议绑定。前面的许多讨论也暗示 Thing 会提供其自己的 Thing Description。 虽然这是一种有用模式,但并非强制。 特别是,可能无法修改现有设备,使其能够直接提供自己的 Thing Description。 在这种情况下,Thing Description 必须通过目录等服务,或其他外部且独立的 分发机制单独提供。

现有实现
34 将现有 IoT 设备集成到 W3C WoT 中

9. WoT 部署示例

本节为非规范性内容。

本节提供各种示例,说明当实现 ThingConsumer 角色的设备和服务 连接在各种具体拓扑和部署场景中时,Web of Things(WoT)抽象架构可以如何实例化。这些 拓扑和场景并非规范性内容,但由 WoT 抽象架构启用并 支持。

在讨论具体拓扑之前,我们首先回顾 ThingConsumer 可以在 WoT 网络中扮演的角色,以及它们与 Exposed ThingConsumed Thing 软件 抽象之间的关系。Exposed ThingConsumed Thing 分别在 ThingConsumer 角色中,供 Servient 的行为实现内部使用。

9.1 Thing 和 Consumer 角色

处于 Thing 角色的 Servient 基于 Thing Description (TD)创建 Exposed Thing。 TD 会发布并提供给处于 ConsumerIntermediary 角色的其他 Servient。TD 可以 以各种不同方式发布:TD 可以注册到 Thing Description Directory 服务等管理系统中,或者 Thing 可以在收到 TD 请求时 向请求方提供 TD。在某些应用场景中,甚至可以将 TD 静态关联到 Thing

处于 Consumer 角色的 Servient 使用发现机制获取 Thing 的 TD,并基于所获得的 TD 创建 Consumed Thing。 具体发现机制取决于具体部署场景:它可以由 Thing Description Directory 等管理系统提供,也可以通过 发现协议、静态分配等方式提供。如其他地方所讨论, 只要可能,建议使用 [WOT-DISCOVERY] 中定义的 Discovery 机制。

不过,需要注意,描述与可识别个人相关设备的 TD 可能被用于推断隐私敏感信息。因此,必须将对此类 TD 分发的约束纳入任何具体 TD 发现机制中。 如有可能,还必须采取措施限制 TD 中暴露的信息, 例如在某一特定用例并非严格需要时,过滤掉 ID 或 人类可读信息。隐私问题在 11. 隐私 考虑中进行了高层次讨论,更详细的讨论见 [WOT-THING-DESCRIPTION] 规范,并由 [WOT-DISCOVERY] 规范处理。

设备的内部系统功能,例如与所连接的传感器和执行器 交互,也可以选择表示为 Consumed Thing 抽象。

Consumed Thing 支持的功能通过编程语言接口提供给 Consumer 的行为 实现。在 WoT Scripting API 中, Consumed Thing 由对象表示。 运行在 Thing 中的行为实现 (即应用逻辑)可以通过 Exposed Thing 提供的编程语言接口,使用 Interaction AffordanceConsumer 交互。

Thing 不一定表示物理设备。Thing 也可以表示 设备集合,或运行在网关或云端的虚拟服务。 同样,Consumer 可以表示运行在 网关或云端的应用或服务。 Consumer 也可以 在边缘设备上实现。在 Intermediary 中,单个 Servient 同时承担 ThingConsumer 角色,并共享同一个 WoT Runtime

9.2 WoT 系统拓扑和 部署场景

本节讨论 WoT 系统的各种拓扑和部署场景。 这些只是示例模式,其他互连拓扑也是可能的。 这里描述的拓扑源自 Web of Things Use Cases and Requirements [WOT-USE-CASES-REQUIREMENTS]。

9.2.1 同一网络上的 Consumer 和 Thing

在最简单的互连拓扑中,如 35 所示,ConsumerThing 位于同一网络上, 并且无需任何中介即可彼此直接通信。 这种拓扑出现的一个用例是: Consumer 是运行在网关上的编排 服务或其他 IoT 应用,而 Thing 是与传感器或执行器接口的设备。 不过,client/server 关系也可以很容易地反转; client 可以是处于 Consumer 角色的设备, 访问作为 Thing 运行在网关或云端的服务。

同一网络上的 consumer 和 thing
35 同一网络上的 Consumer 和 Thing

如果 Thing 位于云端,而 Consumer 位于本地 网络上(智能家居用例中的示例见 1),则实际网络 拓扑可能更复杂,例如需要 NAT 穿越并禁止某些形式的发现。 在这种情况下,后面讨论的更复杂拓扑之一可能更合适。

9.2.2 通过 Intermediary 连接的 Consumer 和 Thing

Intermediary 在网络上同时扮演 ThingConsumer 角色,并在其 WoT Runtime 中同时支持 Exposed ThingConsumed Thing 软件 抽象。Intermediary 可用于在设备和网络之间代理,或用于 Digital Twin

9.2.2.1 充当代理的 Intermediary

Intermediary 的一种简单应用是作为 Thing 的代理。当 Intermediary 充当代理时,它与两个独立网络或协议都有接口。 这可能涉及额外安全机制的实现,例如提供 TLS 端点。通常,代理不会修改交互集合, 因此 Intermediary 暴露的 TD 将具有与被消费 TD 相同的交互,只是连接元数据会被修改。

为了实现这种代理模式, Intermediary 获取某个 Thing 的 TD,并创建一个 Consumed Thing。它创建该 Thing 的代理对象, 作为具有相同 Interaction Affordance 的软件实现。然后,它为代理 对象创建一个具有新标识符的 TD,并可能带有新的 通信元数据(Protocol Binding)和/或新的 Public Security Metadata。最后,基于该 TD 创建一个 Exposed Thing,并且 Intermediary 通过适当的发布机制向其他 ConsumerIntermediary 通知该 TD。

consumer 和 thing 通过充当代理的 intermediary 连接
36 Consumer 和 Thing 通过 充当代理的 Intermediary 连接
9.2.2.2 充当 Digital Twin 的 Intermediary

更复杂的 Intermediary 可称为 Digital TwinDigital Twin 可能会也可能不会 修改协议或在网络之间进行转换,但它们会提供额外服务, 例如状态缓存、延迟更新,甚至对目标设备行为进行 预测性仿真。例如,如果某个 IoT 设备电力有限, 它可能选择以相对较低频率唤醒,与 Digital Twin 同步,然后立即再次进入睡眠。在这种情况下, Digital Twin 通常运行在 电力约束较少的设备上(例如云端或网关上), (参见 设备 类别),并能够代表受限设备响应交互。 对属性当前状态的请求也可以由 Digital Twin 使用缓存状态满足。当目标 IoT 设备处于睡眠状态时到达的请求 可以排队,并在设备唤醒时发送给它。为了实现该模式, Intermediary, 即 Digital Twin 需要 知道设备何时处于唤醒状态。作为 Thing 的设备实现可能需要为此包含通知机制。 这可以使用单独的 Consumer/Thing 对来实现, 或使用 Event 交互来实现此目的。

9.2.3 由云服务控制的本地网络中设备

在智能家居用例中,连接到家庭网络的设备 (传感器和家用电器)通常由云服务监测, 在某些情况下也由云服务控制。连接这些设备的 家庭网络与云端之间通常存在 NAT 设备。 NAT 设备会转换 IP 地址,并通常提供防火墙服务, 以选择性阻止连接。只有通信能够成功穿越网关时, 本地设备和云服务才能彼此通信。

ITU-T Recommendation Y.4409/Y.2070 [Y.4409-Y.2070] 采用的一种典型结构如 37 所示。在该结构中, 同时存在一个本地和一个远程 Intermediary。本地 Intermediary 将多个 ThingInteraction Affordance 聚合为一个(一组)Exposed Thing, 它们都可以映射到一个通用协议(例如 HTTP,其中所有交互都映射到具有公共基础服务器 并使用单一端口的单一 URL 命名空间)。这为远程 Intermediary 提供了一种 简单方式,用于访问 NAT 设备背后的所有 Thing,前提是本地 Intermediary 使用了 能够穿越 NAT 设备的融合协议,并且具有某种方式将该服务 暴露到互联网(STUN、TURN、动态 DNS 等)。此外,本地 Intermediary 可以 充当 Thing 代理,因此即使所连接的 Thing 各自使用 不同协议(HTTP、MQTT、CoAP 等)和/或 不同的生态系统约定,Exposed Thing 也可以将它们汇聚到单一协议中,使 Consumer 无需 知晓这些 Thing 所使用的各种协议。

37 中,有两个 client 连接到远程 Intermediary,该 Intermediary 聚合了位于 NAT 边界后面的服务,并可能提供额外的 协议转换或安全服务。特别是,本地 Intermediary 可能 位于容量有限的网络中,将该服务直接提供给所有用户 可能不可行。在这种情况下,只向远程 Intermediary 提供对本地 Intermediary 的访问。 然后,远程 Intermediary 实现更通用的访问控制机制,并且还可以执行缓存或节流, 以保护 Consumer 免受过量流量影响。这些 Consumer 还会使用一种适合开放互联网的单一协议(例如 HTTPS) 与 Intermediary 通信, 这会使 client 的开发简单得多。

在这种拓扑中,Consumer 和 Thing 之间存在 NAT 和防火墙功能,但本地和远程 Intermediary 协同工作,将所有通信 通过防火墙隧道化,因此 Consumer 和 Thing 无需了解防火墙。成对 Intermediary 还通过提供访问控制和 流量管理来保护家庭设备。

云应用
37 云应用作为 Consumer,通过成对 Intermediary 连接到作为 Thing 实现的 本地设备

在更困难的情况下,NAT 和防火墙穿越可能无法 如图所示准确工作。特别是,ISP 可能不支持可公开访问的地址, 或者 STUN/TURN 和/或动态 DNS 可能不受支持或不可用。 在这种情况下, Intermediary 可以改为反转它们之间的 client/server 角色以建立初始连接(由本地 Intermediary 首先连接到云端的远程 Intermediary),随后这对 Intermediary 可以 建立隧道(例如使用 Secure WebSocket, 它使用 TLS 保护连接)。随后,该隧道可用于通过 自定义协议编码 Intermediary 之间的所有通信。 在这种情况下,初始连接仍可通过 HTTPS 使用标准端口建立, 并且从本地 Intermediary 到远程 Intermediary 的连接与普通浏览器/Web 服务器交互相同。这应能够穿越大多数家庭防火墙, 并且由于连接是外向的,网络地址转换不会造成任何问题。 然而,即使需要自定义隧道协议,远程 Intermediary 仍可以将该自定义协议转换回标准外部协议。 已连接的 ConsumerThing 无需了解它。 也可以将该示例扩展到这样的用例:ThingConsumer 都可以连接到 NAT 边界的任一侧。不过,这也要求在两个 Intermediary 之间建立双向隧道。

9.2.4 使用 Thing Description Directory 进行发现

一旦本地设备(以及可能的服务)能够由云端服务 进行监测或控制,就可以在此基础上构建各种 额外服务。例如,云应用可以基于对所收集数据的分析 改变设备的运行状态。

不过,当远程 Intermediary 是服务 client 应用的云平台的一部分时,client 需要能够找到 设备信息,例如访问已连接设备的目录。 为了简化下图,我们假设所有本地设备都实现为 Thing, 所有云应用都实现为 Consumer。为了使实现为 Thing 的本地设备元数据 可供云应用使用,可以将它们的元数据注册到 Thing Description Directory 服务中。该元数据具体是 本地设备的 TD,经修改后反映远程 Intermediary 提供的 Public Security Metadata 和通信元数据(Protocol Binding)。然后,client 应用可以通过查询 Thing Description Directory,获取它与本地设备通信以实现其功能所需的元数据。

云目录
38 带 Thing Description Directory 的云 服务

在图中未显示的更复杂情况下,也可能存在充当 Thing 的云服务。 这些云服务也可以将自己注册到 Thing Description Directory。由于 Thing Description Directory 是 Web 服务,因此本地设备应 能够通过 NAT 或防火墙设备看到它,其接口甚至可以 通过自身的 TD 提供。随后,充当 Consumer 的本地设备可以通过 Thing Description Directory 发现云端的 Thing,并直接连接到这些 Thing,或在例如需要协议转换时 通过本地 Intermediary 连接。

9.2.5 跨多个域的服务到服务 连接

多个各自基于不同 IoT 平台的云生态系统可以 协同工作,形成更大的系统之系统生态系统。 在前文讨论的云应用生态系统结构基础上, 下图展示了两个生态系统相互连接,以形成一个 系统之系统。考虑这样一种情况:一个生态系统中的 client(即下文的 Consumer A)需要 使用另一个生态系统中的 server(即下文的 Thing B)。 实现这种跨生态系统的应用-设备集成有不止一种机制。 下面使用图说明两种机制,展示如何实现这一点。

9.2.5.1 通过 Thing Description Directory 同步进行连接

39 中, Thing Description Directory 的两个实例同步信息, 这使得 Consumer A 可以通过 Thing Description Directory A 获取 Thing B 的信息。如前几节所述,远程 Intermediary B 维护 Thing B 的 shadow 实现。通过获取该 shadow 设备的 TD, Consumer A 能够通过远程 Intermediary B 使用 Thing B。

服务同步目录
39 通过 Thing Description Directory 同步实现多个云连接
9.2.5.2 通过代理 同步进行连接

40 中,两个远程 Intermediary 同步设备信息。当 Thing B 的 shadow 在远程 Intermediary B 中创建时,该 shadow 的 TD 会同时同步到远程 Intermediary A 中。 远程 Intermediary A 随后 创建其自己的 Thing B 的 shadow,并将该 TD 注册到 Thing Description Directory A。通过这种机制, Thing Description Directory 服务之间的同步就不是必要的。

服务同步 intermediary
40 通过 Intermediary 同步实现多个云连接

10. 安全考虑

安全是一个横切问题,需要在所有 WoT 构建 块和 WoT 实现中加以考虑。本章总结 一些通用问题和指南,以帮助保持具体 WoT 实现的安全性。不过,这些只是 通用指南,本文档所描述的抽象架构本身 无法保证安全。相反,需要考虑具体实现的 细节。关于安全(以及隐私)问题的更详细 和完整分析,见 WoT Security and Privacy Guidelines 文档 [WOT-SECURITY]。

总体而言,WoT 的目标是描述 IoT 设备和服务 现有的访问机制和属性,包括安全性。一般来说, W3C WoT 的设计目标是 描述已经存在的内容,而不是规定应该实现什么。 对现有系统的描述应准确描述该系统,即使其安全行为 并不理想。清晰理解系统的安全漏洞有助于制定安全 缓解措施——当然,此类数据无需分发给可能恶意利用它的人。

不过,尤其对于新系统,WoT 架构应支持 使用最佳实践。一般来说,WoT 安全架构必须支持 它所连接的 IoT 协议和系统的目标与机制。 这些系统在安全需求和风险容忍度方面各不相同, 因此安全机制也会基于这些因素而变化。

安全在 IoT 领域尤其重要,因为 IoT 设备需要 自主运行,并且在许多情况下可能控制 安全关键系统。IoT 设备面临不同于 IT 系统的风险, 在某些情况下风险更高。保护 IoT 系统也很重要, 以免它们被用于对其他计算机系统发起攻击。

一般而言,安全无法得到保证。WoT 不可能把一个 不安全的系统变成安全系统。不过,WoT 架构需要做到 不造成伤害:它应至少以与其描述和支持的系统同等的程度 支持安全。

10.1 WoT Thing Description 风险

WoT Thing Description(TD)中包含的元数据可能是敏感的。 作为最佳实践,TD 应与适当的完整性保护机制和 访问控制策略一起使用,目标是只向已授权用户提供它。

更多细节以及对这些要点的讨论,请参见 WoT Thing Description 规范中的隐私考虑章节。

10.1.1 Thing Description 私有 安全数据风险

TD 被设计为只携带 Public Security Metadata。TD 规范中定义的内置 TD 安全方案 有意不支持编码 Private Security Data。不过,存在这样一种风险:其他字段, 例如人类可读描述,可能被滥用来编码此类信息; 或者新的安全方案可能通过扩展机制被定义和部署, 并编码此类信息。

缓解措施:
应当 严格分离 Public Security MetadataPrivate Security Data 身份验证 和授权 SHOULD 基于单独管理的 Private Security Data 建立。 TD 的 Producer MUST 确保 TD 中不包含任何 Private Security Data

10.1.2 Thing Description 通信元数据风险

如果没有按最佳实践配置安全机制, 与 IoT 设备的通信被截获或破坏的风险会更高。

缓解措施:
为与 WoT 一起使用的 IoT Platform 配置任何通信安全元数据时, 应遵循该 IoT Platform 的最佳实践。 只要 可能,TD 创建者 SHOULD 使用 WoT Binding Templates 中提供的、经过审查的通信元数据。 在为 WoT Binding Templates 未覆盖的 IoT Platform 生成 TD 时,TD 创建者 SHOULD 确保满足该 IoT Platform 的所有安全需求。

10.2 WoT Scripting API 风险

WoT Runtime 实现和 WoT Scripting API 应具有相关机制,以防止对系统的恶意访问, 并在多租户 Servient 中隔离脚本。 更具体地说,与 WoT Scripting API 一起使用的 WoT Runtime 实现应考虑以下安全和隐私风险, 并实现推荐的缓解措施。

一般来说,这些风险和缓解措施也应适用于 支持 WoT 系统可编程行为的任何系统, 而不仅仅是 WoT Scripting API

10.2.1 跨脚本安全 风险

在基本 WoT 设置中,所有运行在 WoT Runtime 内的脚本都被视为可信, 由制造商分发,因此不强烈需要将脚本实例彼此隔离。 不过,根据设备能力、部署用例场景和风险级别, 这样做可能是可取的。例如,如果一个脚本处理敏感数据 并经过充分审计,则可能希望将它与其余脚本实例分离, 以便在同一系统中的其他脚本在运行时被攻破时, 最大限度降低数据暴露风险。另一个示例是在单个 WoT 设备上不同租户的相互共存。在这种情况下, 每个 WoT runtime 实例都会托管不同租户, 通常需要防止租户未经授权访问彼此的数据。

缓解措施:
当脚本 处理敏感数据时, WoT Runtime SHOULD 将脚本实例及其数据彼此隔离。 类似地, 如果 WoT 设备有多个租户, WoT Runtime 实现 SHOULDWoT Runtime 实例 及其数据彼此隔离。 实践中,脚本和运行时 实例之间的隔离可以通过让所有实例运行在 “沙箱化”环境中来实现,该环境控制其对 其余环境的访问。更多信息见 WoT Security and Privacy Guidelines 规范 [WOT-SECURITY] 的 WoT Servient Single-Tenant WoT Servient Multi-Tenant 章节。

10.2.2 物理设备直接 访问风险

如果脚本被攻破或发生故障,而脚本可以直接使用 暴露的原生设备接口,则底层物理设备(以及可能的周围 环境)可能受到损害。如果这些接口缺少对输入的 安全检查,它们可能会使底层物理设备(或环境) 进入不安全状态。

缓解措施:

为了在脚本被攻破时减少对物理 WoT 设备的损害,重要的是根据脚本的功能, 最大限度减少向特定脚本暴露或可访问的接口数量。 WoT Runtime SHOULD NOT 向脚本开发者直接暴露 低层设备硬件接口。

硬件抽象层可以提供额外级别的保护。 硬件抽象层是调解应用与硬件之间交互的软件组件, 可以简单到一个软件库,尽管更复杂的实现可能实现为 可通过系统调用访问的驱动程序,或由 hypervisor 支持。 更复杂版本的硬件抽象层可以防止应用绕过它们。 WoT Runtime 实现 SHOULD 提供用于访问 低层设备硬件接口的硬件抽象层。 硬件 抽象层应拒绝执行可能使设备(或环境)进入不安全 状态的命令。此类“软件联锁”不应是防止系统进入 不安全状态的唯一机制。理想情况下,应使用多个分层 安全控制,包括软件联锁和硬件联锁。

10.3 WoT Runtime 风险

10.3.1 配置供给和更新 安全风险

如果 WoT Runtime 实现支持制造后的配置供给,或支持对其自身、 脚本或任何相关数据(包括安全凭证)的更新, 它就可能成为主要攻击向量。攻击者可以尝试在更新或 配置供给过程中修改上述任何元素,或直接配置供给 攻击者的代码和数据。

缓解措施:
脚本、 WoT Runtime 本身或任何相关数据的制造后配置供给或更新 SHOULD 以安全方式完成。 关于安全更新和制造后配置供给的一组建议可见 WoT Security and Privacy Guidelines 规范 [WOT-SECURITY]。

10.3.2 安全凭证 存储风险

通常,WoT Runtime 需要存储 配置供给到 WoT 设备上的安全凭证,以便该设备在网络中运行。 如果攻击者能够破坏这些凭证的机密性或完整性, 那么它就可能获得对资产的访问权限,冒充其他 WoT Thing、 设备或服务,或发起拒绝服务(DoS)攻击。

缓解措施:
WoT Runtime SHOULD 安全存储 任何已配置供给的安全凭证,并保证其完整性和机密性。 如果单个 支持 WoT 的设备上有多个租户, WoT Runtime 实现 SHOULD 将每个租户已配置供给的 安全凭证与其他租户隔离。 为了 最大限度降低已配置供给的安全凭证被攻破的风险, WoT Runtime 实现 SHOULD NOT 暴露任何 API 供脚本查询已配置供给的安全凭证。 此类 凭证(或者更好地说,使用这些凭证但不暴露它们的 抽象操作)SHOULD 仅供使用它们的 底层协议实现访问。

10.4 Trusted Environment 风险

在第 5. 常见 部署 模式中,介绍了若干使用场景, 其中包含 Trusted Environment 和安全边界的概念。属于 Trusted Environment 的实体都共享对一组公共资源(例如本地网络)的访问, 并被隐式授予彼此之间的某些访问权限。 一个常见示例是家庭中的 WiFi LAN,其中对 WEP 密码的 访问允许设备彼此通信,而无需任何进一步的访问控制。 像这样允许隐式访问权限,并为大量实体使用单一共享秘密, 意味着只要一个恶意行为者可以访问 Trusted Environment, 就可能造成重大损害。

一种常见的 IoT 情况是使用 HTTP/HTML 浏览器访问家庭环境中本地托管的 Web 服务。 此类本地托管的 Web 服务可能没有公开可见的 URL, 因而无法参与浏览器期望的 CA 系统,以启用 HTTP/TLS(HTTPS)。在这种情况下,通常使用纯 HTTP,而保护通信的唯一安全措施是网络加密, 例如 WEP,这相对较弱。

缓解措施:
信任 关系 SHOULD 尽可能受限, 理想情况下是成对的,并且只限于精确所需的访问。 如上所述, 在某些情况下这很难管理,于是会使用所描述的 隐式访问,甚至某些实体(例如浏览器)可能会假定如此。 在通过访问公共网络进行 隐式访问控制的情况下,SHOULD 使用分段网络。 例如,在家庭环境中, 可以为 IoT 设备使用单独网络。在商业和工业环境中, 应显式安装证书,以允许浏览器在使用 TLS 的同时 访问本地服务。证书支持安全身份验证,并且是启用 TLS 所必需的。一旦启用 TLS,就可以使用其他假定 安全传输的安全机制,例如 API key 或密码, 以提供细粒度访问控制。请注意,为大量服务使用 单一密钥等同于上文的“隐式访问”情况。

10.5 安全传输

10.4 Trusted Environment 风险中所述,在某些情况下, TLS 等安全传输不可行或难以设置,例如家庭内部的本地 LAN。遗憾的是,HTTP 中的访问控制机制通常设计为 与安全传输一起使用,没有安全传输时很容易被绕过。 特别是,从可被第三方截获的未加密协议交互中捕获 密码和 token 相对容易。此外,如果没有 TLS 提供 服务器身份验证,中间人攻击也很容易实现。

缓解措施:

由于在所有情况下设置安全传输存在实际困难, 我们不能一概断言它始终是必需的。相反,我们为 不同用例提供一组要求:

公共网络:
当 Thing 被发布在公共互联网,使任何人都可以从任何地方访问时, 它 MUST 受 TLS 或 DTLS 等安全传输保护。 在公共互联网可用的 Thing 将具有公共 URL,因此可使用正常的 CA 机制提供证书。 即使端点没有访问控制,例如提供公开可访问服务时, 也应这样做,因为安全传输还保护请求者的隐私 (例如查询内容)。
私有网络:
当 Thing 被发布在私有网络上时,它 SHOULD 受 TLS 或 DTLS 等安全传输保护。 风险会随着受保护数据的敏感性、 潜在损害以及被授予私有网络访问权限的人数而增加。 在工厂网络等风险更高的情况下,安全传输具有更高优先级; 在这些情况下,安装预共享密钥也更实际。 在低风险情况下,允许如下做法: 受防火墙 保护的 LAN 等私有网络 MAY 使用 Trusted Environment 方法,即仅依赖网络安全。 一般不推荐这样做,但出于实际原因可能有必要。 关于这种方法的额外风险和缓解措施,请参见所引用的 安全考虑。
棕地设备:
WoT 是描述性的,对现有“棕地”设备的准确描述 可能显示它们并不安全。例如,某一特定设备可能使用 不带 TLS 的 HTTP,即使它使用密码等访问控制, 这也并不安全。通常不可能升级此类设备以支持更强的 安全性。在这些情况下,上述两个缓解措施仍然适用。 如果暴露在私有网络上,应使用 Trusted Environment 方法,并尽可能限制访问。 如果希望将此类设备暴露到公共互联网, 应采取额外步骤来增强其安全性。特别是,可以使用 代理来确保公共网络上的通信使用安全传输。 代理也可以用于提供访问控制。

当通过 TCP 使用安全传输是适当的时,至少 SHOULD 使用 TLS 1.3 [RFC8446]。 如果出于兼容性原因 无法使用 TLS 1.3,但通过 TCP 使用安全传输是适当的, 则 MAY 使用 TLS 1.2 [RFC5246]。 当通过 UDP 使用安全传输是适当的时,如果可能,推荐至少使用 DTLS 1.3 [RFC9147]。 如果出于兼容性原因 无法使用 DTLS 1.3,但通过 UDP 使用安全传输是适当的, 则 MAY 使用 DTLS 1.2 [RFC6347]。 新开发 MUST NOT 使用早于 1.2 的 DTLS 或 TLS 版本。 使用 更早版本 TLS 或 DTLS 的现有 Thing 可以由 WoT 元数据 (例如 Thing Description)描述,但应视为不安全。

如果 Thing 可能揭示 Personally Identifiable Information(PII),则还适用额外考虑。 见 11.2 对 Personally Identifiable Information 的 访问

11. 隐私考虑

隐私是一个横切问题,需要在所有 WoT 构建块 和 WoT 实现中加以考虑。本章总结一些通用 问题和指南,以帮助保持具体 WoT 实现的隐私。 不过,这些只是通用指南,本文档所描述的 抽象架构本身无法保证隐私。相反,需要考虑 具体实现的细节。关于隐私(以及安全)问题的更详细 和完整分析,见 WoT Security and Privacy Guidelines 规范 [WOT-SECURITY]。

11.1 WoT Thing Description 风险

WoT Thing Description(TD)中包含的元数据可能是敏感的, 即使它没有明确包含 Personally Identifiable Information(PII),也可能从中 推断出 PII。作为最佳实践,TD 应与适当的完整性保护机制 和访问控制策略一起使用,目标是只向已授权用户提供它。 一般来说,前一节讨论的许多 安全 考虑 在涉及不希望发生的、未经授权的信息披露时, 也可以被视为隐私风险。

更多细节以及对这些要点的讨论,请参见 WoT Thing Description 规范中的隐私考虑章节。

11.1.1 Thing Description Personally Identifiable Information 风险

Thing Description 可能包含各种类型的 Personally Identifiable Information(PII)。即使它并不明确, TD 及其与可识别个人的关联也可以用于推断有关 该个人的信息。例如,由位置可确定的移动设备暴露的 可指纹化 TD 的关联可能构成跟踪风险。即使无法识别 某一特定设备实例,TD 所表示的设备类型在与某个人关联时, 也可能构成个人信息。例如,医疗设备可能被用于推断 用户有某种医疗状况。

一般来说,TD 中的 Personally Identifiable Information 应尽可能受到限制。 然而,在某些情况下,这无法避免。TD 中可能同时存在 直接和可推断的 PII,这意味着 TD 整体应像其他形式的 PII 一样对待。它们应以安全方式存储和传输, 应只提供给已授权用户,应只缓存有限时间, 应按请求删除,应只用于用户同意时所提供的目的, 并且还应满足使用 PII 的所有要求 (包括任何法律要求)。

缓解措施:
TD 中 显式 PII 的存储 SHOULD 尽可能最小化。 即使 TD 中没有显式 PII, 也可能存在跟踪和识别隐私风险。 通常,应将 可与某个人关联的 TD SHOULD 视为包含 PII,并适用与其他 PII 相同的管理策略, 即使它们并未明确包含 PII。 TD 的分发 机制 SHOULD 确保它们只提供给已授权的 Consumer。 请注意, WoT Discovery 机制旨在处理这些具体问题,只要它与探索服务上的 身份验证和访问控制一起使用。作为一般策略, 只要可能,就不应在 TD 中暴露不必要的信息。 例如,TD 中显式的类型和实例识别信息只应在用例需要时 包含。即使用例需要,为了最大限度降低跟踪风险, 也应尽可能使用分布式且有限作用域的标识符, 而不是全局唯一标识符。其他形式的信息,例如 人类可读描述,也可以在某些用例中省略,以降低 指纹识别风险。

11.2 对 Personally Identifiable Information 的访问

除了 11.1.1 Thing Description Personally Identifiable Information 风险中讨论的 通过元数据揭示 Personally Identifiable Information(PII)的风险之外, Thing 返回的数据本身也可能是敏感的。例如, Thing 可能正在监测某个特定个人的位置或健康状况。 与个人相关的信息应被视为 PII,即使它并不立即显得敏感, 因为它可能与其他信息结合后揭示敏感信息。

缓解措施:
返回与某个人相关的数据或元数据(例如 TD)的 Thing SHOULD 使用某种形式的访问控制。 其中一个特殊情况是 Thing Description Directory,如 [WOT-DISCOVERY] 中所述,它是一种将 Thing Description 作为数据返回的 Thing。 此类目录服务包含在上述陈述中,如果 TD 描述的是与可识别 人员相关的 Thing,则应使用访问控制。 对于返回 Thing Description 的服务,还适用以下内容: 返回带有不可变 ID 的 Thing Description 的服务 SHOULD 使用某种形式的访问 控制。 遵循将描述与特定个人相关 Thing 的 Thing Description 视为 PII 的原则,即使它们并未明确包含 PII,这意味着提供此类 TD 的目录应使用访问控制。 一般而言,唯一的例外应是访问由 TD 本身未描述的其他 机制控制的情况,例如分段网络。还应再次注意, 访问控制通常只有在同时使用安全传输时才有效;见 10.5 安全 传输。没有安全传输而使用访问控制,充其量只能 阻止未经授权方的随意访问。

12. 无障碍考虑

本节为非规范性内容。

一般而言,IoT,尤其是 WoT,既为无障碍提供了 机会,也带来了挑战。一方面,通过网络访问支持互联网的 设备功能,使得可以为这些功能构建替代接口, 包括基于 Web 的接口和物理接口,而不受设备自身硬件限制。 此类接口可以且应遵循无障碍最佳实践。另一方面, IoT 设备类型多样,通常受成本和空间限制, 并且在它们确实需要依赖自身硬件进行接口交互的情况下, 例如在建立网络连接之前的入网期间,要实现无障碍 可能具有挑战性。

关于 WoT 的无障碍,需要考虑两种情况: 从一开始就设计为与 WoT 一起使用的绿地设备, 以及 WoT 仅用于描述现有系统的棕地设备。

若干与无障碍相关的用例包含在 WoT Use Cases and Requirements 文档 [WOT-USE-CASES-REQUIREMENTS] 中。

12.1 绿地 WoT 系统

理想情况下,在任何绿地 WoT 系统中, 应从组件开发之初就考虑无障碍。如果组件的硬件 具有自己的显示器或其他形式的物理用户界面, 则该界面必须尽可能无障碍。如果无法使其无障碍 (例如由于屏幕尺寸限制),则应通过网络提供等效功能, 以便改用无障碍接口(例如 Web 或语音接口)。 当组件通过网络访问时,无论 Web 接口是直接托管在 设备上,还是由另一个组件(例如仪表板)提供, 都必须为无障碍 Web 接口做好安排。在板载硬件是 接口唯一选项的情况下,例如入网期间,应仔细设计, 使其尽可能无障碍。

一般来说,Thing 应始终至少具有一个完全符合 WCAG 和 EN 301 549 的用户界面 (直接界面或基于网络的界面)。无障碍必须应用于 面向所有类型用户提供的接口:制造商、安装人员、 设备所有者和最终用户。

Thing 的用户界面无障碍状态应在 Thing 的元数据中 声明,以便用户可以选择最适合自己的用户界面。 如果 Thing 具有 Web 接口,则应使用现有机制来描述 Web 接口。为了更好地支持 Web 与物理接口之间的连接, WoT Thing Description 中描述的可供性应以某种方式注释, 使其与设备上物理接口的关系可以被理解。

不直接提供用户界面的组件仍必须通过提供适当数据 和功能来支持无障碍。例如,公共 Thing (例如售票机或 ATM)的开发者应考虑提供定位功能, 用户可通过听觉、视觉或其他信号在物理上识别并定位 该 Thing。

12.2 棕地 WoT 系统

WoT 的棕地应用涵盖这样的情况:WoT 元数据用于 描述现有设备,但在其设计期间并未考虑 WoT。 在这种情况下,上述许多规定仍然适用。例如, 由另一系统提供的、用于监测或控制该设备的 Web 接口 应遵循 WCAG 中的指南,Thing Description 也应适当地 注释可供性。如果设备自身的物理接口带来无障碍挑战, 则可能通过基于其网络可供性的替代接口来克服该挑战。

A. 近期规范变更

A.1 自 2023 年 7 月 11 日提议 推荐标准以来的变更

A.2 自 2023 年 1 月 19 日候选 推荐标准以来的变更

A.3 自 2022 年 9 月 7 日发布的 WD 以来的变更

A.4 2022 年 9 月 7 日发布的 WD 相对于 FPWD 版本的变更

A.5 FPWD 相对于 [wot-architecture] 1.0 版本的变更

B. 致谢

特别感谢 Kazuo Kajimoto、Toru Kawaguchi 和 Matthias Kovatsch 共同编辑 WoT 架构规范初始版本 并作出许多重要贡献。特别感谢 Cristiano Aguzzi、Andrea Cimmino Arriaga、Kazuyuki Ashimura、Luca Barbato、Ben Francis、 Christian Glomb、Klaus Hartke、Sebastian Käbisch、Takuki Kamiya、Ari Keränen、Zoltan Kis、Ege Korkan、Michael Koster、 Philippe Le Hegaret、Kazuaki Nimura、Daniel Peintner、James Pullen、Elena Reshetova 和 Farshid Tavakolizadeh 对本文档的 贡献。

特别感谢来自 W3C 的 Dr. Kazuyuki Ashimura 对 WoT Architecture Task Force 工作的持续帮助和支持。

衷心感谢 W3C 工作人员以及 W3C Web of Things Interest Group(WoT IG)和 Working Group(WoT WG)的所有其他活跃参与者, 感谢他们的支持、技术输入和建议,这些都促成了 本文档的改进。

WoT WG 还希望感谢关于 “Web of Things” 概念的 开创性努力,该概念最初以学术倡议的形式出现, 包括以下出版物: [WOT-PIONEERS-1] [WOT-PIONEERS-2] [WOT-PIONEERS-3] [WOT-PIONEERS-4] 以及始于 2010 年的 International Workshop on the Web of Things

最后,特别感谢 Joerg Heuer 自成立起领导 WoT IG 2 年,并引导该小组提出包括 Thing Description 在内的 WoT 构建块概念。

C. 参考文献

C.1 规范性参考文献

[BCP47]
用于 识别语言的标签。A. Phillips, Ed.; M. Davis, Ed.。IETF。2009 年 9 月。最佳当前实践。 URL:https://www.rfc-editor.org/rfc/rfc5646
[JSON-LD]
JSON-LD 1.0。Manu Sporny; Gregg Kellogg; Markus Lanthaler。W3C。2020 年 11 月 3 日。W3C 推荐标准。URL: https://www.w3.org/TR/json-ld/
[RFC2046]
多用途 互联网邮件扩展(MIME)第二部分:媒体 类型。N. Freed; N. Borenstein。IETF。1996 年 11 月。 草案标准。URL:https://www.rfc-editor.org/rfc/rfc2046
[RFC2119]
用于 RFC 中表示需求 级别的关键词。S. Bradner。IETF。1997 年 3 月。最佳 当前实践。URL:https://www.rfc-editor.org/rfc/rfc2119
[RFC3986]
统一 资源标识符(URI):通用语法。T. Berners-Lee; R. Fielding; L. Masinter。IETF。2005 年 1 月。 互联网标准。URL:https://www.rfc-editor.org/rfc/rfc3986
[RFC3987]
国际化 资源标识符(IRI)。M. Duerst; M. Suignard。IETF。2005 年 1 月。提议标准。URL: https://www.rfc-editor.org/rfc/rfc3987
[RFC5246]
TLS 传输层安全协议版本 1.2。T. Dierks; E. Rescorla。IETF。2008 年 8 月。 提议标准。URL:https://www.rfc-editor.org/rfc/rfc5246
[RFC6347]
数据报 传输层安全版本 1.2。E. Rescorla; N. Modadugu。IETF。2012 年 1 月。提议 标准。URL:https://www.rfc-editor.org/rfc/rfc6347
[RFC8174]
RFC 2119 关键 词中大写与小写的 歧义。B. Leiba。IETF。2017 年 5 月。最佳当前 实践。URL:https://www.rfc-editor.org/rfc/rfc8174
[RFC8259]
JavaScript 对象表示法(JSON)数据交换 格式。T. Bray, Ed.。IETF。2017 年 12 月。 互联网标准。URL:https://www.rfc-editor.org/rfc/rfc8259
[RFC8288]
Web 链接。M. Nottingham。IETF。2017 年 10 月。 提议标准。URL:https://httpwg.org/specs/rfc8288.html
[RFC8446]
TLS 传输层安全协议版本 1.3。E. Rescorla。IETF。2018 年 8 月。提议 标准。URL:https://www.rfc-editor.org/rfc/rfc8446
[RFC9147]
数据报 传输层安全(DTLS)协议版本 1.3。E. Rescorla; H. Tschofenig; N. Modadugu。 IETF。2022 年 4 月。提议标准。URL:https://www.rfc-editor.org/rfc/rfc9147
[wot-architecture]
Web of Things(WoT)架构。Matthias Kovatsch; Ryuichi Matsukura; Michael Lagally; Toru Kawaguchi; Kunihiko Toumura; Kazuo Kajimoto。W3C。2020 年 4 月 9 日。W3C 推荐标准。URL:https://www.w3.org/TR/wot-architecture/
[WOT-DISCOVERY]
Web of Things(WoT)Discovery。Andrea Cimmino; Michael McCool; Farshid Tavakolizadeh; Kunihiko Toumura。 W3C。2023 年 12 月 5 日。W3C 推荐标准。URL:https://www.w3.org/TR/wot-discovery/
[WOT-PROFILE]
Web of Things(WoT)Profile。Michael Lagally; Ben Francis; Michael McCool; Ryuichi Matsukura; Sebastian Käbisch; Tomoaki Mizushima。W3C。2023 年 1 月 18 日。W3C 工作草案。URL:https://www.w3.org/TR/wot-profile/
[WOT-THING-DESCRIPTION]
Web of Things(WoT)Thing Description 1.1。 Sebastian Kaebisch; Takuki Kamiya; Michael McCool; Victor Charpenay。W3C。2023 年 12 月 5 日。W3C 推荐标准。URL:https://www.w3.org/TR/wot-thing-description11/
[WOT-USE-CASES-REQUIREMENTS]
Web of Things(WoT)Use Cases and Requirements。 Michael Lagally; Michael McCool; Ryuichi Matsukura; Tomoaki Mizushima。W3C。2020 年 10 月。编辑草案。URL: https://www.w3.org/TR/wot-usecases/

C.2 资料性参考文献

[CoRAL]
受约束的 RESTful 应用语言 (CoRAL)。Christian Amsüss; Thomas Fossati。 IETF。2022 年 3 月。互联网草案。URL: https://datatracker.ietf.org/doc/html/draft-ietf-core-coral/
[ECMAScript]
ECMAScript 语言规范。Ecma International。 URL:https://tc39.es/ecma262/multipage/
[etsi-en-301-549]
ETSI EN 301 549 V2.1.2 (2018-08):ICT 产品和服务的 无障碍要求。 ETSI。2018 年 8 月。已发布。URL: http://www.etsi.org/deliver/etsi_en/301500_301599/301549/02.01.02_60/en_301549v020102p.pdf
[HCI]
人机交互百科全书,第 2 版。Interaction Design Foundation。2013。URL: https://www.interaction-design.org/literature/book/the-encyclopedia-of-human-computer-interaction-2nd-ed
[HTML]
HTML 标准。Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters。WHATWG。 现行标准。URL:https://html.spec.whatwg.org/multipage/
[IANA-RELATIONS]
链接 关系。IANA。URL:https://www.iana.org/assignments/link-relations/
[IEC-FOTF]
未来 工厂。IEC。2015 年 10 月。URL: https://www.iec.ch/basecamp/factory-future
[IOT-SCHEMA-ORG]
IoT 的 Schema 扩展社区组。URL: https://www.w3.org/community/iotschema/
[ISO-IEC-2382]
信息技术 — 词汇。 ISO。2015。URL: https://www.iso.org/obp/ui/#iso:std:iso-iec:2382:ed-1:v2:en
[ISO-IEC-27000]
信息技术 — 安全技术 — 信息安全管理系统 — 概述和 词汇。ISO。2018。URL: https://www.iso.org/obp/ui/#iso:std:iso-iec:27000:ed-5:v1:en
[ISO-IEC-29100]
信息技术 — 安全技术 — 隐私框架。ISO。2011。URL: https://www.iso.org/obp/ui/#iso:std:iso-iec:29100:ed-1:v1:en
[JSON-LD11]
JSON-LD 1.1。Gregg Kellogg; Pierre-Antoine Champin; Dave Longley。W3C。2020 年 7 月 16 日。W3C 推荐标准。URL: https://www.w3.org/TR/json-ld11/
[LINKED-DATA]
Linked Data 设计议题。Tim Berners-Lee。W3C。2006 年 7 月 27 日。 W3C 内部文档。URL:https://www.w3.org/DesignIssues/LinkedData.html
[LWM2M]
轻量级机器到机器技术 规范:核心。OMA SpecWorks。2018 年 8 月。 批准版本:1.1。URL: https://openmobilealliance.org/release/LightweightM2M/V1_1-20180710-A/OMA-TS-LightweightM2M_Core-V1_1-20180710-A.pdf
[MQTT]
MQTT 版本 3.1.1 及勘误 01。 Andrew Banks; Rahul Gupta。OASIS 标准。2015 年 12 月。 URL: https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html
[NORMAN]
日常事物心理学。Donald A. Norman。Basic Books。1988。
[OCF]
OCF 核心规范。Open Connectivity Foundation。2019 年 4 月。版本 2.0.2。URL:https://openconnectivity.org/developer/specifications/
[REST]
REST:基于网络的软件架构的架构风格与设计。Roy Thomas Fielding。University of California, Irvine。2000。 博士论文。URL: https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf
[RFC6202]
在双向 HTTP 中使用长轮询和 流式传输的已知问题与最佳实践。S. Loreto; P. Saint-Andre; S. Salsano; G. Wilkins。IETF。2011 年 4 月。 信息性。URL:https://www.rfc-editor.org/rfc/rfc6202
[RFC6690]
受约束的 RESTful 环境(CoRE)链接格式。Z. Shelby。IETF。2012 年 8 月。提议标准。URL: https://www.rfc-editor.org/rfc/rfc6690
[RFC7049]
简洁 二进制对象表示(CBOR)。C. Bormann; P. Hoffman。IETF。2013 年 10 月。提议 标准。URL:https://www.rfc-editor.org/rfc/rfc7049
[RFC7228]
受约束节点网络的 术语。C. Bormann; M. Ersue; A. Keranen。IETF。2014 年 5 月。信息性。URL: https://www.rfc-editor.org/rfc/rfc7228
[RFC7231]
超文本 传输协议(HTTP/1.1):语义和 内容。R. Fielding, Ed.; J. Reschke, Ed.。 IETF。2014 年 6 月。提议标准。URL:https://httpwg.org/specs/rfc7231.html
[RFC7252]
受约束 应用协议(CoAP)。Z. Shelby; K. Hartke; C. Bormann。IETF。2014 年 6 月。提议 标准。URL:https://www.rfc-editor.org/rfc/rfc7252
[RFC7641]
在受约束应用协议 (CoAP)中观察 资源。K. Hartke。IETF。2015 年 9 月。 提议标准。URL:https://www.rfc-editor.org/rfc/rfc7641
[SAREF]
智能电器参考(SAREF) 本体。ETSI。2015 年 11 月。URL: https://sites.google.com/site/smartappliancesproject/ontologies/reference-ontology
[SOLID]
Solid 技术报告。W3C Solid CG。2021 年 4 月。 URL:https://solidproject.org/TR/
[VOCAB-SSN]
语义 传感器网络本体。Armin Haller; Krzysztof Janowicz; Simon Cox; Danh Le Phuoc; Kerry Taylor; Maxime Lefrançois。W3C。2017 年 10 月 19 日。W3C 推荐标准。URL:https://www.w3.org/TR/vocab-ssn/
[WCAG22]
Web 内容 无障碍指南(WCAG)2.2。Michael Cooper; Andrew Kirkpatrick; Alastair Campbell; Rachael Bradley Montgomery; Charles Adams。W3C。2023 年 10 月 5 日。 W3C 推荐标准。URL:https://www.w3.org/TR/WCAG22/
[WOT-BINDING-TEMPLATES]
Web of Things(WoT)Binding Templates。Michael Koster; Ege Korkan。W3C。2023 年 9 月 28 日。W3C 工作组 说明。URL:https://www.w3.org/TR/wot-binding-templates/
[WOT-PIONEERS-1]
与 Web of Things 的移动服务交互。E. Rukzio, M. Paolucci; M. Wagner, H. Berndt; J. Hamard; A. Schmidt。第 13 届 International Conference on Telecommunications(ICT 2006)会议论文集,Funchal,Madeira island,Portugal。2006 年 5 月。URL: https://pdfs.semanticscholar.org/3ee3/a2e8ce93fbf9ba14ad54e12adaeb1f3ca392.pdf
[WOT-PIONEERS-2]
Putting Things to REST。Erik Wilde。UCB iSchool Report 2007-015,UC Berkeley,Berkeley,CA,USA。2007 年 11 月。 URL:https://escholarship.org/uc/item/1786t1dm
[WOT-PIONEERS-3]
海报摘要:Dyser – 面向 Web of Things 的实时搜索 引擎。Benedikt Ostermaier; B. Maryam Elahi; Kay Römer; Michael Fahrmair; Wolfgang Kellerer。ACM SenSys 2008 会议论文集, Raleigh,NC,USA。2008 年 11 月。URL: https://www.vs.inf.ethz.ch/publ/papers/ostermai-poster-2008.pdf
[WOT-PIONEERS-4]
面向 Web of Things 的资源导向架构。Dominique Guinard; Vlad Trifa; Erik Wilde。Internet of Things 2010 International Conference(IoT 2010)会议论文集。Tokyo,Japan。 2010 年 11 月。URL:https://ieeexplore.ieee.org/abstract/document/5678452
[WOT-SCRIPTING-API]
Web of Things(WoT)Scripting API。Zoltan Kis; Daniel Peintner; Cristiano Aguzzi; Johannes Hund; Kazuaki Nimura。W3C。2023 年 10 月 3 日。W3C 工作组说明。URL: https://www.w3.org/TR/wot-scripting-api/
[WOT-SECURITY]
Web of Things(WoT)Security and Privacy Guidelines。; Michael McCool; Elena Reshetova。 W3C。2019 年 3 月。URL:https://www.w3.org/TR/wot-security/
[Y.4409-Y.2070]
ITU-T Rec. Y.4409/Y.2070 (01/2015) 家庭能源管理系统和 家庭网络服务的需求与 架构 。ITU-T。2015 年 1 月。 推荐。URL:https://www.itu.int/rec/T-REC-Y.2070-201501-I