利用切换选项和模式扩展您的智能家居操作
文 / Nick Felker
呈现在 Home Graph 中的结构、房间和设备
如果您为 “Google 助理” 构建过智能家居操作,可能熟悉各种特征,而这些特征会定义您的设备可能具备的一系列功能。您的设备或许能够开启和关闭、更改颜色或具有不同的速度。与此同时,您的设备可能拥有更多高级功能,而这些功能无法由某一项特征定义。
要将这些功能与 “Google 助理” 整合,您需要着眼于使用模式或切换选项特征。这些特征均由键值对定义,因此非常相似。
模式
模式特征是可以分配给众多设置之一的设备参数。模式设置可以有序,也可以无序。例如,洗衣机可以有小、中或大这三种容量,它们之前存在某种递增顺序。烤箱可能拥有无序设置,例如烘、烤或炙烤。
每种模式在给定时间内只能有一种设置,并且始终应该将模式分配给其中一种设置。
在同步响应中,您可以返回受支持模式的列表和适用于给定模式的设置。要查看可用模式,请查阅(https://developers.google.com/actions/reference/smarthome/traits/modes),其中展示了相关键值和同义词。
在下方示例中,洗衣机拥有 称为容量的单一模式,但也可以将其称为大小或容量大小。此模式可以有小或大这两种设置。要更改设置,您只需说出 “将洗衣机上的容量设为小 (Set the load to small on the washing machine)” 即可。您可以在下方查看完整响应:
{
"requestId": "ff36a3cc-ec34–11e6-b1a0–64510650abcf",
"payload": {
"agentUserId": "1836.15267389",
"devices": [{
"id": "123",
"type": "action.devices.types.WASHER",
"traits": [
"action.devices.traits.Modes"
],
"name": {
"defaultNames": ["Felker Corp Washer"],
"name": "Washer",
"nicknames": ["clothes washer"]
},
"willReportState": true,
"attributes": {
"availableModes": [{
"name": "load",
"name_values": [{
"name_synonym": ["load", "size", "load size"],
"lang": "en"
}, {
"name_synonym": ["laden"],
"lang": "de"
}],
"settings": [{
"setting_name": "small",
"setting_values": [{
"setting_synonym": ["small", "half"],
"lang": "en"
}, {
"setting_synonym": ["gering"],
"lang": "de"
}]
}, {
"setting_name": "large",
"setting_values": [{
"setting_synonym": ["large", "full"],
"lang": "en"
}, {
"setting_synonym": ["auf groß"],
"lang": "de"
}]
}],
"ordered": true
}]
},
"deviceInfo": {
"manufacturer": "Felker Corp",
"model": "233451",
"hwVersion": "3.2",
"swVersion": "11.4"
}
}]
}
}
切换选项
切换选项与模式类似,区别在于模式拥有多个字符串值中的一个,而切换选项会有布尔值。如果您的设备有许多可以开启或关闭的设置(例如夜间模式或静音模式),这可能会很有用。
每个切换选项均应视为独立于其他切换选项。例如,夜间模式不应该受到静音模式的影响,反之亦然。每个切换选项都必须为开启或关闭,而不能处于某种中间状态。
与模式一样,所有受支持的切换选项都会在您的同步响应中返回。此参考页面 展示了所有受支持切换选项的名称(https://developers.google.com/actions/reference/smarthome/traits/toggles)。
在下面的示例中,摄像头有两个切换选项。第一个名为 “夜间”。第二个名为 “录像”, 但也可以称为 “监控”。要开启其中一个切换选项,您只需说出 “打开前置摄像头上的录像功能 (Turn on recording for the front camera)” 即可。您可以在下方查看完整响应:
{
"requestId": "ff36a3cc-ec34–11e6-b1a0–64510650abcf",
"payload": {
"agentUserId": "1836.15267389",
"devices": [{
"id": "123",
"type": "action.devices.types.CAMERA",
"traits": [
"action.devices.traits.Toggles"
],
"name": {
"defaultNames": ["Felker Corp Camera"],
"name": "front camera",
"nicknames": ["camera"]
},
"willReportState": false,
"attributes": {
"availableToggles": [{
"name": "Night",
"name_values": [{
"name_synonym": ["night"],
"lang": "en"
}, {
"name_synonym": ["おやすみ"],
"lang": "ja"
}]
}, {
"name": "recording",
"name_values": [{
"name_synonym": ["recording", "monitoring"],
"lang": "en"
}, {
"name_synonym": ["サイレント"],
"lang": "ja"
}]
}]
},
"deviceInfo": {
"manufacturer": "Felker Corp",
"model": "233451",
"hwVersion": "3.2",
"swVersion": "11.4"
}
}]
}
}
在开发操作的过程中,您可能会发现结合使用模式和切换选项会很有帮助。如此一来,用户可以获得通过 “Google 助理” 控制设备所需的灵活性。
处理 “执行” 意图
当用户说出 “将洗衣机上的容量设为小 (Set the load to small on the washing machine)” 或 “打开摄像头上的录像功能 (Turn on recording on the camera)” 时,您的服务器会收到带有已修改模式设置或 updateModeSettings 或 updateToggleSettings 对象中所列切换选项的 “执行” 意图,如下所示:
{
"requestId": "ff36a3cc-ec34–11e6-b1a0–64510650abcf",
"inputs": [{
"intent": "action.devices.EXECUTE",
"payload": {
"commands": [{
"devices": [{
"id": "123",
}],
"execution": [{
"command": "action.devices.commands.SetModes",
"params": {
"updateModeSettings": {
"load": "small"
}
}
}]
}]
}
}]
}
{
"requestId": "ff36a3cc-ec34–11e6-b1a0–64510650abcf",
"inputs": [{
"intent": "action.devices.EXECUTE",
"payload": {
"commands": [{
"devices": [{
"id": "123",
}],
"execution": [{
"command": "action.devices.commands.SetToggles",
"params": {
"updateToggleSettings": {
"recording": true
}
}
}]
}]
}
}]
}
新的模式和切换选项
模式和切换选项参考文档完整列出您可以使用的功能名称。如要在列表中添加新项目,您可以在 GitHub 示例项目中提交功能请求。在问题描述中加入模式、模式设置或切换选项。一旦 Google 批准了您的请求,相关功能就会在几天之后添加到列表中,以便您快速迭代。
了解详情
这两个特征可以为开发者提供许多灵活性,方便他们通过 “Google 助理” 控制其设备。如需详细了解这些特征以及有关智能家居的其他所有内容,您可以前往 “智能家居 Codelab”,或访问我们的开发文档。
您在构建哪些类型的智能家居操作?欢迎把您的项目发布到 www.tendorflowers.cn,与社区一起分享吧。
更多 AI 相关阅读: