生活物联网平台支持自有App实现场景自动化功能,即支持C端用户(消费者)配置场景和自动化任务。
场景与自动化的区别如下。
- 场景:需要用户手动在App上单击触发后,执行一系列任务。
例如,用户可以创建一个“回家模式”,包括打开灯、打开空调、打开电视、拉开窗帘等多个任务。当用户在App上单击执行回家模式场景时,所有任务将被执行。
- 自动化:不需要用户手动触发,当符合某些条件时,系统自动执行一系列任务。
例如,用户可以创建一个“自动开启摄像头”的任务,当触发条件“红外人体传感器识别到有人经过”时,自动执行“摄像头开始录像”的任务。
功能开发
场景自动化功能可以通过以下两种方式实现:调用场景插件和基于API自行开发。两种实现方式的对比如下。
对比项 | 调用场景插件 | 基于API自行开发 |
---|---|---|
优缺点 |
该实现方式开发工作量较少,无需您开发业务逻辑,只需集成平台提供的插件即可(关于如何集成插件的操作,请参见插件使用指南)。 |
该实现方式可以更灵活地体验功能和界面,但对技术要求较高,开发工作量也较大(API接口描述,请参见场景服务2.0)。 |
支持的功能 |
|
|
规则说明
当您基于API自行开发场景自动化功能时,您需要按照以下规则来设定业务逻辑。规则用于描述动作由谁触发(Trigger),需要满足哪些条件(Condition),触发后要执行的动作(Action)。目前主要支持以下两种规则形式。
- IFTTT(If This Then That)
IFTTT规则即自动化,支持Trigger、Condition、Action节点。详细介绍请参见本文档下方“IFTTT规则介绍”。
- CA(Condition & Action)
CA是对IFTTT的简化,将Trigger与Condition合并在一起作为“条件”。当满足条件(多个Condition之间可设置all或any)时,就执行Action。详细介绍请参见本文档下方“CA规则介绍”。
场景自动化的规则的限制条件如下。
- 一个用户最多可以创建200个场景或自动化。
- 一个设备最多可以作为20个场景规则的Action。
- 一个规则内必须具有Action节点,且最多可以有30个Action。
- 一个规则内可以没有Trigger节点,如果有最多10个Trigger。
没有Trigger节点时,表示场景不会自动触发。此时可以调用执行场景接口来手动触发场景。例如,仅设置了
condition/timeRange
。 - 一个规则内可以没有Condition节点,如果有最多5个Condition。
没有Condition节点时,Trigger节点触发后直接执行Action。
- 一个规则内最多只能有一个
trigger/timer
节点。 - 一个规则内最多只能有一个
condition/timeRange
节点。 - CA规则中,只有all模式支持
condition/timeRange
节点,any模式下将忽略该节点。
IFTTT规则介绍
IFTTT规则中包含的节点如下表所示。
名称 | 描述 |
---|---|
trigger | 表示场景的触发器,例如时间点、设备属性。一个场景中可以有多个触发器,彼此之间是“或”的关系。场景中也可以没有触发器,这时可以通过接口调用来手动触发场景。 |
condition | 表示场景被触发后的过滤条件,例如时间段限制、设备属性限制。一个场景中可以有多个过滤条件,彼此之间是“与”的关系。场景中也可以没有过滤条件,这时场景触发后会不经过滤直接执行相应的动作。 |
action | 表示场景被触发,且满足过滤条件时,所需执行的动作,例如设置设备属性、执行另一个场景。一个场景中可以有多个动作。场景中必须至少有一个动作。 |
下面为您提供两个IFTTT的示例。
- 典型示例
该示例中具有一个Trigger、一个Condition、一个Action的场景规则。
示例的规则说明:表示当设备sensor_01的someone_exist属性值等于1时场景将被触发(Trigger),此时会检查当前时间是否处于6:00至22:00之间(Condition),如果是,则把设备light的开关属性设置为on(Action)。
{ "type":"IFTTT", "trigger":{ "uri":"trigger/device/property", "params":{ "iotId":"sensor_01_iotId", "propertyName":"someone_exist", "compareType":"==", "compareValue":1 } }, "condition":{ "uri":"logical/and", "items":[ { "params":{ "cron":"0-0 6-22 * * 1,2,3", "cronType":"linux", "timezoneID":"Shanghai" }, "uri":"condition/timeRange" } ] }, "action":[ { "uri":"action/device/setProperty", "params":{ "iotId":"light_iotId", "propertyName":"onOff", "propertyValue":"on" } } ] }
- 简化示例
该示例展示了具有多个Trigger和多个Condition的场景规则。 此时使用logical/or节点封装多个Trigger,使用logical/and节点封装多个Condition。
示例的规则说明:每天十点或设备sensor_01的someone_exist属性值等于1时场景触发,如果设备test_device的some_property属性小于10,且当前处于九点和十二点之间,则执行动作,将test_device的onOff属性设置为on,并触发另一个场景执行。
{ "type":"IFTTT", "trigger":{ "uri":"logical/or", "items":[ { "uri":"trigger/device/property", "params":{ "productKey":"pk_sensor", "deviceName":"sensor_01", "propertyName":"someone_exist", "compareType":"==", "compareValue":1 } }, { "uri":"trigger/timer", "params":{ "cron":"0 0 10 * *", "cronType":"linux" } } ] }, "condition":{ "uri":"logical/and", "items":[ { "uri":"condition/device/property", "params":{ "productKey":"pkxxxxon", "deviceName":"txxxxce", "propertyName":"soxxxxrty", "compareType":"<", "compareValue":10 } }, { "params":{ "cron":"0-0 9-12 * * 1,2,3", "cronType":"linux", "timezoneID":"Asia/Shanghai" }, "uri":"condition/timeRange" } ] }, "action":[ { "uri":"action/device/setProperty", "params":{ "productKey":"pk_action", "deviceName":"test_device", "propertyName":"onOff", "propertyValue": "on" } }, { "uri":"action/scene/trigger", "params":{ "automationRuleId":"some_scene_id" } } ] }
CA规则介绍
CA规则是IFTTT规则的简化,规则包含的节点如下表所示。
节点名称 | 描述 |
---|---|
mode | CA规则的模式,可取值如下:
|
condition | 场景的触发条件,例如时间点、设备属性、时间段等。一个场景可以有多个触发条件。 |
action | 表示场景被触发时所需执行的动作,例如设置设备属性、执行另一个场景。一个场景中可以有多个动作,场景中必须至少有一个动作。 |
以下为CA规则的示例。
示例的规则说明:当设备sensor_01的some_property属性大于300、设备sensor_02的BarrierState属性取值为0、1、2,且时间点在10:05时,将设备test_device的LightStatus属性设置为1。
{
"type":"CA",
"mode":"all",
"condition":[
{
"uri":"condition/device/property",
"params":{
"productKey":"pk_condition",
"deviceName":"sensor_01",
"propertyName":"some_property",
"compareType":">",
"compareValue":"300"
}
},
{
"uri":"condition/device/property",
"params":{
"productKey":"pk_condition",
"deviceName":"sensor_02",
"propertyName":"BarrierState",
"compareType":"in",
"compareValue":[
0,
1,
2
]
}
},
{
"uri":"condition/timer",
"params":{
"cron":"0 05 10 * *",
"cronType":"linux"
}
}
],
"action":[
{
"uri":"action/device/setProperty",
"params":{
"productKey":"pk_action",
"deviceName":"test_device",
"propertyName":"LightStatus",
"propertyValue": 1
}
}
]
}
Trigger节点介绍
目前支持的Trigger节点包括三种。
- trigger/timer
表示定时触发。参数描述如下。
参数 类型 描述 cron String 定时表达式,cron表达式格式为 http://crontab.org/
。cronType String 表达式类型,详细描述参见下方表格。 timezoneID String 时区ID,表示将按照哪个时区来执行定时表达式。该参数值可为空,默认为智能生活平台云端服务所在区域,建议传入该参数,明确指定时区。 配置示例:
Asia/Shanghai
。参数cronType的详细介绍如下。
取值 表达式结构 表达式字段 描述及示例 linux ${minute} ${hour} ${day of month} ${month} ${day of week}
- minute:0~59
- hour:0~23
- day of month:0~31
- month:0~12
- day of week:0~7
表示crontab类型,共5位,不支持年。
示例:
1 3 * * *
表示每天03:01触发。quartz_cron ${second} ${minute} ${hour} ${day of month} ${month} ${day of week} ${year}
- second:必须为0
- minute:0~59
- hour:0~23
- day of month:0~31
- month:0~12
- day of week:0~7
- year(可省略,省略则表示每年会触发)
quartz类型cron,7位,支持年。禁止配置为无法抵达的过去时间。当前只能最小设置分钟级别,即第一位秒级必须为0。
示例:
0 * 14 * * ? 2019
表示在2019年每天下午2点到下午2:59期间的每1分钟触发。示例如下。
{ "uri":"trigger/timer", "params":{ "cron":"* * * * *", "cronType":"linux", "timezoneID":"Asia/Shanghai" } }
- trigger/device/property
表示设备属性触发。参数描述如下。
参数 类型 描述 productKey String 产品的Key,设备证书信息之一。创建产品时,生活物联网平台为该产品颁发的全局唯一标识。 deviceName String 设备的名称,设备证书信息之一。在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。 propertyName String 待比较的设备属性名。 compareType String 比较类型,如>、<、>=、==、<=、!=、in、like等。 compareValue Object 比较的值。 示例如下。
{ "uri":"trigger/device/property", "params":{ "productKey":"test_pk", "deviceName":"test_dn", "propertyName":"temp", "compareType":">", "compareValue":30 } }
- trigger/device/event
表示设备事件触发。参数描述如下。
参数 类型 描述 productKey String 产品的Key,设备证书信息之一。创建产品时,生活物联网平台为该产品颁发的全局唯一标识。 deviceName String 设备的名称,设备证书信息之一。在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。 eventCode String 设备事件Code,可为空。 propertyName String 设备属性名称。 compareType String 比较类型,如>、<、>=、==、<=、!=、in、like等。 compareValue Object 比较的值。 示例如下。
{ "uri":"trigger/device/event", "params":{ "productKey":"test_pk", "deviceName":"test_dn", "eventCode":"temp_warning", "propertyName":"temp", "compareType":">", "compareValue":30 } }
Action节点介绍
目前支持的Action节点包括以下五种。
- action/device/setProperty
表示设置设备属性。参数描述如下。
参数 类型 描述 iotId String 设备ID,生活物联网平台为设备颁发的ID,设备的唯一标识符。 propertyName String 要设置的属性的名称,例如:PowerSwitch。 propertyValue Object 要设置的属性的值。 delayedExecutionSeconds Integer 延时执行时间,默认为空,即立即执行,设置了该值后才执行延时操作。单位为秒,最小1s,最大86400s(24小时)。 示例如下。
{ "uri":"action/device/setProperty", "params":{ "iotId":"xxxx", "propertyName":"PowerSwitch", "propertyValue":1, "delayedExecutionSeconds":10 } }
- action/device/invokeService
表示调用设备服务。参数描述如下。
参数 类型 描述 iotId String 设备ID,生活物联网平台为设备颁发的ID,设备的唯一标识符。 serviceName String 服务名称。 serviceArgs JSON 服务参数,例如: {"warningStatus":"off","level":"init"}
。示例如下。
{ "uri":"action/device/invokeService", "params":{ "iotId":"xxxx", "serviceName":"clearWarningStatus", "serviceArgs":{ "warningStatus":"off", "level":"init" } } }
- action/scene/trigger
表示触发另一个场景时,如果被触发的场景包含Condition,并且Condition没有被满足,那么被触发场景的Action不会被执行。参数描述如下。
参数 类型 描述 sceneId String 场景ID。 示例如下。
{ "uri":"action/scene/trigger", "params":{ "sceneId":"xxx" } }
- action/automation/setSwitch
表示启用或停用另一个场景设置。参数描述如下。
参数 类型 描述 automationRuleId String 要启用或停用的场景ID。 switchStatus Integer 场景状态:0表示停用,1表示启用。 示例如下。
{ "uri":"action/automation/setSwitch", "params":{ "automationRuleId":"xxxx", "switchStatus":0 } }
- /action/mq/send
表示向手机推送消息。参数描述如下。
参数 类型 描述 customData CustomData 推送消息的模型。 customData. message String 向手机推送消息的内容,最多60个字符。 msgTag String 推送消息模型,默认值为IlopBusiness_CustomMsg。 示例如下。
"actions": [ { "uri":"action/mq/send", "params":{ "customData":{ "message":"电源开启了" }, "msgTag":"IlopBusiness_CustomMsg" } } ]
IFTTT规则中Condition节点介绍
目前IFTTT规则支持的Condition节点包括以下两种。
- condition/timeRange
表示比较当前时间是否在一个区间内。参数描述如下。
参数 类型 描述 cron String 20-25 11-23 * * 1,2,3
表示每周一、二、三的11:20到23:25之间允许执行。cronType String cron表达式类型,取值为linux。 timezoneID String 示例: Asia/Shanghai
。示例如下。
{ "params":{ "cron":"0-0 9-12 * * 1,2,3", "cronType":"linux", "timezoneID":"Asia/Shanghai" }, "uri":"condition/timeRange" }
- condition/device/property
表示设备属性过滤。参数描述如下。
参数 类型 描述 productKey String 产品的Key,设备证书信息之一。创建产品时,生活物联网平台为该产品颁发的全局唯一标识。 deviceName String 设备的名称,设备证书信息之一。在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。 propertyName String 设备属性。 compareType String 比较类型,如>、<、>=、==、<=、!=、in、like等。 compareValue Object 比较的值。 示例如下。
{ "uri":"condition/device/property", "params":{ "productKey":"test_product", "deviceName":"test_device", "propertyName":"temp", "compareType":">", "compareValue":30 } }
CA规则中Condition节点介绍
目前CA规则支持的CaCondition节点包括以下三种。
- condition/timer
表示定时器。作用和参数与IFTTT规则下的
trigger/timer
节点相同。详细介绍请参见本文档“IFTTT规则介绍”。 - condition/timeRange
表示时间段,只能用于all模式,any模式下将被忽略。
说明 CA规则中condition/timeRange
节点与IFTTT规则中的condition/timeRange
节点作用相同,参数形式不同。参数描述如下。
参数 类型 描述 format String 时间的格式: mm:ss
:分秒HH:mm
:时分HH:mm:ss
:时分秒dd HH
:日时dd HH:mm
:日时分dd HH:mm:ss
:日时分秒MM
:月MM-dd
:月日MM-dd HH
:月日时MM-dd HH:mm
:月日时分MM-dd HH:mm:ss
:月日时分秒yyyy-MM-dd
:年月日yyyy-MM-dd HH:mm:ss
:年月日时分秒
timezoneID String 时区ID,可空,表示将按照哪个时区来进行时间段判断。如果不设置,默认为智能生活平台云端服务所在区域,建议传入该参数,明确指定时区。 beginDate String 开始时间,需符合format指定的格式。 endDate String 结束时间,需符合format指定的格式。 说明 如果beginDate大于endDate,将视为跨天。例如beginDate为22:00,endDate为6:00,则视为晚上22:00到第二天6:00。repeat String 星期重复,用逗号分隔的1~7数字构成的字符串。该参数可为空,表示不重复。例如配置为 1,2,3
,表示在星期一、星期二、星期三重复。示例如下。
{ "uri":"condition/timeRange", "params":{ "format":"HH:mm", "beginDate":"8:30", "endDate":"23:00", "repeat":"1,2,3,4,5" } }
- condition/device/property
表示设备属性。作用和参数与IFTTT规则下的
trigger/device/property
相同。详细介绍请参见本文档“IFTTT规则介绍”。