为之漫笔 - WoT
type: channel
link: https://007.buddies.gaobo.org/tag/WoT
items: W3C万维物联网解析：编程API篇
items: W3C万维物联网解析：物描述篇
items: W3C万维物联网标准解析：架构篇
items: W3C万维物联网标准简介

W3C万维物联网解析：编程API篇
type: item
date: 2020-01-01T13:26:00+08:00
description: 2019年10月21日，作者在“W3C万维物联网标准简介”一文中简单介绍了W3C Web of Things（WoT）工作组制定的WoT标准以及它们的最新状态：规范当前状态WoT ArchitectureCRWoT Thing DescriptionCRWoT Scripting APIWD，Working DraftWoT Binding TemplatesWorking Group NoteWoT Security and Privacy ConsiderationsWorking Group Note本系列将从WoT标准本身出发，对目前已经进入CR阶段（W3C标准的阶段参见下图）的WoT Architecture（WoT架构）、WoT Thing Description（WoT物描述）以及处于WD阶段的WoT Scripting API（WoT编程API）进行一次快速解析。如下图所示，标准进入CR阶段意味着内容已经相对稳定，WD阶段则意味着较大的不确定性，而Working Group Note（工作组备忘）则变数很大。因此处于CR阶段的“架构”和“物描述”是值得花时间了解的（成为正式推荐标准REC的可能性很大），而处于WD阶段的编程API在2019年10月28日做了一次大的内容改版，几乎完全废弃了上一版的内容，只能说接近稳定状态，但编程API始终是开发者所喜闻乐见的，所以本系列也会介绍。W3C Process Document，https://www.w3.org/2019/Process-20190301/#recs-and-notes1. 编程API简介WoT Scripting API描述如何通过脚本暴露和消费物体，同时定义了通用的物发现API。基于WoT架构定义的“消费体”（consumed thing）和“暴露体”（consumed thing），这个规范提供了不同层次的交互操作能力。首先，客户端通过消费TD（Thing Description）可以创建一个本地运行时资源模型，即消费体。消费体支持访问远程设备上的服务端物体暴露的属性、动作和事件。其次，服务端负责暴露物体，为此需要：定义TD初始化一个实现该TD所定义WoT接口的软件栈，以服务于对暴露属性、动作和事件的请求最终发布TD（比如发布到一个物体目录，以便消费者发现）2. 支持的场景编程API支持以下脚本使用场景。2.1 消费物消费物体的TD，如基于暴露WoT交互的TD创建一个编程对象：读取一或多个属性的值设置一或多个属性的值观察属性值的变化调用动作观察物体发出的事件推断（内省）TD，包括基于TD链接的资源2.2 暴露物暴露物体包括生成协议绑定以便访问底层功能基于提供的字符串序列化格式的TD或既有物体对象创建本地要暴露的物体给物体添加属性定义从物体删除属性定义给物体添加动作定义从物体删除动作定义给物体添加事件定义从物体删除事件定义发送事件，如通知订阅了该事件的所有监听程序为外部请求注册处理程序取得属性的值更新属性的值执行动作：接收来自请求的参数，执行定义的动作，返回结果2.3 发现物通过发送广播请求在WoT网络中发现所有物体发现在本地WoT运行时中运行的物体发现邻近的物体，如通过NFC或蓝牙连接的物体通过向一个注册表服务发送发现请求发现物体通过物体描述定义的过滤器发现物体通过语义查询发现物体停止或阻止进行中的发现过程可选地给发现过程指定超时时间，超时后停止/阻止继续发现3. 接口及类型定义3.1 ThingDescription类型typedef object ThingDescription;下面是通过URL获取一个ThingDescription类型实例的示例：例1：获取TDtry { let res = await fetch('https://tds.mythings.biz/sensor11'); // ... 可以对res.headers进行额外检查 let td = await res.json(); let thing = new ConsumedThing(td); console.log("Thing name: " + thing.getThingDescription().title); } catch (err) { console.log("Fetching TD failed", err.message); }此外，规范也定义了如何扩展TD和验证TD。3.2 WOT接口[SecureContext, Exposed=(Window,Worker)] interface WOT { // methods defined in UA conformance classes Promise<ConsumedThing> consum…

