场景
概述
在通用物联网 (IoT) 以及 ESP RainMaker 的语境中,一个**“场景 (scene)”**指的是一组被设置为特定值的参数集合,其中一个或多个设备可能分布在多个节点上。
注意,场景是一个静态实体,需要通过手机应用、语音助手或预定义的时间表进行激活。
与 ESP RainMaker 的其他功能一致,场景完全在节点端以“服务”的形式实现。云后端仅充当节点与客户端(如手机应用)之间的网关。
场景功能已通过 C 语言 API 进行了封装。另外,手机应用也对其进行了抽象处理。
使用场景
ESP RainMaker 的场景功能允许用户使用单个命令同时控制多个设备,为智能家居及工业场景提供高效便捷的解决方案。用户可自定义“观影模式”、“工作模式”等个性化场景,并通过 Alexa 或谷歌语音助手语音触发,实现设备状态自动切换,无需手动操作。
例如,在“傍晚”场景下打开温暖色调的灯光,在“夜间”场景下调暗床头灯并启动风扇或空调。场景的设置优化了电力能耗,是一种实用且具有成本效益的 IoT 解决方案。
您需了解
参数详情
场景服务通过一个对象数组参数实现,在节点配置中显示如下:
JSON 负载(点击展开/折叠)
"services": [{
"name": "Scenes",
"params": [{
"bounds": {
"max": 10
},
"data_type": "array",
"name": "Scenes",
"properties": [
"read",
"write"
],
"type": "esp.param.scenes"
}],
"type": "esp.service.scenes",
"attributes": [{
"name": "deactivation_support",
"value": "no"
}]
}]
- 场景参数默认是一个空数组。
max表示一个节点可以设置的场景数量上限。- 场景的“停用”功能默认关闭,但可以通过以下配置项启用:
CONFIG_ESP_RMAKER_SCENES_DEACTIVATE_SUPPORT
添加新场景
通过在 setparam 中传递如下值来添加新场景:该数据通常由客户端发送到云端,或直接通过本地控制发送到节点。
JSON 负载(点击展开/折叠)
{
"Scenes": {
"Scenes": [{
"name": "Evening",
"id": "8D36",
"info": "My Test Scene",
"operation": "add",
"action": {
"Light": {
"Power": true
}
}
}]
}
}
- name: 用户自定义的场景名称。
- id: 场景的唯一 ID(此 ID 仅需在给定用户中唯一,而非全局唯一)。此 ID 由客户端在添加场景时生成,用于后续操作。建议使用较短的 ID。
- info(字符串,可选):其他附加信息或描述。
- flags(可选):通用标志,可根据用户的要求使用。
- operation:要执行的操作。可能的值为
add、remove、edit、activate和deactivate。 - action:当场景被激活时要执行的实际操作。该对象的值将与设置参数时传递的值相同。例如,要打开灯,将为
"Light": {"power": true}。
一旦场景成功添加,获取参数时会返回一个类似以下 JSON 的值。
- 这是从节点发送到云端或手机应用的确认响应。
JSON 负载(点击展开/折叠)
{
"Scenes": {
"Scenes": [{
"name": "Evening",
"id": "8D36",
"info": "My Test Scene",
"action": {
"Light": {
"Power": true
}
}
}]
}
}
注意
在添加或更新场景时,场景数组中只需发送单个条目。但在查询时,节点会返回数组中所有场景的信息。
其他操作
编辑
-
用于编辑场景所传递的值类似于添加新场景时传递的值。
-
指定的 ID 应与现有场景匹配,同时,
operation的值应为edit。 -
可以发送整个对象或仅发送已更改的元素(名称或操作)。但是,这些键中的对象必需完整。
示例- 如果当前操作是
"action":{"Light": {"Power": true, "Brightness":90}}; - 现在需要将亮度更改为 100;
- 应该传递:
✓"action":{"Light": {"Power": true, "Brightness":100}},而不是:
✗"action":{"Light": {"Brightness":100}}
- 如果当前操作是
删除
- 要删除现有场景,只需传递其 ID 和
"operation": "remove"。
请参见下面的示例。
JSON 负载(点击展开/折叠)
{
"Scenes": {
"Scenes": [{
"id": "8D36",
"operation": "remove"
}]
}
}
激活
- 要激活场景,只需传递其 ID 和
"operation": "activate"。
请参见下面的示例。
JSON 负载 (切换视图)
{
"Scenes": {
"Scenes": [{
"id": "8D36",
"operation": "activate"
}]
}
}