生活物联网平台支持自有App实现场景自动化功能,即支持C端用户(消费者)配置场景和自动化任务。
场景与自动化的区别如下。
场景:需要用户手动在App上单击触发后,执行一系列任务。例如,用户可以创建一个“回家模式”,包括打开灯、打开空调、打开电视、拉开窗帘等多个任务。当用户在App上单击执行回家模式场景时,所有任务将被执行。
自动化:不需要用户手动触发,当符合某些条件时,系统自动执行一系列任务。例如,用户可以创建一个“自动开启摄像头”的任务,当触发条件“红外人体传感器识别到有人经过”时,自动执行“摄像头开始录像”的任务。
功能开发
场景自动化功能可以通过以下两种方式实现:调用场景插件和基于API自行开发。两种实现方式的对比如下。
对比项调用场景插件基于API自行开发 对比项 调用场景插件 基于API自行开发 优缺点该实现方式开发工作量较少,无需您开发业务逻辑,只需集成平台提供的插件即可(关于如何集成插件的操作,请参见插件使用指南)。
该实现方式可以更灵活地体验功能和界面,但对技术要求较高,开发工作量也较大(API接口描述,请参见场景服务2.0)。
支持的功能 场景的创建、删除、查看、修改 自动化的创建、删除、查看、修改 触发条件支持:时间点、设备动作 触发条件的关系:TCA模型,即需要分别设置Trigger、Condition和Action。 执行任务支持:设备动作、执行场景、发送手机推送通知 场景的创建、删除、查看、修改 自动化的创建、删除、查看、修改 触发条件支持:时间点、时间段、设备动作(持续更新中) 触发条件的关系:满足所有条件、满足任一条件 执行任务支持:设备动作、执行场景、发送手机推送通知规则说明
当您基于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规则的模式,可取值如下: any:表示任何一个条件满足就执行动作。 all:表示所有条件满足时才执行动作。 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规则介绍”。