W3C万维物联网解析：物描述篇
type: item
date: 2019-12-09T13:24:00+08:00
description: 2019年10月21日，作者在“W3C万维物联网标准简介”一文中简单介绍了W3C Web of Things（WoT）工作组制定的WoT标准以及它们的最新状态：规范当前状态WoT ArchitectureCRWoT Thing DescriptionCRWoT Scripting APIWD，Working DraftWoT Binding TemplatesWorking Group NoteWoT Security and Privacy ConsiderationsWorking Group Note本系列将从WoT标准本身出发，对目前已经进入CR阶段（W3C标准的阶段参见下图）的WoT Architecture（WoT架构）、WoT Thing Description（WoT物描述）以及处于WD阶段的WoT Scripting API（WoT编程API）进行一次快速解析。如下图所示，标准进入CR阶段意味着内容已经相对稳定，WD阶段则意味着较大的不确定性，而Working Group Note（工作组备忘）则变数很大。因此处于CR阶段的“架构”和“物描述”是值得花时间了解的（成为正式推荐标准REC的可能性很大），而处于WD阶段的编程API最近（2019年10月28日）刚刚做了一次大的内容改版，几乎完全废弃了上一版的内容，只能说接近稳定状态，但编程API始终是开发者所喜闻乐见的，所以本系列也会介绍。W3C Process Document，https://www.w3.org/2019/Process-20190301/#recs-and-notes1. 物描述简介WoT物描述，即Thing Description，简称TD，是WoT的核心组件。顾名思义，物描述（TD）就是对物的描述，其序列化（文本化）形式是一个JSON文档。简单起见，可以将TD看成是描述物及其能力的入口（就像一个网站的index.html）。一个TD的实例由4个部分组成：关于物体本身的元数据、表示如何使用物体的交互可识别功能、方便机器理解的数据交互模式和与物体相关的其他物体或资源的链接。WoT交互模型定义了三种交互可识别功能：属性、动作和事件 。其中，属性（在TD中以PropertyAffordance类表示），可用于检测和控制参数，如取得当前属性的值或设置某个操作状态。动作（在TD中以ActionAffordance 类表示），对物理（因而耗时的）流程建模，也可用于抽象类似RPC的对既有平台的调用。事件（在TD中以EventAffordance类表示），用于推送通信模型，异步将通知、离散事件或值流发送给接收者。详情可参考WoT架构。TD提供由URI模式（如http、coap等）标识的不同协议绑定的元数据、基于媒体类型（如application/json、 application/cbor）的内容类型和安全机制（用于认证、授权、保密等）。TD实现的序列化是基于JSON的，其中JSON中的名称（属性/字段）引用预定义词汇表中的术语，同样也在WoT物描述标准中定义。此外，TD的JSON序列化遵循JSON-LD 1.1语法，可以方便扩展和进行富语义处理。下面展示了一个TD的示例，描述了名称为MyLampThing的物体。{ "@context": "https://www.w3.org/2019/wot/td/v1", "id": "urn:dev:ops:32473-WoTLamp-1234", "title": "MyLampThing", "securityDefinitions": { "basic_sc": {"scheme": "basic", "in":"header"} }, "security": ["basic_sc"], "properties": { "status" : { "type": "string", "forms": [{"href": "https://mylamp.example.com/status"}] } }, "actions": { "toggle" : { "forms": [{"href": "https://mylamp.example.com/toggle"}] } }, "events":{ "overheating":{ "data": {"type": "string"}, "forms": [{ "href": "https://mylamp.example.com/oh", "subprotocol": "longpoll" }] } } }没错，这就是一个标准的JSON文档。看了这个TD示例，我们知道有一个名为status的属性可识别功能。而且，还有额外信息表明可以通过（安全形式的）HTTP…

W3C万维物联网标准解析：架构篇
type: item
date: 2019-11-06T13:23:00+08:00
description: 2019年10月21日，作者在“W3C万维物联网标准简介”一文中简单介绍了W3C Web of Things（WoT）工作组制定的WoT标准以及它们的最新状态：规范当前状态WoT ArchitectureCRWoT Thing DescriptionCRWoT Scripting APIWD，Working DraftWoT Binding TemplatesWorking Group NoteWoT Security and Privacy ConsiderationsWorking Group Note本系列将从WoT标准本身出发，对目前已经进入CR阶段（W3C标准的阶段参见下图）的WoT Architecture（WoT架构）、WoT Thing Description（WoT物描述）以及处于WD阶段的WoT Scripting API（WoT编程API）进行一次快速解析。如下图所示，标准进入CR阶段意味着内容已经相对稳定，WD阶段则意味着较大的不确定性，而Working Group Note（工作组备忘）则变数很大。因此处于CR阶段的“架构”和“物描述”是值得花时间了解的（成为正式推荐标准REC的可能性很大），而处于WD阶段的编程API最近（2019年10月28日）刚刚做了一次大的内容改版，几乎完全废弃了上一版的内容，只能说接近稳定状态，但编程API始终是开发者所喜闻乐见的，所以本系列也会介绍。W3C Process Document，https://www.w3.org/2019/Process-20190301/#recs-and-notes1. WoT架构WoT架构规范的核心分别从7个方面描述了WoT相关的术语及这些术语之间的相关关系。架构的本质就是术语及其关系。术语代表业界约定俗成的概念，是架构的骨骼和肌肉；关系描述术语的交互与特性，是架构的血液和神经。Overview（概述）Affordances（可识别功能）Web Thing（Web物）Interaction Model（交互模型）Hypermedia Controls（超媒体控件）Protocol Bindings（协议绑定）WoT System Components and Their Interconnectivity（组件及互联）2. 概述这一部分从宏观上定义了Thing、Consumer和Intermediary三个基础概念及其相互关系。Thing（物）：指的是某个物理或虚拟实体（如设备或房间）的抽象表示，由标准化的元数据描述。在W3C WoT中，描述元数据必须是WoT Thing Description（TD）。Consumer（消费者）：消费者必须能够解析和处理基于JSON的TD。Intermediary（中介）：可以充当物体的代理，此时中介拥有与背后的物类似的TD，但指向的是由这个中介提供的WoT接口。中介也可以给背后的物添加额外的能力或者将多个可用的物体组合起来，从而构成虚拟实体。对消费者而言，中介看起来就像一个物，因为它拥有TD且提供WoT接口。消费者与物直接交互是最简单直观的方式：物TD中可以包含指向其他物或资源的链接：互联网无法访问本地网络是实际部署中面临的一个典型问题，通常是因为存在IPv4 NAT（Network Address Translation）或防火墙。为解决这个问题，W3C WoT允许物与消费者之间存在中介。上述几个概念适用于IoT应用的各个层面：设备层、边缘层和云计算层。在这些层面应用上述概念能够促进跨层级通用接口和API的产生，进而促成IoT应用间不同的交互模式如物与物、物与网关、物与云、网关与云，甚至云联盟（如两个或多个服务提供商的云计算环境互联）。3. 可识别功能Affordance（可识别功能）是借用认知心理学领域的一个术语，“指的是某物可察觉且实际存在的属性，而且特指决定怎么使用它们的根本属性。”（Donald Norman）比如，看到门边有一块板，就知道需要推开它。（参见：https://communitywiki.org/wiki/WhatIsAffordance）可识别功能在TD中用于描述物的能力。WoT将以下4个概念归为可识别功能：导航属性动作事件其中，导航使用的是超链接。对超链接的描述（比如链接关系类型和链接目标属性）就是一种功能，它告诉Web客户端如何导航以及怎么处理链接的资源。换句话说，链接提供了导航这种可识别功能。而属性、动作和事件使用另一个超媒体控件，表单来描述。相对于超链接，表单能实现与物的更复杂的交互。4. Web物Web物涉及4个方面：Behavior（行为）Interaction Affordance（交互可识别功能）Security Configuration（安全配置）Pro…

W3C万维物联网标准简介
type: item
date: 2019-10-21T13:21:00+08:00
description: 10月20日，第六届世界互联网大会在浙江乌镇开幕。国家主席习近平致贺信。习近平指出，今年是互联网诞生50周年。当前，新一轮科技革命和产业变革加速演进，人工智能、大数据、物联网等新技术新应用新业态方兴未艾，互联网迎来了更加强劲的发展动能和更加广阔的发展空间。发展好、运用好、治理好互联网，让互联网更好造福人类，是国际社会的共同责任。各国应顺应时代潮流，勇担发展责任，共迎风险挑战，共同推进网络空间全球治理，努力推动构建网络空间命运共同体。（新华社北京10月20日电：http://www.xinhuanet.com/politics/2019-10/20/c_1125127764.htm）社交媒体实现了“人联网”，在线支付实现了“财联网”。如今，人工智能、大数据技术的发展正有力地推动“物联网”的兴起。不难想象，物联网将在智能家庭、产业、城市，乃至智能国家、智能地球的建设中发挥基础性作用，为未来的人类和社会造福。然而，由于联网设备的制造厂商不同、接入互联网使用的协议不同，如今的物联网（IoT，Internet of Things）依旧呈现“一盘散沙”、“各自为政”的状态。IoT平台和生态虽然层出不穷，快速演进，但各家协议栈和软件应用之间缺乏互通，形成了千千万万个专有IoT“孤岛”。W3C称IoT的这种状态为“碎片化”（fragmentation）。碎片化导致用户与供应商绑定、开发交付成本高昂、软件组件难以复用，这些问题成为阻碍IoT向更深、更广领域应用迈进的巨大障碍。为实现IoT基于Web技术的互联互通，W3C决定在已有IoT平台/生态基础上“做一些填补空隙”的工作，并于2015年1月成立WoT兴趣组（https://www.w3.org/2019/07/wot-ig-2019.html），又于2016年12月成立WoT工作组（https://www.w3.org/2016/12/wot-wg-2016.html），正式开始WoT（Web of Things，万维物联网）标准的制定。截止到2019年5月，WoT工作组已经发布5份文档，其中2份已经进入“CR”（Candidate Recommendation，候选推荐）状态：注意上述这些规范文档并不是最终标准。W3C标准的最终状态是“REC”，即Recommendation（推荐标准）。在到达“REC”阶段之前，以上所有规范内容都可能被修改，并且也不排除某份文档被废弃的可能。换句话说，以上规范文档均不能作为正式实现文档在产品中使用。规范当前状态WoT ArchitectureCRWoT Thing DescriptionCRWoT Scripting APIWD，Working DraftWoT Binding TemplatesWorking Group NoteWoT Security and Privacy ConsiderationsWorking Group Note本文将对上述W3C公开发布的规范进行概要介绍，仅供参考。1. WoT架构WoT Architecture（候选推荐）：https://www.w3.org/TR/wot-architecture/WoT Architecture（编辑草案）：https://w3c.github.io/wot-architecture/物体，指的是某个物理或虚拟实体（如设备或房间）的抽象表示，由标准化的元数据描述。在W3C WoT中，描述元数据必须是WoT Thing Description（TD）。消费者必须能够解析和处理基于JSON的TD。WoT物体WoT物体描述是标准化的、机器友好的表示格式，消费者可以通过这种格式发现和解释物体的能力（通过语义注解），在与物体交互时适应不同实现（如不同的协议和数据结构）， 而达到跨IoT平台（如不同的生态或标准）互操作的目的。消费者与物体交互物体必须托管在联网的系统组件上，基于一个软件栈通过（面向网络的）WoT接口实现交互。互联网无法访问本地网络是实际部署中面临的一个典型问题，通常是因为存在IPv4 NAT（Network Address Translation）或防火墙。为解决这个问题，W3C WoT允许物体与消费者之间存在中介层（intermediary）。中介层中介层（intermediary）可以充当物体的代理，此时中介层拥有与背后的物体类似的WoT物体描述，但指向的是由这个中介层提供的WoT接口。中介层也可以给背后的物体添加额外的能力或者将多个可用的物体组合起来，从而构成一个虚拟实体。对消费者而言，中介层看起来就像一个物体，因为它们拥有WoT物体描述，而且提供WoT接口。W3C WoT的概念适用于IoT应用的各个层面：设备层、边缘层和云计算层。这样可以促进跨层级通用接口和API的产生…